@orangesk/orange-design-system 2.0.0-beta.1 → 2.0.0-beta.11

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 (577) hide show
  1. package/build/components/index.css +1 -2
  2. package/build/components/index.css.map +1 -1
  3. package/build/components/index.js +7 -7
  4. package/build/components/index.js.map +1 -1
  5. package/build/components/tsconfig.tsbuildinfo +1 -1
  6. package/build/components/types/index.d.ts +1509 -0
  7. package/build/components/types/src/components/Accordion/Accordion.d.ts +2 -0
  8. package/build/components/types/src/components/Accordion/AccordionHeader.d.ts +2 -1
  9. package/build/components/types/src/components/Accordion/AccordionItem.d.ts +2 -1
  10. package/build/components/types/src/components/AnchorNavigation/AnchorNavigation.d.ts +1 -1
  11. package/build/components/types/src/components/AnchorNavigation/AnchorNavigation.static.d.ts +19 -17
  12. package/build/components/types/src/components/AnchorNavigation/index.d.ts +0 -1
  13. package/build/components/types/src/components/BlockAction/index.d.ts +0 -1
  14. package/build/components/types/src/components/BodyBanner/index.d.ts +0 -1
  15. package/build/components/types/src/components/Button/Button.d.ts +1 -0
  16. package/build/components/types/src/components/Button/index.d.ts +0 -1
  17. package/build/components/types/src/components/Card/Card.d.ts +2 -4
  18. package/build/components/types/src/components/Card/CardSection.d.ts +2 -2
  19. package/build/components/types/src/components/Carousel/Carousel.d.ts +4 -0
  20. package/build/components/types/src/components/Carousel/Carousel.static.d.ts +1 -0
  21. package/build/components/types/src/components/Carousel/constants.d.ts +2 -0
  22. package/build/components/types/src/components/CarouselHero/CarouselHero.d.ts +18 -0
  23. package/build/components/types/src/components/CarouselHero/CarouselHero.static.d.ts +47 -0
  24. package/build/components/types/src/components/CarouselHero/CarouselHeroItem.d.ts +8 -0
  25. package/build/components/types/src/components/CarouselHero/constants.d.ts +33 -0
  26. package/build/components/types/src/components/CarouselHero/index.d.ts +2 -0
  27. package/build/components/types/src/components/Cover/index.d.ts +1 -2
  28. package/build/components/types/src/components/Divider/Divider.d.ts +0 -4
  29. package/build/components/types/src/components/Expander/Expander.d.ts +2 -2
  30. package/build/components/types/src/components/Footer/Footer.d.ts +1 -5
  31. package/build/components/types/src/components/Footer/constants.d.ts +9 -0
  32. package/build/components/types/src/components/Forms/Select/index.d.ts +0 -1
  33. package/build/components/types/src/components/Icon/iconSearchTags.d.ts +253 -251
  34. package/build/components/types/src/components/IconList/index.d.ts +2 -3
  35. package/build/components/types/src/components/List/index.d.ts +2 -3
  36. package/build/components/types/src/components/Megamenu/MegaMenuIcon.d.ts +13 -0
  37. package/build/components/types/src/components/Megamenu/Megamenu.d.ts +1 -9
  38. package/build/components/types/src/components/Megamenu/Megamenu.static.d.ts +47 -0
  39. package/build/components/types/src/components/Megamenu/MegamenuBlog.d.ts +1 -0
  40. package/build/components/types/src/components/Megamenu/constants.d.ts +48 -0
  41. package/build/components/types/src/components/Megamenu/index.d.ts +2 -3
  42. package/build/components/types/src/components/Megamenu/static.d.ts +22 -0
  43. package/build/components/types/src/components/Modal/Modal.d.ts +2 -0
  44. package/build/components/types/src/components/Modal/ModalBody.d.ts +4 -3
  45. package/build/components/types/src/components/Modal/ModalProductBody.d.ts +10 -0
  46. package/build/components/types/src/components/Modal/index.d.ts +1 -0
  47. package/build/components/types/src/components/Pagination/Pagination.d.ts +2 -3
  48. package/build/components/types/src/components/Pill/Pill.d.ts +4 -1
  49. package/build/components/types/src/components/Preview/PreviewGenerator.d.ts +1 -1
  50. package/build/components/types/src/components/PromoBanner/PromoBanner.d.ts +9 -5
  51. package/build/components/types/src/components/PromotionCard/PromotionCard.d.ts +2 -2
  52. package/build/components/types/src/components/Section/Section.d.ts +4 -1
  53. package/build/components/types/src/components/Tag/Tag.d.ts +9 -2
  54. package/build/components/types/src/components/Tile/Tile.d.ts +2 -1
  55. package/build/components/types/src/components/index.d.ts +3 -5
  56. package/build/components/types/src/scripts/index.d.ts +10 -0
  57. package/build/lib/after-components.css +1 -1
  58. package/build/lib/after-components.css.map +1 -1
  59. package/build/lib/before-components.css +1 -1
  60. package/build/lib/before-components.css.map +1 -1
  61. package/build/lib/components.css +1 -1
  62. package/build/lib/components.css.map +1 -1
  63. package/build/lib/footer.css +2 -0
  64. package/build/lib/footer.css.map +1 -0
  65. package/build/lib/megamenu.css +2 -0
  66. package/build/lib/megamenu.css.map +1 -0
  67. package/build/lib/megamenu.js +2 -0
  68. package/build/lib/megamenu.js.map +1 -0
  69. package/build/lib/scripts.css +1 -1
  70. package/build/lib/scripts.css.map +1 -1
  71. package/build/lib/scripts.js +5 -5
  72. package/build/lib/scripts.js.map +1 -1
  73. package/build/lib/style.css +1 -1
  74. package/build/lib/style.css.map +1 -1
  75. package/build/lib/tsconfig.tsbuildinfo +1 -1
  76. package/build/logo-line.svg +5 -0
  77. package/build/sprite.svg +1 -1
  78. package/package.json +37 -31
  79. package/src/assets/icons/ai.svg +6 -0
  80. package/src/assets/icons/article.svg +7 -0
  81. package/src/assets/icons/pictogram-activation--dark.svg +10 -11
  82. package/src/assets/icons/pictogram-activation-free--dark.svg +4 -5
  83. package/src/assets/icons/pictogram-activation-free.svg +4 -5
  84. package/src/assets/icons/pictogram-activation.svg +10 -11
  85. package/src/assets/icons/pictogram-archive--dark.svg +3 -4
  86. package/src/assets/icons/pictogram-archive.svg +3 -4
  87. package/src/assets/icons/pictogram-calling-minutes--dark.svg +3 -4
  88. package/src/assets/icons/pictogram-calling-minutes.svg +3 -4
  89. package/src/assets/icons/pictogram-canal-plus--dark.svg +3 -4
  90. package/src/assets/icons/pictogram-canal-plus.svg +3 -4
  91. package/src/assets/icons/pictogram-competition-tickets--dark.svg +11 -12
  92. package/src/assets/icons/pictogram-competition-tickets.svg +11 -12
  93. package/src/assets/icons/pictogram-device-discount--dark.svg +7 -6
  94. package/src/assets/icons/pictogram-device-discount.svg +5 -6
  95. package/src/assets/icons/pictogram-discount-general--dark.svg +5 -6
  96. package/src/assets/icons/pictogram-discount-general.svg +5 -6
  97. package/src/assets/icons/pictogram-discount-price--dark.svg +5 -6
  98. package/src/assets/icons/pictogram-discount-price.svg +5 -6
  99. package/src/assets/icons/pictogram-extra-data--dark.svg +6 -7
  100. package/src/assets/icons/pictogram-extra-data.svg +6 -7
  101. package/src/assets/icons/pictogram-free-payment--dark.svg +5 -6
  102. package/src/assets/icons/pictogram-free-payment.svg +3 -6
  103. package/src/assets/icons/pictogram-gift--dark.svg +12 -13
  104. package/src/assets/icons/pictogram-gift-one-benefit--dark.svg +7 -8
  105. package/src/assets/icons/pictogram-gift-one-benefit.svg +7 -8
  106. package/src/assets/icons/pictogram-gift-two-benefits--dark.svg +8 -9
  107. package/src/assets/icons/pictogram-gift-two-benefits.svg +8 -9
  108. package/src/assets/icons/pictogram-gift.svg +3 -4
  109. package/src/assets/icons/pictogram-hbo-max--dark.svg +5 -6
  110. package/src/assets/icons/pictogram-hbo-max.svg +5 -6
  111. package/src/assets/icons/pictogram-infinite-sms--dark.svg +3 -4
  112. package/src/assets/icons/pictogram-infinite-sms.svg +3 -4
  113. package/src/assets/icons/pictogram-installation--dark.svg +4 -5
  114. package/src/assets/icons/pictogram-installation-free--dark.svg +4 -5
  115. package/src/assets/icons/pictogram-installation-free.svg +4 -5
  116. package/src/assets/icons/pictogram-installation.svg +4 -5
  117. package/src/assets/icons/pictogram-max--dark.svg +3 -4
  118. package/src/assets/icons/pictogram-max-canal-plus--dark.svg +5 -6
  119. package/src/assets/icons/pictogram-max-canal-plus.svg +5 -6
  120. package/src/assets/icons/pictogram-max.svg +3 -4
  121. package/src/assets/icons/pictogram-moj-orange-app--dark.svg +3 -4
  122. package/src/assets/icons/pictogram-moj-orange-app.svg +3 -4
  123. package/src/assets/icons/pictogram-movie-storage--dark.svg +4 -5
  124. package/src/assets/icons/pictogram-movie-storage.svg +4 -5
  125. package/src/assets/icons/pictogram-online-protection--dark.svg +3 -4
  126. package/src/assets/icons/pictogram-online-protection.svg +3 -4
  127. package/src/assets/icons/pictogram-random-damage--dark.svg +4 -8
  128. package/src/assets/icons/pictogram-random-damage.svg +4 -8
  129. package/src/assets/icons/pictogram-recycling--dark.svg +7 -8
  130. package/src/assets/icons/pictogram-recycling.svg +14 -15
  131. package/src/assets/icons/pictogram-repair--dark.svg +12 -13
  132. package/src/assets/icons/pictogram-repair.svg +12 -13
  133. package/src/assets/icons/pictogram-roaming--dark.svg +3 -4
  134. package/src/assets/icons/pictogram-roaming-discount--dark.svg +3 -16
  135. package/src/assets/icons/pictogram-roaming-discount.svg +15 -16
  136. package/src/assets/icons/pictogram-roaming.svg +3 -4
  137. package/src/assets/icons/pictogram-skylink--dark.svg +10 -11
  138. package/src/assets/icons/pictogram-skylink-live-tv--dark.svg +7 -8
  139. package/src/assets/icons/pictogram-skylink-live-tv.svg +7 -8
  140. package/src/assets/icons/pictogram-skylink.svg +10 -11
  141. package/src/assets/icons/pictogram-sms--dark.svg +5 -6
  142. package/src/assets/icons/pictogram-sms.svg +5 -6
  143. package/src/assets/icons/pictogram-theft--dark.svg +3 -7
  144. package/src/assets/icons/pictogram-theft.svg +3 -7
  145. package/src/assets/icons/pictogram-three-devices--dark.svg +4 -8
  146. package/src/assets/icons/pictogram-three-devices.svg +4 -8
  147. package/src/assets/icons/pictogram-trust--dark.svg +3 -4
  148. package/src/assets/icons/pictogram-trust.svg +3 -4
  149. package/src/assets/icons/pictogram-water-damage--dark.svg +5 -6
  150. package/src/assets/icons/pictogram-water-damage.svg +5 -6
  151. package/src/components/Accordion/Accordion.tsx +4 -0
  152. package/src/components/Accordion/AccordionHeader.tsx +9 -2
  153. package/src/components/Accordion/AccordionItem.tsx +5 -2
  154. package/src/components/Accordion/styles/config.scss +4 -4
  155. package/src/components/Accordion/styles/mixins.scss +14 -4
  156. package/src/components/Accordion/styles/style.scss +4 -0
  157. package/src/components/Accordion/tests/Accordion.unit.test.js +11 -0
  158. package/src/components/AnchorNavigation/AnchorNavigation.static.ts +253 -73
  159. package/src/components/AnchorNavigation/AnchorNavigation.tsx +20 -16
  160. package/src/components/AnchorNavigation/index.tsx +0 -2
  161. package/src/components/AnchorNavigation/styles/mixins.scss +15 -28
  162. package/src/components/AnchorNavigation/tests/AnchorNavigation.conformance.test.js +67 -0
  163. package/src/components/AnchorNavigation/tests/AnchorNavigation.unit.test.js +163 -0
  164. package/src/components/Bar/styles/config.scss +4 -5
  165. package/src/components/BlockAction/index.tsx +0 -2
  166. package/src/components/BlockAction/styles/mixins.scss +0 -6
  167. package/src/components/BodyBanner/index.tsx +0 -2
  168. package/src/components/Breadcrumbs/styles/mixins.scss +2 -4
  169. package/src/components/Button/Button.tsx +2 -2
  170. package/src/components/Button/index.tsx +0 -2
  171. package/src/components/Button/styles/config.scss +1 -1
  172. package/src/components/Button/styles/mixins.scss +5 -0
  173. package/src/components/Button/styles/style.scss +4 -0
  174. package/src/components/Card/Card.tsx +20 -8
  175. package/src/components/Card/CardSection.tsx +7 -11
  176. package/src/components/Card/styles/config.scss +1 -1
  177. package/src/components/Card/styles/mixins.scss +8 -6
  178. package/src/components/Card/styles/style.scss +4 -0
  179. package/src/components/Card/tests/Card.unit.test.js +45 -11
  180. package/src/components/Card/tests/CardSection.unit.test.js +36 -3
  181. package/src/components/Carousel/Carousel.static.ts +67 -1
  182. package/src/components/Carousel/Carousel.tsx +41 -19
  183. package/src/components/Carousel/constants.ts +2 -0
  184. package/src/components/Carousel/styles/config.scss +1 -2
  185. package/src/components/Carousel/styles/mixins.scss +35 -2
  186. package/src/components/Carousel/styles/style.scss +8 -0
  187. package/src/components/CarouselHero/CarouselHero.static.ts +528 -0
  188. package/src/components/CarouselHero/CarouselHero.tsx +147 -0
  189. package/src/components/CarouselHero/CarouselHeroItem.tsx +40 -0
  190. package/src/components/CarouselHero/constants.ts +36 -0
  191. package/src/components/CarouselHero/index.ts +2 -0
  192. package/src/components/CarouselHero/styles/config.scss +54 -0
  193. package/src/components/CarouselHero/styles/mixins.scss +278 -0
  194. package/src/components/CarouselHero/styles/style.scss +63 -0
  195. package/src/components/CarouselHero/tests/CarouselHero.conformance.test.js +130 -0
  196. package/src/components/CarouselHero/tests/CarouselHero.unit.test.js +346 -0
  197. package/src/components/CarouselHero/tests/CarouselHeroItem.conformance.test.js +135 -0
  198. package/src/components/CarouselHero/tests/CarouselHeroItem.unit.test.js +143 -0
  199. package/src/components/CarouselPromotions/styles/mixins.scss +10 -3
  200. package/src/components/CartTable/FooterPriceColumn.tsx +5 -3
  201. package/src/components/CartTable/Price.tsx +1 -1
  202. package/src/components/Controls/styles/config.scss +2 -2
  203. package/src/components/Controls/tests/Controls.test.js +0 -9
  204. package/src/components/Cover/index.ts +1 -2
  205. package/src/components/Divider/Divider.tsx +2 -16
  206. package/src/components/Divider/styles/config.scss +0 -17
  207. package/src/components/Divider/styles/mixins.scss +8 -10
  208. package/src/components/Divider/styles/style.scss +2 -16
  209. package/src/components/Divider/tests/Divider.conformance.test.js +1 -1
  210. package/src/components/Divider/tests/Divider.unit.test.js +0 -17
  211. package/src/components/Dropdown/styles/mixins.scss +1 -1
  212. package/src/components/Expander/Expander.tsx +4 -2
  213. package/src/components/Expander/styles/style.scss +10 -1
  214. package/src/components/Footer/Footer.tsx +86 -70
  215. package/src/components/Footer/constants.ts +10 -0
  216. package/src/components/Footer/styles/config.scss +1 -0
  217. package/src/components/Footer/styles/mixins.scss +172 -0
  218. package/src/components/Footer/styles/style.scss +48 -0
  219. package/src/components/Footer/tests/Footer.conformance.test.js +133 -8
  220. package/src/components/Footer/tests/Footer.unit.test.js +71 -6
  221. package/src/components/Forms/DatePicker/styles/style.scss +1 -1
  222. package/src/components/Forms/File/styles/mixins.scss +1 -1
  223. package/src/components/Forms/InputStepper/styles/style.scss +0 -66
  224. package/src/components/Forms/RangeSlider/styles/mixins.scss +1 -1
  225. package/src/components/Forms/Select/index.tsx +0 -2
  226. package/src/components/Forms/TextInput/styles/config.scss +1 -1
  227. package/src/components/Forms/styles/config.scss +3 -3
  228. package/src/components/Icon/iconSearchTags.ts +434 -432
  229. package/src/components/Icon/styles/style.scss +15 -0
  230. package/src/components/Icon/tests/Pictogram.unit.test.js +38 -0
  231. package/src/components/IconList/index.ts +2 -3
  232. package/src/components/Link/styles/style.scss +6 -2
  233. package/src/components/Link/tests/Link.conformance.test.js +5 -20
  234. package/src/components/Link/tests/Link.unit.test.js +1 -10
  235. package/src/components/List/index.ts +2 -3
  236. package/src/components/Loader/Loader.tsx +2 -10
  237. package/src/components/Loader/styles/mixins.scss +1 -1
  238. package/src/components/Loader/styles/style.scss +6 -4
  239. package/src/components/Megamenu/MegaMenuIcon.tsx +48 -0
  240. package/src/components/Megamenu/Megamenu.static.ts +600 -0
  241. package/src/components/Megamenu/Megamenu.tsx +799 -356
  242. package/src/components/Megamenu/MegamenuBlog.tsx +309 -0
  243. package/src/components/Megamenu/constants.ts +56 -0
  244. package/src/components/Megamenu/index.ts +2 -5
  245. package/src/components/Megamenu/static.ts +73 -0
  246. package/src/components/Megamenu/styles/config.scss +2 -15
  247. package/src/components/Megamenu/styles/mixins.scss +647 -209
  248. package/src/components/Megamenu/styles/style.scss +173 -61
  249. package/src/components/Modal/Modal.tsx +9 -1
  250. package/src/components/Modal/ModalBody.tsx +29 -14
  251. package/src/components/Modal/ModalProductBody.tsx +52 -0
  252. package/src/components/Modal/index.ts +1 -0
  253. package/src/components/Modal/styles/mixins.scss +62 -5
  254. package/src/components/Modal/styles/style.scss +16 -0
  255. package/src/components/Modal/tests/Modal.unit.test.js +37 -0
  256. package/src/components/Modal/tests/ModalBody.unit.test.js +28 -12
  257. package/src/components/Pagination/Pagination.tsx +2 -2
  258. package/src/components/Pill/Pill.tsx +8 -3
  259. package/src/components/Pill/styles/config.scss +22 -2
  260. package/src/components/Pill/styles/style.scss +7 -3
  261. package/src/components/Pill/tests/Pill.conformance.test.js +7 -3
  262. package/src/components/Pill/tests/Pill.unit.test.js +45 -7
  263. package/src/components/Preview/PreviewGenerator.tsx +78 -34
  264. package/src/components/PromoBanner/PromoBanner.tsx +68 -33
  265. package/src/components/PromoBanner/styles/mixins.scss +37 -20
  266. package/src/components/PromoBanner/styles/style.scss +5 -11
  267. package/src/components/PromoBanner/tests/PromoBanner.conformance.test.js +813 -0
  268. package/src/components/PromoBanner/tests/PromoBanner.unit.test.js +581 -0
  269. package/src/components/PromotionCard/PromotionCard.tsx +13 -12
  270. package/src/components/PromotionCard/tests/PromotionCard.conformance.test.js +567 -0
  271. package/src/components/PromotionCard/tests/PromotionCard.unit.test.js +500 -0
  272. package/src/components/Section/Section.tsx +20 -10
  273. package/src/components/Section/styles/config.scss +18 -16
  274. package/src/components/Section/styles/mixins.scss +16 -13
  275. package/src/components/Section/styles/style.scss +1 -0
  276. package/src/components/Section/tests/Section.conformance.test.js +23 -12
  277. package/src/components/Section/tests/Section.unit.test.js +53 -32
  278. package/src/components/Table/styles/mixins.scss +3 -4
  279. package/src/components/Tag/Tag.tsx +27 -3
  280. package/src/components/Tag/styles/config.scss +31 -0
  281. package/src/components/Tag/styles/mixins.scss +39 -3
  282. package/src/components/Tag/styles/style.scss +28 -2
  283. package/src/components/Tag/tests/Tag.conformance.test.js +19 -1
  284. package/src/components/Tag/tests/Tag.unit.test.js +93 -0
  285. package/src/components/Tile/CHANGELOG.md +15 -1
  286. package/src/components/Tile/Tile.tsx +11 -3
  287. package/src/components/Tile/styles/config.scss +0 -11
  288. package/src/components/Tile/styles/style.scss +1 -5
  289. package/src/components/Tile/tests/Tile.unit.test.js +10 -3
  290. package/src/components/index.ts +5 -6
  291. package/src/styles/base/globals.scss +24 -0
  292. package/src/styles/base/styleguide.scss +17 -17
  293. package/src/styles/export/base.js +2 -2
  294. package/src/styles/export/color.js +2 -2
  295. package/src/styles/shame.scss +2 -1
  296. package/src/styles/tokens/base.scss +1 -1
  297. package/src/styles/tokens/color.scss +8 -8
  298. package/src/styles/typography/mixins.scss +21 -2
  299. package/src/styles/typography/style.scss +6 -3
  300. package/src/styles/utilities/border.scss +1 -1
  301. package/src/styles/utilities/color.scss +99 -20
  302. package/src/styles/utilities/index.scss +1 -0
  303. package/src/styles/utilities/layout.scss +9 -0
  304. package/src/styles/utilities/ordering.scss +44 -0
  305. package/src/styles/utilities/text.scss +1 -0
  306. package/build/components/Accordion/index.js +0 -16
  307. package/build/components/Accordion/index.js.map +0 -1
  308. package/build/components/Accordion/tsconfig.tsbuildinfo +0 -1
  309. package/build/components/Alert/index.js +0 -16
  310. package/build/components/Alert/index.js.map +0 -1
  311. package/build/components/Alert/tsconfig.tsbuildinfo +0 -1
  312. package/build/components/AnchorNavigation/index.js +0 -16
  313. package/build/components/AnchorNavigation/index.js.map +0 -1
  314. package/build/components/AnchorNavigation/style.css +0 -2
  315. package/build/components/AnchorNavigation/style.css.map +0 -1
  316. package/build/components/AnchorNavigation/tsconfig.tsbuildinfo +0 -1
  317. package/build/components/Bar/index.js +0 -16
  318. package/build/components/Bar/index.js.map +0 -1
  319. package/build/components/Bar/tsconfig.tsbuildinfo +0 -1
  320. package/build/components/BlockAction/index.js +0 -16
  321. package/build/components/BlockAction/index.js.map +0 -1
  322. package/build/components/BlockAction/style.css +0 -2
  323. package/build/components/BlockAction/style.css.map +0 -1
  324. package/build/components/BlockAction/tsconfig.tsbuildinfo +0 -1
  325. package/build/components/BodyBanner/index.js +0 -16
  326. package/build/components/BodyBanner/index.js.map +0 -1
  327. package/build/components/BodyBanner/style.css +0 -2
  328. package/build/components/BodyBanner/style.css.map +0 -1
  329. package/build/components/BodyBanner/tsconfig.tsbuildinfo +0 -1
  330. package/build/components/Breadcrumbs/index.js +0 -16
  331. package/build/components/Breadcrumbs/index.js.map +0 -1
  332. package/build/components/Breadcrumbs/tsconfig.tsbuildinfo +0 -1
  333. package/build/components/Button/index.js +0 -16
  334. package/build/components/Button/index.js.map +0 -1
  335. package/build/components/Button/style.css +0 -2
  336. package/build/components/Button/style.css.map +0 -1
  337. package/build/components/Button/tsconfig.tsbuildinfo +0 -1
  338. package/build/components/Buttons/index.js +0 -16
  339. package/build/components/Buttons/index.js.map +0 -1
  340. package/build/components/Buttons/tsconfig.tsbuildinfo +0 -1
  341. package/build/components/Card/index.js +0 -16
  342. package/build/components/Card/index.js.map +0 -1
  343. package/build/components/Card/tsconfig.tsbuildinfo +0 -1
  344. package/build/components/Carousel/index.js +0 -16
  345. package/build/components/Carousel/index.js.map +0 -1
  346. package/build/components/Carousel/style.css +0 -2
  347. package/build/components/Carousel/style.css.map +0 -1
  348. package/build/components/Carousel/tsconfig.tsbuildinfo +0 -1
  349. package/build/components/CarouselPromotions/index.js +0 -16
  350. package/build/components/CarouselPromotions/index.js.map +0 -1
  351. package/build/components/CarouselPromotions/tsconfig.tsbuildinfo +0 -1
  352. package/build/components/CartTable/index.js +0 -16
  353. package/build/components/CartTable/index.js.map +0 -1
  354. package/build/components/CartTable/style.css +0 -2
  355. package/build/components/CartTable/style.css.map +0 -1
  356. package/build/components/CartTable/tsconfig.tsbuildinfo +0 -1
  357. package/build/components/Code/index.js +0 -11
  358. package/build/components/Code/index.js.map +0 -1
  359. package/build/components/Code/style.css +0 -2
  360. package/build/components/Code/style.css.map +0 -1
  361. package/build/components/Code/tsconfig.tsbuildinfo +0 -1
  362. package/build/components/Container/index.js +0 -16
  363. package/build/components/Container/index.js.map +0 -1
  364. package/build/components/Container/tsconfig.tsbuildinfo +0 -1
  365. package/build/components/Controls/index.js +0 -16
  366. package/build/components/Controls/index.js.map +0 -1
  367. package/build/components/Controls/tsconfig.tsbuildinfo +0 -1
  368. package/build/components/Cover/index.js +0 -16
  369. package/build/components/Cover/index.js.map +0 -1
  370. package/build/components/Cover/style.css +0 -2
  371. package/build/components/Cover/style.css.map +0 -1
  372. package/build/components/Cover/tsconfig.tsbuildinfo +0 -1
  373. package/build/components/Divider/index.js +0 -16
  374. package/build/components/Divider/index.js.map +0 -1
  375. package/build/components/Divider/tsconfig.tsbuildinfo +0 -1
  376. package/build/components/DocumentationSidebar/index.js +0 -16
  377. package/build/components/DocumentationSidebar/index.js.map +0 -1
  378. package/build/components/DocumentationSidebar/style.css +0 -2
  379. package/build/components/DocumentationSidebar/style.css.map +0 -1
  380. package/build/components/DocumentationSidebar/tsconfig.tsbuildinfo +0 -1
  381. package/build/components/Dropdown/index.js +0 -16
  382. package/build/components/Dropdown/index.js.map +0 -1
  383. package/build/components/Dropdown/style.css +0 -2
  384. package/build/components/Dropdown/style.css.map +0 -1
  385. package/build/components/Dropdown/tsconfig.tsbuildinfo +0 -1
  386. package/build/components/Expander/index.js +0 -16
  387. package/build/components/Expander/index.js.map +0 -1
  388. package/build/components/Expander/tsconfig.tsbuildinfo +0 -1
  389. package/build/components/FeatureAccordion/index.js +0 -16
  390. package/build/components/FeatureAccordion/index.js.map +0 -1
  391. package/build/components/FeatureAccordion/style.css +0 -2
  392. package/build/components/FeatureAccordion/style.css.map +0 -1
  393. package/build/components/FeatureAccordion/tsconfig.tsbuildinfo +0 -1
  394. package/build/components/Footer/index.js +0 -16
  395. package/build/components/Footer/index.js.map +0 -1
  396. package/build/components/Footer/style.css +0 -2
  397. package/build/components/Footer/style.css.map +0 -1
  398. package/build/components/Footer/tsconfig.tsbuildinfo +0 -1
  399. package/build/components/Forms/index.js +0 -20
  400. package/build/components/Forms/index.js.map +0 -1
  401. package/build/components/Forms/style.css +0 -2
  402. package/build/components/Forms/style.css.map +0 -1
  403. package/build/components/Forms/tsconfig.tsbuildinfo +0 -1
  404. package/build/components/Gauge/index.js +0 -16
  405. package/build/components/Gauge/index.js.map +0 -1
  406. package/build/components/Gauge/tsconfig.tsbuildinfo +0 -1
  407. package/build/components/Grid/index.js +0 -16
  408. package/build/components/Grid/index.js.map +0 -1
  409. package/build/components/Grid/style.css +0 -2
  410. package/build/components/Grid/style.css.map +0 -1
  411. package/build/components/Grid/tsconfig.tsbuildinfo +0 -1
  412. package/build/components/Hero/index.js +0 -16
  413. package/build/components/Hero/index.js.map +0 -1
  414. package/build/components/Hero/style.css +0 -2
  415. package/build/components/Hero/style.css.map +0 -1
  416. package/build/components/Hero/tsconfig.tsbuildinfo +0 -1
  417. package/build/components/Icon/index.js +0 -11
  418. package/build/components/Icon/index.js.map +0 -1
  419. package/build/components/Icon/tsconfig.tsbuildinfo +0 -1
  420. package/build/components/IconList/index.js +0 -16
  421. package/build/components/IconList/index.js.map +0 -1
  422. package/build/components/IconList/style.css +0 -2
  423. package/build/components/IconList/style.css.map +0 -1
  424. package/build/components/IconList/tsconfig.tsbuildinfo +0 -1
  425. package/build/components/Image/index.js +0 -16
  426. package/build/components/Image/index.js.map +0 -1
  427. package/build/components/Image/tsconfig.tsbuildinfo +0 -1
  428. package/build/components/Link/index.js +0 -7
  429. package/build/components/Link/index.js.map +0 -1
  430. package/build/components/Link/tsconfig.tsbuildinfo +0 -1
  431. package/build/components/List/index.js +0 -16
  432. package/build/components/List/index.js.map +0 -1
  433. package/build/components/List/style.css +0 -2
  434. package/build/components/List/style.css.map +0 -1
  435. package/build/components/List/tsconfig.tsbuildinfo +0 -1
  436. package/build/components/Loader/index.js +0 -16
  437. package/build/components/Loader/index.js.map +0 -1
  438. package/build/components/Loader/tsconfig.tsbuildinfo +0 -1
  439. package/build/components/Megamenu/index.js +0 -20
  440. package/build/components/Megamenu/index.js.map +0 -1
  441. package/build/components/Megamenu/style.css +0 -2
  442. package/build/components/Megamenu/style.css.map +0 -1
  443. package/build/components/Megamenu/tsconfig.tsbuildinfo +0 -1
  444. package/build/components/Modal/index.js +0 -20
  445. package/build/components/Modal/index.js.map +0 -1
  446. package/build/components/Modal/style.css +0 -2
  447. package/build/components/Modal/style.css.map +0 -1
  448. package/build/components/Modal/tsconfig.tsbuildinfo +0 -1
  449. package/build/components/Pagination/index.js +0 -16
  450. package/build/components/Pagination/index.js.map +0 -1
  451. package/build/components/Pagination/tsconfig.tsbuildinfo +0 -1
  452. package/build/components/Pill/index.js +0 -16
  453. package/build/components/Pill/index.js.map +0 -1
  454. package/build/components/Pill/tsconfig.tsbuildinfo +0 -1
  455. package/build/components/Preview/index.js +0 -77
  456. package/build/components/Preview/index.js.map +0 -1
  457. package/build/components/Preview/style.css +0 -2
  458. package/build/components/Preview/style.css.map +0 -1
  459. package/build/components/Preview/tsconfig.tsbuildinfo +0 -1
  460. package/build/components/Progress/index.js +0 -16
  461. package/build/components/Progress/index.js.map +0 -1
  462. package/build/components/Progress/tsconfig.tsbuildinfo +0 -1
  463. package/build/components/PromoBanner/index.js +0 -16
  464. package/build/components/PromoBanner/index.js.map +0 -1
  465. package/build/components/PromoBanner/style.css +0 -2
  466. package/build/components/PromoBanner/style.css.map +0 -1
  467. package/build/components/PromoBanner/tsconfig.tsbuildinfo +0 -1
  468. package/build/components/PromotionCard/index.js +0 -16
  469. package/build/components/PromotionCard/index.js.map +0 -1
  470. package/build/components/PromotionCard/tsconfig.tsbuildinfo +0 -1
  471. package/build/components/Section/index.js +0 -16
  472. package/build/components/Section/index.js.map +0 -1
  473. package/build/components/Section/tsconfig.tsbuildinfo +0 -1
  474. package/build/components/Skeleton/index.js +0 -16
  475. package/build/components/Skeleton/index.js.map +0 -1
  476. package/build/components/Skeleton/tsconfig.tsbuildinfo +0 -1
  477. package/build/components/SkipLink/index.js +0 -16
  478. package/build/components/SkipLink/index.js.map +0 -1
  479. package/build/components/SkipLink/tsconfig.tsbuildinfo +0 -1
  480. package/build/components/Stepbar/index.js +0 -16
  481. package/build/components/Stepbar/index.js.map +0 -1
  482. package/build/components/Stepbar/tsconfig.tsbuildinfo +0 -1
  483. package/build/components/Sticker/index.js +0 -16
  484. package/build/components/Sticker/index.js.map +0 -1
  485. package/build/components/Sticker/tsconfig.tsbuildinfo +0 -1
  486. package/build/components/Table/index.js +0 -16
  487. package/build/components/Table/index.js.map +0 -1
  488. package/build/components/Table/style.css +0 -2
  489. package/build/components/Table/style.css.map +0 -1
  490. package/build/components/Table/tsconfig.tsbuildinfo +0 -1
  491. package/build/components/Tabs/index.js +0 -16
  492. package/build/components/Tabs/index.js.map +0 -1
  493. package/build/components/Tabs/tsconfig.tsbuildinfo +0 -1
  494. package/build/components/Tag/index.js +0 -16
  495. package/build/components/Tag/index.js.map +0 -1
  496. package/build/components/Tag/tsconfig.tsbuildinfo +0 -1
  497. package/build/components/Testimonial/index.js +0 -16
  498. package/build/components/Testimonial/index.js.map +0 -1
  499. package/build/components/Testimonial/tsconfig.tsbuildinfo +0 -1
  500. package/build/components/Tile/index.js +0 -16
  501. package/build/components/Tile/index.js.map +0 -1
  502. package/build/components/Tile/tsconfig.tsbuildinfo +0 -1
  503. package/build/components/Tooltip/index.js +0 -16
  504. package/build/components/Tooltip/index.js.map +0 -1
  505. package/build/components/Tooltip/style.css +0 -2
  506. package/build/components/Tooltip/style.css.map +0 -1
  507. package/build/components/Tooltip/tsconfig.tsbuildinfo +0 -1
  508. package/build/components/static.css +0 -2
  509. package/build/components/static.css.map +0 -1
  510. package/build/components/static.js +0 -10
  511. package/build/components/static.js.map +0 -1
  512. package/build/components/types/src/components/Hero/HeroPlayground.d.ts +0 -2
  513. package/build/components/types/src/components/Megamenu/MegamenuDropdown.d.ts +0 -17
  514. package/src/components/Accordion/Accordion.mdx +0 -222
  515. package/src/components/Alert/Alert.mdx +0 -141
  516. package/src/components/Bar/Bar.mdx +0 -203
  517. package/src/components/BlockAction/BlockAction.mdx +0 -244
  518. package/src/components/BodyBanner/BodyBanner.mdx +0 -268
  519. package/src/components/Breadcrumbs/Breadcrumbs.mdx +0 -84
  520. package/src/components/Button/Button.mdx +0 -273
  521. package/src/components/Buttons/Buttons.mdx +0 -39
  522. package/src/components/Card/Card.mdx +0 -334
  523. package/src/components/Carousel/Carousel.mdx +0 -159
  524. package/src/components/CarouselPromotions/CarouselPromotions.mdx +0 -246
  525. package/src/components/CartTable/CartTable.mdx +0 -129
  526. package/src/components/Container/Container.mdx +0 -73
  527. package/src/components/Controls/Controls.mdx +0 -469
  528. package/src/components/Cover/Cover.mdx +0 -87
  529. package/src/components/Divider/Divider.mdx +0 -65
  530. package/src/components/Dropdown/Dropdown.mdx +0 -260
  531. package/src/components/Expander/Expander.mdx +0 -153
  532. package/src/components/FeatureAccordion/FeatureAccordion.mdx +0 -33
  533. package/src/components/Forms/Autocomplete/Autocomplete.mdx +0 -198
  534. package/src/components/Forms/Checkbox/Checkbox.mdx +0 -139
  535. package/src/components/Forms/DatePicker/DatePicker.mdx +0 -149
  536. package/src/components/Forms/Field/Field.mdx +0 -383
  537. package/src/components/Forms/Fieldset/Fieldset.mdx +0 -178
  538. package/src/components/Forms/File/File.mdx +0 -88
  539. package/src/components/Forms/FormTooltip.mdx +0 -51
  540. package/src/components/Forms/Forms.mdx +0 -48
  541. package/src/components/Forms/Group/Group.mdx +0 -146
  542. package/src/components/Forms/Hint/Hint.mdx +0 -40
  543. package/src/components/Forms/InputStepper/InputStepper.mdx +0 -147
  544. package/src/components/Forms/Label/Label.mdx +0 -95
  545. package/src/components/Forms/Message/Message.mdx +0 -40
  546. package/src/components/Forms/Radio/Radio.mdx +0 -98
  547. package/src/components/Forms/RangeSlider/RangeSlider.mdx +0 -304
  548. package/src/components/Forms/Select/Select.mdx +0 -106
  549. package/src/components/Forms/TextArea/TextArea.mdx +0 -109
  550. package/src/components/Forms/TextInput/TextInput.mdx +0 -153
  551. package/src/components/Gauge/Gauge.mdx +0 -35
  552. package/src/components/Grid/Grid.mdx +0 -320
  553. package/src/components/Hero/Hero.mdx +0 -168
  554. package/src/components/Hero/HeroPlayground.tsx +0 -369
  555. package/src/components/Icon/Icon.mdx +0 -172
  556. package/src/components/IconList/IconList.mdx +0 -53
  557. package/src/components/Image/Image.mdx +0 -175
  558. package/src/components/Link/Link.mdx +0 -224
  559. package/src/components/List/List.mdx +0 -216
  560. package/src/components/Loader/Loader.mdx +0 -148
  561. package/src/components/Megamenu/MegamenuDropdown.tsx +0 -64
  562. package/src/components/Modal/Modal.mdx +0 -565
  563. package/src/components/Pagination/Pagination.mdx +0 -45
  564. package/src/components/Pill/Pill.mdx +0 -41
  565. package/src/components/Progress/Progress.mdx +0 -119
  566. package/src/components/PromotionCard/PromotionCard.mdx +0 -191
  567. package/src/components/Section/Section.mdx +0 -397
  568. package/src/components/Skeleton/Skeleton.mdx +0 -90
  569. package/src/components/SkipLink/SkipLink.mdx +0 -23
  570. package/src/components/Stepbar/Stepbar.mdx +0 -137
  571. package/src/components/Sticker/Sticker.mdx +0 -50
  572. package/src/components/Table/Table.mdx +0 -199
  573. package/src/components/Tabs/Tabs.mdx +0 -373
  574. package/src/components/Tag/Tag.mdx +0 -52
  575. package/src/components/Testimonial/Testimonial.mdx +0 -41
  576. package/src/components/Tile/Tile.mdx +0 -163
  577. package/src/components/Tooltip/Tooltip.mdx +0 -227
@@ -0,0 +1,813 @@
1
+ import React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { axe } from "jest-axe";
4
+ import userEvent from "@testing-library/user-event";
5
+
6
+ import { PromoBanner } from "../";
7
+
8
+ /**
9
+ * PromoBanner Component Conformance Tests
10
+ *
11
+ * These tests verify the complete functionality of the PromoBanner component including:
12
+ *
13
+ * 🎯 HTML VALIDITY
14
+ * - HTML validity with various prop combinations
15
+ * - Semantic HTML structure
16
+ * - Complex JSX structure validation
17
+ * - Grid layout structure
18
+ * - Image element validation
19
+ *
20
+ * ♿ ACCESSIBILITY (A11y)
21
+ * - WCAG 2.1 compliance using jest-axe
22
+ * - Proper use of semantic HTML elements
23
+ * - Image alt attributes
24
+ * - Interactive elements (buttons, links)
25
+ * - Focus management and keyboard navigation
26
+ * - Screen reader compatibility
27
+ * - Color contrast compliance
28
+ * - Grid layout accessibility
29
+ *
30
+ * 🎨 FUNCTIONAL BEHAVIOR
31
+ * - Correct application of CSS classes (promo-banner)
32
+ * - Color scheme variants: light, dark
33
+ * - Layout variants: default (horizontal), vertical
34
+ * - Image alignment: top, bottom
35
+ * - Image bleeding effect
36
+ * - Full width image functionality
37
+ * - Custom className merging
38
+ * - Grid and GridCol integration
39
+ * - Image component integration
40
+ *
41
+ * 📝 CONTENT RENDERING
42
+ * - Text children rendering
43
+ * - Complex JSX children
44
+ * - Multiple children
45
+ * - Empty content handling
46
+ * - Image rendering with various props
47
+ *
48
+ * ⚠️ EDGE CASES
49
+ * - Null, undefined, boolean children
50
+ * - Number and array children
51
+ * - Invalid props graceful handling
52
+ * - Empty image URLs
53
+ * - Boundary usage cases
54
+ *
55
+ * 🔗 INTEGRATION TESTS
56
+ * - Working with interactive elements
57
+ * - Grid component integration
58
+ * - Image component integration
59
+ * - Event handling
60
+ * - Focus management
61
+ * - Responsive behavior
62
+ */
63
+
64
+ describe("PromoBanner Component Conformance Tests", () => {
65
+ describe("HTML Validity", () => {
66
+ it("is valid HTML with default props", () => {
67
+ const { container } = render(<PromoBanner />);
68
+ expect(container).toHTMLValidate();
69
+ });
70
+
71
+ it("is valid HTML with all props", () => {
72
+ const { container } = render(
73
+ <PromoBanner
74
+ colorScheme="dark"
75
+ className="test-class"
76
+ image="https://example.com/test.jpg"
77
+ alignImage="top"
78
+ bleedImage
79
+ imageFullWidth
80
+ variant="vertical"
81
+ itemClassName="custom-item"
82
+ imageClassName="custom-image"
83
+ data-testid="test-promo-banner"
84
+ >
85
+ <h2>Promotion Title</h2>
86
+ <p>Promotion description with detailed content</p>
87
+ <button type="button">Call to Action</button>
88
+ </PromoBanner>,
89
+ );
90
+ expect(container).toHTMLValidate();
91
+ });
92
+
93
+ it("is valid HTML with complex content structure", () => {
94
+ const { container } = render(
95
+ <PromoBanner image="https://example.com/banner.jpg">
96
+ <header>
97
+ <h1>Special Offer</h1>
98
+ <p className="subtitle">Limited time promotion</p>
99
+ </header>
100
+ <main>
101
+ <section>
102
+ <h2>Details</h2>
103
+ <p>
104
+ Comprehensive promotion details with <strong>emphasis</strong>{" "}
105
+ and <em>italic text</em>.
106
+ </p>
107
+ <ul>
108
+ <li>Feature 1</li>
109
+ <li>Feature 2</li>
110
+ <li>Feature 3</li>
111
+ </ul>
112
+ <div>
113
+ <button type="button">Primary Action</button>
114
+ <button type="button">Secondary Action</button>
115
+ </div>
116
+ </section>
117
+ </main>
118
+ </PromoBanner>,
119
+ );
120
+ expect(container).toHTMLValidate();
121
+ });
122
+
123
+ it("is valid HTML with Grid layout structure", () => {
124
+ const { container } = render(
125
+ <PromoBanner>
126
+ <div className="content-wrapper">
127
+ <h2>Grid Layout Content</h2>
128
+ <p>Content rendered within Grid component structure</p>
129
+ </div>
130
+ </PromoBanner>,
131
+ );
132
+ expect(container).toHTMLValidate();
133
+ });
134
+
135
+ it("is valid HTML with Image component", () => {
136
+ const { container } = render(
137
+ <PromoBanner image="https://example.com/test.jpg" alignImage="bottom">
138
+ <h2>Content with Image</h2>
139
+ <p>Banner with properly structured Image component</p>
140
+ </PromoBanner>,
141
+ );
142
+ expect(container).toHTMLValidate();
143
+ });
144
+
145
+ it("is valid HTML with vertical variant", () => {
146
+ const { container } = render(
147
+ <PromoBanner
148
+ variant="vertical"
149
+ image="https://example.com/vertical.jpg"
150
+ >
151
+ <h2>Vertical Layout</h2>
152
+ <p>Content in vertical layout structure</p>
153
+ </PromoBanner>,
154
+ );
155
+ expect(container).toHTMLValidate();
156
+ });
157
+
158
+ it("is valid HTML with bleeding image", () => {
159
+ const { container } = render(
160
+ <PromoBanner image="https://example.com/bleed.jpg" bleedImage>
161
+ <h2>Bleeding Image</h2>
162
+ <p>Content with bleeding image effect</p>
163
+ </PromoBanner>,
164
+ );
165
+ expect(container).toHTMLValidate();
166
+ });
167
+
168
+ it("is valid HTML with full width image", () => {
169
+ const { container } = render(
170
+ <PromoBanner
171
+ variant="vertical"
172
+ image="https://example.com/fullwidth.jpg"
173
+ imageFullWidth
174
+ >
175
+ <h2>Full Width Image</h2>
176
+ <p>Content with full width image</p>
177
+ </PromoBanner>,
178
+ );
179
+ expect(container).toHTMLValidate();
180
+ });
181
+
182
+ it("is valid HTML with reverse variant", () => {
183
+ const { container } = render(
184
+ <PromoBanner variant="reverse" image="https://example.com/reverse.jpg">
185
+ <h2>Reverse Layout</h2>
186
+ <p>Content with reverse layout</p>
187
+ </PromoBanner>,
188
+ );
189
+ expect(container).toHTMLValidate();
190
+ });
191
+ });
192
+
193
+ describe("Accessibility (A11y)", () => {
194
+ it("is accessible with default props", async () => {
195
+ const { container } = render(
196
+ <PromoBanner>
197
+ <h2>Accessible Content</h2>
198
+ <p>This content is accessible by default</p>
199
+ </PromoBanner>,
200
+ );
201
+ expect(await axe(container)).toHaveNoViolations();
202
+ });
203
+
204
+ it("is accessible with all props", async () => {
205
+ const { container } = render(
206
+ <PromoBanner
207
+ colorScheme="dark"
208
+ image="https://example.com/test.jpg"
209
+ alignImage="top"
210
+ bleedImage
211
+ variant="vertical"
212
+ >
213
+ <h2>Accessible Banner</h2>
214
+ <p>Banner content with all accessibility features</p>
215
+ <button type="button">Accessible Button</button>
216
+ </PromoBanner>,
217
+ );
218
+ expect(await axe(container)).toHaveNoViolations();
219
+ });
220
+
221
+ it("is accessible with complex interactive content", async () => {
222
+ const { container } = render(
223
+ <PromoBanner image="https://example.com/interactive.jpg">
224
+ <h1>Interactive Promotion</h1>
225
+ <p>
226
+ Promotion with multiple interactive elements and proper
227
+ accessibility
228
+ </p>
229
+ <form>
230
+ <label htmlFor="email">Email Address</label>
231
+ <input type="email" id="email" name="email" required />
232
+ <button type="submit">Subscribe</button>
233
+ </form>
234
+ <nav aria-label="Promotion navigation">
235
+ <ul>
236
+ <li>
237
+ <a href="#details">Details</a>
238
+ </li>
239
+ <li>
240
+ <a href="#terms">Terms</a>
241
+ </li>
242
+ <li>
243
+ <a href="#contact">Contact</a>
244
+ </li>
245
+ </ul>
246
+ </nav>
247
+ </PromoBanner>,
248
+ );
249
+ expect(await axe(container)).toHaveNoViolations();
250
+ });
251
+
252
+ it("has proper image alt attribute", async () => {
253
+ const { container } = render(
254
+ <PromoBanner image="https://example.com/promo.jpg">
255
+ <h2>Banner with Image</h2>
256
+ </PromoBanner>,
257
+ );
258
+
259
+ const image = screen.getByRole("img");
260
+ expect(image).toHaveAttribute("alt", "Obrázok");
261
+ expect(await axe(container)).toHaveNoViolations();
262
+ });
263
+
264
+ it("is accessible with heading hierarchy", async () => {
265
+ const { container } = render(
266
+ <PromoBanner>
267
+ <h1>Main Banner Title</h1>
268
+ <h2>Subtitle</h2>
269
+ <h3>Section Title</h3>
270
+ <p>Content with proper heading hierarchy</p>
271
+ </PromoBanner>,
272
+ );
273
+ expect(await axe(container)).toHaveNoViolations();
274
+ });
275
+
276
+ it("is accessible with form elements", async () => {
277
+ const { container } = render(
278
+ <PromoBanner>
279
+ <h2>Newsletter Signup</h2>
280
+ <form>
281
+ <fieldset>
282
+ <legend>Contact Information</legend>
283
+ <div>
284
+ <label htmlFor="promo-name">Name</label>
285
+ <input type="text" id="promo-name" name="name" required />
286
+ </div>
287
+ <div>
288
+ <label htmlFor="promo-email">Email</label>
289
+ <input type="email" id="promo-email" name="email" required />
290
+ </div>
291
+ <button type="submit">Submit</button>
292
+ </fieldset>
293
+ </form>
294
+ </PromoBanner>,
295
+ );
296
+ expect(await axe(container)).toHaveNoViolations();
297
+ });
298
+
299
+ it("is accessible with ARIA attributes", async () => {
300
+ const { container } = render(
301
+ <PromoBanner>
302
+ <div role="banner" aria-labelledby="promo-title">
303
+ <h2 id="promo-title">Special Promotion</h2>
304
+ <p aria-describedby="promo-details">Limited time offer</p>
305
+ <div id="promo-details">
306
+ Valid until end of month. Terms and conditions apply.
307
+ </div>
308
+ <button
309
+ type="button"
310
+ aria-expanded="false"
311
+ aria-controls="promo-details"
312
+ >
313
+ Learn More
314
+ </button>
315
+ </div>
316
+ </PromoBanner>,
317
+ );
318
+ expect(await axe(container)).toHaveNoViolations();
319
+ });
320
+
321
+ it("is accessible with reverse variant", async () => {
322
+ const { container } = render(
323
+ <PromoBanner variant="reverse" image="https://example.com/test.jpg">
324
+ <h2>Accessible Reverse Layout</h2>
325
+ <p>This content is accessible in reverse layout</p>
326
+ <button type="button">Action Button</button>
327
+ </PromoBanner>,
328
+ );
329
+ expect(await axe(container)).toHaveNoViolations();
330
+ });
331
+ });
332
+
333
+ describe("Functional Behavior", () => {
334
+ it("applies correct CSS classes for default state", () => {
335
+ const { container } = render(<PromoBanner>Content</PromoBanner>);
336
+
337
+ const banner = container.querySelector(".promo-banner");
338
+ const item = container.querySelector(".promo-banner__item");
339
+
340
+ expect(banner).toHaveClass("promo-banner");
341
+ expect(item).toHaveClass("promo-banner__item");
342
+ });
343
+
344
+ it("applies color scheme classes correctly", () => {
345
+ const { container: lightContainer } = render(
346
+ <PromoBanner colorScheme="light">Light Content</PromoBanner>,
347
+ );
348
+ const { container: darkContainer } = render(
349
+ <PromoBanner colorScheme="dark">Dark Content</PromoBanner>,
350
+ );
351
+
352
+ expect(lightContainer.querySelector(".promo-banner")).toHaveClass(
353
+ "is-light",
354
+ );
355
+ expect(darkContainer.querySelector(".promo-banner")).toHaveClass(
356
+ "is-dark",
357
+ );
358
+ });
359
+
360
+ it("applies variant classes correctly", () => {
361
+ const { container: horizontalContainer } = render(
362
+ <PromoBanner>Horizontal Content</PromoBanner>,
363
+ );
364
+ const { container: verticalContainer } = render(
365
+ <PromoBanner variant="vertical">Vertical Content</PromoBanner>,
366
+ );
367
+ const { container: reverseContainer } = render(
368
+ <PromoBanner variant="reverse" image="test.jpg">
369
+ Reverse Content
370
+ </PromoBanner>,
371
+ );
372
+
373
+ const horizontalItem = horizontalContainer.querySelector(
374
+ ".promo-banner__item",
375
+ );
376
+ const verticalItem = verticalContainer.querySelector(
377
+ ".promo-banner__item",
378
+ );
379
+ const reverseItem = reverseContainer.querySelector(".promo-banner__item");
380
+
381
+ expect(horizontalItem).not.toHaveClass(
382
+ "align-items-center",
383
+ "align-center",
384
+ "align-self-center",
385
+ );
386
+ expect(verticalItem).toHaveClass(
387
+ "align-items-center",
388
+ "align-center",
389
+ "align-self-center",
390
+ );
391
+ expect(reverseItem).not.toHaveClass(
392
+ "align-items-center",
393
+ "align-center",
394
+ "align-self-center",
395
+ );
396
+ });
397
+
398
+ it("applies image-related classes correctly", () => {
399
+ const { container } = render(
400
+ <PromoBanner
401
+ image="test.jpg"
402
+ alignImage="top"
403
+ bleedImage
404
+ imageFullWidth
405
+ >
406
+ Content
407
+ </PromoBanner>,
408
+ );
409
+
410
+ const imageContainer = container.querySelector(".promo-banner__image");
411
+ const image = screen.getByRole("img");
412
+
413
+ expect(imageContainer).toHaveClass(
414
+ "promo-banner__image",
415
+ "promo-banner__image--bleed-right",
416
+ "align-self-top",
417
+ );
418
+ expect(image).toHaveClass("mb-none", "fullwidth");
419
+ });
420
+
421
+ it("merges custom classes correctly", () => {
422
+ const { container } = render(
423
+ <PromoBanner
424
+ className="custom-banner"
425
+ itemClassName="custom-item"
426
+ imageClassName="custom-image"
427
+ image="test.jpg"
428
+ >
429
+ Content
430
+ </PromoBanner>,
431
+ );
432
+
433
+ const banner = container.querySelector(".promo-banner");
434
+ const item = container.querySelector(".promo-banner__item");
435
+ const imageContainer = container.querySelector(".promo-banner__image");
436
+
437
+ expect(banner).toHaveClass("promo-banner", "custom-banner");
438
+ expect(item).toHaveClass("promo-banner__item", "custom-item");
439
+ expect(imageContainer).toHaveClass("promo-banner__image", "custom-image");
440
+ });
441
+
442
+ it("handles Grid component integration correctly", () => {
443
+ const { container } = render(<PromoBanner>Grid Content</PromoBanner>);
444
+
445
+ const grid = container.querySelector(".grid");
446
+ const gridCols = container.querySelectorAll(".grid__col");
447
+
448
+ expect(grid).toBeInTheDocument();
449
+ expect(gridCols).toHaveLength(1); // Only content column when no image
450
+ });
451
+
452
+ it("handles GridCol sizes correctly", () => {
453
+ const { container: noImageContainer } = render(
454
+ <PromoBanner>No image content</PromoBanner>,
455
+ );
456
+ const { container: withImageContainer } = render(
457
+ <PromoBanner image="test.jpg">With image content</PromoBanner>,
458
+ );
459
+ const { container: verticalContainer } = render(
460
+ <PromoBanner variant="vertical">Vertical content</PromoBanner>,
461
+ );
462
+
463
+ const noImageCol = noImageContainer.querySelector(".grid__col");
464
+ const withImageContentCol = withImageContainer
465
+ .querySelector(".promo-banner__item")
466
+ .closest(".grid__col");
467
+ const verticalCol = verticalContainer.querySelector(".grid__col");
468
+
469
+ expect(noImageCol).toHaveClass("grid__col");
470
+ expect(withImageContentCol).toHaveClass("grid__col");
471
+ expect(verticalCol).toHaveClass("grid__col");
472
+ });
473
+ });
474
+
475
+ describe("Content Rendering", () => {
476
+ it("renders text content correctly", () => {
477
+ render(<PromoBanner>Simple text content</PromoBanner>);
478
+ expect(screen.getByText("Simple text content")).toBeInTheDocument();
479
+ });
480
+
481
+ it("renders complex JSX content correctly", () => {
482
+ render(
483
+ <PromoBanner>
484
+ <div data-testid="complex-wrapper">
485
+ <h1>Complex Title</h1>
486
+ <p>
487
+ Complex description with <strong>bold</strong> and <em>italic</em>{" "}
488
+ text
489
+ </p>
490
+ <ul>
491
+ <li>List item 1</li>
492
+ <li>List item 2</li>
493
+ </ul>
494
+ <button type="button">Action Button</button>
495
+ </div>
496
+ </PromoBanner>,
497
+ );
498
+
499
+ expect(screen.getByTestId("complex-wrapper")).toBeInTheDocument();
500
+ expect(screen.getByRole("heading", { level: 1 })).toHaveTextContent(
501
+ "Complex Title",
502
+ );
503
+ expect(screen.getByRole("button")).toHaveTextContent("Action Button");
504
+ expect(screen.getByRole("list")).toBeInTheDocument();
505
+ });
506
+
507
+ it("renders multiple children correctly", () => {
508
+ render(
509
+ <PromoBanner>
510
+ <h2>Title</h2>
511
+ <p>Description</p>
512
+ <div>Additional content</div>
513
+ <button type="button">Button</button>
514
+ </PromoBanner>,
515
+ );
516
+
517
+ expect(screen.getByRole("heading")).toBeInTheDocument();
518
+ expect(screen.getByText("Description")).toBeInTheDocument();
519
+ expect(screen.getByText("Additional content")).toBeInTheDocument();
520
+ expect(screen.getByRole("button")).toBeInTheDocument();
521
+ });
522
+
523
+ it("renders image with correct attributes", () => {
524
+ render(
525
+ <PromoBanner image="https://example.com/banner.jpg" imageFullWidth>
526
+ Content with image
527
+ </PromoBanner>,
528
+ );
529
+
530
+ const image = screen.getByRole("img");
531
+ expect(image).toHaveAttribute("src", "https://example.com/banner.jpg");
532
+ expect(image).toHaveAttribute("alt", "Obrázok");
533
+ expect(image).toHaveClass("mb-none", "fullwidth");
534
+ });
535
+
536
+ it("renders content without image correctly", () => {
537
+ render(<PromoBanner>Content without image</PromoBanner>);
538
+
539
+ expect(screen.getByText("Content without image")).toBeInTheDocument();
540
+ expect(screen.queryByRole("img")).not.toBeInTheDocument();
541
+ });
542
+
543
+ it("handles dynamic content updates", () => {
544
+ const { rerender } = render(<PromoBanner>Initial content</PromoBanner>);
545
+ expect(screen.getByText("Initial content")).toBeInTheDocument();
546
+
547
+ rerender(<PromoBanner>Updated content</PromoBanner>);
548
+ expect(screen.getByText("Updated content")).toBeInTheDocument();
549
+ expect(screen.queryByText("Initial content")).not.toBeInTheDocument();
550
+ });
551
+ });
552
+
553
+ describe("Edge Cases", () => {
554
+ it("handles null children gracefully", () => {
555
+ const { container } = render(<PromoBanner>{null}</PromoBanner>);
556
+ const banner = container.querySelector(".promo-banner");
557
+ expect(banner).toBeInTheDocument();
558
+ });
559
+
560
+ it("handles undefined children gracefully", () => {
561
+ const { container } = render(<PromoBanner>{undefined}</PromoBanner>);
562
+ const banner = container.querySelector(".promo-banner");
563
+ expect(banner).toBeInTheDocument();
564
+ });
565
+
566
+ it("handles boolean children gracefully", () => {
567
+ const { container } = render(<PromoBanner>{true}</PromoBanner>);
568
+ const banner = container.querySelector(".promo-banner");
569
+ expect(banner).toBeInTheDocument();
570
+ });
571
+
572
+ it("handles number children", () => {
573
+ render(<PromoBanner>{42}</PromoBanner>);
574
+ expect(screen.getByText("42")).toBeInTheDocument();
575
+ });
576
+
577
+ it("handles array children", () => {
578
+ render(<PromoBanner>{["Banner 1", "Banner 2", "Banner 3"]}</PromoBanner>);
579
+ expect(screen.getByText(/Banner 1/)).toBeInTheDocument();
580
+ expect(screen.getByText(/Banner 2/)).toBeInTheDocument();
581
+ expect(screen.getByText(/Banner 3/)).toBeInTheDocument();
582
+ });
583
+
584
+ it("handles empty string children", () => {
585
+ const { container } = render(<PromoBanner>{""}</PromoBanner>);
586
+ const banner = container.querySelector(".promo-banner");
587
+ expect(banner).toBeInTheDocument();
588
+ });
589
+
590
+ it("handles invalid colorScheme prop gracefully", () => {
591
+ const { container } = render(
592
+ <PromoBanner colorScheme="invalid-scheme" data-testid="test-banner">
593
+ Content
594
+ </PromoBanner>,
595
+ );
596
+ const banner = container.querySelector(".promo-banner");
597
+ expect(banner).toHaveClass("promo-banner");
598
+ expect(banner).not.toHaveClass("is-light");
599
+ expect(banner).not.toHaveClass("is-dark");
600
+ });
601
+
602
+ it("handles invalid alignImage prop gracefully", () => {
603
+ const { container } = render(
604
+ <PromoBanner image="test.jpg" alignImage="invalid">
605
+ Content
606
+ </PromoBanner>,
607
+ );
608
+ const imageContainer = container.querySelector(".promo-banner__image");
609
+ expect(imageContainer).toHaveClass("promo-banner__image");
610
+ // Invalid align values are passed through
611
+ expect(imageContainer).toHaveClass("align-self-invalid");
612
+ });
613
+
614
+ it("handles invalid variant prop gracefully", () => {
615
+ const { container } = render(
616
+ <PromoBanner variant="invalid">Content</PromoBanner>,
617
+ );
618
+ const contentCol = container
619
+ .querySelector(".promo-banner__item")
620
+ .closest(".grid__col");
621
+ // Should use default horizontal behavior
622
+ expect(contentCol).toHaveClass("grid__col");
623
+ const item = container.querySelector(".promo-banner__item");
624
+ expect(item).not.toHaveClass(
625
+ "align-items-center",
626
+ "align-center",
627
+ "align-self-center",
628
+ );
629
+ });
630
+
631
+ it("handles empty image URL", () => {
632
+ render(<PromoBanner image="">Content with empty image</PromoBanner>);
633
+ // Empty image URL should not render an image element
634
+ expect(screen.queryByRole("img")).not.toBeInTheDocument();
635
+ });
636
+
637
+ it("handles very long content gracefully", () => {
638
+ const longContent = "Very long content ".repeat(100);
639
+ render(<PromoBanner>{longContent}</PromoBanner>);
640
+ expect(screen.getByText(/Very long content/)).toBeInTheDocument();
641
+ });
642
+
643
+ it("handles special characters in content", () => {
644
+ const specialContent =
645
+ "Content with special chars: áčďéíľňóôšťúžý @#$%^&*()";
646
+ render(<PromoBanner>{specialContent}</PromoBanner>);
647
+ expect(screen.getByText(specialContent)).toBeInTheDocument();
648
+ });
649
+ });
650
+
651
+ describe("Integration Tests", () => {
652
+ it("works with interactive elements", async () => {
653
+ const user = userEvent.setup();
654
+ const handleClick = jest.fn();
655
+
656
+ render(
657
+ <PromoBanner>
658
+ <h2>Interactive Banner</h2>
659
+ <button type="button" onClick={handleClick}>
660
+ Click me
661
+ </button>
662
+ </PromoBanner>,
663
+ );
664
+
665
+ const button = screen.getByRole("button");
666
+ await user.click(button);
667
+ expect(handleClick).toHaveBeenCalledTimes(1);
668
+ });
669
+
670
+ it("handles form submission within banner", async () => {
671
+ const user = userEvent.setup();
672
+ const handleSubmit = jest.fn((e) => e.preventDefault());
673
+
674
+ render(
675
+ <PromoBanner>
676
+ <form onSubmit={handleSubmit}>
677
+ <label htmlFor="test-input">Test Input</label>
678
+ <input type="text" id="test-input" />
679
+ <button type="submit">Submit</button>
680
+ </form>
681
+ </PromoBanner>,
682
+ );
683
+
684
+ const input = screen.getByLabelText("Test Input");
685
+ const submitButton = screen.getByRole("button", { name: "Submit" });
686
+
687
+ await user.type(input, "test value");
688
+ await user.click(submitButton);
689
+
690
+ expect(handleSubmit).toHaveBeenCalledTimes(1);
691
+ expect(input).toHaveValue("test value");
692
+ });
693
+
694
+ it("handles focus management correctly", async () => {
695
+ const user = userEvent.setup();
696
+
697
+ render(
698
+ <PromoBanner>
699
+ <button type="button">Button 1</button>
700
+ <button type="button">Button 2</button>
701
+ <a href="#">Link</a>
702
+ </PromoBanner>,
703
+ );
704
+
705
+ const button1 = screen.getByRole("button", { name: "Button 1" });
706
+ const button2 = screen.getByRole("button", { name: "Button 2" });
707
+ const link = screen.getByRole("link");
708
+
709
+ await user.tab();
710
+ expect(button1).toHaveFocus();
711
+
712
+ await user.tab();
713
+ expect(button2).toHaveFocus();
714
+
715
+ await user.tab();
716
+ expect(link).toHaveFocus();
717
+ });
718
+
719
+ it("works with keyboard navigation", async () => {
720
+ const user = userEvent.setup();
721
+ const handleClick = jest.fn();
722
+
723
+ render(
724
+ <PromoBanner>
725
+ <button type="button" onClick={handleClick}>
726
+ Keyboard accessible button
727
+ </button>
728
+ </PromoBanner>,
729
+ );
730
+
731
+ const button = screen.getByRole("button");
732
+ button.focus();
733
+ await user.keyboard("{Enter}");
734
+ expect(handleClick).toHaveBeenCalledTimes(1);
735
+
736
+ await user.keyboard(" ");
737
+ expect(handleClick).toHaveBeenCalledTimes(2);
738
+ });
739
+
740
+ it("maintains proper Grid component behavior", () => {
741
+ const { container } = render(
742
+ <PromoBanner className="test-grid">
743
+ <div>Grid content</div>
744
+ </PromoBanner>,
745
+ );
746
+
747
+ const grid = container.querySelector(".grid");
748
+ const gridCol = container.querySelector(".grid__col");
749
+
750
+ expect(grid).toHaveClass("grid", "promo-banner", "test-grid");
751
+ expect(gridCol).toHaveClass("grid__col");
752
+ });
753
+
754
+ it("handles event propagation correctly", async () => {
755
+ const user = userEvent.setup();
756
+ const bannerClick = jest.fn();
757
+ const buttonClick = jest.fn((e) => e.stopPropagation());
758
+
759
+ render(
760
+ <PromoBanner onClick={bannerClick}>
761
+ <button type="button" onClick={buttonClick}>
762
+ Stop propagation button
763
+ </button>
764
+ </PromoBanner>,
765
+ );
766
+
767
+ const button = screen.getByRole("button");
768
+ await user.click(button);
769
+
770
+ expect(buttonClick).toHaveBeenCalledTimes(1);
771
+ expect(bannerClick).not.toHaveBeenCalled(); // Should be stopped
772
+ });
773
+
774
+ it("works with responsive image behavior", () => {
775
+ render(
776
+ <PromoBanner image="responsive.jpg" imageFullWidth>
777
+ Responsive content
778
+ </PromoBanner>,
779
+ );
780
+
781
+ const image = screen.getByRole("img");
782
+ expect(image).toHaveClass("fullwidth");
783
+ expect(image).toHaveAttribute("src", "responsive.jpg");
784
+ });
785
+
786
+ it("handles complex nested component structure", () => {
787
+ render(
788
+ <PromoBanner image="complex.jpg" variant="vertical">
789
+ <header>
790
+ <h1>Complex Structure</h1>
791
+ </header>
792
+ <main>
793
+ <section>
794
+ <h2>Section Title</h2>
795
+ <article>
796
+ <h3>Article Title</h3>
797
+ <p>Article content</p>
798
+ </article>
799
+ </section>
800
+ </main>
801
+ <aside>
802
+ <p>Sidebar content</p>
803
+ </aside>
804
+ </PromoBanner>,
805
+ );
806
+
807
+ expect(screen.getByRole("banner")).toBeInTheDocument();
808
+ expect(screen.getByRole("main")).toBeInTheDocument();
809
+ expect(screen.getByRole("complementary")).toBeInTheDocument();
810
+ expect(screen.getByRole("article")).toBeInTheDocument();
811
+ });
812
+ });
813
+ });