@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,567 @@
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 { PromotionCard } from "../";
7
+
8
+ /**
9
+ * PromotionCard Component Conformance Tests
10
+ *
11
+ * These tests verify the complete functionality of the PromotionCard component including:
12
+ *
13
+ * 🎯 HTML VALIDITY
14
+ * - HTML validity with various prop combinations
15
+ * - Semantic HTML structure
16
+ * - Complex JSX structure validation
17
+ * - Card wrapper structure
18
+ *
19
+ * ♿ ACCESSIBILITY (A11y)
20
+ * - WCAG 2.1 compliance using jest-axe
21
+ * - Proper use of semantic HTML elements
22
+ * - ARIA attributes and their validity
23
+ * - Interactive elements (buttons, links)
24
+ * - Focus management and keyboard navigation
25
+ * - Screen reader compatibility
26
+ * - Color contrast compliance
27
+ *
28
+ * 🎨 FUNCTIONAL BEHAVIOR
29
+ * - Correct application of CSS classes (promotion-card, card)
30
+ * - Color scheme variants: light (default), dark
31
+ * - Color mapping to Card component (background-primary, background-contrast)
32
+ * - Custom className merging
33
+ * - Props combinations
34
+ * - Card integration and structure
35
+ * - Text inverse functionality for dark color scheme
36
+ *
37
+ * 📝 CONTENT RENDERING
38
+ * - Text children rendering through Card
39
+ * - Complex JSX children
40
+ * - Multiple children
41
+ * - Empty content handling
42
+ *
43
+ * ⚠️ EDGE CASES
44
+ * - Null, undefined, boolean children
45
+ * - Number and array children
46
+ * - Invalid props graceful handling
47
+ * - Boundary usage cases
48
+ *
49
+ * 🔗 INTEGRATION TESTS
50
+ * - Working with interactive elements
51
+ * - Card component integration
52
+ * - Event handling
53
+ * - Focus management
54
+ */
55
+
56
+ describe("PromotionCard Component Conformance Tests", () => {
57
+ describe("HTML Validity", () => {
58
+ it("is valid HTML with default props", () => {
59
+ const { container } = render(<PromotionCard />);
60
+ expect(container).toHTMLValidate();
61
+ });
62
+
63
+ it("is valid HTML with all props", () => {
64
+ const { container } = render(
65
+ <PromotionCard
66
+ colorScheme="dark"
67
+ className="test-class"
68
+ data-testid="test-promotion-card"
69
+ >
70
+ <h2>Promotion Title</h2>
71
+ <p>Promotion description</p>
72
+ </PromotionCard>,
73
+ );
74
+ expect(container).toHTMLValidate();
75
+ });
76
+
77
+ it("is valid HTML with complex content", () => {
78
+ const { container } = render(
79
+ <PromotionCard>
80
+ <header>
81
+ <h1>Special Offer</h1>
82
+ </header>
83
+ <main>
84
+ <section>
85
+ <h2>Details</h2>
86
+ <p>Limited time promotion</p>
87
+ <button type="button">Learn More</button>
88
+ </section>
89
+ </main>
90
+ </PromotionCard>,
91
+ );
92
+ expect(container).toHTMLValidate();
93
+ });
94
+
95
+ it("is valid HTML with Card wrapper", () => {
96
+ const { container } = render(
97
+ <PromotionCard>
98
+ <div>Content wrapped in Card</div>
99
+ </PromotionCard>,
100
+ );
101
+ expect(container).toHTMLValidate();
102
+ });
103
+ });
104
+
105
+ describe("Accessibility", () => {
106
+ it("is accessible with default props", async () => {
107
+ const { container } = render(<PromotionCard />);
108
+ expect(await axe(container)).toHaveNoViolations();
109
+ });
110
+
111
+ it("is accessible with light color scheme", async () => {
112
+ const { container } = render(
113
+ <PromotionCard colorScheme="light">
114
+ <h1>Light Theme Promotion</h1>
115
+ <p>This is a light themed promotion card.</p>
116
+ </PromotionCard>,
117
+ );
118
+ expect(await axe(container)).toHaveNoViolations();
119
+ });
120
+
121
+ it("is accessible with dark color scheme", async () => {
122
+ const { container } = render(
123
+ <PromotionCard colorScheme="dark">
124
+ <h1>Dark Theme Promotion</h1>
125
+ <p>This is a dark themed promotion card with proper contrast.</p>
126
+ </PromotionCard>,
127
+ );
128
+ expect(await axe(container)).toHaveNoViolations();
129
+ });
130
+
131
+ it("is accessible with complex content", async () => {
132
+ const { container } = render(
133
+ <PromotionCard colorScheme="light">
134
+ <header>
135
+ <h1>Promotion Title</h1>
136
+ <nav aria-label="Promotion navigation">
137
+ <ul>
138
+ <li>
139
+ <a href="#details">Details</a>
140
+ </li>
141
+ <li>
142
+ <a href="#terms">Terms</a>
143
+ </li>
144
+ </ul>
145
+ </nav>
146
+ </header>
147
+ <main>
148
+ <section>
149
+ <h2>Offer Details</h2>
150
+ <p>
151
+ Get <strong>50% off</strong> on all items this week.
152
+ </p>
153
+ <button type="button" aria-describedby="offer-description">
154
+ Claim Offer
155
+ </button>
156
+ <p id="offer-description">Click to claim your discount code</p>
157
+ </section>
158
+ </main>
159
+ </PromotionCard>,
160
+ );
161
+ expect(await axe(container)).toHaveNoViolations();
162
+ });
163
+
164
+ it("is accessible with interactive elements", async () => {
165
+ const { container } = render(
166
+ <PromotionCard>
167
+ <form>
168
+ <label htmlFor="email">Email for special offers</label>
169
+ <input
170
+ type="email"
171
+ id="email"
172
+ name="email"
173
+ aria-describedby="email-help"
174
+ />
175
+ <p id="email-help">We&apos;ll send you exclusive deals</p>
176
+ <button type="submit">Subscribe</button>
177
+ </form>
178
+ </PromotionCard>,
179
+ );
180
+ expect(await axe(container)).toHaveNoViolations();
181
+ });
182
+
183
+ it("is accessible with ARIA attributes", async () => {
184
+ const { container } = render(
185
+ <PromotionCard
186
+ role="region"
187
+ aria-label="Special promotion offer"
188
+ aria-describedby="promotion-description"
189
+ >
190
+ <h2>Flash Sale</h2>
191
+ <p id="promotion-description">Limited time offer ending soon</p>
192
+ </PromotionCard>,
193
+ );
194
+ expect(await axe(container)).toHaveNoViolations();
195
+ });
196
+
197
+ it("is accessible with Card wrapper", async () => {
198
+ const { container } = render(
199
+ <PromotionCard>
200
+ <div role="article">
201
+ <h1>Accessible promotion content</h1>
202
+ </div>
203
+ </PromotionCard>,
204
+ );
205
+ expect(await axe(container)).toHaveNoViolations();
206
+ });
207
+ });
208
+
209
+ describe("Functional Behavior", () => {
210
+ it("renders with correct default classes", () => {
211
+ const { container } = render(
212
+ <PromotionCard data-testid="test-promotion-card" />,
213
+ );
214
+ const card = container.querySelector(
215
+ '[data-testid="test-promotion-card"]',
216
+ );
217
+ expect(card).toHaveClass("card");
218
+ expect(card).toHaveClass("promotion-card");
219
+ expect(card).not.toHaveClass("background-primary");
220
+ });
221
+
222
+ it("applies color scheme classes correctly", () => {
223
+ const colorSchemes = ["light", "dark"];
224
+ colorSchemes.forEach((colorScheme) => {
225
+ const { container } = render(
226
+ <PromotionCard
227
+ colorScheme={colorScheme}
228
+ data-testid="test-promotion-card"
229
+ />,
230
+ );
231
+ const card = container.querySelector(
232
+ '[data-testid="test-promotion-card"]',
233
+ );
234
+
235
+ expect(card).toHaveClass("promotion-card");
236
+
237
+ if (colorScheme === "light") {
238
+ expect(card).not.toHaveClass("background-primary");
239
+ expect(card).not.toHaveClass("background-contrast");
240
+ expect(card).not.toHaveClass("text-inverse");
241
+ } else {
242
+ expect(card).toHaveClass("background-contrast");
243
+ expect(card).toHaveClass("text-inverse");
244
+ }
245
+ });
246
+ });
247
+
248
+ it("applies dark color scheme with text-inverse correctly", () => {
249
+ const { container } = render(
250
+ <PromotionCard colorScheme="dark" data-testid="test-promotion-card" />,
251
+ );
252
+ const card = container.querySelector(
253
+ '[data-testid="test-promotion-card"]',
254
+ );
255
+ expect(card).toHaveClass("promotion-card");
256
+ expect(card).toHaveClass("background-contrast");
257
+ expect(card).toHaveClass("text-inverse");
258
+ });
259
+
260
+ it("combines multiple props correctly", () => {
261
+ const { container } = render(
262
+ <PromotionCard
263
+ colorScheme="dark"
264
+ className="custom-class"
265
+ data-testid="test-promotion-card"
266
+ />,
267
+ );
268
+ const card = container.querySelector(
269
+ '[data-testid="test-promotion-card"]',
270
+ );
271
+ expect(card).toHaveClass("card");
272
+ expect(card).toHaveClass("promotion-card");
273
+ expect(card).toHaveClass("background-contrast");
274
+ expect(card).toHaveClass("text-inverse");
275
+ expect(card).toHaveClass("custom-class");
276
+ });
277
+
278
+ it("passes through additional props", () => {
279
+ const { container } = render(
280
+ <PromotionCard
281
+ data-testid="test-promotion-card"
282
+ id="promotion-id"
283
+ role="region"
284
+ aria-label="Special offer"
285
+ />,
286
+ );
287
+ const card = container.querySelector(
288
+ '[data-testid="test-promotion-card"]',
289
+ );
290
+ expect(card).toHaveAttribute("id", "promotion-id");
291
+ expect(card).toHaveAttribute("role", "region");
292
+ expect(card).toHaveAttribute("aria-label", "Special offer");
293
+ });
294
+
295
+ it("integrates properly with Card component", () => {
296
+ const { container } = render(
297
+ <PromotionCard data-testid="test-promotion-card" noBorder={true}>
298
+ <div>Card content</div>
299
+ </PromotionCard>,
300
+ );
301
+ const card = container.querySelector(
302
+ '[data-testid="test-promotion-card"]',
303
+ );
304
+ expect(card).toHaveClass("card");
305
+ expect(card).toHaveClass("promotion-card");
306
+ expect(card).toHaveClass("card--no-border");
307
+ });
308
+ });
309
+
310
+ describe("Content Rendering", () => {
311
+ it("renders text children through Card", () => {
312
+ render(<PromotionCard>Simple promotion text</PromotionCard>);
313
+ expect(screen.getByText("Simple promotion text")).toBeInTheDocument();
314
+ });
315
+
316
+ it("renders complex JSX children through Card", () => {
317
+ render(
318
+ <PromotionCard>
319
+ <header>
320
+ <h1>Promotion Header</h1>
321
+ <nav aria-label="Promotion navigation">
322
+ <ul>
323
+ <li>
324
+ <a href="#offer">Offer</a>
325
+ </li>
326
+ <li>
327
+ <a href="#terms">Terms</a>
328
+ </li>
329
+ </ul>
330
+ </nav>
331
+ </header>
332
+ <main>
333
+ <article>
334
+ <h2>Special Deal</h2>
335
+ <p>
336
+ Save big with our <strong>exclusive offer</strong>.
337
+ </p>
338
+ </article>
339
+ </main>
340
+ </PromotionCard>,
341
+ );
342
+
343
+ expect(screen.getByText("Promotion Header")).toBeInTheDocument();
344
+ expect(screen.getByText("Offer")).toBeInTheDocument();
345
+ expect(screen.getByText("Terms")).toBeInTheDocument();
346
+ expect(screen.getByText("Special Deal")).toBeInTheDocument();
347
+ expect(screen.getByText(/Save big with our/)).toBeInTheDocument();
348
+ expect(screen.getByText("exclusive offer")).toBeInTheDocument();
349
+ });
350
+
351
+ it("renders multiple children through Card", () => {
352
+ render(
353
+ <PromotionCard>
354
+ <div>Section 1</div>
355
+ <div>Section 2</div>
356
+ <div>Section 3</div>
357
+ </PromotionCard>,
358
+ );
359
+
360
+ expect(screen.getByText("Section 1")).toBeInTheDocument();
361
+ expect(screen.getByText("Section 2")).toBeInTheDocument();
362
+ expect(screen.getByText("Section 3")).toBeInTheDocument();
363
+ });
364
+
365
+ it("renders empty children", () => {
366
+ const { container } = render(
367
+ <PromotionCard data-testid="test-promotion-card" />,
368
+ );
369
+ const card = container.querySelector(
370
+ '[data-testid="test-promotion-card"]',
371
+ );
372
+ expect(card).toBeInTheDocument();
373
+ expect(card.children.length).toBe(0);
374
+ });
375
+
376
+ it("renders Card with proper structure", () => {
377
+ const { container } = render(
378
+ <PromotionCard data-testid="test-promotion-card">
379
+ <p>Test content</p>
380
+ </PromotionCard>,
381
+ );
382
+ const card = container.querySelector(
383
+ '[data-testid="test-promotion-card"]',
384
+ );
385
+ expect(card).toBeInTheDocument();
386
+ expect(card).toHaveClass("card");
387
+ expect(card).toHaveClass("promotion-card");
388
+ expect(card).toContainElement(screen.getByText("Test content"));
389
+ });
390
+ });
391
+
392
+ describe("Edge Cases", () => {
393
+ it("handles null children", () => {
394
+ const { container } = render(
395
+ <PromotionCard data-testid="test-promotion-card">{null}</PromotionCard>,
396
+ );
397
+ const card = container.querySelector(
398
+ '[data-testid="test-promotion-card"]',
399
+ );
400
+ expect(card).toBeInTheDocument();
401
+ });
402
+
403
+ it("handles undefined children", () => {
404
+ const { container } = render(
405
+ <PromotionCard data-testid="test-promotion-card">
406
+ {undefined}
407
+ </PromotionCard>,
408
+ );
409
+ const card = container.querySelector(
410
+ '[data-testid="test-promotion-card"]',
411
+ );
412
+ expect(card).toBeInTheDocument();
413
+ });
414
+
415
+ it("handles boolean children", () => {
416
+ const { container } = render(
417
+ <PromotionCard data-testid="test-promotion-card">{true}</PromotionCard>,
418
+ );
419
+ const card = container.querySelector(
420
+ '[data-testid="test-promotion-card"]',
421
+ );
422
+ expect(card).toBeInTheDocument();
423
+ });
424
+
425
+ it("handles number children", () => {
426
+ render(<PromotionCard>42</PromotionCard>);
427
+ expect(screen.getByText("42")).toBeInTheDocument();
428
+ });
429
+
430
+ it("handles array children", () => {
431
+ render(
432
+ <PromotionCard>{["Promo 1", "Promo 2", "Promo 3"]}</PromotionCard>,
433
+ );
434
+ expect(screen.getByText(/Promo 1/)).toBeInTheDocument();
435
+ expect(screen.getByText(/Promo 2/)).toBeInTheDocument();
436
+ expect(screen.getByText(/Promo 3/)).toBeInTheDocument();
437
+ });
438
+
439
+ it("handles invalid colorScheme prop gracefully", () => {
440
+ const { container } = render(
441
+ <PromotionCard
442
+ colorScheme="invalid-scheme"
443
+ data-testid="test-promotion-card"
444
+ />,
445
+ );
446
+ const card = container.querySelector(
447
+ '[data-testid="test-promotion-card"]',
448
+ );
449
+ expect(card).toHaveClass("promotion-card");
450
+ // Should fallback to light behavior
451
+ expect(card).not.toHaveClass("background-primary");
452
+ expect(card).not.toHaveClass("background-contrast");
453
+ });
454
+ });
455
+
456
+ describe("Integration Tests", () => {
457
+ it("works with interactive elements", async () => {
458
+ const user = userEvent.setup();
459
+ const handleClick = jest.fn();
460
+
461
+ render(
462
+ <PromotionCard>
463
+ <button type="button" onClick={handleClick}>
464
+ Claim Offer
465
+ </button>
466
+ <input type="text" placeholder="Enter code" />
467
+ <select>
468
+ <option value="offer1">Offer 1</option>
469
+ <option value="offer2">Offer 2</option>
470
+ </select>
471
+ </PromotionCard>,
472
+ );
473
+
474
+ const button = screen.getByRole("button", { name: "Claim Offer" });
475
+ const input = screen.getByPlaceholderText("Enter code");
476
+ const select = screen.getByRole("combobox");
477
+
478
+ expect(button).toBeInTheDocument();
479
+ expect(input).toBeInTheDocument();
480
+ expect(select).toBeInTheDocument();
481
+
482
+ await user.click(button);
483
+ expect(handleClick).toHaveBeenCalledTimes(1);
484
+
485
+ await user.type(input, "PROMO50");
486
+ expect(input).toHaveValue("PROMO50");
487
+
488
+ await user.selectOptions(select, "offer2");
489
+ expect(select).toHaveValue("offer2");
490
+ });
491
+
492
+ it("maintains focus management", async () => {
493
+ const user = userEvent.setup();
494
+
495
+ render(
496
+ <PromotionCard>
497
+ <button type="button">First Button</button>
498
+ <input type="text" placeholder="Input field" />
499
+ <button type="button">Second Button</button>
500
+ </PromotionCard>,
501
+ );
502
+
503
+ const firstButton = screen.getByRole("button", { name: "First Button" });
504
+ const input = screen.getByPlaceholderText("Input field");
505
+ const secondButton = screen.getByRole("button", {
506
+ name: "Second Button",
507
+ });
508
+
509
+ // Test tab navigation
510
+ await user.tab();
511
+ expect(firstButton).toHaveFocus();
512
+
513
+ await user.tab();
514
+ expect(input).toHaveFocus();
515
+
516
+ await user.tab();
517
+ expect(secondButton).toHaveFocus();
518
+ });
519
+
520
+ it("works with Card integration for complex interactions", async () => {
521
+ const user = userEvent.setup();
522
+ const handleSubmit = jest.fn((e) => e.preventDefault());
523
+
524
+ render(
525
+ <PromotionCard colorScheme="dark">
526
+ <form onSubmit={handleSubmit}>
527
+ <h2>Special Promotion</h2>
528
+ <label htmlFor="email">Email</label>
529
+ <input
530
+ type="email"
531
+ id="email"
532
+ name="email"
533
+ required
534
+ aria-describedby="email-help"
535
+ />
536
+ <p id="email-help">Get exclusive deals in your inbox</p>
537
+ <label htmlFor="subscribe">
538
+ <input type="checkbox" id="subscribe" name="subscribe" />
539
+ Subscribe to newsletter
540
+ </label>
541
+ <button type="submit">Get Offers</button>
542
+ </form>
543
+ </PromotionCard>,
544
+ );
545
+
546
+ const emailInput = screen.getByLabelText("Email");
547
+ const checkbox = screen.getByLabelText("Subscribe to newsletter");
548
+ const submitButton = screen.getByRole("button", { name: "Get Offers" });
549
+
550
+ // Interact with form elements
551
+ await user.type(emailInput, "test@example.com");
552
+ expect(emailInput).toHaveValue("test@example.com");
553
+
554
+ await user.click(checkbox);
555
+ expect(checkbox).toBeChecked();
556
+
557
+ await user.click(submitButton);
558
+ expect(handleSubmit).toHaveBeenCalledTimes(1);
559
+
560
+ // Verify accessibility is maintained
561
+ expect(emailInput).toHaveAttribute("aria-describedby", "email-help");
562
+ expect(
563
+ screen.getByText("Get exclusive deals in your inbox"),
564
+ ).toBeInTheDocument();
565
+ });
566
+ });
567
+ });