@orangesk/orange-design-system 2.0.0-beta.2 → 2.0.0-beta.21

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 (784) hide show
  1. package/README.md +346 -19
  2. package/build/components/Accordion/style.css +2 -0
  3. package/build/components/Accordion/style.css.map +1 -0
  4. package/build/components/Alert/style.css +2 -0
  5. package/build/components/Alert/style.css.map +1 -0
  6. package/build/components/AnchorNavigation/style.css +1 -1
  7. package/build/components/AnchorNavigation/style.css.map +1 -1
  8. package/build/components/Bar/style.css +2 -0
  9. package/build/components/Bar/style.css.map +1 -0
  10. package/build/components/BlockAction/style.css +2 -0
  11. package/build/components/BlockAction/style.css.map +1 -0
  12. package/build/components/BodyBanner/style.css +1 -1
  13. package/build/components/BodyBanner/style.css.map +1 -1
  14. package/build/components/Breadcrumbs/style.css +2 -0
  15. package/build/components/Breadcrumbs/style.css.map +1 -0
  16. package/build/components/Button/style.css +2 -0
  17. package/build/components/Button/style.css.map +1 -0
  18. package/build/components/Buttons/style.css +2 -0
  19. package/build/components/Buttons/style.css.map +1 -0
  20. package/build/components/Card/style.css +2 -0
  21. package/build/components/Card/style.css.map +1 -0
  22. package/build/components/Carousel/style.css +1 -1
  23. package/build/components/Carousel/style.css.map +1 -1
  24. package/build/components/CarouselHero/style.css +2 -0
  25. package/build/components/CarouselHero/style.css.map +1 -0
  26. package/build/components/CarouselPromotions/style.css +2 -0
  27. package/build/components/CarouselPromotions/style.css.map +1 -0
  28. package/build/components/CartTable/style.css +1 -1
  29. package/build/components/CartTable/style.css.map +1 -1
  30. package/build/components/Container/style.css +2 -0
  31. package/build/components/Container/style.css.map +1 -0
  32. package/build/components/Controls/style.css +2 -0
  33. package/build/components/Controls/style.css.map +1 -0
  34. package/build/components/Cover/style.css +2 -0
  35. package/build/components/Cover/style.css.map +1 -0
  36. package/build/components/Divider/style.css +2 -0
  37. package/build/components/Divider/style.css.map +1 -0
  38. package/build/components/DocumentationSidebar/style.css +1 -1
  39. package/build/components/DocumentationSidebar/style.css.map +1 -1
  40. package/build/components/Dropdown/style.css +1 -1
  41. package/build/components/Dropdown/style.css.map +1 -1
  42. package/build/components/Expander/style.css +2 -0
  43. package/build/components/Expander/style.css.map +1 -0
  44. package/build/components/FeatureAccordion/style.css +1 -1
  45. package/build/components/FeatureAccordion/style.css.map +1 -1
  46. package/build/components/Footer/style.css +1 -1
  47. package/build/components/Footer/style.css.map +1 -1
  48. package/build/components/Gauge/style.css +2 -0
  49. package/build/components/Gauge/style.css.map +1 -0
  50. package/build/components/Grid/style.css +1 -1
  51. package/build/components/Grid/style.css.map +1 -1
  52. package/build/components/Hero/style.css +1 -1
  53. package/build/components/Hero/style.css.map +1 -1
  54. package/build/components/Icon/style.css +2 -0
  55. package/build/components/Icon/style.css.map +1 -0
  56. package/build/components/IconList/style.css +1 -1
  57. package/build/components/IconList/style.css.map +1 -1
  58. package/build/components/Image/style.css +2 -0
  59. package/build/components/Image/style.css.map +1 -0
  60. package/build/components/Link/style.css +2 -0
  61. package/build/components/Link/style.css.map +1 -0
  62. package/build/components/List/style.css +2 -0
  63. package/build/components/List/style.css.map +1 -0
  64. package/build/components/Loader/style.css +2 -0
  65. package/build/components/Loader/style.css.map +1 -0
  66. package/build/components/Megamenu/style.css +2 -0
  67. package/build/components/Megamenu/style.css.map +1 -0
  68. package/build/components/Modal/style.css +2 -0
  69. package/build/components/Modal/style.css.map +1 -0
  70. package/build/components/Pagination/style.css +2 -0
  71. package/build/components/Pagination/style.css.map +1 -0
  72. package/build/components/Pill/style.css +2 -0
  73. package/build/components/Pill/style.css.map +1 -0
  74. package/build/components/Preview/style.css +1 -1
  75. package/build/components/Preview/style.css.map +1 -1
  76. package/build/components/Progress/style.css +2 -0
  77. package/build/components/Progress/style.css.map +1 -0
  78. package/build/components/PromoBanner/style.css +1 -1
  79. package/build/components/PromoBanner/style.css.map +1 -1
  80. package/build/components/PromotionCard/style.css +2 -0
  81. package/build/components/PromotionCard/style.css.map +1 -0
  82. package/build/components/Section/style.css +2 -0
  83. package/build/components/Section/style.css.map +1 -0
  84. package/build/components/Skeleton/style.css +2 -0
  85. package/build/components/Skeleton/style.css.map +1 -0
  86. package/build/components/SkipLink/style.css +2 -0
  87. package/build/components/SkipLink/style.css.map +1 -0
  88. package/build/components/SocialButton/style.css +2 -0
  89. package/build/components/SocialButton/style.css.map +1 -0
  90. package/build/components/Stepbar/style.css +2 -0
  91. package/build/components/Stepbar/style.css.map +1 -0
  92. package/build/components/Sticker/style.css +2 -0
  93. package/build/components/Sticker/style.css.map +1 -0
  94. package/build/components/Table/style.css +2 -0
  95. package/build/components/Table/style.css.map +1 -0
  96. package/build/components/Tabs/style.css +2 -0
  97. package/build/components/Tabs/style.css.map +1 -0
  98. package/build/components/Tag/style.css +2 -0
  99. package/build/components/Tag/style.css.map +1 -0
  100. package/build/components/Testimonial/style.css +2 -0
  101. package/build/components/Testimonial/style.css.map +1 -0
  102. package/build/components/Tile/style.css +2 -0
  103. package/build/components/Tile/style.css.map +1 -0
  104. package/build/components/Tooltip/style.css +1 -1
  105. package/build/components/Tooltip/style.css.map +1 -1
  106. package/build/components/index.js +1 -23
  107. package/build/components/index.js.map +1 -1
  108. package/build/components/tsconfig.tsbuildinfo +1 -1
  109. package/build/components/types/index.d.ts +1497 -0
  110. package/build/components/types/src/components/Accordion/Accordion.d.ts +2 -2
  111. package/build/components/types/src/components/Accordion/Accordion.static.d.ts +1 -0
  112. package/build/components/types/src/components/Alert/Alert.d.ts +0 -2
  113. package/build/components/types/src/components/AnchorNavigation/AnchorNavigation.d.ts +1 -2
  114. package/build/components/types/src/components/AnchorNavigation/AnchorNavigation.static.d.ts +20 -17
  115. package/build/components/types/src/components/BlockAction/BlockAction.d.ts +2 -0
  116. package/build/components/types/src/components/BlockAction/Context.d.ts +2 -0
  117. package/build/components/types/src/components/BodyBanner/BodyBanner.d.ts +10 -10
  118. package/build/components/types/src/components/Breadcrumbs/Breadcrumbs.d.ts +0 -2
  119. package/build/components/types/src/components/Button/Button.d.ts +1 -1
  120. package/build/components/types/src/components/Button/index.d.ts +3 -4
  121. package/build/components/types/src/components/Card/Card.d.ts +2 -1
  122. package/build/components/types/src/components/Card/CardSection.d.ts +2 -2
  123. package/build/components/types/src/components/Card/index.d.ts +1 -0
  124. package/build/components/types/src/components/Carousel/Carousel.d.ts +4 -2
  125. package/build/components/types/src/components/Carousel/Carousel.static.d.ts +61 -7
  126. package/build/components/types/src/components/Carousel/constants.d.ts +2 -0
  127. package/build/components/types/src/components/CarouselHero/CarouselHero.d.ts +17 -0
  128. package/build/components/types/src/components/CarouselHero/CarouselHero.static.d.ts +47 -0
  129. package/build/components/types/src/components/CarouselHero/CarouselHeroItem.d.ts +8 -0
  130. package/build/components/types/src/components/CarouselHero/constants.d.ts +33 -0
  131. package/build/components/types/src/components/CarouselHero/index.d.ts +2 -0
  132. package/build/components/types/src/components/CarouselPromotions/CarouselPromotions.d.ts +0 -1
  133. package/build/components/types/src/components/Controls/Controls.d.ts +0 -1
  134. package/build/components/types/src/components/Cover/Cover.d.ts +3 -3
  135. package/build/components/types/src/components/Divider/Divider.d.ts +0 -4
  136. package/build/components/types/src/components/DocumentationSidebar/DocumentationSidebar.d.ts +1 -0
  137. package/build/components/types/src/components/Expander/Expander.d.ts +2 -5
  138. package/build/components/types/src/components/FeatureAccordion/FeatureAccordion.d.ts +1 -3
  139. package/build/components/types/src/components/Footer/Footer.d.ts +1 -5
  140. package/build/components/types/src/components/Footer/PlanObnovy.d.ts +1 -0
  141. package/build/components/types/src/components/Footer/constants.d.ts +10 -0
  142. package/build/components/types/src/components/Footer/data.d.ts +6 -0
  143. package/build/components/types/src/components/Forms/InputStepper/InputStepper.d.ts +0 -1
  144. package/build/components/types/src/components/Forms/Select/index.d.ts +1 -1
  145. package/build/components/types/src/components/Grid/Grid.d.ts +1 -1
  146. package/build/components/types/src/components/Grid/GridCol.d.ts +1 -1
  147. package/build/components/types/src/components/Hero/Hero.d.ts +0 -3
  148. package/build/components/types/src/components/Icon/IconSearch.d.ts +2 -2
  149. package/build/components/types/src/components/Icon/IconSearchWrapper.d.ts +1 -1
  150. package/build/components/types/src/components/Icon/iconSearchTags.d.ts +259 -252
  151. package/build/components/types/src/components/Link/Link.d.ts +2 -2
  152. package/build/components/types/src/components/Megamenu/Megamenu.d.ts +6 -1
  153. package/build/components/types/src/components/Megamenu/MegamenuBlog.d.ts +2 -1
  154. package/build/components/types/src/components/Megamenu/constants.d.ts +4 -0
  155. package/build/components/types/src/components/Megamenu/static.d.ts +2 -3
  156. package/build/components/types/src/components/Modal/Modal.d.ts +0 -4
  157. package/build/components/types/src/components/Modal/ModalBody.d.ts +3 -3
  158. package/build/components/types/src/components/Modal/ModalProductHeader.d.ts +2 -0
  159. package/build/components/types/src/components/Modal/index.d.ts +0 -1
  160. package/build/components/types/src/components/Pagination/Pagination.d.ts +2 -5
  161. package/build/components/types/src/components/Pagination/Separator.d.ts +2 -2
  162. package/build/components/types/src/components/Pill/Pill.d.ts +3 -1
  163. package/build/components/types/src/components/Preview/Preview.d.ts +1 -1
  164. package/build/components/types/src/components/Preview/PreviewGenerator.d.ts +1 -0
  165. package/build/components/types/src/components/Preview/index.d.ts +1 -1
  166. package/build/components/types/src/components/Progress/Progress.d.ts +0 -1
  167. package/build/components/types/src/components/PromoBanner/PromoBanner.d.ts +9 -6
  168. package/build/components/types/src/components/PromotionCard/PromotionCard.d.ts +3 -3
  169. package/build/components/types/src/components/Section/Section.d.ts +4 -1
  170. package/build/components/types/src/components/SocialButton/SocialButton.d.ts +13 -0
  171. package/build/components/types/src/components/SocialButton/index.d.ts +1 -0
  172. package/build/components/types/src/components/Stepbar/Stepbar.d.ts +0 -2
  173. package/build/components/types/src/components/Table/Row.d.ts +1 -2
  174. package/build/components/types/src/components/Table/Table.d.ts +2 -2
  175. package/build/components/types/src/components/Table/docsData.d.ts +2 -0
  176. package/build/components/types/src/components/Table/types.d.ts +1 -0
  177. package/build/components/types/src/components/Tabs/Tabs.d.ts +0 -2
  178. package/build/components/types/src/components/Tag/Tag.d.ts +0 -2
  179. package/build/components/types/src/components/Tile/Tile.d.ts +2 -1
  180. package/build/components/types/src/components/Tooltip/Tooltip.d.ts +0 -1
  181. package/build/components/types/src/components/Tooltip/tests/BaseWrapper.d.ts +1 -1
  182. package/build/components/types/src/components/index.d.ts +5 -5
  183. package/build/components/types/src/docs/utils/SpacePreview.d.ts +1 -2
  184. package/build/components/types/src/scripts/index.d.ts +12 -3
  185. package/build/components/types/src/scripts/modules/SameHeight.d.ts +3 -0
  186. package/build/components/types/src/styles/export/color.d.ts +105 -0
  187. package/build/fonts/HelveticaNeue-Bold.woff2 +0 -0
  188. package/build/fonts/HelveticaNeue-Light.woff2 +0 -0
  189. package/build/fonts/HelveticaNeue-Roman.woff2 +0 -0
  190. package/build/lib/base.css +3 -0
  191. package/build/lib/base.css.map +1 -0
  192. package/build/lib/components.css +1 -1
  193. package/build/lib/components.css.map +1 -1
  194. package/build/lib/footer.css +2 -0
  195. package/build/lib/footer.css.map +1 -0
  196. package/build/lib/megamenu.css +1 -1
  197. package/build/lib/megamenu.css.map +1 -1
  198. package/build/lib/megamenu.js +1 -1
  199. package/build/lib/megamenu.js.map +1 -1
  200. package/build/lib/scripts.js +1 -9
  201. package/build/lib/scripts.js.map +1 -1
  202. package/build/lib/style.css +1 -1
  203. package/build/lib/style.css.map +1 -1
  204. package/build/lib/tsconfig.tsbuildinfo +1 -1
  205. package/build/lib/utilities.css +2 -0
  206. package/build/lib/utilities.css.map +1 -0
  207. package/build/plan-obnovy.svg +53 -0
  208. package/build/sprite.svg +1 -1
  209. package/package.json +46 -38
  210. package/public/fonts/HelveticaNeue-Bold.woff2 +0 -0
  211. package/public/fonts/HelveticaNeue-Light.woff2 +0 -0
  212. package/public/fonts/HelveticaNeue-Roman.woff2 +0 -0
  213. package/src/assets/icons/ai.svg +6 -0
  214. package/src/assets/icons/article.svg +7 -0
  215. package/src/assets/icons/instagram.svg +5 -1
  216. package/src/assets/icons/linkedin-2.svg +3 -1
  217. package/src/assets/icons/pictogram-activation--dark.svg +10 -11
  218. package/src/assets/icons/pictogram-activation-free--dark.svg +4 -5
  219. package/src/assets/icons/pictogram-activation-free.svg +4 -5
  220. package/src/assets/icons/pictogram-activation.svg +10 -11
  221. package/src/assets/icons/pictogram-archive--dark.svg +3 -4
  222. package/src/assets/icons/pictogram-archive.svg +3 -4
  223. package/src/assets/icons/pictogram-calling-minutes--dark.svg +3 -4
  224. package/src/assets/icons/pictogram-calling-minutes.svg +3 -4
  225. package/src/assets/icons/pictogram-canal-plus--dark.svg +3 -4
  226. package/src/assets/icons/pictogram-canal-plus.svg +3 -4
  227. package/src/assets/icons/pictogram-competition-tickets--dark.svg +11 -12
  228. package/src/assets/icons/pictogram-competition-tickets.svg +11 -12
  229. package/src/assets/icons/pictogram-device-discount--dark.svg +7 -6
  230. package/src/assets/icons/pictogram-device-discount.svg +5 -6
  231. package/src/assets/icons/pictogram-discount-general--dark.svg +5 -6
  232. package/src/assets/icons/pictogram-discount-general.svg +5 -6
  233. package/src/assets/icons/pictogram-discount-price--dark.svg +5 -6
  234. package/src/assets/icons/pictogram-discount-price.svg +5 -6
  235. package/src/assets/icons/pictogram-extra-data--dark.svg +6 -7
  236. package/src/assets/icons/pictogram-extra-data.svg +6 -7
  237. package/src/assets/icons/pictogram-free-payment--dark.svg +5 -6
  238. package/src/assets/icons/pictogram-free-payment.svg +3 -6
  239. package/src/assets/icons/pictogram-gift--dark.svg +12 -13
  240. package/src/assets/icons/pictogram-gift-one-benefit--dark.svg +7 -8
  241. package/src/assets/icons/pictogram-gift-one-benefit.svg +7 -8
  242. package/src/assets/icons/pictogram-gift-two-benefits--dark.svg +8 -9
  243. package/src/assets/icons/pictogram-gift-two-benefits.svg +8 -9
  244. package/src/assets/icons/pictogram-gift.svg +3 -4
  245. package/src/assets/icons/pictogram-hbo-max--dark.svg +5 -6
  246. package/src/assets/icons/pictogram-hbo-max.svg +5 -6
  247. package/src/assets/icons/pictogram-infinite-sms--dark.svg +3 -4
  248. package/src/assets/icons/pictogram-infinite-sms.svg +3 -4
  249. package/src/assets/icons/pictogram-installation--dark.svg +4 -5
  250. package/src/assets/icons/pictogram-installation-free--dark.svg +4 -5
  251. package/src/assets/icons/pictogram-installation-free.svg +4 -5
  252. package/src/assets/icons/pictogram-installation.svg +4 -5
  253. package/src/assets/icons/pictogram-max--dark.svg +3 -4
  254. package/src/assets/icons/pictogram-max-canal-plus--dark.svg +5 -6
  255. package/src/assets/icons/pictogram-max-canal-plus.svg +5 -6
  256. package/src/assets/icons/pictogram-max.svg +3 -4
  257. package/src/assets/icons/pictogram-moj-orange-app--dark.svg +3 -4
  258. package/src/assets/icons/pictogram-moj-orange-app.svg +3 -4
  259. package/src/assets/icons/pictogram-movie-storage--dark.svg +4 -5
  260. package/src/assets/icons/pictogram-movie-storage.svg +4 -5
  261. package/src/assets/icons/pictogram-online-protection--dark.svg +3 -4
  262. package/src/assets/icons/pictogram-online-protection.svg +3 -4
  263. package/src/assets/icons/pictogram-random-damage--dark.svg +4 -8
  264. package/src/assets/icons/pictogram-random-damage.svg +4 -8
  265. package/src/assets/icons/pictogram-recycling--dark.svg +7 -8
  266. package/src/assets/icons/pictogram-recycling.svg +14 -15
  267. package/src/assets/icons/pictogram-repair--dark.svg +12 -13
  268. package/src/assets/icons/pictogram-repair.svg +12 -13
  269. package/src/assets/icons/pictogram-roaming--dark.svg +3 -4
  270. package/src/assets/icons/pictogram-roaming-discount--dark.svg +3 -16
  271. package/src/assets/icons/pictogram-roaming-discount.svg +15 -16
  272. package/src/assets/icons/pictogram-roaming.svg +3 -4
  273. package/src/assets/icons/pictogram-skylink--dark.svg +10 -11
  274. package/src/assets/icons/pictogram-skylink-live-tv--dark.svg +7 -8
  275. package/src/assets/icons/pictogram-skylink-live-tv.svg +7 -8
  276. package/src/assets/icons/pictogram-skylink.svg +10 -11
  277. package/src/assets/icons/pictogram-sms--dark.svg +5 -6
  278. package/src/assets/icons/pictogram-sms.svg +5 -6
  279. package/src/assets/icons/pictogram-theft--dark.svg +3 -7
  280. package/src/assets/icons/pictogram-theft.svg +3 -7
  281. package/src/assets/icons/pictogram-three-devices--dark.svg +4 -8
  282. package/src/assets/icons/pictogram-three-devices.svg +4 -8
  283. package/src/assets/icons/pictogram-trust--dark.svg +3 -4
  284. package/src/assets/icons/pictogram-trust.svg +3 -4
  285. package/src/assets/icons/pictogram-water-damage--dark.svg +5 -6
  286. package/src/assets/icons/pictogram-water-damage.svg +5 -6
  287. package/src/assets/icons/pinterest.svg +4 -0
  288. package/src/assets/icons/play.svg +4 -1
  289. package/src/assets/icons/quote.svg +4 -0
  290. package/src/assets/icons/snapchat.svg +4 -0
  291. package/src/assets/icons/tiktok.svg +4 -0
  292. package/src/assets/icons/whatsapp.svg +4 -0
  293. package/src/components/Accordion/Accordion.static.ts +36 -30
  294. package/src/components/Accordion/Accordion.tsx +4 -4
  295. package/src/components/Accordion/AccordionHeader.tsx +0 -10
  296. package/src/components/Accordion/AccordionItem.tsx +1 -0
  297. package/src/components/Accordion/styles/config.scss +5 -4
  298. package/src/components/Accordion/styles/mixins.scss +12 -11
  299. package/src/components/Accordion/styles/style.scss +2 -2
  300. package/src/components/Accordion/tests/Accordion.unit.test.js +12 -26
  301. package/src/components/Alert/Alert.tsx +0 -6
  302. package/src/components/Alert/styles/config.scss +1 -1
  303. package/src/components/Alert/styles/mixins.scss +3 -1
  304. package/src/components/Alert/tests/Alert.test.js +0 -14
  305. package/src/components/AnchorNavigation/AnchorNavigation.static.ts +296 -72
  306. package/src/components/AnchorNavigation/AnchorNavigation.tsx +21 -26
  307. package/src/components/AnchorNavigation/styles/mixins.scss +23 -32
  308. package/src/components/AnchorNavigation/tests/AnchorNavigation.conformance.test.js +58 -0
  309. package/src/components/AnchorNavigation/tests/AnchorNavigation.unit.test.js +163 -0
  310. package/src/components/Bar/styles/config.scss +4 -5
  311. package/src/components/Bar/styles/mixins.scss +11 -11
  312. package/src/components/BlockAction/BlockAction.tsx +10 -3
  313. package/src/components/BlockAction/Context.tsx +4 -0
  314. package/src/components/BlockAction/styles/mixins.scss +6 -6
  315. package/src/components/BlockAction/styles/style.scss +5 -0
  316. package/src/components/BodyBanner/BodyBanner.tsx +52 -73
  317. package/src/components/BodyBanner/styles/mixins.scss +39 -33
  318. package/src/components/BodyBanner/styles/style.scss +4 -18
  319. package/src/components/BodyBanner/tests/BodyBanner.conformance.test.js +67 -0
  320. package/src/components/BodyBanner/tests/BodyBanner.unit.test.js +194 -0
  321. package/src/components/Breadcrumbs/BreadcrumbItem.tsx +16 -7
  322. package/src/components/Breadcrumbs/Breadcrumbs.tsx +4 -12
  323. package/src/components/Breadcrumbs/styles/mixins.scss +2 -4
  324. package/src/components/Breadcrumbs/tests/BreadcrumbItem.unit.test.js +14 -8
  325. package/src/components/Breadcrumbs/tests/Breadcrumbs.integration.test.js +14 -37
  326. package/src/components/Breadcrumbs/tests/Breadcrumbs.unit.test.js +19 -23
  327. package/src/components/Button/Button.tsx +2 -6
  328. package/src/components/Button/styles/config.scss +5 -5
  329. package/src/components/Button/styles/mixins.scss +6 -1
  330. package/src/components/Button/styles/style.scss +4 -0
  331. package/src/components/Button/tests/Button.test.js +0 -10
  332. package/src/components/Buttons/styles/mixins.scss +1 -1
  333. package/src/components/Card/Card.tsx +20 -3
  334. package/src/components/Card/CardSection.tsx +7 -11
  335. package/src/components/Card/index.ts +1 -0
  336. package/src/components/Card/styles/config.scss +2 -2
  337. package/src/components/Card/styles/mixins.scss +8 -6
  338. package/src/components/Card/styles/style.scss +4 -0
  339. package/src/components/Card/tests/Card.unit.test.js +45 -6
  340. package/src/components/Card/tests/CardSection.unit.test.js +36 -3
  341. package/src/components/Carousel/Carousel.static.ts +371 -10
  342. package/src/components/Carousel/Carousel.tsx +41 -24
  343. package/src/components/Carousel/constants.ts +2 -0
  344. package/src/components/Carousel/styles/config.scss +1 -2
  345. package/src/components/Carousel/styles/mixins.scss +42 -3
  346. package/src/components/Carousel/styles/style.scss +8 -0
  347. package/src/components/Carousel/tests/Carousel.static.test.js +616 -0
  348. package/src/components/Carousel/tests/Carousel.unit.test.js +117 -12
  349. package/src/components/CarouselHero/CarouselHero.static.ts +528 -0
  350. package/src/components/CarouselHero/CarouselHero.tsx +139 -0
  351. package/src/components/CarouselHero/CarouselHeroItem.tsx +40 -0
  352. package/src/components/CarouselHero/constants.ts +36 -0
  353. package/src/components/CarouselHero/index.ts +2 -0
  354. package/src/components/CarouselHero/styles/config.scss +54 -0
  355. package/src/components/CarouselHero/styles/mixins.scss +278 -0
  356. package/src/components/CarouselHero/styles/style.scss +63 -0
  357. package/src/components/CarouselHero/tests/CarouselHero.conformance.test.js +129 -0
  358. package/src/components/CarouselHero/tests/CarouselHero.unit.test.js +332 -0
  359. package/src/components/CarouselHero/tests/CarouselHeroItem.conformance.test.js +135 -0
  360. package/src/components/CarouselHero/tests/CarouselHeroItem.unit.test.js +143 -0
  361. package/src/components/CarouselPromotions/CarouselPromotions.tsx +1 -6
  362. package/src/components/CarouselPromotions/styles/mixins.scss +8 -5
  363. package/src/components/CarouselPromotions/tests/CarouselPromotions.unit.test.js +0 -17
  364. package/src/components/CartTable/FooterPriceColumn.tsx +5 -3
  365. package/src/components/CartTable/Price.tsx +1 -1
  366. package/src/components/Code/styles/style.scss +6 -5
  367. package/src/components/Controls/Controls.tsx +2 -7
  368. package/src/components/Controls/styles/config.scss +2 -2
  369. package/src/components/Controls/tests/Controls.test.js +0 -32
  370. package/src/components/Cover/Cover.tsx +22 -20
  371. package/src/components/Cover/styles/config.scss +23 -12
  372. package/src/components/Cover/styles/mixins.scss +6 -5
  373. package/src/components/Cover/tests/Cover.unit.test.js +52 -52
  374. package/src/components/Divider/Divider.tsx +2 -16
  375. package/src/components/Divider/styles/config.scss +0 -17
  376. package/src/components/Divider/styles/mixins.scss +8 -10
  377. package/src/components/Divider/styles/style.scss +2 -16
  378. package/src/components/Divider/tests/Divider.conformance.test.js +1 -1
  379. package/src/components/Divider/tests/Divider.unit.test.js +0 -17
  380. package/src/components/DocumentationSidebar/DocumentationSidebar.tsx +188 -2
  381. package/src/components/DocumentationSidebar/styles/style.scss +76 -3
  382. package/src/components/Dropdown/styles/mixins.scss +1 -1
  383. package/src/components/Expander/Expander.static.ts +11 -12
  384. package/src/components/Expander/Expander.tsx +4 -8
  385. package/src/components/Expander/styles/style.scss +12 -3
  386. package/src/components/Expander/tests/Expander.conformance.test.js +8 -12
  387. package/src/components/Expander/tests/Expander.unit.test.js +37 -47
  388. package/src/components/FeatureAccordion/FeatureAccordion.tsx +3 -13
  389. package/src/components/FeatureAccordion/styles/mixins.scss +6 -14
  390. package/src/components/FeatureAccordion/styles/style.scss +2 -4
  391. package/src/components/FeatureAccordion/tests/FeatureAccordion.conformance.test.js +2 -0
  392. package/src/components/FeatureAccordion/tests/FeatureAccordion.unit.test.js +0 -5
  393. package/src/components/Footer/Footer.tsx +110 -71
  394. package/src/components/Footer/PlanObnovy.tsx +211 -0
  395. package/src/components/Footer/constants.ts +11 -0
  396. package/src/components/Footer/data.ts +27 -0
  397. package/src/components/Footer/styles/config.scss +1 -0
  398. package/src/components/Footer/styles/mixins.scss +182 -0
  399. package/src/components/Footer/styles/style.scss +54 -0
  400. package/src/components/Footer/tests/Footer.conformance.test.js +133 -8
  401. package/src/components/Footer/tests/Footer.unit.test.js +71 -6
  402. package/src/components/Forms/DatePicker/styles/style.scss +1 -1
  403. package/src/components/Forms/Field/styles/config.scss +8 -8
  404. package/src/components/Forms/Field/tests/Autocomplete.Field.conformance.test.js +1 -1
  405. package/src/components/Forms/Field/tests/Checkbox.Field.conformance.test.js +1 -0
  406. package/src/components/Forms/Field/tests/File.Field.conformance.test.js +1 -0
  407. package/src/components/Forms/Field/tests/Group.Field.conformance.test.js +1 -0
  408. package/src/components/Forms/Field/tests/Radio.Field.conformance.test.js +1 -0
  409. package/src/components/Forms/Field/tests/Rangeslider.Field.test.js +1 -0
  410. package/src/components/Forms/Field/tests/Select.Field.conformance.test.js +1 -0
  411. package/src/components/Forms/Field/tests/Text.Field.conformance.test.js +1 -0
  412. package/src/components/Forms/Field/tests/Textarea.Field.conformance.test.js +1 -0
  413. package/src/components/Forms/Fieldset/styles/mixins.scss +3 -3
  414. package/src/components/Forms/File/styles/mixins.scss +1 -1
  415. package/src/components/Forms/Group/styles/mixins.scss +14 -0
  416. package/src/components/Forms/InputStepper/InputStepper.tsx +0 -4
  417. package/src/components/Forms/InputStepper/styles/style.scss +0 -66
  418. package/src/components/Forms/Label/styles/config.scss +3 -0
  419. package/src/components/Forms/RangeSlider/styles/mixins.scss +1 -1
  420. package/src/components/Forms/TextArea/styles/mixins.scss +10 -9
  421. package/src/components/Forms/TextInput/styles/config.scss +1 -1
  422. package/src/components/Forms/styles/config.scss +5 -4
  423. package/src/components/Gauge/styles/style.scss +1 -1
  424. package/src/components/Grid/Grid.tsx +1 -1
  425. package/src/components/Grid/styles/config.scss +5 -3
  426. package/src/components/Grid/styles/mixins.scss +29 -19
  427. package/src/components/Grid/tests/Grid.unit.test.js +11 -0
  428. package/src/components/Hero/Hero.tsx +2 -16
  429. package/src/components/Hero/styles/style.scss +0 -14
  430. package/src/components/Hero/tests/Hero.unit.test.js +109 -119
  431. package/src/components/Icon/iconSearchTags.ts +440 -432
  432. package/src/components/Icon/styles/style.scss +15 -0
  433. package/src/components/Icon/tests/Pictogram.unit.test.js +38 -0
  434. package/src/components/IconList/styles/mixins.scss +5 -5
  435. package/src/components/Image/styles/mixins.scss +2 -2
  436. package/src/components/Link/Link.tsx +4 -5
  437. package/src/components/Link/styles/mixins.scss +9 -3
  438. package/src/components/Link/styles/style.scss +4 -2
  439. package/src/components/Link/tests/Link.conformance.test.js +6 -27
  440. package/src/components/Link/tests/Link.unit.test.js +1 -30
  441. package/src/components/List/styles/config.scss +12 -12
  442. package/src/components/List/styles/mixins.scss +16 -9
  443. package/src/components/Loader/Loader.tsx +2 -10
  444. package/src/components/Loader/styles/mixins.scss +1 -1
  445. package/src/components/Loader/styles/style.scss +6 -4
  446. package/src/components/Megamenu/Megamenu.static.ts +2 -0
  447. package/src/components/Megamenu/Megamenu.tsx +730 -650
  448. package/src/components/Megamenu/MegamenuBlog.tsx +201 -183
  449. package/src/components/Megamenu/constants.ts +4 -0
  450. package/src/components/Megamenu/static.ts +5 -11
  451. package/src/components/Megamenu/styles/mixins.scss +50 -3
  452. package/src/components/Megamenu/styles/style.scss +10 -0
  453. package/src/components/Modal/Modal.tsx +1 -14
  454. package/src/components/Modal/ModalBody.tsx +26 -14
  455. package/src/components/Modal/ModalProductHeader.tsx +6 -2
  456. package/src/components/Modal/index.ts +0 -1
  457. package/src/components/Modal/styles/config.scss +4 -4
  458. package/src/components/Modal/styles/mixins.scss +18 -57
  459. package/src/components/Modal/styles/style.scss +1 -16
  460. package/src/components/Modal/tests/Modal.unit.test.js +0 -59
  461. package/src/components/Modal/tests/ModalBody.unit.test.js +21 -12
  462. package/src/components/Modal/tests/ModalProductHeader.unit.test.js +12 -0
  463. package/src/components/Pagination/Pagination.tsx +3 -13
  464. package/src/components/Pagination/styles/mixins.scss +1 -1
  465. package/src/components/Pill/Pill.tsx +17 -5
  466. package/src/components/Pill/styles/config.scss +2 -1
  467. package/src/components/Pill/styles/style.scss +17 -1
  468. package/src/components/Pill/tests/Pill.conformance.test.js +9 -3
  469. package/src/components/Pill/tests/Pill.unit.test.js +87 -9
  470. package/src/components/Preview/PreviewGenerator.tsx +50 -29
  471. package/src/components/Progress/Progress.tsx +1 -13
  472. package/src/components/Progress/styles/config.scss +4 -4
  473. package/src/components/Progress/styles/mixins.scss +9 -7
  474. package/src/components/PromoBanner/PromoBanner.tsx +70 -43
  475. package/src/components/PromoBanner/styles/mixins.scss +39 -17
  476. package/src/components/PromoBanner/styles/style.scss +5 -7
  477. package/src/components/PromoBanner/tests/PromoBanner.conformance.test.js +783 -0
  478. package/src/components/PromoBanner/tests/PromoBanner.unit.test.js +549 -0
  479. package/src/components/PromotionCard/PromotionCard.tsx +12 -13
  480. package/src/components/PromotionCard/styles/mixins.scss +2 -1
  481. package/src/components/PromotionCard/tests/PromotionCard.conformance.test.js +566 -0
  482. package/src/components/PromotionCard/tests/PromotionCard.unit.test.js +438 -0
  483. package/src/components/Section/Section.tsx +20 -10
  484. package/src/components/Section/styles/config.scss +18 -16
  485. package/src/components/Section/styles/mixins.scss +16 -13
  486. package/src/components/Section/styles/style.scss +1 -0
  487. package/src/components/Section/tests/Section.conformance.test.js +23 -12
  488. package/src/components/Section/tests/Section.unit.test.js +53 -32
  489. package/src/components/SocialButton/SocialButton.tsx +67 -0
  490. package/src/components/SocialButton/index.ts +1 -0
  491. package/src/components/SocialButton/styles/config.scss +172 -0
  492. package/src/components/SocialButton/styles/mixins.scss +42 -0
  493. package/src/components/SocialButton/styles/style.scss +16 -0
  494. package/src/components/SocialButton/tests/SocialButton.unit.test.js +162 -0
  495. package/src/components/Stepbar/Stepbar.tsx +0 -5
  496. package/src/components/Stepbar/styles/mixins.scss +1 -1
  497. package/src/components/Table/Row.tsx +9 -3
  498. package/src/components/Table/Table.tsx +11 -6
  499. package/src/components/Table/TableContext.ts +1 -0
  500. package/src/components/Table/docsData.ts +25 -0
  501. package/src/components/Table/styles/mixins.scss +41 -5
  502. package/src/components/Table/styles/style.scss +6 -0
  503. package/src/components/Table/tests/Table.conformance.test.js +5 -1
  504. package/src/components/Table/tests/Table.unit.test.js +0 -31
  505. package/src/components/Table/types.ts +1 -0
  506. package/src/components/Tabs/Tabs.tsx +0 -5
  507. package/src/components/Tabs/styles/mixins.scss +1 -1
  508. package/src/components/Tabs/tests/Tabs.unit.test.js +0 -8
  509. package/src/components/Tag/Tag.tsx +0 -4
  510. package/src/components/Tag/styles/config.scss +19 -23
  511. package/src/components/Tag/styles/style.scss +33 -0
  512. package/src/components/Tile/CHANGELOG.md +15 -1
  513. package/src/components/Tile/Tile.tsx +11 -3
  514. package/src/components/Tile/styles/config.scss +0 -11
  515. package/src/components/Tile/styles/mixins.scss +1 -0
  516. package/src/components/Tile/styles/style.scss +1 -5
  517. package/src/components/Tile/tests/Tile.unit.test.js +10 -3
  518. package/src/components/Tooltip/InfoTooltip.tsx +1 -5
  519. package/src/components/Tooltip/Tooltip.tsx +1 -10
  520. package/src/components/Tooltip/tests/Tooltip.conformance.test.js +5 -1
  521. package/src/components/Tooltip/tests/Tooltip.unit.test.js +0 -29
  522. package/src/components/index.ts +9 -4
  523. package/src/styles/base/globals-forms.scss +8 -0
  524. package/src/styles/base/globals.scss +26 -22
  525. package/src/styles/base/styleguide.scss +22 -17
  526. package/src/styles/export/base.js +1 -1
  527. package/src/styles/export/color.js +102 -20
  528. package/src/styles/export/color.scss +10 -20
  529. package/src/styles/shame.scss +1 -0
  530. package/src/styles/tokens/color-vars.scss +39 -0
  531. package/src/styles/tokens/color.scss +14 -14
  532. package/src/styles/tokens/tag-colors.scss +20 -0
  533. package/src/styles/typography/config.scss +83 -37
  534. package/src/styles/typography/mixins.scss +29 -15
  535. package/src/styles/typography/style.scss +6 -3
  536. package/src/styles/utilities/border.scss +1 -1
  537. package/src/styles/utilities/color.scss +99 -20
  538. package/src/styles/utilities/horizontal-scroll.scss +1 -1
  539. package/src/styles/utilities/index.scss +1 -0
  540. package/src/styles/utilities/layout.scss +27 -0
  541. package/src/styles/utilities/ordering.scss +44 -0
  542. package/src/styles/utilities/text.scss +44 -2
  543. package/src/styles/utilities/visibility.scss +2 -4
  544. package/build/components/Accordion/index.js +0 -16
  545. package/build/components/Accordion/index.js.map +0 -1
  546. package/build/components/Accordion/tsconfig.tsbuildinfo +0 -1
  547. package/build/components/Alert/index.js +0 -16
  548. package/build/components/Alert/index.js.map +0 -1
  549. package/build/components/Alert/tsconfig.tsbuildinfo +0 -1
  550. package/build/components/AnchorNavigation/index.js +0 -16
  551. package/build/components/AnchorNavigation/index.js.map +0 -1
  552. package/build/components/AnchorNavigation/tsconfig.tsbuildinfo +0 -1
  553. package/build/components/Bar/index.js +0 -16
  554. package/build/components/Bar/index.js.map +0 -1
  555. package/build/components/Bar/tsconfig.tsbuildinfo +0 -1
  556. package/build/components/BlockAction/index.js +0 -16
  557. package/build/components/BlockAction/index.js.map +0 -1
  558. package/build/components/BlockAction/tsconfig.tsbuildinfo +0 -1
  559. package/build/components/BodyBanner/index.js +0 -16
  560. package/build/components/BodyBanner/index.js.map +0 -1
  561. package/build/components/BodyBanner/tsconfig.tsbuildinfo +0 -1
  562. package/build/components/Breadcrumbs/index.js +0 -16
  563. package/build/components/Breadcrumbs/index.js.map +0 -1
  564. package/build/components/Breadcrumbs/tsconfig.tsbuildinfo +0 -1
  565. package/build/components/Button/index.js +0 -16
  566. package/build/components/Button/index.js.map +0 -1
  567. package/build/components/Button/tsconfig.tsbuildinfo +0 -1
  568. package/build/components/Buttons/index.js +0 -16
  569. package/build/components/Buttons/index.js.map +0 -1
  570. package/build/components/Buttons/tsconfig.tsbuildinfo +0 -1
  571. package/build/components/Card/index.js +0 -16
  572. package/build/components/Card/index.js.map +0 -1
  573. package/build/components/Card/tsconfig.tsbuildinfo +0 -1
  574. package/build/components/Carousel/index.js +0 -16
  575. package/build/components/Carousel/index.js.map +0 -1
  576. package/build/components/Carousel/tsconfig.tsbuildinfo +0 -1
  577. package/build/components/CarouselPromotions/index.js +0 -16
  578. package/build/components/CarouselPromotions/index.js.map +0 -1
  579. package/build/components/CarouselPromotions/tsconfig.tsbuildinfo +0 -1
  580. package/build/components/CartTable/index.js +0 -16
  581. package/build/components/CartTable/index.js.map +0 -1
  582. package/build/components/CartTable/tsconfig.tsbuildinfo +0 -1
  583. package/build/components/Code/index.js +0 -11
  584. package/build/components/Code/index.js.map +0 -1
  585. package/build/components/Code/tsconfig.tsbuildinfo +0 -1
  586. package/build/components/Container/index.js +0 -16
  587. package/build/components/Container/index.js.map +0 -1
  588. package/build/components/Container/tsconfig.tsbuildinfo +0 -1
  589. package/build/components/Controls/index.js +0 -16
  590. package/build/components/Controls/index.js.map +0 -1
  591. package/build/components/Controls/tsconfig.tsbuildinfo +0 -1
  592. package/build/components/Cover/index.js +0 -16
  593. package/build/components/Cover/index.js.map +0 -1
  594. package/build/components/Cover/tsconfig.tsbuildinfo +0 -1
  595. package/build/components/Divider/index.js +0 -16
  596. package/build/components/Divider/index.js.map +0 -1
  597. package/build/components/Divider/tsconfig.tsbuildinfo +0 -1
  598. package/build/components/DocumentationSidebar/index.js +0 -16
  599. package/build/components/DocumentationSidebar/index.js.map +0 -1
  600. package/build/components/DocumentationSidebar/tsconfig.tsbuildinfo +0 -1
  601. package/build/components/Dropdown/index.js +0 -16
  602. package/build/components/Dropdown/index.js.map +0 -1
  603. package/build/components/Dropdown/tsconfig.tsbuildinfo +0 -1
  604. package/build/components/Expander/index.js +0 -16
  605. package/build/components/Expander/index.js.map +0 -1
  606. package/build/components/Expander/tsconfig.tsbuildinfo +0 -1
  607. package/build/components/FeatureAccordion/index.js +0 -16
  608. package/build/components/FeatureAccordion/index.js.map +0 -1
  609. package/build/components/FeatureAccordion/tsconfig.tsbuildinfo +0 -1
  610. package/build/components/Footer/index.js +0 -16
  611. package/build/components/Footer/index.js.map +0 -1
  612. package/build/components/Footer/tsconfig.tsbuildinfo +0 -1
  613. package/build/components/Forms/index.js +0 -20
  614. package/build/components/Forms/index.js.map +0 -1
  615. package/build/components/Forms/style.css +0 -2
  616. package/build/components/Forms/style.css.map +0 -1
  617. package/build/components/Forms/tsconfig.tsbuildinfo +0 -1
  618. package/build/components/Gauge/index.js +0 -16
  619. package/build/components/Gauge/index.js.map +0 -1
  620. package/build/components/Gauge/tsconfig.tsbuildinfo +0 -1
  621. package/build/components/Grid/index.js +0 -16
  622. package/build/components/Grid/index.js.map +0 -1
  623. package/build/components/Grid/tsconfig.tsbuildinfo +0 -1
  624. package/build/components/Hero/index.js +0 -16
  625. package/build/components/Hero/index.js.map +0 -1
  626. package/build/components/Hero/tsconfig.tsbuildinfo +0 -1
  627. package/build/components/Icon/index.js +0 -11
  628. package/build/components/Icon/index.js.map +0 -1
  629. package/build/components/Icon/tsconfig.tsbuildinfo +0 -1
  630. package/build/components/IconList/index.js +0 -16
  631. package/build/components/IconList/index.js.map +0 -1
  632. package/build/components/IconList/tsconfig.tsbuildinfo +0 -1
  633. package/build/components/Image/index.js +0 -16
  634. package/build/components/Image/index.js.map +0 -1
  635. package/build/components/Image/tsconfig.tsbuildinfo +0 -1
  636. package/build/components/Link/index.js +0 -7
  637. package/build/components/Link/index.js.map +0 -1
  638. package/build/components/Link/tsconfig.tsbuildinfo +0 -1
  639. package/build/components/List/index.js +0 -16
  640. package/build/components/List/index.js.map +0 -1
  641. package/build/components/List/tsconfig.tsbuildinfo +0 -1
  642. package/build/components/Loader/index.js +0 -16
  643. package/build/components/Loader/index.js.map +0 -1
  644. package/build/components/Loader/tsconfig.tsbuildinfo +0 -1
  645. package/build/components/Megamenu/index.js +0 -16
  646. package/build/components/Megamenu/index.js.map +0 -1
  647. package/build/components/Megamenu/tsconfig.tsbuildinfo +0 -1
  648. package/build/components/Modal/index.js +0 -20
  649. package/build/components/Modal/index.js.map +0 -1
  650. package/build/components/Modal/tsconfig.tsbuildinfo +0 -1
  651. package/build/components/Pagination/index.js +0 -16
  652. package/build/components/Pagination/index.js.map +0 -1
  653. package/build/components/Pagination/tsconfig.tsbuildinfo +0 -1
  654. package/build/components/Pill/index.js +0 -16
  655. package/build/components/Pill/index.js.map +0 -1
  656. package/build/components/Pill/tsconfig.tsbuildinfo +0 -1
  657. package/build/components/Preview/index.js +0 -77
  658. package/build/components/Preview/index.js.map +0 -1
  659. package/build/components/Preview/tsconfig.tsbuildinfo +0 -1
  660. package/build/components/Progress/index.js +0 -16
  661. package/build/components/Progress/index.js.map +0 -1
  662. package/build/components/Progress/tsconfig.tsbuildinfo +0 -1
  663. package/build/components/PromoBanner/index.js +0 -16
  664. package/build/components/PromoBanner/index.js.map +0 -1
  665. package/build/components/PromoBanner/tsconfig.tsbuildinfo +0 -1
  666. package/build/components/PromotionCard/index.js +0 -16
  667. package/build/components/PromotionCard/index.js.map +0 -1
  668. package/build/components/PromotionCard/tsconfig.tsbuildinfo +0 -1
  669. package/build/components/Section/index.js +0 -16
  670. package/build/components/Section/index.js.map +0 -1
  671. package/build/components/Section/tsconfig.tsbuildinfo +0 -1
  672. package/build/components/Skeleton/index.js +0 -16
  673. package/build/components/Skeleton/index.js.map +0 -1
  674. package/build/components/Skeleton/tsconfig.tsbuildinfo +0 -1
  675. package/build/components/SkipLink/index.js +0 -16
  676. package/build/components/SkipLink/index.js.map +0 -1
  677. package/build/components/SkipLink/tsconfig.tsbuildinfo +0 -1
  678. package/build/components/Stepbar/index.js +0 -16
  679. package/build/components/Stepbar/index.js.map +0 -1
  680. package/build/components/Stepbar/tsconfig.tsbuildinfo +0 -1
  681. package/build/components/Sticker/index.js +0 -16
  682. package/build/components/Sticker/index.js.map +0 -1
  683. package/build/components/Sticker/tsconfig.tsbuildinfo +0 -1
  684. package/build/components/Table/index.js +0 -16
  685. package/build/components/Table/index.js.map +0 -1
  686. package/build/components/Table/tsconfig.tsbuildinfo +0 -1
  687. package/build/components/Tabs/index.js +0 -16
  688. package/build/components/Tabs/index.js.map +0 -1
  689. package/build/components/Tabs/tsconfig.tsbuildinfo +0 -1
  690. package/build/components/Tag/index.js +0 -16
  691. package/build/components/Tag/index.js.map +0 -1
  692. package/build/components/Tag/tsconfig.tsbuildinfo +0 -1
  693. package/build/components/Testimonial/index.js +0 -16
  694. package/build/components/Testimonial/index.js.map +0 -1
  695. package/build/components/Testimonial/tsconfig.tsbuildinfo +0 -1
  696. package/build/components/Tile/index.js +0 -16
  697. package/build/components/Tile/index.js.map +0 -1
  698. package/build/components/Tile/tsconfig.tsbuildinfo +0 -1
  699. package/build/components/Tooltip/index.js +0 -16
  700. package/build/components/Tooltip/index.js.map +0 -1
  701. package/build/components/Tooltip/tsconfig.tsbuildinfo +0 -1
  702. package/build/components/index.css +0 -3
  703. package/build/components/index.css.map +0 -1
  704. package/build/components/static.css +0 -2
  705. package/build/components/static.css.map +0 -1
  706. package/build/components/static.js +0 -10
  707. package/build/components/static.js.map +0 -1
  708. package/build/components/types/src/components/Hero/HeroPlayground.d.ts +0 -2
  709. package/build/components/types/src/components/Modal/ModalProductBody.d.ts +0 -10
  710. package/build/lib/after-components.css +0 -2
  711. package/build/lib/after-components.css.map +0 -1
  712. package/build/lib/before-components.css +0 -3
  713. package/build/lib/before-components.css.map +0 -1
  714. package/build/lib/scripts.css +0 -2
  715. package/build/lib/scripts.css.map +0 -1
  716. package/src/components/Accordion/Accordion.mdx +0 -240
  717. package/src/components/Alert/Alert.mdx +0 -141
  718. package/src/components/Bar/Bar.mdx +0 -203
  719. package/src/components/BlockAction/BlockAction.mdx +0 -244
  720. package/src/components/BodyBanner/BodyBanner.mdx +0 -268
  721. package/src/components/Breadcrumbs/Breadcrumbs.mdx +0 -84
  722. package/src/components/Button/Button.mdx +0 -273
  723. package/src/components/Buttons/Buttons.mdx +0 -39
  724. package/src/components/Card/Card.mdx +0 -334
  725. package/src/components/Carousel/Carousel.mdx +0 -159
  726. package/src/components/CarouselPromotions/CarouselPromotions.mdx +0 -246
  727. package/src/components/CartTable/CartTable.mdx +0 -129
  728. package/src/components/Container/Container.mdx +0 -73
  729. package/src/components/Controls/Controls.mdx +0 -469
  730. package/src/components/Cover/Cover.mdx +0 -87
  731. package/src/components/Divider/Divider.mdx +0 -65
  732. package/src/components/Dropdown/Dropdown.mdx +0 -260
  733. package/src/components/Expander/Expander.mdx +0 -153
  734. package/src/components/FeatureAccordion/FeatureAccordion.mdx +0 -33
  735. package/src/components/Forms/Autocomplete/Autocomplete.mdx +0 -198
  736. package/src/components/Forms/Checkbox/Checkbox.mdx +0 -139
  737. package/src/components/Forms/DatePicker/DatePicker.mdx +0 -149
  738. package/src/components/Forms/Field/Field.mdx +0 -383
  739. package/src/components/Forms/Fieldset/Fieldset.mdx +0 -178
  740. package/src/components/Forms/File/File.mdx +0 -88
  741. package/src/components/Forms/FormTooltip.mdx +0 -51
  742. package/src/components/Forms/Forms.mdx +0 -48
  743. package/src/components/Forms/Group/Group.mdx +0 -146
  744. package/src/components/Forms/Hint/Hint.mdx +0 -40
  745. package/src/components/Forms/InputStepper/InputStepper.mdx +0 -147
  746. package/src/components/Forms/Label/Label.mdx +0 -95
  747. package/src/components/Forms/Message/Message.mdx +0 -40
  748. package/src/components/Forms/Radio/Radio.mdx +0 -98
  749. package/src/components/Forms/RangeSlider/RangeSlider.mdx +0 -304
  750. package/src/components/Forms/Select/Select.mdx +0 -106
  751. package/src/components/Forms/TextArea/TextArea.mdx +0 -109
  752. package/src/components/Forms/TextInput/TextInput.mdx +0 -153
  753. package/src/components/Gauge/Gauge.mdx +0 -35
  754. package/src/components/Grid/Grid.mdx +0 -320
  755. package/src/components/Hero/Hero.mdx +0 -168
  756. package/src/components/Hero/HeroPlayground.tsx +0 -369
  757. package/src/components/Icon/Icon.mdx +0 -172
  758. package/src/components/IconList/IconList.mdx +0 -53
  759. package/src/components/Image/Image.mdx +0 -175
  760. package/src/components/Link/Link.mdx +0 -238
  761. package/src/components/List/List.mdx +0 -216
  762. package/src/components/Loader/Loader.mdx +0 -148
  763. package/src/components/Modal/Modal.mdx +0 -565
  764. package/src/components/Modal/ModalProductBody.tsx +0 -52
  765. package/src/components/Pagination/Pagination.mdx +0 -45
  766. package/src/components/Pagination/tests/utils.js +0 -12
  767. package/src/components/Pill/Pill.mdx +0 -41
  768. package/src/components/Progress/Progress.mdx +0 -119
  769. package/src/components/PromotionCard/PromotionCard.mdx +0 -191
  770. package/src/components/Section/Section.mdx +0 -397
  771. package/src/components/Skeleton/Skeleton.mdx +0 -90
  772. package/src/components/SkipLink/SkipLink.mdx +0 -23
  773. package/src/components/Stepbar/Stepbar.mdx +0 -137
  774. package/src/components/Sticker/Sticker.mdx +0 -50
  775. package/src/components/Table/Table.mdx +0 -199
  776. package/src/components/Tabs/Tabs.mdx +0 -373
  777. package/src/components/Tag/Tag.mdx +0 -52
  778. package/src/components/Testimonial/Testimonial.mdx +0 -41
  779. package/src/components/Tile/Tile.mdx +0 -163
  780. package/src/components/Tooltip/Tooltip.mdx +0 -227
  781. package/src/styles/after-components.scss +0 -2
  782. package/src/styles/before-components.scss +0 -18
  783. /package/build/lib/{after-components.js → base.js} +0 -0
  784. /package/build/lib/{before-components.js → utilities.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"megamenu.js","sources":["../../../src/components/Megamenu/constants.ts","../../../src/components/Megamenu/Megamenu.static.ts","../../node_modules/wnumb/wNumb.js","../../src/components/Megamenu/static.ts","../../../src/scripts/lib/moduleFactory.js","../../src/utils/helpers.js"],"sourcesContent":["export const CLASS_ROOT = \"megamenu\";\n\nexport const CLASS_TOP = `${CLASS_ROOT}__top`;\nexport const CLASS_MAIN = `${CLASS_ROOT}__main`;\nexport const CLASS_SUBMAIN = `${CLASS_ROOT}__submain`;\nexport const CLASS_CONTAINER = `${CLASS_ROOT}__container`;\nexport const CLASS_GRID = `${CLASS_ROOT}__grid`;\nexport const CLASS_CARD = `${CLASS_ROOT}__card`;\nexport const CLASS_NAV = `${CLASS_ROOT}__nav`;\nexport const CLASS_NAV_VERTICAL = `${CLASS_ROOT}__nav--vertical`;\nexport const CLASS_NAV_SPACE_SMALL = `${CLASS_ROOT}__nav--space-small`;\nexport const CLASS_NAV_ITEM = `${CLASS_ROOT}__nav-item`;\nexport const CLASS_NAV_ITEM_MAIN = `${CLASS_ROOT}__nav-item--main`;\nexport const CLASS_NAV_LINK = `${CLASS_ROOT}__nav-link`;\nexport const CLASS_NAV_CART_ICON = `${CLASS_ROOT}__nav-cart-icon`;\nexport const CLASS_NAV_SPACER = `${CLASS_ROOT}__nav-spacer`;\nexport const CLASS_NAV_ICON = `${CLASS_ROOT}__nav-icon`;\nexport const CLASS_NAV_LOGO = `${CLASS_ROOT}__nav-logo`;\nexport const CLASS_NAV_BUTTON = `${CLASS_ROOT}__nav-button`;\nexport const CLASS_NAV_BUTTON_INDICATOR = `${CLASS_ROOT}__nav-button--indicator`;\nexport const CLASS_NAV_DROPDOWN = `${CLASS_ROOT}__nav-dropdown`;\nexport const CLASS_SUBNAV = `${CLASS_ROOT}__subnav`;\nexport const CLASS_SUBNAV_ITEM = `${CLASS_ROOT}__subnav-item`;\nexport const CLASS_OVERLAY = `${CLASS_ROOT}__overlay`;\n\nexport const CLASS_TEXT_LARGE = `${CLASS_ROOT}__text--large`;\nexport const CLASS_HIDE_MD_DOWN = `${CLASS_ROOT}--hide-md-down`;\nexport const CLASS_HIDE_LG_UP = `${CLASS_ROOT}--hide-lg-up`;\nexport const CLASS_ALIGN_CENTER = `${CLASS_ROOT}--align-center`;\n\nexport const CLASS_MOBILE = `${CLASS_ROOT}__mobile`;\nexport const CLASS_MOBILE_OVERLAY = `${CLASS_ROOT}__mobile-overlay`;\nexport const CLASS_MOBILE_WRAPPER = `${CLASS_ROOT}__mobile-wrapper`;\nexport const CLASS_MOBILE_HEADER = `${CLASS_ROOT}__mobile-header`;\nexport const CLASS_MOBILE_BODY = `${CLASS_ROOT}__mobile-body`;\n\n// Accordion classes for mobile menu\nexport const CLASS_ACCORDION = `${CLASS_ROOT}__accordion`;\nexport const CLASS_ACCORDION_ITEM = `${CLASS_ROOT}__accordion-item`;\nexport const CLASS_ACCORDION_HEADER = `${CLASS_ROOT}__accordion-header`;\nexport const CLASS_ACCORDION_BUTTON = `${CLASS_ROOT}__accordion-button`;\nexport const CLASS_ACCORDION_TITLE = `${CLASS_ROOT}__accordion-title`;\nexport const CLASS_ACCORDION_ICON = `${CLASS_ROOT}__accordion-icon`;\nexport const CLASS_ACCORDION_BODY = `${CLASS_ROOT}__accordion-body`;\n\nexport const CLASS_INPUT = `${CLASS_ROOT}__input`;\nexport const CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER = `${CLASS_ROOT}__input--search-icon-with-placeholder`;\n\nexport const CLASS_TAG = `${CLASS_ROOT}__tag`;\nexport const CLASS_TAG_TRANSPARENT = `${CLASS_ROOT}__tag--transparent`;\nexport const CLASS_TAG_LARGE = `${CLASS_ROOT}__tag--large`;\n\nexport const CLASS_LIST_INLINE = `${CLASS_ROOT}__list--inline`;\nexport const CLASS_LIST_GAP_SMALL = `${CLASS_ROOT}__list--gap-small`;\n","import {\n CLASS_NAV_BUTTON,\n CLASS_NAV_DROPDOWN,\n CLASS_MOBILE,\n CLASS_MOBILE_OVERLAY,\n CLASS_HIDE_LG_UP,\n CLASS_OVERLAY,\n CLASS_ACCORDION_BUTTON,\n CLASS_ACCORDION_ICON,\n} from \"./constants\";\n\ninterface MegamenuConfig {\n dataToggle?: string;\n activeClass?: string;\n removeOnDestroy?: boolean;\n}\n\nconst defaultConfig: Required<MegamenuConfig> = {\n dataToggle: \"data-toggle\",\n activeClass: \"is-active\",\n removeOnDestroy: false,\n};\n\nexport default class Megamenu {\n element!: HTMLElement;\n config!: Required<MegamenuConfig>;\n toggleButtons!: NodeListOf<HTMLButtonElement>;\n dropdowns!: NodeListOf<HTMLElement>;\n mobileMenuButton!: HTMLButtonElement | null;\n mobileMenu!: HTMLElement | null;\n mobileOverlay!: HTMLElement | null;\n mobileCloseButton!: HTMLButtonElement | null;\n desktopOverlay!: HTMLButtonElement | null;\n accordionButtons!: NodeListOf<HTMLButtonElement>;\n focusTrapHandler!: (event: KeyboardEvent) => void;\n lastFocusedElement!: HTMLElement | null;\n isKeyboardUser!: boolean;\n keydownHandler!: (e: KeyboardEvent) => void;\n mousedownHandler!: () => void;\n touchstartHandler!: () => void;\n\n constructor(element: HTMLElement, config: MegamenuConfig = {}) {\n if ((element as any).ODS_Megamenu) {\n return (element as any).ODS_Megamenu;\n }\n\n this.element = element;\n this.config = { ...defaultConfig, ...config };\n\n this.handleToggleClick = this.handleToggleClick.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleAccordionClick = this.handleAccordionClick.bind(this);\n this.handleArrowNavigation = this.handleArrowNavigation.bind(this);\n this.trapFocus = this.trapFocus.bind(this);\n\n (this.element as any).ODS_Megamenu = this;\n\n this.init();\n return this;\n }\n\n static getInstance(el: HTMLElement): Megamenu | null {\n return el && (el as any).ODS_Megamenu ? (el as any).ODS_Megamenu : null;\n }\n\n init() {\n // Find all nav buttons with aria-controls attribute (dropdown buttons)\n this.toggleButtons = this.element.querySelectorAll(\n `.${CLASS_NAV_BUTTON}[aria-controls]`,\n );\n this.dropdowns = this.element.querySelectorAll(`.${CLASS_NAV_DROPDOWN}`);\n\n // Find mobile menu elements\n this.mobileMenuButton = this.element.querySelector(\n `.${CLASS_HIDE_LG_UP} button`,\n ) as HTMLButtonElement;\n this.mobileMenu = this.element.querySelector(`.${CLASS_MOBILE}`);\n this.mobileOverlay = this.element.querySelector(`.${CLASS_MOBILE_OVERLAY}`);\n this.mobileCloseButton = this.element.querySelector(\n \"[data-megamenu-close-button]\",\n ) as HTMLButtonElement;\n\n // Find desktop overlay element\n this.desktopOverlay = this.element.querySelector(\n `.${CLASS_OVERLAY}`,\n ) as HTMLButtonElement;\n\n // Find accordion buttons\n this.accordionButtons = this.element.querySelectorAll(\n `.${CLASS_ACCORDION_BUTTON}`,\n );\n\n // Add click event listeners to toggle buttons\n this.toggleButtons.forEach((button) => {\n button.addEventListener(\"click\", this.handleToggleClick);\n });\n\n // Add mobile menu event listeners\n if (this.mobileMenuButton) {\n this.mobileMenuButton.addEventListener(\n \"click\",\n this.handleMobileMenuToggle.bind(this),\n );\n }\n if (this.mobileOverlay) {\n this.mobileOverlay.addEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n if (this.mobileCloseButton) {\n this.mobileCloseButton.addEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n\n // Add desktop overlay event listener\n if (this.desktopOverlay) {\n this.desktopOverlay.addEventListener(\n \"click\",\n this.closeAllDropdowns.bind(this),\n );\n }\n\n // Add accordion event listeners\n this.accordionButtons.forEach((button) => {\n button.addEventListener(\"click\", this.handleAccordionClick);\n });\n\n // Add scoped event listeners to this element\n this.element.addEventListener(\"keydown\", this.handleKeyPress);\n window.addEventListener(\"scroll\", this.handleScroll);\n\n // Track keyboard usage for proper focus management\n this.isKeyboardUser = false;\n this.keydownHandler = (e) => {\n if (e.key === \"Tab\" || e.key === \" \" || e.key === \"Enter\") {\n this.isKeyboardUser = true;\n }\n };\n this.mousedownHandler = () => {\n this.isKeyboardUser = false;\n };\n this.touchstartHandler = () => {\n this.isKeyboardUser = false;\n };\n\n this.element.addEventListener(\"keydown\", this.keydownHandler);\n this.element.addEventListener(\"mousedown\", this.mousedownHandler);\n this.element.addEventListener(\"touchstart\", this.touchstartHandler);\n\n // Set initial tab indices for accessibility\n this.updateTabIndices();\n }\n\n handleToggleClick(event: Event) {\n const button = event.currentTarget as HTMLButtonElement;\n const isActive = button.classList.contains(this.config.activeClass);\n\n // Close all other dropdowns\n this.closeAllDropdowns();\n\n // Toggle current dropdown\n if (!isActive) {\n this.openDropdown(button);\n // Keep focus on the button that opened the dropdown\n // Users can navigate into the dropdown using arrow keys\n } else {\n // If closing, ensure focus remains on the button\n button.focus();\n }\n }\n\n handleKeyPress(event: KeyboardEvent) {\n if (event.key === \"Escape\") {\n // Find the active dropdown button (the one with aria-expanded=\"true\")\n const activeButton = Array.from(this.toggleButtons).find(\n (button) => button.getAttribute(\"aria-expanded\") === \"true\",\n );\n\n this.closeAllDropdowns();\n this.closeMobileMenu();\n this.closeAllAccordions();\n\n // Return focus to button that opened the menu\n if (activeButton) {\n activeButton.focus();\n }\n }\n\n // Handle Enter and Space keys for dropdown buttons and accordion buttons\n if (event.key === \"Enter\" || event.key === \" \") {\n const target = event.target as HTMLElement;\n if (\n (target.tagName === \"BUTTON\" && target.hasAttribute(\"aria-controls\")) ||\n target.classList.contains(CLASS_ACCORDION_BUTTON)\n ) {\n event.preventDefault();\n target.click();\n }\n }\n\n // Handle Home and End keys for navigation within dropdowns\n if (event.key === \"Home\" || event.key === \"End\") {\n const dropdown = (event.target as HTMLElement)?.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n const focusableElements = Array.from(\n dropdown.querySelectorAll(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n\n if (event.key === \"Home\" && focusableElements.length > 0) {\n focusableElements[0].focus();\n } else if (event.key === \"End\" && focusableElements.length > 0) {\n focusableElements[focusableElements.length - 1].focus();\n }\n }\n }\n\n // Arrow key navigation for dropdowns and from buttons to dropdowns\n if (event.key === \"ArrowDown\") {\n const target = event.target as HTMLElement;\n\n // If focus is on a dropdown button, move to first item in dropdown\n if (target.tagName === \"BUTTON\" && target.hasAttribute(\"aria-controls\")) {\n const isExpanded = target.getAttribute(\"aria-expanded\") === \"true\";\n if (isExpanded) {\n event.preventDefault();\n const dropdown = target.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n const firstFocusable = dropdown?.querySelector(\n \"a, button\",\n ) as HTMLElement;\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n }\n // If focus is within a dropdown, navigate within it\n else {\n const dropdown = target.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n this.handleArrowNavigation(event, dropdown);\n }\n }\n }\n\n if (event.key === \"ArrowUp\") {\n const dropdown = (event.target as HTMLElement)?.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n this.handleArrowNavigation(event, dropdown);\n }\n }\n }\n\n handleAccordionClick(event: Event) {\n const button = event.currentTarget as HTMLButtonElement;\n const isExpanded = button.getAttribute(\"aria-expanded\") === \"true\";\n\n // Close all other accordions first\n this.closeAllAccordions();\n\n // Toggle current accordion\n if (!isExpanded) {\n this.openAccordion(button);\n }\n }\n\n handleScroll() {\n const topElement = this.element.querySelector(\n '[data-hide-when-sticky=\"true\"]',\n ) as HTMLElement;\n\n if (topElement) {\n if (window.scrollY > 15) {\n topElement.classList.add(\"is-hidden\");\n } else {\n topElement.classList.remove(\"is-hidden\");\n }\n }\n }\n\n openDropdown(button: HTMLButtonElement) {\n const dropdown = button.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n\n if (dropdown) {\n button.classList.add(this.config.activeClass);\n button.setAttribute(\"aria-expanded\", \"true\");\n dropdown.style.display = \"block\";\n dropdown.classList.add(\"is-visible\");\n this.showDesktopOverlay();\n this.updateTabIndices();\n }\n }\n\n closeDropdown(button: HTMLButtonElement) {\n const dropdown = button.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n\n if (dropdown) {\n button.classList.remove(this.config.activeClass);\n button.setAttribute(\"aria-expanded\", \"false\");\n dropdown.classList.remove(\"is-visible\");\n dropdown.style.display = \"none\";\n this.updateTabIndices();\n }\n }\n\n closeAllDropdowns() {\n this.toggleButtons.forEach((button) => {\n this.closeDropdown(button);\n });\n this.hideDesktopOverlay();\n }\n\n handleMobileMenuToggle(event: Event) {\n event.preventDefault();\n if (this.mobileMenu?.classList.contains(this.config.activeClass)) {\n this.closeMobileMenu();\n } else {\n this.openMobileMenu();\n }\n }\n\n openMobileMenu() {\n if (this.mobileMenu) {\n // Store the element that opened the menu for focus restoration\n this.lastFocusedElement = document.activeElement as HTMLElement;\n\n this.mobileMenu.classList.add(this.config.activeClass);\n document.body.style.overflow = \"hidden\"; // Prevent background scrolling\n\n // Set up focus trap immediately to prevent focus escape\n this.trapFocus(this.mobileMenu);\n\n // Only manage focus if user is using keyboard navigation (not touch)\n if (this.isKeyboardUser) {\n // Focus first focusable element in mobile menu for keyboard users\n const firstFocusable = this.mobileMenu.querySelector(\n \"button, a\",\n ) as HTMLElement;\n if (firstFocusable) {\n // Reduced delay for better responsiveness\n setTimeout(() => firstFocusable.focus(), 50);\n }\n }\n }\n }\n\n closeMobileMenu() {\n if (this.mobileMenu) {\n this.mobileMenu.classList.remove(this.config.activeClass);\n document.body.style.overflow = \"\"; // Restore scrolling\n this.closeAllAccordions(); // Close any open accordions\n\n // Remove focus trap (safe to call even if not active)\n this.removeFocusTrap();\n\n // Return focus to element that opened the menu only for keyboard users\n if (this.isKeyboardUser && this.lastFocusedElement) {\n this.lastFocusedElement.focus();\n }\n this.lastFocusedElement = null;\n }\n }\n\n showDesktopOverlay() {\n if (this.desktopOverlay) {\n this.desktopOverlay.classList.add(this.config.activeClass);\n }\n }\n\n hideDesktopOverlay() {\n if (this.desktopOverlay) {\n this.desktopOverlay.classList.remove(this.config.activeClass);\n }\n }\n\n openAccordion(button: HTMLButtonElement) {\n const accordionId = button.getAttribute(\"aria-controls\");\n const accordionBody = accordionId\n ? (this.element.querySelector(`#${accordionId}`) as HTMLElement)\n : null;\n const icon = button.querySelector(\n `.${CLASS_ACCORDION_ICON}`,\n ) as HTMLElement;\n\n if (accordionBody) {\n button.setAttribute(\"aria-expanded\", \"true\");\n button.classList.add(this.config.activeClass);\n accordionBody.classList.add(\"is-visible\");\n accordionBody.style.display = \"block\";\n\n if (icon) {\n icon.classList.add(this.config.activeClass);\n }\n }\n }\n\n closeAccordion(button: HTMLButtonElement) {\n const accordionId = button.getAttribute(\"aria-controls\");\n const accordionBody = accordionId\n ? (this.element.querySelector(`#${accordionId}`) as HTMLElement)\n : null;\n const icon = button.querySelector(\n `.${CLASS_ACCORDION_ICON}`,\n ) as HTMLElement;\n\n if (accordionBody) {\n button.setAttribute(\"aria-expanded\", \"false\");\n button.classList.remove(this.config.activeClass);\n accordionBody.classList.remove(\"is-visible\");\n accordionBody.style.display = \"none\";\n\n if (icon) {\n icon.classList.remove(this.config.activeClass);\n }\n }\n }\n\n closeAllAccordions() {\n this.accordionButtons.forEach((button) => {\n this.closeAccordion(button);\n });\n }\n\n handleArrowNavigation(event: KeyboardEvent, dropdown: HTMLElement) {\n const focusableElements = Array.from(\n dropdown.querySelectorAll('a, button, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n\n if (focusableElements.length === 0) return;\n\n const currentIndex = focusableElements.findIndex(\n (item) => item === event.target,\n );\n\n let nextIndex;\n if (event.key === \"ArrowDown\") {\n nextIndex =\n currentIndex < focusableElements.length - 1 ? currentIndex + 1 : 0;\n } else if (event.key === \"ArrowUp\") {\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n } else {\n return; // Don't handle other keys\n }\n\n // Ensure nextIndex is valid\n if (\n nextIndex >= 0 &&\n nextIndex < focusableElements.length &&\n focusableElements[nextIndex]\n ) {\n focusableElements[nextIndex].focus();\n }\n }\n\n trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as NodeListOf<HTMLElement>;\n const firstFocusable = focusableElements[0];\n const lastFocusable = focusableElements[focusableElements.length - 1];\n\n this.focusTrapHandler = (e: KeyboardEvent) => {\n if (e.key === \"Tab\") {\n if (e.shiftKey) {\n if (document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n }\n } else {\n if (document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n };\n\n element.addEventListener(\"keydown\", this.focusTrapHandler);\n }\n\n removeFocusTrap() {\n if (this.mobileMenu && this.focusTrapHandler) {\n this.mobileMenu.removeEventListener(\"keydown\", this.focusTrapHandler);\n }\n }\n\n updateTabIndices() {\n // Set tabindex=-1 for inactive dropdown items\n this.dropdowns.forEach((dropdown) => {\n const isVisible = dropdown.classList.contains(\"is-visible\");\n const focusableElements = dropdown.querySelectorAll(\n \"a, button, [tabindex]:not([tabindex='-1'])\",\n ) as NodeListOf<HTMLElement>;\n\n focusableElements.forEach((element) => {\n // Only update tabIndex if element is not already properly set\n const shouldBeFocusable = isVisible;\n if (shouldBeFocusable && element.tabIndex === -1) {\n element.tabIndex = 0;\n } else if (!shouldBeFocusable && element.tabIndex !== -1) {\n element.tabIndex = -1;\n }\n });\n });\n\n // Also update mobile menu elements when mobile menu is active\n if (this.mobileMenu) {\n const isMobileMenuActive = this.mobileMenu.classList.contains(\n this.config.activeClass,\n );\n const mobileMenuFocusableElements = this.mobileMenu.querySelectorAll(\n \"a, button, [tabindex]:not([tabindex='-1'])\",\n ) as NodeListOf<HTMLElement>;\n\n mobileMenuFocusableElements.forEach((element) => {\n element.tabIndex = isMobileMenuActive ? 0 : -1;\n });\n }\n }\n\n destroy() {\n // Remove event listeners\n this.toggleButtons.forEach((button) => {\n button.removeEventListener(\"click\", this.handleToggleClick);\n });\n\n // Remove mobile menu event listeners\n if (this.mobileMenuButton) {\n this.mobileMenuButton.removeEventListener(\n \"click\",\n this.handleMobileMenuToggle.bind(this),\n );\n }\n if (this.mobileOverlay) {\n this.mobileOverlay.removeEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n if (this.mobileCloseButton) {\n this.mobileCloseButton.removeEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n\n // Remove desktop overlay event listener\n if (this.desktopOverlay) {\n this.desktopOverlay.removeEventListener(\n \"click\",\n this.closeAllDropdowns.bind(this),\n );\n }\n\n // Remove accordion event listeners\n this.accordionButtons.forEach((button) => {\n button.removeEventListener(\"click\", this.handleAccordionClick);\n });\n\n this.element.removeEventListener(\"keydown\", this.handleKeyPress);\n window.removeEventListener(\"scroll\", this.handleScroll);\n\n // Remove keyboard tracking event listeners\n this.element.removeEventListener(\"keydown\", this.keydownHandler);\n this.element.removeEventListener(\"mousedown\", this.mousedownHandler);\n this.element.removeEventListener(\"touchstart\", this.touchstartHandler);\n\n // Restore body overflow if menu was open\n document.body.style.overflow = \"\";\n\n // Clean up instance reference\n (this.element as any).ODS_Megamenu = null;\n\n if (this.config.removeOnDestroy) {\n this.element.remove();\n }\n }\n}\n","(function(factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === \"object\") {\r\n // Node/CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n window.wNumb = factory();\r\n }\r\n})(function() {\r\n \"use strict\";\r\n\r\n var FormatOptions = [\r\n \"decimals\",\r\n \"thousand\",\r\n \"mark\",\r\n \"prefix\",\r\n \"suffix\",\r\n \"encoder\",\r\n \"decoder\",\r\n \"negativeBefore\",\r\n \"negative\",\r\n \"edit\",\r\n \"undo\"\r\n ];\r\n\r\n // General\r\n\r\n // Reverse a string\r\n function strReverse(a) {\r\n return a\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\");\r\n }\r\n\r\n // Check if a string starts with a specified prefix.\r\n function strStartsWith(input, match) {\r\n return input.substring(0, match.length) === match;\r\n }\r\n\r\n // Check is a string ends in a specified suffix.\r\n function strEndsWith(input, match) {\r\n return input.slice(-1 * match.length) === match;\r\n }\r\n\r\n // Throw an error if formatting options are incompatible.\r\n function throwEqualError(F, a, b) {\r\n if ((F[a] || F[b]) && F[a] === F[b]) {\r\n throw new Error(a);\r\n }\r\n }\r\n\r\n // Check if a number is finite and not NaN\r\n function isValidNumber(input) {\r\n return typeof input === \"number\" && isFinite(input);\r\n }\r\n\r\n // Provide rounding-accurate toFixed method.\r\n // Borrowed: http://stackoverflow.com/a/21323330/775265\r\n function toFixed(value, exp) {\r\n value = value.toString().split(\"e\");\r\n value = Math.round(+(value[0] + \"e\" + (value[1] ? +value[1] + exp : exp)));\r\n value = value.toString().split(\"e\");\r\n return (+(value[0] + \"e\" + (value[1] ? +value[1] - exp : -exp))).toFixed(exp);\r\n }\r\n\r\n // Formatting\r\n\r\n // Accept a number as input, output formatted string.\r\n function formatTo(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n inputPieces,\r\n inputBase,\r\n inputDecimals = \"\",\r\n output = \"\";\r\n\r\n // Apply user encoder to the input.\r\n // Expected outcome: number.\r\n if (encoder) {\r\n input = encoder(input);\r\n }\r\n\r\n // Stop if no valid number was provided, the number is infinite or NaN.\r\n if (!isValidNumber(input)) {\r\n return false;\r\n }\r\n\r\n // Rounding away decimals might cause a value of -0\r\n // when using very small ranges. Remove those cases.\r\n if (decimals !== false && parseFloat(input.toFixed(decimals)) === 0) {\r\n input = 0;\r\n }\r\n\r\n // Formatting is done on absolute numbers,\r\n // decorated by an optional negative symbol.\r\n if (input < 0) {\r\n inputIsNegative = true;\r\n input = Math.abs(input);\r\n }\r\n\r\n // Reduce the number of decimals to the specified option.\r\n if (decimals !== false) {\r\n input = toFixed(input, decimals);\r\n }\r\n\r\n // Transform the number into a string, so it can be split.\r\n input = input.toString();\r\n\r\n // Break the number on the decimal separator.\r\n if (input.indexOf(\".\") !== -1) {\r\n inputPieces = input.split(\".\");\r\n\r\n inputBase = inputPieces[0];\r\n\r\n if (mark) {\r\n inputDecimals = mark + inputPieces[1];\r\n }\r\n } else {\r\n // If it isn't split, the entire number will do.\r\n inputBase = input;\r\n }\r\n\r\n // Group numbers in sets of three.\r\n if (thousand) {\r\n inputBase = strReverse(inputBase).match(/.{1,3}/g);\r\n inputBase = strReverse(inputBase.join(strReverse(thousand)));\r\n }\r\n\r\n // If the number is negative, prefix with negation symbol.\r\n if (inputIsNegative && negativeBefore) {\r\n output += negativeBefore;\r\n }\r\n\r\n // Prefix the number\r\n if (prefix) {\r\n output += prefix;\r\n }\r\n\r\n // Normal negative option comes after the prefix. Defaults to '-'.\r\n if (inputIsNegative && negative) {\r\n output += negative;\r\n }\r\n\r\n // Append the actual number.\r\n output += inputBase;\r\n output += inputDecimals;\r\n\r\n // Apply the suffix.\r\n if (suffix) {\r\n output += suffix;\r\n }\r\n\r\n // Run the output through a user-specified post-formatter.\r\n if (edit) {\r\n output = edit(output, originalInput);\r\n }\r\n\r\n // All done.\r\n return output;\r\n }\r\n\r\n // Accept a sting as input, output decoded number.\r\n function formatFrom(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n output = \"\";\r\n\r\n // User defined pre-decoder. Result must be a non empty string.\r\n if (undo) {\r\n input = undo(input);\r\n }\r\n\r\n // Test the input. Can't be empty.\r\n if (!input || typeof input !== \"string\") {\r\n return false;\r\n }\r\n\r\n // If the string starts with the negativeBefore value: remove it.\r\n // Remember is was there, the number is negative.\r\n if (negativeBefore && strStartsWith(input, negativeBefore)) {\r\n input = input.replace(negativeBefore, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Repeat the same procedure for the prefix.\r\n if (prefix && strStartsWith(input, prefix)) {\r\n input = input.replace(prefix, \"\");\r\n }\r\n\r\n // And again for negative.\r\n if (negative && strStartsWith(input, negative)) {\r\n input = input.replace(negative, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Remove the suffix.\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\r\n if (suffix && strEndsWith(input, suffix)) {\r\n input = input.slice(0, -1 * suffix.length);\r\n }\r\n\r\n // Remove the thousand grouping.\r\n if (thousand) {\r\n input = input.split(thousand).join(\"\");\r\n }\r\n\r\n // Set the decimal separator back to period.\r\n if (mark) {\r\n input = input.replace(mark, \".\");\r\n }\r\n\r\n // Prepend the negative symbol.\r\n if (inputIsNegative) {\r\n output += \"-\";\r\n }\r\n\r\n // Add the number\r\n output += input;\r\n\r\n // Trim all non-numeric characters (allow '.' and '-');\r\n output = output.replace(/[^0-9\\.\\-.]/g, \"\");\r\n\r\n // The value contains no parse-able number.\r\n if (output === \"\") {\r\n return false;\r\n }\r\n\r\n // Covert to number.\r\n output = Number(output);\r\n\r\n // Run the user-specified post-decoder.\r\n if (decoder) {\r\n output = decoder(output);\r\n }\r\n\r\n // Check is the output is valid, otherwise: return false.\r\n if (!isValidNumber(output)) {\r\n return false;\r\n }\r\n\r\n return output;\r\n }\r\n\r\n // Framework\r\n\r\n // Validate formatting options\r\n function validate(inputOptions) {\r\n var i,\r\n optionName,\r\n optionValue,\r\n filteredOptions = {};\r\n\r\n if (inputOptions[\"suffix\"] === undefined) {\r\n inputOptions[\"suffix\"] = inputOptions[\"postfix\"];\r\n }\r\n\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n optionName = FormatOptions[i];\r\n optionValue = inputOptions[optionName];\r\n\r\n if (optionValue === undefined) {\r\n // Only default if negativeBefore isn't set.\r\n if (optionName === \"negative\" && !filteredOptions.negativeBefore) {\r\n filteredOptions[optionName] = \"-\";\r\n // Don't set a default for mark when 'thousand' is set.\r\n } else if (optionName === \"mark\" && filteredOptions.thousand !== \".\") {\r\n filteredOptions[optionName] = \".\";\r\n } else {\r\n filteredOptions[optionName] = false;\r\n }\r\n\r\n // Floating points in JS are stable up to 7 decimals.\r\n } else if (optionName === \"decimals\") {\r\n if (optionValue >= 0 && optionValue < 8) {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // These options, when provided, must be functions.\r\n } else if (\r\n optionName === \"encoder\" ||\r\n optionName === \"decoder\" ||\r\n optionName === \"edit\" ||\r\n optionName === \"undo\"\r\n ) {\r\n if (typeof optionValue === \"function\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // Other options are strings.\r\n } else {\r\n if (typeof optionValue === \"string\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n }\r\n }\r\n\r\n // Some values can't be extracted from a\r\n // string if certain combinations are present.\r\n throwEqualError(filteredOptions, \"mark\", \"thousand\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negative\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negativeBefore\");\r\n\r\n return filteredOptions;\r\n }\r\n\r\n // Pass all options as function arguments\r\n function passAll(options, method, input) {\r\n var i,\r\n args = [];\r\n\r\n // Add all options in order of FormatOptions\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n args.push(options[FormatOptions[i]]);\r\n }\r\n\r\n // Append the input, then call the method, presenting all\r\n // options as arguments.\r\n args.push(input);\r\n return method.apply(\"\", args);\r\n }\r\n\r\n function wNumb(options) {\r\n if (!(this instanceof wNumb)) {\r\n return new wNumb(options);\r\n }\r\n\r\n if (typeof options !== \"object\") {\r\n return;\r\n }\r\n\r\n options = validate(options);\r\n\r\n // Call 'formatTo' with proper arguments.\r\n this.to = function(input) {\r\n return passAll(options, formatTo, input);\r\n };\r\n\r\n // Call 'formatFrom' with proper arguments.\r\n this.from = function(input) {\r\n return passAll(options, formatFrom, input);\r\n };\r\n }\r\n\r\n return wNumb;\r\n});\r\n","import Megamenu from \"./Megamenu.static\";\nimport moduleFactory, {\n initModulesWithin,\n destroyModulesWithin,\n} from \"../../scripts/lib/moduleFactory\";\nimport \"./styles/style.scss\";\n\n// Module configuration for Megamenu\nexport const customMegamenuModuleSelectorPairs = [\n {\n Module: Megamenu,\n name: \"Megamenu\",\n selector: \"[data-megamenu]\",\n },\n];\n\n// Global interface for standalone Megamenu\ndeclare global {\n interface Window {\n ODSMegamenu: {\n Megamenu: typeof Megamenu;\n instances: Megamenu[];\n init: () => void;\n destroy: () => void;\n initModulesWithin: typeof initModulesWithin;\n destroyModulesWithin: typeof destroyModulesWithin;\n };\n }\n}\n\n// Initialize the global ODSMegamenu object\nwindow.ODSMegamenu = window.ODSMegamenu || {\n Megamenu,\n instances: [],\n init: () => {\n // Debug logging\n const elements = document.querySelectorAll(\"[data-megamenu]\");\n console.log(\"Found elements with data-megamenu:\", elements.length);\n\n // Initialize all Megamenu instances on the page\n window.ODSMegamenu.instances = moduleFactory(Megamenu, \"[data-megamenu]\");\n console.log(\n \"ODSMegamenu instances created:\",\n window.ODSMegamenu.instances.length,\n );\n console.log(\"ODSMegamenu loaded and initialized\");\n },\n destroy: () => {\n // Destroy all instances\n window.ODSMegamenu.instances.forEach((instance) => {\n if (instance && typeof instance.destroy === \"function\") {\n instance.destroy();\n }\n });\n window.ODSMegamenu.instances = [];\n },\n initModulesWithin,\n destroyModulesWithin,\n};\n\n// Auto-initialize when DOM is ready\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => {\n window.ODSMegamenu.init();\n });\n} else {\n // DOM is already ready\n window.ODSMegamenu.init();\n}\n\n// Export for potential manual usage\nexport { Megamenu };\nexport default Megamenu;\n","import { lowerCamelCase } from \"../../utils/helpers\";\n\nexport default function moduleFactory(Module, selector, options = {}) {\n const elements = Array.from(document.querySelectorAll(selector));\n\n return elements.map((element) => new Module(element, options));\n}\n\nexport function destroyModulesWithin(container, removeOrphanedNodes = false) {\n const destroyedInstances = {};\n\n Object.keys(window.ODS.instances).forEach((moduleName) => {\n window.ODS.instances[moduleName].forEach((instance) => {\n if (typeof destroyedInstances[moduleName] !== \"object\") {\n destroyedInstances[moduleName] = [];\n }\n\n let isInContainer = container.contains(instance.element);\n if (moduleName === \"modal\") {\n isInContainer = instance.instance?._openers.every((opener) =>\n container.contains(opener),\n );\n } else if (moduleName === \"tooltip\") {\n isInContainer = container.contains(instance.trigger);\n }\n\n if (isInContainer) {\n instance.destroy();\n destroyedInstances[moduleName].push(instance);\n }\n\n if (\n isInContainer &&\n removeOrphanedNodes &&\n [\"modal\", \"tooltip\"].includes(moduleName)\n ) {\n instance.element.remove();\n }\n });\n\n window.ODS.instances[moduleName] = window.ODS.instances[moduleName].filter(\n (instance) => !destroyedInstances[moduleName].includes(instance),\n );\n });\n\n return destroyedInstances;\n}\n\nexport function initModulesWithin(container) {\n const instances = {};\n window.ODS.moduleSelectorPairs.forEach((module) => {\n const name = lowerCamelCase(module.name);\n const elements = Array.from(container.querySelectorAll(module.selector));\n if (window && window.ODS && window.ODS.instances[name]) {\n window.ODS.instances[name].forEach((instance) => {\n elements.forEach((element, index) => {\n if (element.isSameNode(instance.element)) {\n elements.splice(index, 1);\n }\n });\n });\n }\n if (elements.length) {\n if (!Array.isArray(window.ODS.instances[name])) {\n window.ODS.instances[name] = [];\n }\n instances[name] = elements.map((element) => new module.Module(element));\n window.ODS.instances[name] = [\n ...window.ODS.instances[name],\n ...instances[name],\n ];\n }\n });\n return instances;\n}\n","import wnumb from 'wnumb';\n\nexport function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n}\n\nexport function dateToYYYYMMDD(date) {\n if (!date || !(date instanceof Date)) {\n return '';\n }\n\n return `${date.getFullYear()}-${(date.getMonth() + 1)\n .toString()\n .padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Get element position relative to document\nexport function windowOffset(el) {\n const position = { x: 0, y: 0 };\n\n \n if (el.offsetParent) {\n do {\n position.x += el.offsetLeft;\n position.y += el.offsetTop;\n } while ((el = el.offsetParent));\n }\n \n\n return position;\n}\n\n// Get element siblings\nexport function getSiblings(el) {\n if (!(el instanceof Element)) {\n return false;\n }\n\n const parent = el.parentNode;\n if (!parent) {\n return false;\n }\n\n const parentChildren = [];\n const siblings = [];\n\n parentChildren.push.apply(parentChildren, parent.children); \n\n for (let i = 0, l = parentChildren.length; i < l; i += 1) {\n if (parentChildren[i] !== el) {\n siblings.push(parentChildren[i]);\n }\n }\n\n return siblings;\n}\n\n/**\n * Converts object to string\n *\n * Should be able to handle all types\n * objectToString({\n * 'boolean': true,\n * 'function': () => { return 'test'; },\n * 'namedfunction': function test() { return 'test'; },\n * 'null': null,\n * 'number1': 1,\n * 'number2': 2.345,\n * 'object1': { test: 'test' },\n * 'string': 'String',\n * 'undefined' : undefined,\n * })\n *\n * @param {object} object object to convert\n * @returns object converted to string\n */\nexport const objectToString = (object, spaceCount = 2) => {\n let str = '';\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n let value = object?.[key];\n if (typeof value === 'string') {\n value = `\"${value}\"`;\n } else if (value === null) {\n value = 'null';\n } else if (typeof value === 'object') {\n value = objectToString(value, spaceCount + 2);\n } else if (typeof value === 'function') {\n value = value.toString();\n } else if (value === undefined) {\n value = 'undefined';\n }\n str += `${' '.repeat(spaceCount)}${key}: ${value},\\n`;\n }\n }\n return `{\\n${str}${' '.repeat(spaceCount - 2)}}`;\n};\nexport function capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function lowerCamelCase(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\nconst defaultPriceFormat = {\n decimals: 2,\n mark: ',',\n thousand: ' ',\n suffix: `\\xa0€`,\n};\n\nexport function formatPrice(price, format) {\n return wnumb({\n ...defaultPriceFormat,\n ...format,\n ...(price % 1 === 0 ? { decimals: 0 } : {}), // integers without decimals\n }).to(price);\n}\n"],"names":["CLASS_ROOT","CLASS_NAV_BUTTON","concat","CLASS_NAV_DROPDOWN","CLASS_OVERLAY","CLASS_HIDE_LG_UP","CLASS_MOBILE","CLASS_MOBILE_OVERLAY","CLASS_ACCORDION_BUTTON","CLASS_ACCORDION_ICON","defaultConfig","dataToggle","activeClass","removeOnDestroy","Megamenu","element","config","arguments","length","undefined","_classCallCheck","ODS_Megamenu","this","Object","assign","handleToggleClick","bind","handleKeyPress","handleScroll","handleAccordionClick","handleArrowNavigation","trapFocus","init","key","value","_this","toggleButtons","querySelectorAll","dropdowns","mobileMenuButton","querySelector","mobileMenu","mobileOverlay","mobileCloseButton","desktopOverlay","accordionButtons","forEach","button","addEventListener","handleMobileMenuToggle","closeMobileMenu","closeAllDropdowns","window","isKeyboardUser","keydownHandler","e","mousedownHandler","touchstartHandler","updateTabIndices","event","currentTarget","isActive","classList","contains","focus","openDropdown","activeButton","Array","from","find","getAttribute","closeAllAccordions","target","tagName","hasAttribute","preventDefault","click","dropdown","_a","closest","focusableElements","_b","parentElement","firstFocusable","_c","isExpanded","openAccordion","topElement","scrollY","add","remove","setAttribute","style","display","showDesktopOverlay","_this2","closeDropdown","hideDesktopOverlay","openMobileMenu","lastFocusedElement","document","activeElement","body","overflow","setTimeout","removeFocusTrap","accordionId","accordionBody","icon","_this3","closeAccordion","nextIndex","currentIndex","findIndex","item","lastFocusable","focusTrapHandler","shiftKey","removeEventListener","isVisible","shouldBeFocusable","tabIndex","isMobileMenuActive","_this4","el","exports","FormatOptions","strReverse","a","split","reverse","join","strStartsWith","input","match","substring","strEndsWith","slice","throwEqualError","F","b","Error","isValidNumber","isFinite","toFixed","exp","toString","Math","round","formatTo","decimals","thousand","mark","prefix","suffix","encoder","decoder","negativeBefore","negative","edit","undo","inputIsNegative","inputPieces","inputBase","originalInput","inputDecimals","output","parseFloat","abs","indexOf","formatFrom","replace","Number","validate","inputOptions","i","optionName","optionValue","filteredOptions","passAll","options","method","args","push","apply","wNumb","to","factory","customMegamenuModuleSelectorPairs","Module","name","selector","ODSMegamenu","instances","elements","console","log","map","moduleFactory","destroy","instance","initModulesWithin","container","ODS","moduleSelectorPairs","module","string","charAt","toLowerCase","index","isSameNode","splice","isArray","_toConsumableArray","destroyModulesWithin","removeOrphanedNodes","destroyedInstances","keys","moduleName","_typeof","isInContainer","_openers","every","opener","trigger","includes","filter","readyState"],"mappings":"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","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"megamenu.js","sources":["../../../src/components/Megamenu/constants.ts","../../../src/components/Megamenu/Megamenu.static.ts","../../node_modules/wnumb/wNumb.js","../../src/components/Megamenu/static.ts","../../../src/scripts/lib/moduleFactory.js","../../src/utils/helpers.js"],"sourcesContent":["export const CLASS_ROOT = \"megamenu\";\n\nexport const CLASS_TOP = `${CLASS_ROOT}__top`;\nexport const CLASS_MAIN = `${CLASS_ROOT}__main`;\nexport const CLASS_SUBMAIN = `${CLASS_ROOT}__submain`;\nexport const CLASS_CONTAINER = `${CLASS_ROOT}__container`;\nexport const CLASS_GRID = `${CLASS_ROOT}__grid`;\nexport const CLASS_CARD = `${CLASS_ROOT}__card`;\nexport const CLASS_NAV = `${CLASS_ROOT}__nav`;\nexport const CLASS_NAV_VERTICAL = `${CLASS_ROOT}__nav--vertical`;\nexport const CLASS_NAV_SPACE_SMALL = `${CLASS_ROOT}__nav--space-small`;\nexport const CLASS_NAV_ITEM = `${CLASS_ROOT}__nav-item`;\nexport const CLASS_NAV_ITEM_MAIN = `${CLASS_ROOT}__nav-item--main`;\nexport const CLASS_NAV_LINK = `${CLASS_ROOT}__nav-link`;\nexport const CLASS_NAV_CART_ICON = `${CLASS_ROOT}__nav-cart-icon`;\nexport const CLASS_NAV_SPACER = `${CLASS_ROOT}__nav-spacer`;\nexport const CLASS_NAV_ICON = `${CLASS_ROOT}__nav-icon`;\nexport const CLASS_NAV_LOGO = `${CLASS_ROOT}__nav-logo`;\nexport const CLASS_NAV_BUTTON = `${CLASS_ROOT}__nav-button`;\nexport const CLASS_NAV_BUTTON_INDICATOR = `${CLASS_ROOT}__nav-button--indicator`;\nexport const CLASS_NAV_DROPDOWN = `${CLASS_ROOT}__nav-dropdown`;\nexport const CLASS_SUBNAV = `${CLASS_ROOT}__subnav`;\nexport const CLASS_SUBNAV_ITEM = `${CLASS_ROOT}__subnav-item`;\nexport const CLASS_OVERLAY = `${CLASS_ROOT}__overlay`;\nexport const CLASS_SPACER = `${CLASS_ROOT}-spacer`;\nexport const CLASS_SPACER_SMALL = `${CLASS_ROOT}-spacer--small`;\n\nexport const CLASS_TEXT_LARGE = `${CLASS_ROOT}__text--large`;\nexport const CLASS_HIDE_MD_DOWN = `${CLASS_ROOT}--hide-md-down`;\nexport const CLASS_HIDE_LG_UP = `${CLASS_ROOT}--hide-lg-up`;\nexport const CLASS_ALIGN_CENTER = `${CLASS_ROOT}--align-center`;\n\nexport const CLASS_MOBILE = `${CLASS_ROOT}__mobile`;\nexport const CLASS_MOBILE_OVERLAY = `${CLASS_ROOT}__mobile-overlay`;\nexport const CLASS_MOBILE_WRAPPER = `${CLASS_ROOT}__mobile-wrapper`;\nexport const CLASS_MOBILE_HEADER = `${CLASS_ROOT}__mobile-header`;\nexport const CLASS_MOBILE_BODY = `${CLASS_ROOT}__mobile-body`;\n\n// Accordion classes for mobile menu\nexport const CLASS_ACCORDION = `${CLASS_ROOT}__accordion`;\nexport const CLASS_ACCORDION_ITEM = `${CLASS_ROOT}__accordion-item`;\nexport const CLASS_ACCORDION_HEADER = `${CLASS_ROOT}__accordion-header`;\nexport const CLASS_ACCORDION_BUTTON = `${CLASS_ROOT}__accordion-button`;\nexport const CLASS_ACCORDION_TITLE = `${CLASS_ROOT}__accordion-title`;\nexport const CLASS_ACCORDION_ICON = `${CLASS_ROOT}__accordion-icon`;\nexport const CLASS_ACCORDION_BODY = `${CLASS_ROOT}__accordion-body`;\n\nexport const CLASS_INPUT = `${CLASS_ROOT}__input`;\nexport const CLASS_INPUT_SEARCH_ICON_WITH_PLACEHOLDER = `${CLASS_ROOT}__input--search-icon-with-placeholder`;\n\nexport const CLASS_TAG = `${CLASS_ROOT}__tag`;\nexport const CLASS_TAG_ORANGE = `${CLASS_ROOT}__tag--orange`;\nexport const CLASS_TAG_SMALL = `${CLASS_ROOT}__tag--small`;\nexport const CLASS_TAG_TRANSPARENT = `${CLASS_ROOT}__tag--transparent`;\nexport const CLASS_TAG_LARGE = `${CLASS_ROOT}__tag--large`;\n\nexport const CLASS_LIST_INLINE = `${CLASS_ROOT}__list--inline`;\nexport const CLASS_LIST_GAP_SMALL = `${CLASS_ROOT}__list--gap-small`;\n","import {\n CLASS_NAV_BUTTON,\n CLASS_NAV_DROPDOWN,\n CLASS_MOBILE,\n CLASS_MOBILE_OVERLAY,\n CLASS_HIDE_LG_UP,\n CLASS_OVERLAY,\n CLASS_ACCORDION_BUTTON,\n CLASS_ACCORDION_ICON,\n} from \"./constants\";\n\ninterface MegamenuConfig {\n dataToggle?: string;\n activeClass?: string;\n removeOnDestroy?: boolean;\n}\n\nconst defaultConfig: Required<MegamenuConfig> = {\n dataToggle: \"data-toggle\",\n activeClass: \"is-active\",\n removeOnDestroy: false,\n};\n\nexport default class Megamenu {\n element!: HTMLElement;\n config!: Required<MegamenuConfig>;\n toggleButtons!: NodeListOf<HTMLButtonElement>;\n dropdowns!: NodeListOf<HTMLElement>;\n mobileMenuButton!: HTMLButtonElement | null;\n mobileMenu!: HTMLElement | null;\n mobileOverlay!: HTMLElement | null;\n mobileCloseButton!: HTMLButtonElement | null;\n desktopOverlay!: HTMLButtonElement | null;\n accordionButtons!: NodeListOf<HTMLButtonElement>;\n focusTrapHandler!: (event: KeyboardEvent) => void;\n lastFocusedElement!: HTMLElement | null;\n isKeyboardUser!: boolean;\n keydownHandler!: (e: KeyboardEvent) => void;\n mousedownHandler!: () => void;\n touchstartHandler!: () => void;\n\n constructor(element: HTMLElement, config: MegamenuConfig = {}) {\n if ((element as any).ODS_Megamenu) {\n return (element as any).ODS_Megamenu;\n }\n\n this.element = element;\n this.config = { ...defaultConfig, ...config };\n\n this.handleToggleClick = this.handleToggleClick.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleAccordionClick = this.handleAccordionClick.bind(this);\n this.handleArrowNavigation = this.handleArrowNavigation.bind(this);\n this.trapFocus = this.trapFocus.bind(this);\n\n (this.element as any).ODS_Megamenu = this;\n\n this.init();\n return this;\n }\n\n static getInstance(el: HTMLElement): Megamenu | null {\n return el && (el as any).ODS_Megamenu ? (el as any).ODS_Megamenu : null;\n }\n\n init() {\n // Find all nav buttons with aria-controls attribute (dropdown buttons)\n this.toggleButtons = this.element.querySelectorAll(\n `.${CLASS_NAV_BUTTON}[aria-controls]`,\n );\n this.dropdowns = this.element.querySelectorAll(`.${CLASS_NAV_DROPDOWN}`);\n\n // Find mobile menu elements\n this.mobileMenuButton = this.element.querySelector(\n `.${CLASS_HIDE_LG_UP} button`,\n ) as HTMLButtonElement;\n this.mobileMenu = this.element.querySelector(`.${CLASS_MOBILE}`);\n this.mobileOverlay = this.element.querySelector(`.${CLASS_MOBILE_OVERLAY}`);\n this.mobileCloseButton = this.element.querySelector(\n \"[data-megamenu-close-button]\",\n ) as HTMLButtonElement;\n\n // Find desktop overlay element\n this.desktopOverlay = this.element.querySelector(\n `.${CLASS_OVERLAY}`,\n ) as HTMLButtonElement;\n\n // Find accordion buttons\n this.accordionButtons = this.element.querySelectorAll(\n `.${CLASS_ACCORDION_BUTTON}`,\n );\n\n // Add click event listeners to toggle buttons\n this.toggleButtons.forEach((button) => {\n button.addEventListener(\"click\", this.handleToggleClick);\n });\n\n // Add mobile menu event listeners\n if (this.mobileMenuButton) {\n this.mobileMenuButton.addEventListener(\n \"click\",\n this.handleMobileMenuToggle.bind(this),\n );\n }\n if (this.mobileOverlay) {\n this.mobileOverlay.addEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n if (this.mobileCloseButton) {\n this.mobileCloseButton.addEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n\n // Add desktop overlay event listener\n if (this.desktopOverlay) {\n this.desktopOverlay.addEventListener(\n \"click\",\n this.closeAllDropdowns.bind(this),\n );\n }\n\n // Add accordion event listeners\n this.accordionButtons.forEach((button) => {\n button.addEventListener(\"click\", this.handleAccordionClick);\n });\n\n // Add scoped event listeners to this element\n this.element.addEventListener(\"keydown\", this.handleKeyPress);\n window.addEventListener(\"scroll\", this.handleScroll);\n\n // Track keyboard usage for proper focus management\n this.isKeyboardUser = false;\n this.keydownHandler = (e) => {\n if (e.key === \"Tab\" || e.key === \" \" || e.key === \"Enter\") {\n this.isKeyboardUser = true;\n }\n };\n this.mousedownHandler = () => {\n this.isKeyboardUser = false;\n };\n this.touchstartHandler = () => {\n this.isKeyboardUser = false;\n };\n\n this.element.addEventListener(\"keydown\", this.keydownHandler);\n this.element.addEventListener(\"mousedown\", this.mousedownHandler);\n this.element.addEventListener(\"touchstart\", this.touchstartHandler);\n\n // Set initial tab indices for accessibility\n this.updateTabIndices();\n }\n\n handleToggleClick(event: Event) {\n const button = event.currentTarget as HTMLButtonElement;\n const isActive = button.classList.contains(this.config.activeClass);\n\n // Close all other dropdowns\n this.closeAllDropdowns();\n\n // Toggle current dropdown\n if (!isActive) {\n this.openDropdown(button);\n // Keep focus on the button that opened the dropdown\n // Users can navigate into the dropdown using arrow keys\n } else {\n // If closing, ensure focus remains on the button\n button.focus();\n }\n }\n\n handleKeyPress(event: KeyboardEvent) {\n if (event.key === \"Escape\") {\n // Find the active dropdown button (the one with aria-expanded=\"true\")\n const activeButton = Array.from(this.toggleButtons).find(\n (button) => button.getAttribute(\"aria-expanded\") === \"true\",\n );\n\n this.closeAllDropdowns();\n this.closeMobileMenu();\n this.closeAllAccordions();\n\n // Return focus to button that opened the menu\n if (activeButton) {\n activeButton.focus();\n }\n }\n\n // Handle Enter and Space keys for dropdown buttons and accordion buttons\n if (event.key === \"Enter\" || event.key === \" \") {\n const target = event.target as HTMLElement;\n if (\n (target.tagName === \"BUTTON\" && target.hasAttribute(\"aria-controls\")) ||\n target.classList.contains(CLASS_ACCORDION_BUTTON)\n ) {\n event.preventDefault();\n target.click();\n }\n }\n\n // Handle Home and End keys for navigation within dropdowns\n if (event.key === \"Home\" || event.key === \"End\") {\n const dropdown = (event.target as HTMLElement)?.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n const focusableElements = Array.from(\n dropdown.querySelectorAll(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n\n if (event.key === \"Home\" && focusableElements.length > 0) {\n focusableElements[0].focus();\n } else if (event.key === \"End\" && focusableElements.length > 0) {\n focusableElements[focusableElements.length - 1].focus();\n }\n }\n }\n\n // Arrow key navigation for dropdowns and from buttons to dropdowns\n if (event.key === \"ArrowDown\") {\n const target = event.target as HTMLElement;\n\n // If focus is on a dropdown button, move to first item in dropdown\n if (target.tagName === \"BUTTON\" && target.hasAttribute(\"aria-controls\")) {\n const isExpanded = target.getAttribute(\"aria-expanded\") === \"true\";\n if (isExpanded) {\n event.preventDefault();\n const dropdown = target.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n const firstFocusable = dropdown?.querySelector(\n \"a, button\",\n ) as HTMLElement;\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n }\n // If focus is within a dropdown, navigate within it\n else {\n const dropdown = target.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n this.handleArrowNavigation(event, dropdown);\n }\n }\n }\n\n if (event.key === \"ArrowUp\") {\n const dropdown = (event.target as HTMLElement)?.closest(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n if (dropdown) {\n event.preventDefault();\n this.handleArrowNavigation(event, dropdown);\n }\n }\n }\n\n handleAccordionClick(event: Event) {\n const button = event.currentTarget as HTMLButtonElement;\n const isExpanded = button.getAttribute(\"aria-expanded\") === \"true\";\n\n // Close all other accordions first\n this.closeAllAccordions();\n\n // Toggle current accordion\n if (!isExpanded) {\n this.openAccordion(button);\n }\n }\n\n handleScroll() {\n const topElement = this.element.querySelector(\n '[data-hide-when-sticky=\"true\"]',\n ) as HTMLElement;\n\n if (topElement) {\n if (window.scrollY > 15) {\n topElement.classList.add(\"is-hidden\");\n this.element.classList.add(\"top-hidden\");\n } else {\n topElement.classList.remove(\"is-hidden\");\n this.element.classList.remove(\"top-hidden\");\n }\n }\n }\n\n openDropdown(button: HTMLButtonElement) {\n const dropdown = button.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n\n if (dropdown) {\n button.classList.add(this.config.activeClass);\n button.setAttribute(\"aria-expanded\", \"true\");\n dropdown.style.display = \"block\";\n dropdown.classList.add(\"is-visible\");\n this.showDesktopOverlay();\n this.updateTabIndices();\n }\n }\n\n closeDropdown(button: HTMLButtonElement) {\n const dropdown = button.parentElement?.querySelector(\n `.${CLASS_NAV_DROPDOWN}`,\n ) as HTMLElement;\n\n if (dropdown) {\n button.classList.remove(this.config.activeClass);\n button.setAttribute(\"aria-expanded\", \"false\");\n dropdown.classList.remove(\"is-visible\");\n dropdown.style.display = \"none\";\n this.updateTabIndices();\n }\n }\n\n closeAllDropdowns() {\n this.toggleButtons.forEach((button) => {\n this.closeDropdown(button);\n });\n this.hideDesktopOverlay();\n }\n\n handleMobileMenuToggle(event: Event) {\n event.preventDefault();\n if (this.mobileMenu?.classList.contains(this.config.activeClass)) {\n this.closeMobileMenu();\n } else {\n this.openMobileMenu();\n }\n }\n\n openMobileMenu() {\n if (this.mobileMenu) {\n // Store the element that opened the menu for focus restoration\n this.lastFocusedElement = document.activeElement as HTMLElement;\n\n this.mobileMenu.classList.add(this.config.activeClass);\n document.body.style.overflow = \"hidden\"; // Prevent background scrolling\n\n // Set up focus trap immediately to prevent focus escape\n this.trapFocus(this.mobileMenu);\n\n // Only manage focus if user is using keyboard navigation (not touch)\n if (this.isKeyboardUser) {\n // Focus first focusable element in mobile menu for keyboard users\n const firstFocusable = this.mobileMenu.querySelector(\n \"button, a\",\n ) as HTMLElement;\n if (firstFocusable) {\n // Reduced delay for better responsiveness\n setTimeout(() => firstFocusable.focus(), 50);\n }\n }\n }\n }\n\n closeMobileMenu() {\n if (this.mobileMenu) {\n this.mobileMenu.classList.remove(this.config.activeClass);\n document.body.style.overflow = \"\"; // Restore scrolling\n this.closeAllAccordions(); // Close any open accordions\n\n // Remove focus trap (safe to call even if not active)\n this.removeFocusTrap();\n\n // Return focus to element that opened the menu only for keyboard users\n if (this.isKeyboardUser && this.lastFocusedElement) {\n this.lastFocusedElement.focus();\n }\n this.lastFocusedElement = null;\n }\n }\n\n showDesktopOverlay() {\n if (this.desktopOverlay) {\n this.desktopOverlay.classList.add(this.config.activeClass);\n }\n }\n\n hideDesktopOverlay() {\n if (this.desktopOverlay) {\n this.desktopOverlay.classList.remove(this.config.activeClass);\n }\n }\n\n openAccordion(button: HTMLButtonElement) {\n const accordionId = button.getAttribute(\"aria-controls\");\n const accordionBody = accordionId\n ? (this.element.querySelector(`#${accordionId}`) as HTMLElement)\n : null;\n const icon = button.querySelector(\n `.${CLASS_ACCORDION_ICON}`,\n ) as HTMLElement;\n\n if (accordionBody) {\n button.setAttribute(\"aria-expanded\", \"true\");\n button.classList.add(this.config.activeClass);\n accordionBody.classList.add(\"is-visible\");\n accordionBody.style.display = \"block\";\n\n if (icon) {\n icon.classList.add(this.config.activeClass);\n }\n }\n }\n\n closeAccordion(button: HTMLButtonElement) {\n const accordionId = button.getAttribute(\"aria-controls\");\n const accordionBody = accordionId\n ? (this.element.querySelector(`#${accordionId}`) as HTMLElement)\n : null;\n const icon = button.querySelector(\n `.${CLASS_ACCORDION_ICON}`,\n ) as HTMLElement;\n\n if (accordionBody) {\n button.setAttribute(\"aria-expanded\", \"false\");\n button.classList.remove(this.config.activeClass);\n accordionBody.classList.remove(\"is-visible\");\n accordionBody.style.display = \"none\";\n\n if (icon) {\n icon.classList.remove(this.config.activeClass);\n }\n }\n }\n\n closeAllAccordions() {\n this.accordionButtons.forEach((button) => {\n this.closeAccordion(button);\n });\n }\n\n handleArrowNavigation(event: KeyboardEvent, dropdown: HTMLElement) {\n const focusableElements = Array.from(\n dropdown.querySelectorAll('a, button, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n\n if (focusableElements.length === 0) return;\n\n const currentIndex = focusableElements.findIndex(\n (item) => item === event.target,\n );\n\n let nextIndex;\n if (event.key === \"ArrowDown\") {\n nextIndex =\n currentIndex < focusableElements.length - 1 ? currentIndex + 1 : 0;\n } else if (event.key === \"ArrowUp\") {\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n } else {\n return; // Don't handle other keys\n }\n\n // Ensure nextIndex is valid\n if (\n nextIndex >= 0 &&\n nextIndex < focusableElements.length &&\n focusableElements[nextIndex]\n ) {\n focusableElements[nextIndex].focus();\n }\n }\n\n trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as NodeListOf<HTMLElement>;\n const firstFocusable = focusableElements[0];\n const lastFocusable = focusableElements[focusableElements.length - 1];\n\n this.focusTrapHandler = (e: KeyboardEvent) => {\n if (e.key === \"Tab\") {\n if (e.shiftKey) {\n if (document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n }\n } else {\n if (document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n };\n\n element.addEventListener(\"keydown\", this.focusTrapHandler);\n }\n\n removeFocusTrap() {\n if (this.mobileMenu && this.focusTrapHandler) {\n this.mobileMenu.removeEventListener(\"keydown\", this.focusTrapHandler);\n }\n }\n\n updateTabIndices() {\n // Set tabindex=-1 for inactive dropdown items\n this.dropdowns.forEach((dropdown) => {\n const isVisible = dropdown.classList.contains(\"is-visible\");\n const focusableElements = dropdown.querySelectorAll(\n \"a, button, [tabindex]:not([tabindex='-1'])\",\n ) as NodeListOf<HTMLElement>;\n\n focusableElements.forEach((element) => {\n // Only update tabIndex if element is not already properly set\n const shouldBeFocusable = isVisible;\n if (shouldBeFocusable && element.tabIndex === -1) {\n element.tabIndex = 0;\n } else if (!shouldBeFocusable && element.tabIndex !== -1) {\n element.tabIndex = -1;\n }\n });\n });\n\n // Also update mobile menu elements when mobile menu is active\n if (this.mobileMenu) {\n const isMobileMenuActive = this.mobileMenu.classList.contains(\n this.config.activeClass,\n );\n const mobileMenuFocusableElements = this.mobileMenu.querySelectorAll(\n \"a, button, [tabindex]:not([tabindex='-1'])\",\n ) as NodeListOf<HTMLElement>;\n\n mobileMenuFocusableElements.forEach((element) => {\n element.tabIndex = isMobileMenuActive ? 0 : -1;\n });\n }\n }\n\n destroy() {\n // Remove event listeners\n this.toggleButtons.forEach((button) => {\n button.removeEventListener(\"click\", this.handleToggleClick);\n });\n\n // Remove mobile menu event listeners\n if (this.mobileMenuButton) {\n this.mobileMenuButton.removeEventListener(\n \"click\",\n this.handleMobileMenuToggle.bind(this),\n );\n }\n if (this.mobileOverlay) {\n this.mobileOverlay.removeEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n if (this.mobileCloseButton) {\n this.mobileCloseButton.removeEventListener(\n \"click\",\n this.closeMobileMenu.bind(this),\n );\n }\n\n // Remove desktop overlay event listener\n if (this.desktopOverlay) {\n this.desktopOverlay.removeEventListener(\n \"click\",\n this.closeAllDropdowns.bind(this),\n );\n }\n\n // Remove accordion event listeners\n this.accordionButtons.forEach((button) => {\n button.removeEventListener(\"click\", this.handleAccordionClick);\n });\n\n this.element.removeEventListener(\"keydown\", this.handleKeyPress);\n window.removeEventListener(\"scroll\", this.handleScroll);\n\n // Remove keyboard tracking event listeners\n this.element.removeEventListener(\"keydown\", this.keydownHandler);\n this.element.removeEventListener(\"mousedown\", this.mousedownHandler);\n this.element.removeEventListener(\"touchstart\", this.touchstartHandler);\n\n // Restore body overflow if menu was open\n document.body.style.overflow = \"\";\n\n // Clean up instance reference\n (this.element as any).ODS_Megamenu = null;\n\n if (this.config.removeOnDestroy) {\n this.element.remove();\n }\n }\n}\n","(function(factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === \"object\") {\r\n // Node/CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n window.wNumb = factory();\r\n }\r\n})(function() {\r\n \"use strict\";\r\n\r\n var FormatOptions = [\r\n \"decimals\",\r\n \"thousand\",\r\n \"mark\",\r\n \"prefix\",\r\n \"suffix\",\r\n \"encoder\",\r\n \"decoder\",\r\n \"negativeBefore\",\r\n \"negative\",\r\n \"edit\",\r\n \"undo\"\r\n ];\r\n\r\n // General\r\n\r\n // Reverse a string\r\n function strReverse(a) {\r\n return a\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\");\r\n }\r\n\r\n // Check if a string starts with a specified prefix.\r\n function strStartsWith(input, match) {\r\n return input.substring(0, match.length) === match;\r\n }\r\n\r\n // Check is a string ends in a specified suffix.\r\n function strEndsWith(input, match) {\r\n return input.slice(-1 * match.length) === match;\r\n }\r\n\r\n // Throw an error if formatting options are incompatible.\r\n function throwEqualError(F, a, b) {\r\n if ((F[a] || F[b]) && F[a] === F[b]) {\r\n throw new Error(a);\r\n }\r\n }\r\n\r\n // Check if a number is finite and not NaN\r\n function isValidNumber(input) {\r\n return typeof input === \"number\" && isFinite(input);\r\n }\r\n\r\n // Provide rounding-accurate toFixed method.\r\n // Borrowed: http://stackoverflow.com/a/21323330/775265\r\n function toFixed(value, exp) {\r\n value = value.toString().split(\"e\");\r\n value = Math.round(+(value[0] + \"e\" + (value[1] ? +value[1] + exp : exp)));\r\n value = value.toString().split(\"e\");\r\n return (+(value[0] + \"e\" + (value[1] ? +value[1] - exp : -exp))).toFixed(exp);\r\n }\r\n\r\n // Formatting\r\n\r\n // Accept a number as input, output formatted string.\r\n function formatTo(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n inputPieces,\r\n inputBase,\r\n inputDecimals = \"\",\r\n output = \"\";\r\n\r\n // Apply user encoder to the input.\r\n // Expected outcome: number.\r\n if (encoder) {\r\n input = encoder(input);\r\n }\r\n\r\n // Stop if no valid number was provided, the number is infinite or NaN.\r\n if (!isValidNumber(input)) {\r\n return false;\r\n }\r\n\r\n // Rounding away decimals might cause a value of -0\r\n // when using very small ranges. Remove those cases.\r\n if (decimals !== false && parseFloat(input.toFixed(decimals)) === 0) {\r\n input = 0;\r\n }\r\n\r\n // Formatting is done on absolute numbers,\r\n // decorated by an optional negative symbol.\r\n if (input < 0) {\r\n inputIsNegative = true;\r\n input = Math.abs(input);\r\n }\r\n\r\n // Reduce the number of decimals to the specified option.\r\n if (decimals !== false) {\r\n input = toFixed(input, decimals);\r\n }\r\n\r\n // Transform the number into a string, so it can be split.\r\n input = input.toString();\r\n\r\n // Break the number on the decimal separator.\r\n if (input.indexOf(\".\") !== -1) {\r\n inputPieces = input.split(\".\");\r\n\r\n inputBase = inputPieces[0];\r\n\r\n if (mark) {\r\n inputDecimals = mark + inputPieces[1];\r\n }\r\n } else {\r\n // If it isn't split, the entire number will do.\r\n inputBase = input;\r\n }\r\n\r\n // Group numbers in sets of three.\r\n if (thousand) {\r\n inputBase = strReverse(inputBase).match(/.{1,3}/g);\r\n inputBase = strReverse(inputBase.join(strReverse(thousand)));\r\n }\r\n\r\n // If the number is negative, prefix with negation symbol.\r\n if (inputIsNegative && negativeBefore) {\r\n output += negativeBefore;\r\n }\r\n\r\n // Prefix the number\r\n if (prefix) {\r\n output += prefix;\r\n }\r\n\r\n // Normal negative option comes after the prefix. Defaults to '-'.\r\n if (inputIsNegative && negative) {\r\n output += negative;\r\n }\r\n\r\n // Append the actual number.\r\n output += inputBase;\r\n output += inputDecimals;\r\n\r\n // Apply the suffix.\r\n if (suffix) {\r\n output += suffix;\r\n }\r\n\r\n // Run the output through a user-specified post-formatter.\r\n if (edit) {\r\n output = edit(output, originalInput);\r\n }\r\n\r\n // All done.\r\n return output;\r\n }\r\n\r\n // Accept a sting as input, output decoded number.\r\n function formatFrom(\r\n decimals,\r\n thousand,\r\n mark,\r\n prefix,\r\n suffix,\r\n encoder,\r\n decoder,\r\n negativeBefore,\r\n negative,\r\n edit,\r\n undo,\r\n input\r\n ) {\r\n var originalInput = input,\r\n inputIsNegative,\r\n output = \"\";\r\n\r\n // User defined pre-decoder. Result must be a non empty string.\r\n if (undo) {\r\n input = undo(input);\r\n }\r\n\r\n // Test the input. Can't be empty.\r\n if (!input || typeof input !== \"string\") {\r\n return false;\r\n }\r\n\r\n // If the string starts with the negativeBefore value: remove it.\r\n // Remember is was there, the number is negative.\r\n if (negativeBefore && strStartsWith(input, negativeBefore)) {\r\n input = input.replace(negativeBefore, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Repeat the same procedure for the prefix.\r\n if (prefix && strStartsWith(input, prefix)) {\r\n input = input.replace(prefix, \"\");\r\n }\r\n\r\n // And again for negative.\r\n if (negative && strStartsWith(input, negative)) {\r\n input = input.replace(negative, \"\");\r\n inputIsNegative = true;\r\n }\r\n\r\n // Remove the suffix.\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\r\n if (suffix && strEndsWith(input, suffix)) {\r\n input = input.slice(0, -1 * suffix.length);\r\n }\r\n\r\n // Remove the thousand grouping.\r\n if (thousand) {\r\n input = input.split(thousand).join(\"\");\r\n }\r\n\r\n // Set the decimal separator back to period.\r\n if (mark) {\r\n input = input.replace(mark, \".\");\r\n }\r\n\r\n // Prepend the negative symbol.\r\n if (inputIsNegative) {\r\n output += \"-\";\r\n }\r\n\r\n // Add the number\r\n output += input;\r\n\r\n // Trim all non-numeric characters (allow '.' and '-');\r\n output = output.replace(/[^0-9\\.\\-.]/g, \"\");\r\n\r\n // The value contains no parse-able number.\r\n if (output === \"\") {\r\n return false;\r\n }\r\n\r\n // Covert to number.\r\n output = Number(output);\r\n\r\n // Run the user-specified post-decoder.\r\n if (decoder) {\r\n output = decoder(output);\r\n }\r\n\r\n // Check is the output is valid, otherwise: return false.\r\n if (!isValidNumber(output)) {\r\n return false;\r\n }\r\n\r\n return output;\r\n }\r\n\r\n // Framework\r\n\r\n // Validate formatting options\r\n function validate(inputOptions) {\r\n var i,\r\n optionName,\r\n optionValue,\r\n filteredOptions = {};\r\n\r\n if (inputOptions[\"suffix\"] === undefined) {\r\n inputOptions[\"suffix\"] = inputOptions[\"postfix\"];\r\n }\r\n\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n optionName = FormatOptions[i];\r\n optionValue = inputOptions[optionName];\r\n\r\n if (optionValue === undefined) {\r\n // Only default if negativeBefore isn't set.\r\n if (optionName === \"negative\" && !filteredOptions.negativeBefore) {\r\n filteredOptions[optionName] = \"-\";\r\n // Don't set a default for mark when 'thousand' is set.\r\n } else if (optionName === \"mark\" && filteredOptions.thousand !== \".\") {\r\n filteredOptions[optionName] = \".\";\r\n } else {\r\n filteredOptions[optionName] = false;\r\n }\r\n\r\n // Floating points in JS are stable up to 7 decimals.\r\n } else if (optionName === \"decimals\") {\r\n if (optionValue >= 0 && optionValue < 8) {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // These options, when provided, must be functions.\r\n } else if (\r\n optionName === \"encoder\" ||\r\n optionName === \"decoder\" ||\r\n optionName === \"edit\" ||\r\n optionName === \"undo\"\r\n ) {\r\n if (typeof optionValue === \"function\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n\r\n // Other options are strings.\r\n } else {\r\n if (typeof optionValue === \"string\") {\r\n filteredOptions[optionName] = optionValue;\r\n } else {\r\n throw new Error(optionName);\r\n }\r\n }\r\n }\r\n\r\n // Some values can't be extracted from a\r\n // string if certain combinations are present.\r\n throwEqualError(filteredOptions, \"mark\", \"thousand\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negative\");\r\n throwEqualError(filteredOptions, \"prefix\", \"negativeBefore\");\r\n\r\n return filteredOptions;\r\n }\r\n\r\n // Pass all options as function arguments\r\n function passAll(options, method, input) {\r\n var i,\r\n args = [];\r\n\r\n // Add all options in order of FormatOptions\r\n for (i = 0; i < FormatOptions.length; i += 1) {\r\n args.push(options[FormatOptions[i]]);\r\n }\r\n\r\n // Append the input, then call the method, presenting all\r\n // options as arguments.\r\n args.push(input);\r\n return method.apply(\"\", args);\r\n }\r\n\r\n function wNumb(options) {\r\n if (!(this instanceof wNumb)) {\r\n return new wNumb(options);\r\n }\r\n\r\n if (typeof options !== \"object\") {\r\n return;\r\n }\r\n\r\n options = validate(options);\r\n\r\n // Call 'formatTo' with proper arguments.\r\n this.to = function(input) {\r\n return passAll(options, formatTo, input);\r\n };\r\n\r\n // Call 'formatFrom' with proper arguments.\r\n this.from = function(input) {\r\n return passAll(options, formatFrom, input);\r\n };\r\n }\r\n\r\n return wNumb;\r\n});\r\n","import Megamenu from \"./Megamenu.static\";\nimport moduleFactory, {\n initModulesWithin,\n destroyModulesWithin,\n} from \"../../scripts/lib/moduleFactory\";\nimport \"./styles/style.scss\";\n\n// Module configuration for Megamenu\nexport const customMegamenuModuleSelectorPairs = [\n {\n Module: Megamenu,\n name: \"Megamenu\",\n selector: \"[data-megamenu]\",\n },\n];\n\n// Global interface for standalone Megamenu\ndeclare global {\n interface Window {\n ODSMegamenu: {\n Megamenu: typeof Megamenu;\n instances: Megamenu[];\n init: () => void;\n destroy: () => void;\n initModulesWithin: (container: any) => {};\n destroyModulesWithin: (\n container: any,\n removeOrphanedNodes?: boolean | undefined,\n ) => {};\n };\n }\n}\n\n// Initialize the global ODSMegamenu object\nwindow.ODSMegamenu = window.ODSMegamenu || {\n Megamenu,\n instances: [],\n init: () => {\n // Initialize all Megamenu instances on the page\n window.ODSMegamenu.instances = moduleFactory(Megamenu, \"[data-megamenu]\");\n },\n destroy: () => {\n // Destroy all instances\n window.ODSMegamenu.instances.forEach((instance) => {\n if (instance && typeof instance.destroy === \"function\") {\n instance.destroy();\n }\n });\n window.ODSMegamenu.instances = [];\n },\n initModulesWithin,\n destroyModulesWithin,\n};\n\n// Auto-initialize when DOM is ready\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => {\n window.ODSMegamenu.init();\n });\n} else {\n // DOM is already ready\n window.ODSMegamenu.init();\n}\n\n// Export for potential manual usage\nexport { Megamenu };\nexport default Megamenu;\n","import { lowerCamelCase } from \"../../utils/helpers\";\n\nexport default function moduleFactory(Module, selector, options = {}) {\n const elements = Array.from(document.querySelectorAll(selector));\n\n return elements.map((element) => new Module(element, options));\n}\n\nexport function destroyModulesWithin(container, removeOrphanedNodes = false) {\n const destroyedInstances = {};\n\n Object.keys(window.ODS.instances).forEach((moduleName) => {\n window.ODS.instances[moduleName].forEach((instance) => {\n if (typeof destroyedInstances[moduleName] !== \"object\") {\n destroyedInstances[moduleName] = [];\n }\n\n let isInContainer = container.contains(instance.element);\n if (moduleName === \"modal\") {\n isInContainer = instance.instance?._openers.every((opener) =>\n container.contains(opener),\n );\n } else if (moduleName === \"tooltip\") {\n isInContainer = container.contains(instance.trigger);\n }\n\n if (isInContainer) {\n instance.destroy();\n destroyedInstances[moduleName].push(instance);\n }\n\n if (\n isInContainer &&\n removeOrphanedNodes &&\n [\"modal\", \"tooltip\"].includes(moduleName)\n ) {\n instance.element.remove();\n }\n });\n\n window.ODS.instances[moduleName] = window.ODS.instances[moduleName].filter(\n (instance) => !destroyedInstances[moduleName].includes(instance),\n );\n });\n\n return destroyedInstances;\n}\n\nexport function initModulesWithin(container) {\n const instances = {};\n window.ODS.moduleSelectorPairs.forEach((module) => {\n const name = lowerCamelCase(module.name);\n const elements = Array.from(container.querySelectorAll(module.selector));\n\n // Filter out elements that already have an instance (e.g., initialized by React)\n const instancePropertyName = `ODS_${module.name}`;\n const uninitializedElements = elements.filter(\n (element) => !element[instancePropertyName],\n );\n\n if (window && window.ODS && window.ODS.instances[name]) {\n // Also clean up instances from elements that are no longer in the document\n window.ODS.instances[name] = window.ODS.instances[name].filter(\n (instance) => {\n const isInDocument = document.contains(instance.element);\n if (!isInDocument) {\n // Clean up the instance if its element is no longer in the document\n instance.destroy?.();\n }\n return isInDocument;\n },\n );\n\n window.ODS.instances[name].forEach((instance) => {\n uninitializedElements.forEach((element, index) => {\n if (element.isSameNode(instance.element)) {\n uninitializedElements.splice(index, 1);\n }\n });\n });\n }\n if (uninitializedElements.length) {\n if (!Array.isArray(window.ODS.instances[name])) {\n window.ODS.instances[name] = [];\n }\n instances[name] = uninitializedElements.map(\n (element) => new module.Module(element),\n );\n window.ODS.instances[name] = [\n ...window.ODS.instances[name],\n ...instances[name],\n ];\n }\n });\n return instances;\n}\n","import wnumb from 'wnumb';\n\nexport function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n}\n\nexport function dateToYYYYMMDD(date) {\n if (!date || !(date instanceof Date)) {\n return '';\n }\n\n return `${date.getFullYear()}-${(date.getMonth() + 1)\n .toString()\n .padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Get element position relative to document\nexport function windowOffset(el) {\n const position = { x: 0, y: 0 };\n\n \n if (el.offsetParent) {\n do {\n position.x += el.offsetLeft;\n position.y += el.offsetTop;\n } while ((el = el.offsetParent));\n }\n \n\n return position;\n}\n\n// Get element siblings\nexport function getSiblings(el) {\n if (!(el instanceof Element)) {\n return false;\n }\n\n const parent = el.parentNode;\n if (!parent) {\n return false;\n }\n\n const parentChildren = [];\n const siblings = [];\n\n parentChildren.push.apply(parentChildren, parent.children); \n\n for (let i = 0, l = parentChildren.length; i < l; i += 1) {\n if (parentChildren[i] !== el) {\n siblings.push(parentChildren[i]);\n }\n }\n\n return siblings;\n}\n\n/**\n * Converts object to string\n *\n * Should be able to handle all types\n * objectToString({\n * 'boolean': true,\n * 'function': () => { return 'test'; },\n * 'namedfunction': function test() { return 'test'; },\n * 'null': null,\n * 'number1': 1,\n * 'number2': 2.345,\n * 'object1': { test: 'test' },\n * 'string': 'String',\n * 'undefined' : undefined,\n * })\n *\n * @param {object} object object to convert\n * @returns object converted to string\n */\nexport const objectToString = (object, spaceCount = 2) => {\n let str = '';\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n let value = object?.[key];\n if (typeof value === 'string') {\n value = `\"${value}\"`;\n } else if (value === null) {\n value = 'null';\n } else if (typeof value === 'object') {\n value = objectToString(value, spaceCount + 2);\n } else if (typeof value === 'function') {\n value = value.toString();\n } else if (value === undefined) {\n value = 'undefined';\n }\n str += `${' '.repeat(spaceCount)}${key}: ${value},\\n`;\n }\n }\n return `{\\n${str}${' '.repeat(spaceCount - 2)}}`;\n};\nexport function capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function lowerCamelCase(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\nconst defaultPriceFormat = {\n decimals: 2,\n mark: ',',\n thousand: ' ',\n suffix: `\\xa0€`,\n};\n\nexport function formatPrice(price, format) {\n return wnumb({\n ...defaultPriceFormat,\n ...format,\n ...(price % 1 === 0 ? { decimals: 0 } : {}), // integers without decimals\n }).to(price);\n}\n"],"names":["CLASS_ROOT","CLASS_NAV_BUTTON","concat","CLASS_NAV_DROPDOWN","CLASS_OVERLAY","CLASS_HIDE_LG_UP","CLASS_MOBILE","CLASS_MOBILE_OVERLAY","CLASS_ACCORDION_BUTTON","CLASS_ACCORDION_ICON","defaultConfig","dataToggle","activeClass","removeOnDestroy","Megamenu","element","config","arguments","length","undefined","_classCallCheck","ODS_Megamenu","this","_objectSpread","handleToggleClick","bind","handleKeyPress","handleScroll","handleAccordionClick","handleArrowNavigation","trapFocus","init","key","value","_this","toggleButtons","querySelectorAll","dropdowns","mobileMenuButton","querySelector","mobileMenu","mobileOverlay","mobileCloseButton","desktopOverlay","accordionButtons","forEach","button","addEventListener","handleMobileMenuToggle","closeMobileMenu","closeAllDropdowns","window","isKeyboardUser","keydownHandler","e","mousedownHandler","touchstartHandler","updateTabIndices","event","currentTarget","isActive","classList","contains","focus","openDropdown","activeButton","Array","from","find","getAttribute","closeAllAccordions","target","tagName","hasAttribute","preventDefault","click","_event$target","dropdown","closest","focusableElements","_target$parentElement","parentElement","firstFocusable","_event$target2","isExpanded","openAccordion","topElement","scrollY","add","remove","_button$parentElement","setAttribute","style","display","showDesktopOverlay","_button$parentElement2","_this2","closeDropdown","hideDesktopOverlay","_this$mobileMenu","openMobileMenu","lastFocusedElement","document","activeElement","body","overflow","setTimeout","removeFocusTrap","accordionId","accordionBody","icon","_this3","closeAccordion","nextIndex","currentIndex","findIndex","item","lastFocusable","focusTrapHandler","shiftKey","removeEventListener","isVisible","shouldBeFocusable","tabIndex","isMobileMenuActive","_this4","el","exports","FormatOptions","strReverse","a","split","reverse","join","strStartsWith","input","match","substring","strEndsWith","slice","throwEqualError","F","b","Error","isValidNumber","isFinite","toFixed","exp","toString","Math","round","formatTo","decimals","thousand","mark","prefix","suffix","encoder","decoder","negativeBefore","negative","edit","undo","inputIsNegative","inputPieces","inputBase","originalInput","inputDecimals","output","parseFloat","abs","indexOf","formatFrom","replace","Number","validate","inputOptions","i","optionName","optionValue","filteredOptions","passAll","options","method","args","push","apply","wNumb","to","factory","customMegamenuModuleSelectorPairs","Module","name","selector","ODSMegamenu","instances","map","moduleFactory","destroy","instance","initModulesWithin","container","ODS","moduleSelectorPairs","module","string","charAt","toLowerCase","elements","instancePropertyName","uninitializedElements","filter","_instance$destroy","isInDocument","call","index","isSameNode","splice","isArray","_toConsumableArray","destroyModulesWithin","removeOrphanedNodes","destroyedInstances","Object","keys","moduleName","_typeof","_instance$instance","isInContainer","_openers","every","opener","trigger","includes","readyState"],"mappings":"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","x_google_ignoreList":[2]}