@orangesk/orange-design-system 2.0.0-beta.0 → 2.0.0-beta.10

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 (572) 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 +1508 -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 +6 -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/ModalProductFooter.d.ts +10 -0
  47. package/build/components/types/src/components/Modal/index.d.ts +2 -0
  48. package/build/components/types/src/components/Pagination/Pagination.d.ts +2 -3
  49. package/build/components/types/src/components/Pill/Pill.d.ts +4 -1
  50. package/build/components/types/src/components/Preview/PreviewGenerator.d.ts +1 -1
  51. package/build/components/types/src/components/PromoBanner/PromoBanner.d.ts +9 -5
  52. package/build/components/types/src/components/PromotionCard/PromotionCard.d.ts +2 -2
  53. package/build/components/types/src/components/Section/Section.d.ts +4 -1
  54. package/build/components/types/src/components/Tag/Tag.d.ts +9 -2
  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 +35 -29
  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 +9 -3
  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 +14 -27
  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 +7 -0
  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 -13
  247. package/src/components/Megamenu/styles/mixins.scss +647 -208
  248. package/src/components/Megamenu/styles/style.scss +173 -61
  249. package/src/components/Modal/Modal.tsx +17 -2
  250. package/src/components/Modal/ModalBody.tsx +29 -14
  251. package/src/components/Modal/ModalProductBody.tsx +52 -0
  252. package/src/components/Modal/ModalProductFooter.tsx +38 -0
  253. package/src/components/Modal/index.ts +2 -0
  254. package/src/components/Modal/styles/config.scss +7 -0
  255. package/src/components/Modal/styles/mixins.scss +121 -14
  256. package/src/components/Modal/styles/style.scss +28 -0
  257. package/src/components/Modal/tests/Modal.unit.test.js +73 -0
  258. package/src/components/Modal/tests/ModalBody.unit.test.js +28 -12
  259. package/src/components/Pagination/Pagination.tsx +2 -2
  260. package/src/components/Pill/Pill.tsx +8 -3
  261. package/src/components/Pill/styles/config.scss +22 -2
  262. package/src/components/Pill/styles/style.scss +7 -3
  263. package/src/components/Pill/tests/Pill.conformance.test.js +7 -3
  264. package/src/components/Pill/tests/Pill.unit.test.js +45 -7
  265. package/src/components/Preview/PreviewGenerator.tsx +78 -34
  266. package/src/components/PromoBanner/PromoBanner.tsx +52 -34
  267. package/src/components/PromoBanner/styles/mixins.scss +37 -20
  268. package/src/components/PromoBanner/styles/style.scss +5 -11
  269. package/src/components/PromoBanner/tests/PromoBanner.conformance.test.js +781 -0
  270. package/src/components/PromoBanner/tests/PromoBanner.unit.test.js +529 -0
  271. package/src/components/PromotionCard/PromotionCard.tsx +13 -12
  272. package/src/components/PromotionCard/tests/PromotionCard.conformance.test.js +567 -0
  273. package/src/components/PromotionCard/tests/PromotionCard.unit.test.js +500 -0
  274. package/src/components/Section/Section.tsx +20 -4
  275. package/src/components/Section/styles/config.scss +18 -16
  276. package/src/components/Section/styles/mixins.scss +16 -13
  277. package/src/components/Section/styles/style.scss +1 -0
  278. package/src/components/Section/tests/Section.conformance.test.js +27 -10
  279. package/src/components/Section/tests/Section.unit.test.js +73 -25
  280. package/src/components/Tag/Tag.tsx +27 -3
  281. package/src/components/Tag/styles/config.scss +31 -0
  282. package/src/components/Tag/styles/mixins.scss +39 -3
  283. package/src/components/Tag/styles/style.scss +28 -2
  284. package/src/components/Tag/tests/Tag.conformance.test.js +19 -1
  285. package/src/components/Tag/tests/Tag.unit.test.js +93 -0
  286. package/src/components/Tile/styles/style.scss +1 -1
  287. package/src/components/index.ts +5 -6
  288. package/src/styles/base/globals.scss +19 -0
  289. package/src/styles/base/styleguide.scss +17 -17
  290. package/src/styles/export/base.js +2 -2
  291. package/src/styles/export/color.js +2 -2
  292. package/src/styles/shame.scss +2 -1
  293. package/src/styles/tokens/base.scss +1 -1
  294. package/src/styles/tokens/color.scss +12 -8
  295. package/src/styles/typography/mixins.scss +3 -2
  296. package/src/styles/utilities/border.scss +1 -1
  297. package/src/styles/utilities/color.scss +113 -20
  298. package/src/styles/utilities/index.scss +1 -0
  299. package/src/styles/utilities/layout.scss +9 -0
  300. package/src/styles/utilities/ordering.scss +44 -0
  301. package/build/components/Accordion/index.js +0 -16
  302. package/build/components/Accordion/index.js.map +0 -1
  303. package/build/components/Accordion/tsconfig.tsbuildinfo +0 -1
  304. package/build/components/Alert/index.js +0 -16
  305. package/build/components/Alert/index.js.map +0 -1
  306. package/build/components/Alert/tsconfig.tsbuildinfo +0 -1
  307. package/build/components/AnchorNavigation/index.js +0 -16
  308. package/build/components/AnchorNavigation/index.js.map +0 -1
  309. package/build/components/AnchorNavigation/style.css +0 -2
  310. package/build/components/AnchorNavigation/style.css.map +0 -1
  311. package/build/components/AnchorNavigation/tsconfig.tsbuildinfo +0 -1
  312. package/build/components/Bar/index.js +0 -16
  313. package/build/components/Bar/index.js.map +0 -1
  314. package/build/components/Bar/tsconfig.tsbuildinfo +0 -1
  315. package/build/components/BlockAction/index.js +0 -16
  316. package/build/components/BlockAction/index.js.map +0 -1
  317. package/build/components/BlockAction/style.css +0 -2
  318. package/build/components/BlockAction/style.css.map +0 -1
  319. package/build/components/BlockAction/tsconfig.tsbuildinfo +0 -1
  320. package/build/components/BodyBanner/index.js +0 -16
  321. package/build/components/BodyBanner/index.js.map +0 -1
  322. package/build/components/BodyBanner/style.css +0 -2
  323. package/build/components/BodyBanner/style.css.map +0 -1
  324. package/build/components/BodyBanner/tsconfig.tsbuildinfo +0 -1
  325. package/build/components/Breadcrumbs/index.js +0 -16
  326. package/build/components/Breadcrumbs/index.js.map +0 -1
  327. package/build/components/Breadcrumbs/tsconfig.tsbuildinfo +0 -1
  328. package/build/components/Button/index.js +0 -16
  329. package/build/components/Button/index.js.map +0 -1
  330. package/build/components/Button/style.css +0 -2
  331. package/build/components/Button/style.css.map +0 -1
  332. package/build/components/Button/tsconfig.tsbuildinfo +0 -1
  333. package/build/components/Buttons/index.js +0 -16
  334. package/build/components/Buttons/index.js.map +0 -1
  335. package/build/components/Buttons/tsconfig.tsbuildinfo +0 -1
  336. package/build/components/Card/index.js +0 -16
  337. package/build/components/Card/index.js.map +0 -1
  338. package/build/components/Card/tsconfig.tsbuildinfo +0 -1
  339. package/build/components/Carousel/index.js +0 -16
  340. package/build/components/Carousel/index.js.map +0 -1
  341. package/build/components/Carousel/style.css +0 -2
  342. package/build/components/Carousel/style.css.map +0 -1
  343. package/build/components/Carousel/tsconfig.tsbuildinfo +0 -1
  344. package/build/components/CarouselPromotions/index.js +0 -16
  345. package/build/components/CarouselPromotions/index.js.map +0 -1
  346. package/build/components/CarouselPromotions/tsconfig.tsbuildinfo +0 -1
  347. package/build/components/CartTable/index.js +0 -16
  348. package/build/components/CartTable/index.js.map +0 -1
  349. package/build/components/CartTable/style.css +0 -2
  350. package/build/components/CartTable/style.css.map +0 -1
  351. package/build/components/CartTable/tsconfig.tsbuildinfo +0 -1
  352. package/build/components/Code/index.js +0 -11
  353. package/build/components/Code/index.js.map +0 -1
  354. package/build/components/Code/style.css +0 -2
  355. package/build/components/Code/style.css.map +0 -1
  356. package/build/components/Code/tsconfig.tsbuildinfo +0 -1
  357. package/build/components/Container/index.js +0 -16
  358. package/build/components/Container/index.js.map +0 -1
  359. package/build/components/Container/tsconfig.tsbuildinfo +0 -1
  360. package/build/components/Controls/index.js +0 -16
  361. package/build/components/Controls/index.js.map +0 -1
  362. package/build/components/Controls/tsconfig.tsbuildinfo +0 -1
  363. package/build/components/Cover/index.js +0 -16
  364. package/build/components/Cover/index.js.map +0 -1
  365. package/build/components/Cover/style.css +0 -2
  366. package/build/components/Cover/style.css.map +0 -1
  367. package/build/components/Cover/tsconfig.tsbuildinfo +0 -1
  368. package/build/components/Divider/index.js +0 -16
  369. package/build/components/Divider/index.js.map +0 -1
  370. package/build/components/Divider/tsconfig.tsbuildinfo +0 -1
  371. package/build/components/DocumentationSidebar/index.js +0 -16
  372. package/build/components/DocumentationSidebar/index.js.map +0 -1
  373. package/build/components/DocumentationSidebar/style.css +0 -2
  374. package/build/components/DocumentationSidebar/style.css.map +0 -1
  375. package/build/components/DocumentationSidebar/tsconfig.tsbuildinfo +0 -1
  376. package/build/components/Dropdown/index.js +0 -16
  377. package/build/components/Dropdown/index.js.map +0 -1
  378. package/build/components/Dropdown/style.css +0 -2
  379. package/build/components/Dropdown/style.css.map +0 -1
  380. package/build/components/Dropdown/tsconfig.tsbuildinfo +0 -1
  381. package/build/components/Expander/index.js +0 -16
  382. package/build/components/Expander/index.js.map +0 -1
  383. package/build/components/Expander/tsconfig.tsbuildinfo +0 -1
  384. package/build/components/FeatureAccordion/index.js +0 -16
  385. package/build/components/FeatureAccordion/index.js.map +0 -1
  386. package/build/components/FeatureAccordion/style.css +0 -2
  387. package/build/components/FeatureAccordion/style.css.map +0 -1
  388. package/build/components/FeatureAccordion/tsconfig.tsbuildinfo +0 -1
  389. package/build/components/Footer/index.js +0 -16
  390. package/build/components/Footer/index.js.map +0 -1
  391. package/build/components/Footer/style.css +0 -2
  392. package/build/components/Footer/style.css.map +0 -1
  393. package/build/components/Footer/tsconfig.tsbuildinfo +0 -1
  394. package/build/components/Forms/index.js +0 -20
  395. package/build/components/Forms/index.js.map +0 -1
  396. package/build/components/Forms/style.css +0 -2
  397. package/build/components/Forms/style.css.map +0 -1
  398. package/build/components/Forms/tsconfig.tsbuildinfo +0 -1
  399. package/build/components/Gauge/index.js +0 -16
  400. package/build/components/Gauge/index.js.map +0 -1
  401. package/build/components/Gauge/tsconfig.tsbuildinfo +0 -1
  402. package/build/components/Grid/index.js +0 -16
  403. package/build/components/Grid/index.js.map +0 -1
  404. package/build/components/Grid/style.css +0 -2
  405. package/build/components/Grid/style.css.map +0 -1
  406. package/build/components/Grid/tsconfig.tsbuildinfo +0 -1
  407. package/build/components/Hero/index.js +0 -16
  408. package/build/components/Hero/index.js.map +0 -1
  409. package/build/components/Hero/style.css +0 -2
  410. package/build/components/Hero/style.css.map +0 -1
  411. package/build/components/Hero/tsconfig.tsbuildinfo +0 -1
  412. package/build/components/Icon/index.js +0 -11
  413. package/build/components/Icon/index.js.map +0 -1
  414. package/build/components/Icon/tsconfig.tsbuildinfo +0 -1
  415. package/build/components/IconList/index.js +0 -16
  416. package/build/components/IconList/index.js.map +0 -1
  417. package/build/components/IconList/style.css +0 -2
  418. package/build/components/IconList/style.css.map +0 -1
  419. package/build/components/IconList/tsconfig.tsbuildinfo +0 -1
  420. package/build/components/Image/index.js +0 -16
  421. package/build/components/Image/index.js.map +0 -1
  422. package/build/components/Image/tsconfig.tsbuildinfo +0 -1
  423. package/build/components/Link/index.js +0 -7
  424. package/build/components/Link/index.js.map +0 -1
  425. package/build/components/Link/tsconfig.tsbuildinfo +0 -1
  426. package/build/components/List/index.js +0 -16
  427. package/build/components/List/index.js.map +0 -1
  428. package/build/components/List/style.css +0 -2
  429. package/build/components/List/style.css.map +0 -1
  430. package/build/components/List/tsconfig.tsbuildinfo +0 -1
  431. package/build/components/Loader/index.js +0 -16
  432. package/build/components/Loader/index.js.map +0 -1
  433. package/build/components/Loader/tsconfig.tsbuildinfo +0 -1
  434. package/build/components/Megamenu/index.js +0 -20
  435. package/build/components/Megamenu/index.js.map +0 -1
  436. package/build/components/Megamenu/style.css +0 -2
  437. package/build/components/Megamenu/style.css.map +0 -1
  438. package/build/components/Megamenu/tsconfig.tsbuildinfo +0 -1
  439. package/build/components/Modal/index.js +0 -20
  440. package/build/components/Modal/index.js.map +0 -1
  441. package/build/components/Modal/style.css +0 -2
  442. package/build/components/Modal/style.css.map +0 -1
  443. package/build/components/Modal/tsconfig.tsbuildinfo +0 -1
  444. package/build/components/Pagination/index.js +0 -16
  445. package/build/components/Pagination/index.js.map +0 -1
  446. package/build/components/Pagination/tsconfig.tsbuildinfo +0 -1
  447. package/build/components/Pill/index.js +0 -16
  448. package/build/components/Pill/index.js.map +0 -1
  449. package/build/components/Pill/tsconfig.tsbuildinfo +0 -1
  450. package/build/components/Preview/index.js +0 -77
  451. package/build/components/Preview/index.js.map +0 -1
  452. package/build/components/Preview/style.css +0 -2
  453. package/build/components/Preview/style.css.map +0 -1
  454. package/build/components/Preview/tsconfig.tsbuildinfo +0 -1
  455. package/build/components/Progress/index.js +0 -16
  456. package/build/components/Progress/index.js.map +0 -1
  457. package/build/components/Progress/tsconfig.tsbuildinfo +0 -1
  458. package/build/components/PromoBanner/index.js +0 -16
  459. package/build/components/PromoBanner/index.js.map +0 -1
  460. package/build/components/PromoBanner/style.css +0 -2
  461. package/build/components/PromoBanner/style.css.map +0 -1
  462. package/build/components/PromoBanner/tsconfig.tsbuildinfo +0 -1
  463. package/build/components/PromotionCard/index.js +0 -16
  464. package/build/components/PromotionCard/index.js.map +0 -1
  465. package/build/components/PromotionCard/tsconfig.tsbuildinfo +0 -1
  466. package/build/components/Section/index.js +0 -16
  467. package/build/components/Section/index.js.map +0 -1
  468. package/build/components/Section/tsconfig.tsbuildinfo +0 -1
  469. package/build/components/Skeleton/index.js +0 -16
  470. package/build/components/Skeleton/index.js.map +0 -1
  471. package/build/components/Skeleton/tsconfig.tsbuildinfo +0 -1
  472. package/build/components/SkipLink/index.js +0 -16
  473. package/build/components/SkipLink/index.js.map +0 -1
  474. package/build/components/SkipLink/tsconfig.tsbuildinfo +0 -1
  475. package/build/components/Stepbar/index.js +0 -16
  476. package/build/components/Stepbar/index.js.map +0 -1
  477. package/build/components/Stepbar/tsconfig.tsbuildinfo +0 -1
  478. package/build/components/Sticker/index.js +0 -16
  479. package/build/components/Sticker/index.js.map +0 -1
  480. package/build/components/Sticker/tsconfig.tsbuildinfo +0 -1
  481. package/build/components/Table/index.js +0 -16
  482. package/build/components/Table/index.js.map +0 -1
  483. package/build/components/Table/style.css +0 -2
  484. package/build/components/Table/style.css.map +0 -1
  485. package/build/components/Table/tsconfig.tsbuildinfo +0 -1
  486. package/build/components/Tabs/index.js +0 -16
  487. package/build/components/Tabs/index.js.map +0 -1
  488. package/build/components/Tabs/tsconfig.tsbuildinfo +0 -1
  489. package/build/components/Tag/index.js +0 -16
  490. package/build/components/Tag/index.js.map +0 -1
  491. package/build/components/Tag/tsconfig.tsbuildinfo +0 -1
  492. package/build/components/Testimonial/index.js +0 -16
  493. package/build/components/Testimonial/index.js.map +0 -1
  494. package/build/components/Testimonial/tsconfig.tsbuildinfo +0 -1
  495. package/build/components/Tile/index.js +0 -16
  496. package/build/components/Tile/index.js.map +0 -1
  497. package/build/components/Tile/tsconfig.tsbuildinfo +0 -1
  498. package/build/components/Tooltip/index.js +0 -16
  499. package/build/components/Tooltip/index.js.map +0 -1
  500. package/build/components/Tooltip/style.css +0 -2
  501. package/build/components/Tooltip/style.css.map +0 -1
  502. package/build/components/Tooltip/tsconfig.tsbuildinfo +0 -1
  503. package/build/components/static.css +0 -2
  504. package/build/components/static.css.map +0 -1
  505. package/build/components/static.js +0 -10
  506. package/build/components/static.js.map +0 -1
  507. package/build/components/types/src/components/Hero/HeroPlayground.d.ts +0 -2
  508. package/build/components/types/src/components/Megamenu/MegamenuDropdown.d.ts +0 -17
  509. package/src/components/Accordion/Accordion.mdx +0 -222
  510. package/src/components/Alert/Alert.mdx +0 -141
  511. package/src/components/Bar/Bar.mdx +0 -203
  512. package/src/components/BlockAction/BlockAction.mdx +0 -244
  513. package/src/components/BodyBanner/BodyBanner.mdx +0 -268
  514. package/src/components/Breadcrumbs/Breadcrumbs.mdx +0 -84
  515. package/src/components/Button/Button.mdx +0 -273
  516. package/src/components/Buttons/Buttons.mdx +0 -39
  517. package/src/components/Card/Card.mdx +0 -334
  518. package/src/components/Carousel/Carousel.mdx +0 -159
  519. package/src/components/CarouselPromotions/CarouselPromotions.mdx +0 -246
  520. package/src/components/CartTable/CartTable.mdx +0 -129
  521. package/src/components/Container/Container.mdx +0 -73
  522. package/src/components/Controls/Controls.mdx +0 -469
  523. package/src/components/Cover/Cover.mdx +0 -87
  524. package/src/components/Divider/Divider.mdx +0 -65
  525. package/src/components/Dropdown/Dropdown.mdx +0 -260
  526. package/src/components/Expander/Expander.mdx +0 -153
  527. package/src/components/FeatureAccordion/FeatureAccordion.mdx +0 -33
  528. package/src/components/Forms/Autocomplete/Autocomplete.mdx +0 -198
  529. package/src/components/Forms/Checkbox/Checkbox.mdx +0 -139
  530. package/src/components/Forms/DatePicker/DatePicker.mdx +0 -149
  531. package/src/components/Forms/Field/Field.mdx +0 -383
  532. package/src/components/Forms/Fieldset/Fieldset.mdx +0 -178
  533. package/src/components/Forms/File/File.mdx +0 -88
  534. package/src/components/Forms/FormTooltip.mdx +0 -51
  535. package/src/components/Forms/Forms.mdx +0 -48
  536. package/src/components/Forms/Group/Group.mdx +0 -146
  537. package/src/components/Forms/Hint/Hint.mdx +0 -40
  538. package/src/components/Forms/InputStepper/InputStepper.mdx +0 -147
  539. package/src/components/Forms/Label/Label.mdx +0 -95
  540. package/src/components/Forms/Message/Message.mdx +0 -40
  541. package/src/components/Forms/Radio/Radio.mdx +0 -98
  542. package/src/components/Forms/RangeSlider/RangeSlider.mdx +0 -304
  543. package/src/components/Forms/Select/Select.mdx +0 -106
  544. package/src/components/Forms/TextArea/TextArea.mdx +0 -109
  545. package/src/components/Forms/TextInput/TextInput.mdx +0 -153
  546. package/src/components/Gauge/Gauge.mdx +0 -35
  547. package/src/components/Grid/Grid.mdx +0 -320
  548. package/src/components/Hero/Hero.mdx +0 -168
  549. package/src/components/Hero/HeroPlayground.tsx +0 -369
  550. package/src/components/Icon/Icon.mdx +0 -172
  551. package/src/components/IconList/IconList.mdx +0 -53
  552. package/src/components/Image/Image.mdx +0 -175
  553. package/src/components/Link/Link.mdx +0 -224
  554. package/src/components/List/List.mdx +0 -216
  555. package/src/components/Loader/Loader.mdx +0 -148
  556. package/src/components/Megamenu/MegamenuDropdown.tsx +0 -64
  557. package/src/components/Modal/Modal.mdx +0 -565
  558. package/src/components/Pagination/Pagination.mdx +0 -45
  559. package/src/components/Pill/Pill.mdx +0 -41
  560. package/src/components/Progress/Progress.mdx +0 -119
  561. package/src/components/PromotionCard/PromotionCard.mdx +0 -191
  562. package/src/components/Section/Section.mdx +0 -397
  563. package/src/components/Skeleton/Skeleton.mdx +0 -90
  564. package/src/components/SkipLink/SkipLink.mdx +0 -23
  565. package/src/components/Stepbar/Stepbar.mdx +0 -137
  566. package/src/components/Sticker/Sticker.mdx +0 -50
  567. package/src/components/Table/Table.mdx +0 -199
  568. package/src/components/Tabs/Tabs.mdx +0 -373
  569. package/src/components/Tag/Tag.mdx +0 -52
  570. package/src/components/Testimonial/Testimonial.mdx +0 -41
  571. package/src/components/Tile/Tile.mdx +0 -163
  572. 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
+ });