@orangesk/orange-design-system 2.0.0-beta.1 → 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 (569) 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 +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/index.d.ts +3 -5
  55. package/build/components/types/src/scripts/index.d.ts +10 -0
  56. package/build/lib/after-components.css +1 -1
  57. package/build/lib/after-components.css.map +1 -1
  58. package/build/lib/before-components.css +1 -1
  59. package/build/lib/before-components.css.map +1 -1
  60. package/build/lib/components.css +1 -1
  61. package/build/lib/components.css.map +1 -1
  62. package/build/lib/footer.css +2 -0
  63. package/build/lib/footer.css.map +1 -0
  64. package/build/lib/megamenu.css +2 -0
  65. package/build/lib/megamenu.css.map +1 -0
  66. package/build/lib/megamenu.js +2 -0
  67. package/build/lib/megamenu.js.map +1 -0
  68. package/build/lib/scripts.css +1 -1
  69. package/build/lib/scripts.css.map +1 -1
  70. package/build/lib/scripts.js +5 -5
  71. package/build/lib/scripts.js.map +1 -1
  72. package/build/lib/style.css +1 -1
  73. package/build/lib/style.css.map +1 -1
  74. package/build/lib/tsconfig.tsbuildinfo +1 -1
  75. package/build/logo-line.svg +5 -0
  76. package/build/sprite.svg +1 -1
  77. package/package.json +35 -29
  78. package/src/assets/icons/ai.svg +6 -0
  79. package/src/assets/icons/article.svg +7 -0
  80. package/src/assets/icons/pictogram-activation--dark.svg +10 -11
  81. package/src/assets/icons/pictogram-activation-free--dark.svg +4 -5
  82. package/src/assets/icons/pictogram-activation-free.svg +4 -5
  83. package/src/assets/icons/pictogram-activation.svg +10 -11
  84. package/src/assets/icons/pictogram-archive--dark.svg +3 -4
  85. package/src/assets/icons/pictogram-archive.svg +3 -4
  86. package/src/assets/icons/pictogram-calling-minutes--dark.svg +3 -4
  87. package/src/assets/icons/pictogram-calling-minutes.svg +3 -4
  88. package/src/assets/icons/pictogram-canal-plus--dark.svg +3 -4
  89. package/src/assets/icons/pictogram-canal-plus.svg +3 -4
  90. package/src/assets/icons/pictogram-competition-tickets--dark.svg +11 -12
  91. package/src/assets/icons/pictogram-competition-tickets.svg +11 -12
  92. package/src/assets/icons/pictogram-device-discount--dark.svg +7 -6
  93. package/src/assets/icons/pictogram-device-discount.svg +5 -6
  94. package/src/assets/icons/pictogram-discount-general--dark.svg +5 -6
  95. package/src/assets/icons/pictogram-discount-general.svg +5 -6
  96. package/src/assets/icons/pictogram-discount-price--dark.svg +5 -6
  97. package/src/assets/icons/pictogram-discount-price.svg +5 -6
  98. package/src/assets/icons/pictogram-extra-data--dark.svg +6 -7
  99. package/src/assets/icons/pictogram-extra-data.svg +6 -7
  100. package/src/assets/icons/pictogram-free-payment--dark.svg +5 -6
  101. package/src/assets/icons/pictogram-free-payment.svg +3 -6
  102. package/src/assets/icons/pictogram-gift--dark.svg +12 -13
  103. package/src/assets/icons/pictogram-gift-one-benefit--dark.svg +7 -8
  104. package/src/assets/icons/pictogram-gift-one-benefit.svg +7 -8
  105. package/src/assets/icons/pictogram-gift-two-benefits--dark.svg +8 -9
  106. package/src/assets/icons/pictogram-gift-two-benefits.svg +8 -9
  107. package/src/assets/icons/pictogram-gift.svg +3 -4
  108. package/src/assets/icons/pictogram-hbo-max--dark.svg +5 -6
  109. package/src/assets/icons/pictogram-hbo-max.svg +5 -6
  110. package/src/assets/icons/pictogram-infinite-sms--dark.svg +3 -4
  111. package/src/assets/icons/pictogram-infinite-sms.svg +3 -4
  112. package/src/assets/icons/pictogram-installation--dark.svg +4 -5
  113. package/src/assets/icons/pictogram-installation-free--dark.svg +4 -5
  114. package/src/assets/icons/pictogram-installation-free.svg +4 -5
  115. package/src/assets/icons/pictogram-installation.svg +4 -5
  116. package/src/assets/icons/pictogram-max--dark.svg +3 -4
  117. package/src/assets/icons/pictogram-max-canal-plus--dark.svg +5 -6
  118. package/src/assets/icons/pictogram-max-canal-plus.svg +5 -6
  119. package/src/assets/icons/pictogram-max.svg +3 -4
  120. package/src/assets/icons/pictogram-moj-orange-app--dark.svg +3 -4
  121. package/src/assets/icons/pictogram-moj-orange-app.svg +3 -4
  122. package/src/assets/icons/pictogram-movie-storage--dark.svg +4 -5
  123. package/src/assets/icons/pictogram-movie-storage.svg +4 -5
  124. package/src/assets/icons/pictogram-online-protection--dark.svg +3 -4
  125. package/src/assets/icons/pictogram-online-protection.svg +3 -4
  126. package/src/assets/icons/pictogram-random-damage--dark.svg +4 -8
  127. package/src/assets/icons/pictogram-random-damage.svg +4 -8
  128. package/src/assets/icons/pictogram-recycling--dark.svg +7 -8
  129. package/src/assets/icons/pictogram-recycling.svg +14 -15
  130. package/src/assets/icons/pictogram-repair--dark.svg +12 -13
  131. package/src/assets/icons/pictogram-repair.svg +12 -13
  132. package/src/assets/icons/pictogram-roaming--dark.svg +3 -4
  133. package/src/assets/icons/pictogram-roaming-discount--dark.svg +3 -16
  134. package/src/assets/icons/pictogram-roaming-discount.svg +15 -16
  135. package/src/assets/icons/pictogram-roaming.svg +3 -4
  136. package/src/assets/icons/pictogram-skylink--dark.svg +10 -11
  137. package/src/assets/icons/pictogram-skylink-live-tv--dark.svg +7 -8
  138. package/src/assets/icons/pictogram-skylink-live-tv.svg +7 -8
  139. package/src/assets/icons/pictogram-skylink.svg +10 -11
  140. package/src/assets/icons/pictogram-sms--dark.svg +5 -6
  141. package/src/assets/icons/pictogram-sms.svg +5 -6
  142. package/src/assets/icons/pictogram-theft--dark.svg +3 -7
  143. package/src/assets/icons/pictogram-theft.svg +3 -7
  144. package/src/assets/icons/pictogram-three-devices--dark.svg +4 -8
  145. package/src/assets/icons/pictogram-three-devices.svg +4 -8
  146. package/src/assets/icons/pictogram-trust--dark.svg +3 -4
  147. package/src/assets/icons/pictogram-trust.svg +3 -4
  148. package/src/assets/icons/pictogram-water-damage--dark.svg +5 -6
  149. package/src/assets/icons/pictogram-water-damage.svg +5 -6
  150. package/src/components/Accordion/Accordion.tsx +4 -0
  151. package/src/components/Accordion/AccordionHeader.tsx +9 -2
  152. package/src/components/Accordion/AccordionItem.tsx +5 -2
  153. package/src/components/Accordion/styles/config.scss +4 -4
  154. package/src/components/Accordion/styles/mixins.scss +9 -3
  155. package/src/components/Accordion/styles/style.scss +4 -0
  156. package/src/components/Accordion/tests/Accordion.unit.test.js +11 -0
  157. package/src/components/AnchorNavigation/AnchorNavigation.static.ts +253 -73
  158. package/src/components/AnchorNavigation/AnchorNavigation.tsx +20 -16
  159. package/src/components/AnchorNavigation/index.tsx +0 -2
  160. package/src/components/AnchorNavigation/styles/mixins.scss +14 -27
  161. package/src/components/AnchorNavigation/tests/AnchorNavigation.conformance.test.js +67 -0
  162. package/src/components/AnchorNavigation/tests/AnchorNavigation.unit.test.js +163 -0
  163. package/src/components/Bar/styles/config.scss +4 -5
  164. package/src/components/BlockAction/index.tsx +0 -2
  165. package/src/components/BlockAction/styles/mixins.scss +0 -6
  166. package/src/components/BodyBanner/index.tsx +0 -2
  167. package/src/components/Breadcrumbs/styles/mixins.scss +2 -4
  168. package/src/components/Button/Button.tsx +2 -2
  169. package/src/components/Button/index.tsx +0 -2
  170. package/src/components/Button/styles/config.scss +1 -1
  171. package/src/components/Button/styles/mixins.scss +5 -0
  172. package/src/components/Button/styles/style.scss +4 -0
  173. package/src/components/Card/Card.tsx +20 -8
  174. package/src/components/Card/CardSection.tsx +7 -11
  175. package/src/components/Card/styles/config.scss +1 -1
  176. package/src/components/Card/styles/mixins.scss +8 -6
  177. package/src/components/Card/styles/style.scss +4 -0
  178. package/src/components/Card/tests/Card.unit.test.js +45 -11
  179. package/src/components/Card/tests/CardSection.unit.test.js +36 -3
  180. package/src/components/Carousel/Carousel.static.ts +67 -1
  181. package/src/components/Carousel/Carousel.tsx +41 -19
  182. package/src/components/Carousel/constants.ts +2 -0
  183. package/src/components/Carousel/styles/config.scss +1 -2
  184. package/src/components/Carousel/styles/mixins.scss +35 -2
  185. package/src/components/Carousel/styles/style.scss +8 -0
  186. package/src/components/CarouselHero/CarouselHero.static.ts +528 -0
  187. package/src/components/CarouselHero/CarouselHero.tsx +147 -0
  188. package/src/components/CarouselHero/CarouselHeroItem.tsx +40 -0
  189. package/src/components/CarouselHero/constants.ts +36 -0
  190. package/src/components/CarouselHero/index.ts +2 -0
  191. package/src/components/CarouselHero/styles/config.scss +54 -0
  192. package/src/components/CarouselHero/styles/mixins.scss +278 -0
  193. package/src/components/CarouselHero/styles/style.scss +63 -0
  194. package/src/components/CarouselHero/tests/CarouselHero.conformance.test.js +130 -0
  195. package/src/components/CarouselHero/tests/CarouselHero.unit.test.js +346 -0
  196. package/src/components/CarouselHero/tests/CarouselHeroItem.conformance.test.js +135 -0
  197. package/src/components/CarouselHero/tests/CarouselHeroItem.unit.test.js +143 -0
  198. package/src/components/CarouselPromotions/styles/mixins.scss +10 -3
  199. package/src/components/CartTable/FooterPriceColumn.tsx +5 -3
  200. package/src/components/CartTable/Price.tsx +1 -1
  201. package/src/components/Controls/styles/config.scss +2 -2
  202. package/src/components/Controls/tests/Controls.test.js +0 -9
  203. package/src/components/Cover/index.ts +1 -2
  204. package/src/components/Divider/Divider.tsx +2 -16
  205. package/src/components/Divider/styles/config.scss +0 -17
  206. package/src/components/Divider/styles/mixins.scss +8 -10
  207. package/src/components/Divider/styles/style.scss +2 -16
  208. package/src/components/Divider/tests/Divider.conformance.test.js +1 -1
  209. package/src/components/Divider/tests/Divider.unit.test.js +0 -17
  210. package/src/components/Dropdown/styles/mixins.scss +1 -1
  211. package/src/components/Expander/Expander.tsx +4 -2
  212. package/src/components/Expander/styles/style.scss +7 -0
  213. package/src/components/Footer/Footer.tsx +86 -70
  214. package/src/components/Footer/constants.ts +10 -0
  215. package/src/components/Footer/styles/config.scss +1 -0
  216. package/src/components/Footer/styles/mixins.scss +172 -0
  217. package/src/components/Footer/styles/style.scss +48 -0
  218. package/src/components/Footer/tests/Footer.conformance.test.js +133 -8
  219. package/src/components/Footer/tests/Footer.unit.test.js +71 -6
  220. package/src/components/Forms/DatePicker/styles/style.scss +1 -1
  221. package/src/components/Forms/File/styles/mixins.scss +1 -1
  222. package/src/components/Forms/InputStepper/styles/style.scss +0 -66
  223. package/src/components/Forms/RangeSlider/styles/mixins.scss +1 -1
  224. package/src/components/Forms/Select/index.tsx +0 -2
  225. package/src/components/Forms/TextInput/styles/config.scss +1 -1
  226. package/src/components/Forms/styles/config.scss +3 -3
  227. package/src/components/Icon/iconSearchTags.ts +434 -432
  228. package/src/components/Icon/styles/style.scss +15 -0
  229. package/src/components/Icon/tests/Pictogram.unit.test.js +38 -0
  230. package/src/components/IconList/index.ts +2 -3
  231. package/src/components/Link/styles/style.scss +6 -2
  232. package/src/components/Link/tests/Link.conformance.test.js +5 -20
  233. package/src/components/Link/tests/Link.unit.test.js +1 -10
  234. package/src/components/List/index.ts +2 -3
  235. package/src/components/Loader/Loader.tsx +2 -10
  236. package/src/components/Loader/styles/mixins.scss +1 -1
  237. package/src/components/Loader/styles/style.scss +6 -4
  238. package/src/components/Megamenu/MegaMenuIcon.tsx +48 -0
  239. package/src/components/Megamenu/Megamenu.static.ts +600 -0
  240. package/src/components/Megamenu/Megamenu.tsx +799 -356
  241. package/src/components/Megamenu/MegamenuBlog.tsx +309 -0
  242. package/src/components/Megamenu/constants.ts +56 -0
  243. package/src/components/Megamenu/index.ts +2 -5
  244. package/src/components/Megamenu/static.ts +73 -0
  245. package/src/components/Megamenu/styles/config.scss +2 -15
  246. package/src/components/Megamenu/styles/mixins.scss +647 -209
  247. package/src/components/Megamenu/styles/style.scss +173 -61
  248. package/src/components/Modal/Modal.tsx +9 -1
  249. package/src/components/Modal/ModalBody.tsx +29 -14
  250. package/src/components/Modal/ModalProductBody.tsx +52 -0
  251. package/src/components/Modal/index.ts +1 -0
  252. package/src/components/Modal/styles/mixins.scss +62 -5
  253. package/src/components/Modal/styles/style.scss +16 -0
  254. package/src/components/Modal/tests/Modal.unit.test.js +37 -0
  255. package/src/components/Modal/tests/ModalBody.unit.test.js +28 -12
  256. package/src/components/Pagination/Pagination.tsx +2 -2
  257. package/src/components/Pill/Pill.tsx +8 -3
  258. package/src/components/Pill/styles/config.scss +22 -2
  259. package/src/components/Pill/styles/style.scss +7 -3
  260. package/src/components/Pill/tests/Pill.conformance.test.js +7 -3
  261. package/src/components/Pill/tests/Pill.unit.test.js +45 -7
  262. package/src/components/Preview/PreviewGenerator.tsx +78 -34
  263. package/src/components/PromoBanner/PromoBanner.tsx +52 -34
  264. package/src/components/PromoBanner/styles/mixins.scss +37 -20
  265. package/src/components/PromoBanner/styles/style.scss +5 -11
  266. package/src/components/PromoBanner/tests/PromoBanner.conformance.test.js +781 -0
  267. package/src/components/PromoBanner/tests/PromoBanner.unit.test.js +529 -0
  268. package/src/components/PromotionCard/PromotionCard.tsx +13 -12
  269. package/src/components/PromotionCard/tests/PromotionCard.conformance.test.js +567 -0
  270. package/src/components/PromotionCard/tests/PromotionCard.unit.test.js +500 -0
  271. package/src/components/Section/Section.tsx +20 -10
  272. package/src/components/Section/styles/config.scss +18 -16
  273. package/src/components/Section/styles/mixins.scss +16 -13
  274. package/src/components/Section/styles/style.scss +1 -0
  275. package/src/components/Section/tests/Section.conformance.test.js +23 -12
  276. package/src/components/Section/tests/Section.unit.test.js +53 -32
  277. package/src/components/Tag/Tag.tsx +27 -3
  278. package/src/components/Tag/styles/config.scss +31 -0
  279. package/src/components/Tag/styles/mixins.scss +39 -3
  280. package/src/components/Tag/styles/style.scss +28 -2
  281. package/src/components/Tag/tests/Tag.conformance.test.js +19 -1
  282. package/src/components/Tag/tests/Tag.unit.test.js +93 -0
  283. package/src/components/Tile/styles/style.scss +1 -1
  284. package/src/components/index.ts +5 -6
  285. package/src/styles/base/globals.scss +19 -0
  286. package/src/styles/base/styleguide.scss +17 -17
  287. package/src/styles/export/base.js +2 -2
  288. package/src/styles/export/color.js +2 -2
  289. package/src/styles/shame.scss +2 -1
  290. package/src/styles/tokens/base.scss +1 -1
  291. package/src/styles/tokens/color.scss +8 -8
  292. package/src/styles/typography/mixins.scss +3 -2
  293. package/src/styles/utilities/border.scss +1 -1
  294. package/src/styles/utilities/color.scss +99 -20
  295. package/src/styles/utilities/index.scss +1 -0
  296. package/src/styles/utilities/layout.scss +9 -0
  297. package/src/styles/utilities/ordering.scss +44 -0
  298. package/build/components/Accordion/index.js +0 -16
  299. package/build/components/Accordion/index.js.map +0 -1
  300. package/build/components/Accordion/tsconfig.tsbuildinfo +0 -1
  301. package/build/components/Alert/index.js +0 -16
  302. package/build/components/Alert/index.js.map +0 -1
  303. package/build/components/Alert/tsconfig.tsbuildinfo +0 -1
  304. package/build/components/AnchorNavigation/index.js +0 -16
  305. package/build/components/AnchorNavigation/index.js.map +0 -1
  306. package/build/components/AnchorNavigation/style.css +0 -2
  307. package/build/components/AnchorNavigation/style.css.map +0 -1
  308. package/build/components/AnchorNavigation/tsconfig.tsbuildinfo +0 -1
  309. package/build/components/Bar/index.js +0 -16
  310. package/build/components/Bar/index.js.map +0 -1
  311. package/build/components/Bar/tsconfig.tsbuildinfo +0 -1
  312. package/build/components/BlockAction/index.js +0 -16
  313. package/build/components/BlockAction/index.js.map +0 -1
  314. package/build/components/BlockAction/style.css +0 -2
  315. package/build/components/BlockAction/style.css.map +0 -1
  316. package/build/components/BlockAction/tsconfig.tsbuildinfo +0 -1
  317. package/build/components/BodyBanner/index.js +0 -16
  318. package/build/components/BodyBanner/index.js.map +0 -1
  319. package/build/components/BodyBanner/style.css +0 -2
  320. package/build/components/BodyBanner/style.css.map +0 -1
  321. package/build/components/BodyBanner/tsconfig.tsbuildinfo +0 -1
  322. package/build/components/Breadcrumbs/index.js +0 -16
  323. package/build/components/Breadcrumbs/index.js.map +0 -1
  324. package/build/components/Breadcrumbs/tsconfig.tsbuildinfo +0 -1
  325. package/build/components/Button/index.js +0 -16
  326. package/build/components/Button/index.js.map +0 -1
  327. package/build/components/Button/style.css +0 -2
  328. package/build/components/Button/style.css.map +0 -1
  329. package/build/components/Button/tsconfig.tsbuildinfo +0 -1
  330. package/build/components/Buttons/index.js +0 -16
  331. package/build/components/Buttons/index.js.map +0 -1
  332. package/build/components/Buttons/tsconfig.tsbuildinfo +0 -1
  333. package/build/components/Card/index.js +0 -16
  334. package/build/components/Card/index.js.map +0 -1
  335. package/build/components/Card/tsconfig.tsbuildinfo +0 -1
  336. package/build/components/Carousel/index.js +0 -16
  337. package/build/components/Carousel/index.js.map +0 -1
  338. package/build/components/Carousel/style.css +0 -2
  339. package/build/components/Carousel/style.css.map +0 -1
  340. package/build/components/Carousel/tsconfig.tsbuildinfo +0 -1
  341. package/build/components/CarouselPromotions/index.js +0 -16
  342. package/build/components/CarouselPromotions/index.js.map +0 -1
  343. package/build/components/CarouselPromotions/tsconfig.tsbuildinfo +0 -1
  344. package/build/components/CartTable/index.js +0 -16
  345. package/build/components/CartTable/index.js.map +0 -1
  346. package/build/components/CartTable/style.css +0 -2
  347. package/build/components/CartTable/style.css.map +0 -1
  348. package/build/components/CartTable/tsconfig.tsbuildinfo +0 -1
  349. package/build/components/Code/index.js +0 -11
  350. package/build/components/Code/index.js.map +0 -1
  351. package/build/components/Code/style.css +0 -2
  352. package/build/components/Code/style.css.map +0 -1
  353. package/build/components/Code/tsconfig.tsbuildinfo +0 -1
  354. package/build/components/Container/index.js +0 -16
  355. package/build/components/Container/index.js.map +0 -1
  356. package/build/components/Container/tsconfig.tsbuildinfo +0 -1
  357. package/build/components/Controls/index.js +0 -16
  358. package/build/components/Controls/index.js.map +0 -1
  359. package/build/components/Controls/tsconfig.tsbuildinfo +0 -1
  360. package/build/components/Cover/index.js +0 -16
  361. package/build/components/Cover/index.js.map +0 -1
  362. package/build/components/Cover/style.css +0 -2
  363. package/build/components/Cover/style.css.map +0 -1
  364. package/build/components/Cover/tsconfig.tsbuildinfo +0 -1
  365. package/build/components/Divider/index.js +0 -16
  366. package/build/components/Divider/index.js.map +0 -1
  367. package/build/components/Divider/tsconfig.tsbuildinfo +0 -1
  368. package/build/components/DocumentationSidebar/index.js +0 -16
  369. package/build/components/DocumentationSidebar/index.js.map +0 -1
  370. package/build/components/DocumentationSidebar/style.css +0 -2
  371. package/build/components/DocumentationSidebar/style.css.map +0 -1
  372. package/build/components/DocumentationSidebar/tsconfig.tsbuildinfo +0 -1
  373. package/build/components/Dropdown/index.js +0 -16
  374. package/build/components/Dropdown/index.js.map +0 -1
  375. package/build/components/Dropdown/style.css +0 -2
  376. package/build/components/Dropdown/style.css.map +0 -1
  377. package/build/components/Dropdown/tsconfig.tsbuildinfo +0 -1
  378. package/build/components/Expander/index.js +0 -16
  379. package/build/components/Expander/index.js.map +0 -1
  380. package/build/components/Expander/tsconfig.tsbuildinfo +0 -1
  381. package/build/components/FeatureAccordion/index.js +0 -16
  382. package/build/components/FeatureAccordion/index.js.map +0 -1
  383. package/build/components/FeatureAccordion/style.css +0 -2
  384. package/build/components/FeatureAccordion/style.css.map +0 -1
  385. package/build/components/FeatureAccordion/tsconfig.tsbuildinfo +0 -1
  386. package/build/components/Footer/index.js +0 -16
  387. package/build/components/Footer/index.js.map +0 -1
  388. package/build/components/Footer/style.css +0 -2
  389. package/build/components/Footer/style.css.map +0 -1
  390. package/build/components/Footer/tsconfig.tsbuildinfo +0 -1
  391. package/build/components/Forms/index.js +0 -20
  392. package/build/components/Forms/index.js.map +0 -1
  393. package/build/components/Forms/style.css +0 -2
  394. package/build/components/Forms/style.css.map +0 -1
  395. package/build/components/Forms/tsconfig.tsbuildinfo +0 -1
  396. package/build/components/Gauge/index.js +0 -16
  397. package/build/components/Gauge/index.js.map +0 -1
  398. package/build/components/Gauge/tsconfig.tsbuildinfo +0 -1
  399. package/build/components/Grid/index.js +0 -16
  400. package/build/components/Grid/index.js.map +0 -1
  401. package/build/components/Grid/style.css +0 -2
  402. package/build/components/Grid/style.css.map +0 -1
  403. package/build/components/Grid/tsconfig.tsbuildinfo +0 -1
  404. package/build/components/Hero/index.js +0 -16
  405. package/build/components/Hero/index.js.map +0 -1
  406. package/build/components/Hero/style.css +0 -2
  407. package/build/components/Hero/style.css.map +0 -1
  408. package/build/components/Hero/tsconfig.tsbuildinfo +0 -1
  409. package/build/components/Icon/index.js +0 -11
  410. package/build/components/Icon/index.js.map +0 -1
  411. package/build/components/Icon/tsconfig.tsbuildinfo +0 -1
  412. package/build/components/IconList/index.js +0 -16
  413. package/build/components/IconList/index.js.map +0 -1
  414. package/build/components/IconList/style.css +0 -2
  415. package/build/components/IconList/style.css.map +0 -1
  416. package/build/components/IconList/tsconfig.tsbuildinfo +0 -1
  417. package/build/components/Image/index.js +0 -16
  418. package/build/components/Image/index.js.map +0 -1
  419. package/build/components/Image/tsconfig.tsbuildinfo +0 -1
  420. package/build/components/Link/index.js +0 -7
  421. package/build/components/Link/index.js.map +0 -1
  422. package/build/components/Link/tsconfig.tsbuildinfo +0 -1
  423. package/build/components/List/index.js +0 -16
  424. package/build/components/List/index.js.map +0 -1
  425. package/build/components/List/style.css +0 -2
  426. package/build/components/List/style.css.map +0 -1
  427. package/build/components/List/tsconfig.tsbuildinfo +0 -1
  428. package/build/components/Loader/index.js +0 -16
  429. package/build/components/Loader/index.js.map +0 -1
  430. package/build/components/Loader/tsconfig.tsbuildinfo +0 -1
  431. package/build/components/Megamenu/index.js +0 -20
  432. package/build/components/Megamenu/index.js.map +0 -1
  433. package/build/components/Megamenu/style.css +0 -2
  434. package/build/components/Megamenu/style.css.map +0 -1
  435. package/build/components/Megamenu/tsconfig.tsbuildinfo +0 -1
  436. package/build/components/Modal/index.js +0 -20
  437. package/build/components/Modal/index.js.map +0 -1
  438. package/build/components/Modal/style.css +0 -2
  439. package/build/components/Modal/style.css.map +0 -1
  440. package/build/components/Modal/tsconfig.tsbuildinfo +0 -1
  441. package/build/components/Pagination/index.js +0 -16
  442. package/build/components/Pagination/index.js.map +0 -1
  443. package/build/components/Pagination/tsconfig.tsbuildinfo +0 -1
  444. package/build/components/Pill/index.js +0 -16
  445. package/build/components/Pill/index.js.map +0 -1
  446. package/build/components/Pill/tsconfig.tsbuildinfo +0 -1
  447. package/build/components/Preview/index.js +0 -77
  448. package/build/components/Preview/index.js.map +0 -1
  449. package/build/components/Preview/style.css +0 -2
  450. package/build/components/Preview/style.css.map +0 -1
  451. package/build/components/Preview/tsconfig.tsbuildinfo +0 -1
  452. package/build/components/Progress/index.js +0 -16
  453. package/build/components/Progress/index.js.map +0 -1
  454. package/build/components/Progress/tsconfig.tsbuildinfo +0 -1
  455. package/build/components/PromoBanner/index.js +0 -16
  456. package/build/components/PromoBanner/index.js.map +0 -1
  457. package/build/components/PromoBanner/style.css +0 -2
  458. package/build/components/PromoBanner/style.css.map +0 -1
  459. package/build/components/PromoBanner/tsconfig.tsbuildinfo +0 -1
  460. package/build/components/PromotionCard/index.js +0 -16
  461. package/build/components/PromotionCard/index.js.map +0 -1
  462. package/build/components/PromotionCard/tsconfig.tsbuildinfo +0 -1
  463. package/build/components/Section/index.js +0 -16
  464. package/build/components/Section/index.js.map +0 -1
  465. package/build/components/Section/tsconfig.tsbuildinfo +0 -1
  466. package/build/components/Skeleton/index.js +0 -16
  467. package/build/components/Skeleton/index.js.map +0 -1
  468. package/build/components/Skeleton/tsconfig.tsbuildinfo +0 -1
  469. package/build/components/SkipLink/index.js +0 -16
  470. package/build/components/SkipLink/index.js.map +0 -1
  471. package/build/components/SkipLink/tsconfig.tsbuildinfo +0 -1
  472. package/build/components/Stepbar/index.js +0 -16
  473. package/build/components/Stepbar/index.js.map +0 -1
  474. package/build/components/Stepbar/tsconfig.tsbuildinfo +0 -1
  475. package/build/components/Sticker/index.js +0 -16
  476. package/build/components/Sticker/index.js.map +0 -1
  477. package/build/components/Sticker/tsconfig.tsbuildinfo +0 -1
  478. package/build/components/Table/index.js +0 -16
  479. package/build/components/Table/index.js.map +0 -1
  480. package/build/components/Table/style.css +0 -2
  481. package/build/components/Table/style.css.map +0 -1
  482. package/build/components/Table/tsconfig.tsbuildinfo +0 -1
  483. package/build/components/Tabs/index.js +0 -16
  484. package/build/components/Tabs/index.js.map +0 -1
  485. package/build/components/Tabs/tsconfig.tsbuildinfo +0 -1
  486. package/build/components/Tag/index.js +0 -16
  487. package/build/components/Tag/index.js.map +0 -1
  488. package/build/components/Tag/tsconfig.tsbuildinfo +0 -1
  489. package/build/components/Testimonial/index.js +0 -16
  490. package/build/components/Testimonial/index.js.map +0 -1
  491. package/build/components/Testimonial/tsconfig.tsbuildinfo +0 -1
  492. package/build/components/Tile/index.js +0 -16
  493. package/build/components/Tile/index.js.map +0 -1
  494. package/build/components/Tile/tsconfig.tsbuildinfo +0 -1
  495. package/build/components/Tooltip/index.js +0 -16
  496. package/build/components/Tooltip/index.js.map +0 -1
  497. package/build/components/Tooltip/style.css +0 -2
  498. package/build/components/Tooltip/style.css.map +0 -1
  499. package/build/components/Tooltip/tsconfig.tsbuildinfo +0 -1
  500. package/build/components/static.css +0 -2
  501. package/build/components/static.css.map +0 -1
  502. package/build/components/static.js +0 -10
  503. package/build/components/static.js.map +0 -1
  504. package/build/components/types/src/components/Hero/HeroPlayground.d.ts +0 -2
  505. package/build/components/types/src/components/Megamenu/MegamenuDropdown.d.ts +0 -17
  506. package/src/components/Accordion/Accordion.mdx +0 -222
  507. package/src/components/Alert/Alert.mdx +0 -141
  508. package/src/components/Bar/Bar.mdx +0 -203
  509. package/src/components/BlockAction/BlockAction.mdx +0 -244
  510. package/src/components/BodyBanner/BodyBanner.mdx +0 -268
  511. package/src/components/Breadcrumbs/Breadcrumbs.mdx +0 -84
  512. package/src/components/Button/Button.mdx +0 -273
  513. package/src/components/Buttons/Buttons.mdx +0 -39
  514. package/src/components/Card/Card.mdx +0 -334
  515. package/src/components/Carousel/Carousel.mdx +0 -159
  516. package/src/components/CarouselPromotions/CarouselPromotions.mdx +0 -246
  517. package/src/components/CartTable/CartTable.mdx +0 -129
  518. package/src/components/Container/Container.mdx +0 -73
  519. package/src/components/Controls/Controls.mdx +0 -469
  520. package/src/components/Cover/Cover.mdx +0 -87
  521. package/src/components/Divider/Divider.mdx +0 -65
  522. package/src/components/Dropdown/Dropdown.mdx +0 -260
  523. package/src/components/Expander/Expander.mdx +0 -153
  524. package/src/components/FeatureAccordion/FeatureAccordion.mdx +0 -33
  525. package/src/components/Forms/Autocomplete/Autocomplete.mdx +0 -198
  526. package/src/components/Forms/Checkbox/Checkbox.mdx +0 -139
  527. package/src/components/Forms/DatePicker/DatePicker.mdx +0 -149
  528. package/src/components/Forms/Field/Field.mdx +0 -383
  529. package/src/components/Forms/Fieldset/Fieldset.mdx +0 -178
  530. package/src/components/Forms/File/File.mdx +0 -88
  531. package/src/components/Forms/FormTooltip.mdx +0 -51
  532. package/src/components/Forms/Forms.mdx +0 -48
  533. package/src/components/Forms/Group/Group.mdx +0 -146
  534. package/src/components/Forms/Hint/Hint.mdx +0 -40
  535. package/src/components/Forms/InputStepper/InputStepper.mdx +0 -147
  536. package/src/components/Forms/Label/Label.mdx +0 -95
  537. package/src/components/Forms/Message/Message.mdx +0 -40
  538. package/src/components/Forms/Radio/Radio.mdx +0 -98
  539. package/src/components/Forms/RangeSlider/RangeSlider.mdx +0 -304
  540. package/src/components/Forms/Select/Select.mdx +0 -106
  541. package/src/components/Forms/TextArea/TextArea.mdx +0 -109
  542. package/src/components/Forms/TextInput/TextInput.mdx +0 -153
  543. package/src/components/Gauge/Gauge.mdx +0 -35
  544. package/src/components/Grid/Grid.mdx +0 -320
  545. package/src/components/Hero/Hero.mdx +0 -168
  546. package/src/components/Hero/HeroPlayground.tsx +0 -369
  547. package/src/components/Icon/Icon.mdx +0 -172
  548. package/src/components/IconList/IconList.mdx +0 -53
  549. package/src/components/Image/Image.mdx +0 -175
  550. package/src/components/Link/Link.mdx +0 -224
  551. package/src/components/List/List.mdx +0 -216
  552. package/src/components/Loader/Loader.mdx +0 -148
  553. package/src/components/Megamenu/MegamenuDropdown.tsx +0 -64
  554. package/src/components/Modal/Modal.mdx +0 -565
  555. package/src/components/Pagination/Pagination.mdx +0 -45
  556. package/src/components/Pill/Pill.mdx +0 -41
  557. package/src/components/Progress/Progress.mdx +0 -119
  558. package/src/components/PromotionCard/PromotionCard.mdx +0 -191
  559. package/src/components/Section/Section.mdx +0 -397
  560. package/src/components/Skeleton/Skeleton.mdx +0 -90
  561. package/src/components/SkipLink/SkipLink.mdx +0 -23
  562. package/src/components/Stepbar/Stepbar.mdx +0 -137
  563. package/src/components/Sticker/Sticker.mdx +0 -50
  564. package/src/components/Table/Table.mdx +0 -199
  565. package/src/components/Tabs/Tabs.mdx +0 -373
  566. package/src/components/Tag/Tag.mdx +0 -52
  567. package/src/components/Testimonial/Testimonial.mdx +0 -41
  568. package/src/components/Tile/Tile.mdx +0 -163
  569. 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
+ });