@jetshop/ui 5.13.12-0 → 5.14.0

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 (557) hide show
  1. package/Accordion/Accordion.d.ts +33 -33
  2. package/Accordion/Accordion.js +58 -58
  3. package/Accordion/Accordion.test.js +73 -73
  4. package/Accordion/__doc_utils__/AccordionHeader.js +12 -12
  5. package/Auth/FormFields/CountriesInput.d.ts +16 -14
  6. package/Auth/FormFields/CountriesInput.js +27 -27
  7. package/Auth/FormFields/CountriesInput.js.map +1 -1
  8. package/Auth/LogInBehavior.d.ts +22 -22
  9. package/Auth/LogInBehavior.js +23 -23
  10. package/Auth/LogInFormProvider.d.ts +7 -7
  11. package/Auth/LogInFormProvider.js +70 -70
  12. package/Auth/LogOut.d.ts +10 -10
  13. package/Auth/LogOut.js +23 -23
  14. package/Auth/logInValidator.d.ts +8 -8
  15. package/Auth/logInValidator.js +15 -15
  16. package/Breadcrumbs/Breadcrumbs.d.ts +14 -14
  17. package/Breadcrumbs/Breadcrumbs.js +83 -83
  18. package/Breadcrumbs/getParentsOrCanonicalRoute.d.ts +3 -3
  19. package/Breadcrumbs/getParentsOrCanonicalRoute.js +13 -13
  20. package/Breadcrumbs/index.d.ts +1 -1
  21. package/Breadcrumbs/index.js +1 -1
  22. package/Breakpoints.d.ts +12 -12
  23. package/Breakpoints.js +35 -35
  24. package/Button/Button.d.ts +14 -14
  25. package/Button/Button.js +59 -59
  26. package/Button/OutlineButton.d.ts +4 -4
  27. package/Button/OutlineButton.js +9 -9
  28. package/Button/SecondaryButton.d.ts +3 -3
  29. package/Button/SecondaryButton.js +8 -8
  30. package/Button/TrendButton.d.ts +3 -3
  31. package/Button/TrendButton.js +7 -7
  32. package/Button/index.d.ts +4 -4
  33. package/Button/index.js +4 -4
  34. package/CategoryLink.d.ts +9 -9
  35. package/CategoryLink.js +42 -42
  36. package/ChannelSelector/ChannelListItem.d.ts +10 -10
  37. package/ChannelSelector/ChannelListItem.js +50 -50
  38. package/ChannelSelector/ChannelListItem.test.js +85 -85
  39. package/ChannelSelector/ChannelSelector.d.ts +63 -63
  40. package/ChannelSelector/ChannelSelector.js +79 -79
  41. package/ChannelSelector/ChannelSelector.test.js +167 -167
  42. package/ChannelSelector/ChannelSelectorButtons.d.ts +3 -3
  43. package/ChannelSelector/ChannelSelectorButtons.js +19 -19
  44. package/ChannelSelector/Channels.d.ts +17 -17
  45. package/ChannelSelector/Channels.js +11 -11
  46. package/ChannelSelector/Channels.test.js +90 -90
  47. package/ChannelSelector/LargeSelector.d.ts +3 -3
  48. package/ChannelSelector/LargeSelector.js +66 -66
  49. package/ChannelSelector/MiniSelector.d.ts +4 -4
  50. package/ChannelSelector/MiniSelector.js +57 -57
  51. package/ChannelSelector/Region.d.ts +28 -28
  52. package/ChannelSelector/Region.js +20 -20
  53. package/ChannelSelector/Region.test.js +37 -37
  54. package/ChannelSelector/exampleChannels.js +577 -577
  55. package/ChannelSelector/groupBy.d.ts +7 -7
  56. package/ChannelSelector/groupBy.js +15 -15
  57. package/ChannelSelector/groupBy.test.js +42 -42
  58. package/Checkbox/Checkbox.d.ts +10 -10
  59. package/Checkbox/Checkbox.js +68 -68
  60. package/Checkbox/CheckboxGroup.d.ts +23 -23
  61. package/Checkbox/CheckboxGroup.js +21 -21
  62. package/Checkbox/index.d.ts +2 -2
  63. package/Checkbox/index.js +2 -2
  64. package/ContentPageLink.d.ts +9 -9
  65. package/ContentPageLink.js +36 -36
  66. package/ContentRenderer.d.ts +9 -9
  67. package/ContentRenderer.js +35 -35
  68. package/DropdownMenu/Button.d.ts +7 -7
  69. package/DropdownMenu/Button.js +31 -31
  70. package/DropdownMenu/DropdownMenu.d.ts +21 -21
  71. package/DropdownMenu/DropdownMenu.js +71 -71
  72. package/DropdownMenu/Item.d.ts +13 -13
  73. package/DropdownMenu/Item.js +47 -47
  74. package/DropdownMenu/Items.d.ts +16 -16
  75. package/DropdownMenu/Items.js +52 -52
  76. package/DropdownMenu/index.d.ts +4 -4
  77. package/DropdownMenu/index.js +4 -4
  78. package/ErrorBoundary/Generic.d.ts +17 -17
  79. package/ErrorBoundary/Generic.js +68 -68
  80. package/ErrorBoundary/PassThrough.d.ts +3 -3
  81. package/ErrorBoundary/PassThrough.js +6 -6
  82. package/Gallery/Gallery.d.ts +39 -39
  83. package/Gallery/Gallery.js +121 -121
  84. package/Gallery/constructGallery.d.ts +15 -15
  85. package/Gallery/constructGallery.js +40 -40
  86. package/Image/B2BImage.d.ts +50 -50
  87. package/Image/B2BImage.js +52 -52
  88. package/Image/BaseImage.d.ts +39 -39
  89. package/Image/BaseImage.js +191 -191
  90. package/Image/Fallback.d.ts +5 -5
  91. package/Image/Fallback.js +3 -3
  92. package/Image/FlightImage.d.ts +52 -52
  93. package/Image/FlightImage.js +57 -57
  94. package/Image/FlightImage.test.js +277 -277
  95. package/Image/Image.d.ts +2 -2
  96. package/Image/Image.js +2 -2
  97. package/Image/index.d.ts +1 -1
  98. package/Image/index.js +1 -1
  99. package/Image/useConstructImage.d.ts +46 -46
  100. package/Image/useConstructImage.js +96 -96
  101. package/Image/utils/aspectRatioToFraction.d.ts +2 -2
  102. package/Image/utils/aspectRatioToFraction.js +10 -10
  103. package/Image/utils/getFullUrl.d.ts +6 -6
  104. package/Image/utils/getFullUrl.js +17 -17
  105. package/Image/utils/getImageWidth.d.ts +1 -1
  106. package/Image/utils/getImageWidth.js +11 -11
  107. package/Image/utils/getImageWidths.d.ts +2 -2
  108. package/Image/utils/getImageWidths.js +13 -13
  109. package/Image/utils/getLQIP.d.ts +8 -8
  110. package/Image/utils/getLQIP.js +19 -19
  111. package/Image/utils/getLargestSize.d.ts +7 -7
  112. package/Image/utils/getLargestSize.js +16 -16
  113. package/Image/utils/getSizeForBreakpoint.d.ts +2 -2
  114. package/Image/utils/getSizeForBreakpoint.js +15 -15
  115. package/Image/utils/getSizesMap.d.ts +2 -2
  116. package/Image/utils/getSizesMap.js +21 -21
  117. package/Image/utils/getSmallestSize.d.ts +2 -2
  118. package/Image/utils/getSmallestSize.js +11 -11
  119. package/Image/utils/getSrcSetFromWidths.d.ts +10 -10
  120. package/Image/utils/getSrcSetFromWidths.js +8 -8
  121. package/Image/utils/getSrcWithParams.d.ts +3 -3
  122. package/Image/utils/getSrcWithParams.js +28 -28
  123. package/Image/utils/paddingForAspectRatio.d.ts +1 -1
  124. package/Image/utils/paddingForAspectRatio.js +5 -5
  125. package/Image/utils/remToPx.d.ts +1 -1
  126. package/Image/utils/remToPx.js +1 -1
  127. package/Image/utils/sizeToNumber.d.ts +2 -2
  128. package/Image/utils/sizeToNumber.js +26 -26
  129. package/Input/Input.d.ts +6 -6
  130. package/Input/Input.js +44 -44
  131. package/Input/index.d.ts +3 -3
  132. package/Input/index.js +3 -3
  133. package/JetshopText.d.ts +3 -3
  134. package/JetshopText.js +11 -11
  135. package/Loading/LoadingBar.d.ts +8 -8
  136. package/Loading/LoadingBar.js +57 -57
  137. package/Loading/LoadingLine.d.ts +31 -31
  138. package/Loading/LoadingLine.js +25 -25
  139. package/Loading/LoadingLine.test.js +18 -18
  140. package/Loading/NetworkStatusNotifier.d.ts +2 -2
  141. package/Loading/NetworkStatusNotifier.js +3 -3
  142. package/Menu/GetMoreSubcategoriesQuery.gql +25 -25
  143. package/Menu/MenuContainer.d.ts +28 -28
  144. package/Menu/MenuContainer.js +45 -45
  145. package/Menu/MenuContainer.test.js +245 -245
  146. package/Menu/RecursiveTree.d.ts +28 -28
  147. package/Menu/RecursiveTree.js +90 -90
  148. package/Menu/RecursiveTree.test.js +416 -416
  149. package/Modal/Drawer/Drawer.d.ts +11 -11
  150. package/Modal/Drawer/Drawer.js +30 -30
  151. package/Modal/Drawer/DrawerTarget.d.ts +6 -6
  152. package/Modal/Drawer/DrawerTarget.js +11 -11
  153. package/Modal/Drawer/DrawerTarget.test.js +92 -92
  154. package/Modal/Drawer/DrawerTrigger.d.ts +11 -11
  155. package/Modal/Drawer/DrawerTrigger.js +15 -15
  156. package/Modal/Drawer/DrawerTrigger.test.js +51 -51
  157. package/Modal/Drawer/index.d.ts +3 -3
  158. package/Modal/Drawer/index.js +3 -3
  159. package/Modal/Flyout/FlyoutTarget.d.ts +10 -10
  160. package/Modal/Flyout/FlyoutTarget.js +14 -14
  161. package/Modal/Flyout/FlyoutTarget.test.js +84 -84
  162. package/Modal/Flyout/FlyoutTrigger.d.ts +15 -15
  163. package/Modal/Flyout/FlyoutTrigger.js +17 -17
  164. package/Modal/Flyout/FlyoutTrigger.test.js +72 -72
  165. package/Modal/Flyout/index.d.ts +2 -2
  166. package/Modal/Flyout/index.js +2 -2
  167. package/Modal/ModalContext.d.ts +26 -26
  168. package/Modal/ModalContext.js +8 -8
  169. package/Modal/ModalProvider.d.ts +5 -5
  170. package/Modal/ModalProvider.js +82 -82
  171. package/Modal/ModalProvider.test.js +26 -26
  172. package/Modal/ModalRoot.d.ts +3 -3
  173. package/Modal/ModalRoot.js +43 -43
  174. package/Modal/ModalRoot.test.js +80 -80
  175. package/Modal/ModalTrigger.d.ts +9 -9
  176. package/Modal/ModalTrigger.js +8 -8
  177. package/Modal/__test_utils__/getComponentWithModalContext.js +29 -29
  178. package/Pagination/Pagination.d.ts +7 -7
  179. package/Pagination/Pagination.js +22 -22
  180. package/Pagination/PaginationBehaviour.d.ts +52 -52
  181. package/Pagination/PaginationBehaviour.js +67 -67
  182. package/Pagination/index.d.ts +2 -2
  183. package/Pagination/index.js +2 -2
  184. package/Pagination/usePagination.d.ts +15 -15
  185. package/Pagination/usePagination.js +45 -45
  186. package/PreOrderDateSelector/PreOrderDateSelector.d.ts +20 -20
  187. package/PreOrderDateSelector/PreOrderDateSelector.js +73 -73
  188. package/PreOrderDateSelector/index.d.ts +2 -2
  189. package/PreOrderDateSelector/index.js +2 -2
  190. package/Price/Currency.d.ts +9 -9
  191. package/Price/Currency.js +10 -10
  192. package/Price/Price.d.ts +29 -28
  193. package/Price/Price.js +35 -34
  194. package/Price/Price.js.map +1 -1
  195. package/Price/index.d.ts +1 -1
  196. package/Price/index.js +1 -1
  197. package/ProductLink.d.ts +21 -21
  198. package/ProductLink.js +81 -81
  199. package/ProductList/Badges.d.ts +6 -6
  200. package/ProductList/Badges.js +55 -55
  201. package/ProductList/GridProduct.d.ts +24 -24
  202. package/ProductList/GridProduct.js +57 -57
  203. package/ProductList/ProductGrid.d.ts +16 -16
  204. package/ProductList/ProductGrid.js +29 -29
  205. package/ProductList/ProductImage.d.ts +12 -12
  206. package/ProductList/ProductImage.js +20 -20
  207. package/ProductSpecifications/ProductSpecifications.d.ts +8 -8
  208. package/ProductSpecifications/ProductSpecifications.js +77 -77
  209. package/ScrollRestorationHandler/ScrollRestorationHandler.d.ts +8 -8
  210. package/ScrollRestorationHandler/ScrollRestorationHandler.js +16 -16
  211. package/ScrollRestorationHandler/ScrollRestorationHandler.test.js +75 -75
  212. package/ScrollRestorationHandler/index.d.ts +1 -1
  213. package/ScrollRestorationHandler/index.js +1 -1
  214. package/ScrollRestorationHandler/isInIgnoredRouteTypes.d.ts +6 -6
  215. package/ScrollRestorationHandler/isInIgnoredRouteTypes.js +7 -7
  216. package/ScrollRestorationHandler/useScrollRestore.d.ts +7 -7
  217. package/ScrollRestorationHandler/useScrollRestore.js +19 -19
  218. package/Search/AutocompleteQuery.gql +10 -10
  219. package/Search/SearchAutoCompleteContainer.d.ts +45 -45
  220. package/Search/SearchAutoCompleteContainer.js +171 -171
  221. package/Search/SearchAutoCompleteContainer.test.js +460 -460
  222. package/Search/SearchField.d.ts +15 -15
  223. package/Search/SearchField.js +96 -96
  224. package/Search/SearchPage/PageOf.d.ts +5 -5
  225. package/Search/SearchPage/PageOf.js +6 -6
  226. package/Search/SearchPage/SearchMeta.d.ts +16 -16
  227. package/Search/SearchPage/SearchMeta.js +19 -19
  228. package/Search/SearchPage/SearchPageBehaviour.d.ts +19 -19
  229. package/Search/SearchPage/SearchPageBehaviour.js +66 -66
  230. package/Search/SuggestedTerm.d.ts +16 -16
  231. package/Search/SuggestedTerm.js +34 -34
  232. package/Search/index.d.ts +1 -1
  233. package/Search/index.js +1 -1
  234. package/Select/Components.d.ts +28 -28
  235. package/Select/Components.js +90 -90
  236. package/Select/SelectComponents/Quantity.d.ts +5 -5
  237. package/Select/SelectComponents/Quantity.js +7 -7
  238. package/Select/index.d.ts +5 -5
  239. package/Select/index.js +1 -1
  240. package/SortOrder/SortOrder.d.ts +16 -16
  241. package/SortOrder/SortOrder.js +31 -31
  242. package/SortOrder/SortOrderDropdown.d.ts +9 -9
  243. package/SortOrder/SortOrderDropdown.js +24 -24
  244. package/SortOrder/SortOrderList.d.ts +7 -7
  245. package/SortOrder/SortOrderList.js +16 -16
  246. package/StartPageRenderer/StartPageRenderer.d.ts +17 -17
  247. package/StartPageRenderer/StartPageRenderer.js +51 -51
  248. package/StartPageRenderer/index.d.ts +1 -1
  249. package/StartPageRenderer/index.js +1 -1
  250. package/Stock/StockStatusContainer.d.ts +16 -16
  251. package/Stock/StockStatusContainer.js +39 -39
  252. package/Stock/__tests__/StockStatusContainer.test.js +65 -65
  253. package/Text/Text.d.ts +11 -11
  254. package/Text/Text.js +21 -21
  255. package/Text/index.d.ts +3 -3
  256. package/Text/index.js +3 -3
  257. package/Theme/createTheme.d.ts +16 -16
  258. package/Theme/createTheme.js +4 -4
  259. package/Theme/cssReset.d.ts +1 -1
  260. package/Theme/cssReset.js +159 -159
  261. package/Theme/normalizeCss.d.ts +1 -1
  262. package/Theme/normalizeCss.js +356 -356
  263. package/Theme/sanitizeCss.d.ts +1 -1
  264. package/Theme/sanitizeCss.js +571 -571
  265. package/WindowGrid/WindowGrid.d.ts +11 -11
  266. package/WindowGrid/WindowGrid.js +57 -57
  267. package/WindowGrid/index.d.ts +1 -1
  268. package/WindowGrid/index.js +1 -1
  269. package/WindowGrid/useResizeObserver.d.ts +8 -8
  270. package/WindowGrid/useResizeObserver.js +13 -13
  271. package/WindowGrid/useScrollWithWindow.d.ts +12 -12
  272. package/WindowGrid/useScrollWithWindow.js +38 -38
  273. package/dependencies.d.ts +98 -98
  274. package/fuzzySearch/fuzzySearch.d.ts +8 -8
  275. package/fuzzySearch/fuzzySearch.js +42 -42
  276. package/fuzzySearch/index.d.ts +1 -1
  277. package/fuzzySearch/index.js +1 -1
  278. package/global.d.ts +1 -1
  279. package/hooks/index.d.ts +2 -2
  280. package/hooks/index.js +2 -2
  281. package/hooks/useOnClickOutside.d.ts +6 -6
  282. package/hooks/useOnClickOutside.js +16 -16
  283. package/hooks/useOnEsc.d.ts +4 -4
  284. package/hooks/useOnEsc.js +16 -16
  285. package/package.json +1 -1
  286. package/setupTests.js +2 -2
  287. package/svg/flags/ad.svg +150 -150
  288. package/svg/flags/ae.svg +6 -6
  289. package/svg/flags/af.svg +81 -81
  290. package/svg/flags/ag.svg +14 -14
  291. package/svg/flags/ai.svg +767 -767
  292. package/svg/flags/al.svg +5 -5
  293. package/svg/flags/am.svg +5 -5
  294. package/svg/flags/ao.svg +13 -13
  295. package/svg/flags/aq.svg +6 -6
  296. package/svg/flags/ar.svg +31 -31
  297. package/svg/flags/as.svg +33 -33
  298. package/svg/flags/at.svg +6 -6
  299. package/svg/flags/au.svg +9 -9
  300. package/svg/flags/aw.svg +186 -186
  301. package/svg/flags/ax.svg +18 -18
  302. package/svg/flags/az.svg +8 -8
  303. package/svg/flags/ba.svg +12 -12
  304. package/svg/flags/bb.svg +6 -6
  305. package/svg/flags/bd.svg +4 -4
  306. package/svg/flags/be.svg +7 -7
  307. package/svg/flags/bf.svg +7 -7
  308. package/svg/flags/bg.svg +7 -7
  309. package/svg/flags/bh.svg +11 -11
  310. package/svg/flags/bi.svg +15 -15
  311. package/svg/flags/bj.svg +14 -14
  312. package/svg/flags/bl.svg +7 -7
  313. package/svg/flags/bm.svg +98 -98
  314. package/svg/flags/bn.svg +36 -36
  315. package/svg/flags/bo.svg +676 -676
  316. package/svg/flags/bq.svg +5 -5
  317. package/svg/flags/br.svg +45 -45
  318. package/svg/flags/bs.svg +13 -13
  319. package/svg/flags/bt.svg +89 -89
  320. package/svg/flags/bv.svg +13 -13
  321. package/svg/flags/bw.svg +7 -7
  322. package/svg/flags/by.svg +20 -20
  323. package/svg/flags/bz.svg +145 -145
  324. package/svg/flags/ca.svg +4 -4
  325. package/svg/flags/cc.svg +19 -19
  326. package/svg/flags/cd.svg +5 -5
  327. package/svg/flags/cf.svg +15 -15
  328. package/svg/flags/cg.svg +12 -12
  329. package/svg/flags/ch.svg +9 -9
  330. package/svg/flags/ci.svg +7 -7
  331. package/svg/flags/ck.svg +9 -9
  332. package/svg/flags/cl.svg +13 -13
  333. package/svg/flags/cm.svg +15 -15
  334. package/svg/flags/cn.svg +11 -11
  335. package/svg/flags/co.svg +7 -7
  336. package/svg/flags/cr.svg +7 -7
  337. package/svg/flags/cu.svg +13 -13
  338. package/svg/flags/cv.svg +13 -13
  339. package/svg/flags/cw.svg +14 -14
  340. package/svg/flags/cx.svg +15 -15
  341. package/svg/flags/cy.svg +6 -6
  342. package/svg/flags/cz.svg +12 -12
  343. package/svg/flags/de.svg +5 -5
  344. package/svg/flags/dj.svg +13 -13
  345. package/svg/flags/dk.svg +5 -5
  346. package/svg/flags/dm.svg +152 -152
  347. package/svg/flags/do.svg +6745 -6745
  348. package/svg/flags/dz.svg +5 -5
  349. package/svg/flags/ec.svg +138 -138
  350. package/svg/flags/ee.svg +7 -7
  351. package/svg/flags/eg.svg +38 -38
  352. package/svg/flags/eh.svg +15 -15
  353. package/svg/flags/er.svg +8 -8
  354. package/svg/flags/es-ct.svg +4 -4
  355. package/svg/flags/es.svg +544 -544
  356. package/svg/flags/et.svg +14 -14
  357. package/svg/flags/eu.svg +28 -28
  358. package/svg/flags/fi.svg +5 -5
  359. package/svg/flags/fj.svg +120 -120
  360. package/svg/flags/fk.svg +89 -89
  361. package/svg/flags/fm.svg +11 -11
  362. package/svg/flags/fo.svg +12 -12
  363. package/svg/flags/fr.svg +7 -7
  364. package/svg/flags/ga.svg +7 -7
  365. package/svg/flags/gb-eng.svg +5 -5
  366. package/svg/flags/gb-nir.svg +131 -131
  367. package/svg/flags/gb-sct.svg +4 -4
  368. package/svg/flags/gb-wls.svg +9 -9
  369. package/svg/flags/gb.svg +15 -15
  370. package/svg/flags/gd.svg +27 -27
  371. package/svg/flags/ge.svg +6 -6
  372. package/svg/flags/gf.svg +5 -5
  373. package/svg/flags/gg.svg +9 -9
  374. package/svg/flags/gh.svg +6 -6
  375. package/svg/flags/gi.svg +32 -32
  376. package/svg/flags/gl.svg +4 -4
  377. package/svg/flags/gm.svg +14 -14
  378. package/svg/flags/gn.svg +7 -7
  379. package/svg/flags/gp.svg +7 -7
  380. package/svg/flags/gq.svg +23 -23
  381. package/svg/flags/gr.svg +22 -22
  382. package/svg/flags/gs.svg +201 -201
  383. package/svg/flags/gt.svg +204 -204
  384. package/svg/flags/gu.svg +39 -39
  385. package/svg/flags/gw.svg +13 -13
  386. package/svg/flags/gy.svg +9 -9
  387. package/svg/flags/hk.svg +30 -30
  388. package/svg/flags/hm.svg +9 -9
  389. package/svg/flags/hn.svg +18 -18
  390. package/svg/flags/hr.svg +58 -58
  391. package/svg/flags/ht.svg +116 -116
  392. package/svg/flags/hu.svg +7 -7
  393. package/svg/flags/id.svg +6 -6
  394. package/svg/flags/ie.svg +7 -7
  395. package/svg/flags/il.svg +14 -14
  396. package/svg/flags/im.svg +36 -36
  397. package/svg/flags/in.svg +25 -25
  398. package/svg/flags/io.svg +138 -138
  399. package/svg/flags/iq.svg +10 -10
  400. package/svg/flags/ir.svg +219 -219
  401. package/svg/flags/is.svg +12 -12
  402. package/svg/flags/it.svg +7 -7
  403. package/svg/flags/je.svg +31 -31
  404. package/svg/flags/jm.svg +8 -8
  405. package/svg/flags/jo.svg +16 -16
  406. package/svg/flags/jp.svg +11 -11
  407. package/svg/flags/ke.svg +23 -23
  408. package/svg/flags/kg.svg +15 -15
  409. package/svg/flags/kh.svg +61 -61
  410. package/svg/flags/ki.svg +36 -36
  411. package/svg/flags/km.svg +16 -16
  412. package/svg/flags/kn.svg +14 -14
  413. package/svg/flags/kp.svg +15 -15
  414. package/svg/flags/kr.svg +24 -24
  415. package/svg/flags/kw.svg +13 -13
  416. package/svg/flags/ky.svg +63 -63
  417. package/svg/flags/kz.svg +23 -23
  418. package/svg/flags/la.svg +12 -12
  419. package/svg/flags/lb.svg +15 -15
  420. package/svg/flags/lc.svg +8 -8
  421. package/svg/flags/li.svg +43 -43
  422. package/svg/flags/lk.svg +22 -22
  423. package/svg/flags/lr.svg +14 -14
  424. package/svg/flags/ls.svg +8 -8
  425. package/svg/flags/lt.svg +7 -7
  426. package/svg/flags/lu.svg +5 -5
  427. package/svg/flags/lv.svg +6 -6
  428. package/svg/flags/ly.svg +13 -13
  429. package/svg/flags/ma.svg +4 -4
  430. package/svg/flags/mc.svg +6 -6
  431. package/svg/flags/md.svg +70 -70
  432. package/svg/flags/me.svg +116 -116
  433. package/svg/flags/mf.svg +7 -7
  434. package/svg/flags/mg.svg +7 -7
  435. package/svg/flags/mh.svg +7 -7
  436. package/svg/flags/mk.svg +5 -5
  437. package/svg/flags/ml.svg +7 -7
  438. package/svg/flags/mm.svg +16 -16
  439. package/svg/flags/mn.svg +13 -13
  440. package/svg/flags/mo.svg +9 -9
  441. package/svg/flags/mp.svg +86 -86
  442. package/svg/flags/mq.svg +7 -7
  443. package/svg/flags/mr.svg +6 -6
  444. package/svg/flags/ms.svg +39 -39
  445. package/svg/flags/mt.svg +49 -49
  446. package/svg/flags/mu.svg +8 -8
  447. package/svg/flags/mv.svg +6 -6
  448. package/svg/flags/mw.svg +10 -10
  449. package/svg/flags/mx.svg +382 -382
  450. package/svg/flags/my.svg +15 -15
  451. package/svg/flags/mz.svg +21 -21
  452. package/svg/flags/na.svg +16 -16
  453. package/svg/flags/nc.svg +7 -7
  454. package/svg/flags/ne.svg +6 -6
  455. package/svg/flags/nf.svg +9 -9
  456. package/svg/flags/ng.svg +6 -6
  457. package/svg/flags/ni.svg +129 -129
  458. package/svg/flags/nl.svg +7 -7
  459. package/svg/flags/no.svg +7 -7
  460. package/svg/flags/np.svg +14 -14
  461. package/svg/flags/nr.svg +12 -12
  462. package/svg/flags/nu.svg +26 -26
  463. package/svg/flags/nz.svg +41 -41
  464. package/svg/flags/om.svg +115 -115
  465. package/svg/flags/pa.svg +14 -14
  466. package/svg/flags/pe.svg +244 -244
  467. package/svg/flags/pf.svg +19 -19
  468. package/svg/flags/pg.svg +9 -9
  469. package/svg/flags/ph.svg +13 -13
  470. package/svg/flags/pk.svg +15 -15
  471. package/svg/flags/pl.svg +6 -6
  472. package/svg/flags/pm.svg +7 -7
  473. package/svg/flags/pn.svg +62 -62
  474. package/svg/flags/pr.svg +13 -13
  475. package/svg/flags/ps.svg +15 -15
  476. package/svg/flags/pt.svg +57 -57
  477. package/svg/flags/pw.svg +11 -11
  478. package/svg/flags/py.svg +157 -157
  479. package/svg/flags/qa.svg +4 -4
  480. package/svg/flags/re.svg +7 -7
  481. package/svg/flags/ro.svg +7 -7
  482. package/svg/flags/rs.svg +292 -292
  483. package/svg/flags/ru.svg +7 -7
  484. package/svg/flags/rw.svg +13 -13
  485. package/svg/flags/sa.svg +26 -26
  486. package/svg/flags/sb.svg +13 -13
  487. package/svg/flags/sc.svg +14 -14
  488. package/svg/flags/sd.svg +13 -13
  489. package/svg/flags/se.svg +16 -16
  490. package/svg/flags/sg.svg +13 -13
  491. package/svg/flags/sh.svg +74 -74
  492. package/svg/flags/si.svg +18 -18
  493. package/svg/flags/sj.svg +7 -7
  494. package/svg/flags/sk.svg +9 -9
  495. package/svg/flags/sl.svg +7 -7
  496. package/svg/flags/sm.svg +91 -91
  497. package/svg/flags/sn.svg +8 -8
  498. package/svg/flags/so.svg +11 -11
  499. package/svg/flags/sr.svg +6 -6
  500. package/svg/flags/ss.svg +8 -8
  501. package/svg/flags/st.svg +16 -16
  502. package/svg/flags/sv.svg +606 -606
  503. package/svg/flags/sx.svg +56 -56
  504. package/svg/flags/sy.svg +6 -6
  505. package/svg/flags/sz.svg +45 -45
  506. package/svg/flags/tc.svg +67 -67
  507. package/svg/flags/td.svg +7 -7
  508. package/svg/flags/tf.svg +15 -15
  509. package/svg/flags/tg.svg +14 -14
  510. package/svg/flags/th.svg +7 -7
  511. package/svg/flags/tj.svg +22 -22
  512. package/svg/flags/tk.svg +5 -5
  513. package/svg/flags/tl.svg +13 -13
  514. package/svg/flags/tm.svg +206 -206
  515. package/svg/flags/tn.svg +13 -13
  516. package/svg/flags/to.svg +10 -10
  517. package/svg/flags/tr.svg +8 -8
  518. package/svg/flags/tt.svg +5 -5
  519. package/svg/flags/tv.svg +27 -27
  520. package/svg/flags/tw.svg +14 -14
  521. package/svg/flags/tz.svg +13 -13
  522. package/svg/flags/ua.svg +6 -6
  523. package/svg/flags/ug.svg +30 -30
  524. package/svg/flags/um.svg +15 -15
  525. package/svg/flags/un.svg +16 -16
  526. package/svg/flags/us.svg +10 -10
  527. package/svg/flags/uy.svg +28 -28
  528. package/svg/flags/uz.svg +30 -30
  529. package/svg/flags/va.svg +479 -479
  530. package/svg/flags/vc.svg +8 -8
  531. package/svg/flags/ve.svg +26 -26
  532. package/svg/flags/vg.svg +127 -127
  533. package/svg/flags/vi.svg +28 -28
  534. package/svg/flags/vn.svg +11 -11
  535. package/svg/flags/vu.svg +18 -18
  536. package/svg/flags/wf.svg +7 -7
  537. package/svg/flags/ws.svg +7 -7
  538. package/svg/flags/ye.svg +7 -7
  539. package/svg/flags/yt.svg +7 -7
  540. package/svg/flags/za.svg +17 -17
  541. package/svg/flags/zm.svg +27 -27
  542. package/svg/flags/zw.svg +21 -21
  543. package/test-utils/mock-response/product-status.js +44 -44
  544. package/utils/breakpoints.d.ts +23 -23
  545. package/utils/breakpoints.js +89 -89
  546. package/utils/callAllEventHandlers.d.ts +5 -5
  547. package/utils/callAllEventHandlers.js +8 -8
  548. package/utils/text.d.ts +1 -1
  549. package/utils/text.js +22 -22
  550. package/utils/theme.d.ts +3 -3
  551. package/utils/theme.js +4 -4
  552. package/utils/useHoverIntent.d.ts +10 -10
  553. package/utils/useHoverIntent.js +77 -77
  554. package/utils/usePropsOfType.d.ts +11 -11
  555. package/utils/usePropsOfType.js +17 -17
  556. package/withFlightUI.d.ts +17 -17
  557. package/withFlightUI.js +19 -19
@@ -1,277 +1,277 @@
1
- import { ChannelProvider } from '@jetshop/core/components/ChannelContext';
2
- import t from '@jetshop/intl';
3
- import testImage from '@jetshop/ui/test-utils/fixtures/test-image.png';
4
- import { fireEvent, queryByText, render } from '@testing-library/react';
5
- import React from 'react';
6
- import { useInView } from 'react-intersection-observer';
7
- import Image from './FlightImage';
8
- import { ChannelHandler } from '@jetshop/core/ChannelHandler/ChannelHandler';
9
- import { selectedChannel, channels } from '@jetshop/core/test-utils/variables';
10
- import { ConfigProvider } from '@jetshop/core/components/ConfigProvider';
11
- import mockShopConfig from '@jetshop/core/test-utils/mockShopConfig';
12
-
13
- // Mock intersection observer so we can always return true/false
14
- jest.mock('react-intersection-observer');
15
- // Suppress warnings from translations
16
- jest.mock('@jetshop/intl');
17
- t.mockImplementation((t) => t);
18
-
19
- // browser mocks
20
- global.IntersectionObserver = jest.fn(function () {
21
- this.observe = jest.fn();
22
- this.unobserve = jest.fn();
23
- this.disconnect = jest.fn();
24
- });
25
-
26
- const transparent =
27
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
28
-
29
- global.__IN_SERVER__ = false;
30
-
31
- describe('Hooks image component', () => {
32
- describe('on initial load', () => {
33
- beforeAll(() => {
34
- useInView.mockImplementation(() => [null, false]);
35
- });
36
- it('renders a lqip version of the image by default', () => {
37
- const { placeholderImage } = setup();
38
-
39
- const src = placeholderImage.getAttribute('src');
40
-
41
- expect(src).toEqual(expect.stringContaining('sigma=2.5'));
42
- expect(src).toEqual(expect.stringContaining('minampl=0.5'));
43
- });
44
-
45
- it('sets the lqip to the smallest of the calculated sizes', () => {
46
- const { placeholderImage } = setup({ sizes: [0.5, 0.85, 1] });
47
- // Should be 160
48
- // The smallest breakpoint is 20rem, which is 360px.
49
- // 0.5 x 360 = 160
50
-
51
- const src = placeholderImage.getAttribute('src');
52
-
53
- expect(src).toEqual(expect.stringContaining('width=160'));
54
- });
55
-
56
- it('does not render an lqip if critical is true', () => {
57
- const { placeholderImage } = setup({ critical: true });
58
-
59
- const src = placeholderImage.getAttribute('src');
60
-
61
- // Sets the src to transaprent data image instead
62
- expect(src).toEqual(expect.stringContaining('data:image'));
63
- });
64
-
65
- it('accepts sizes as pixel values', () => {
66
- const { placeholderImage } = setup({ sizes: [123] });
67
-
68
- const src = placeholderImage.getAttribute('src');
69
-
70
- expect(src).toEqual(expect.stringContaining('width=123'));
71
- });
72
-
73
- it('sets opacity to 0.6 while image has not loaded', () => {
74
- const { placeholderImage } = setup();
75
-
76
- expect(placeholderImage).toHaveStyle('opacity: 0.6');
77
- });
78
- });
79
-
80
- describe('sets the sizing method', () => {
81
- it('to thumbnail if no aspect ratio is provided', () => {
82
- const { placeholderImage } = setup();
83
- });
84
- it('to fit if an aspect ratio is provided', () => {
85
- const { placeholderImage } = setup({ aspect: '1:1' });
86
-
87
- expect(placeholderImage.getAttribute('src')).toEqual(
88
- expect.stringContaining('&height=320')
89
- );
90
- expect(placeholderImage.getAttribute('src')).toEqual(
91
- expect.stringContaining('&width=320')
92
- );
93
- });
94
- it('to crop if crop prop is true', () => {
95
- const { placeholderImage } = setup({ aspect: '1:1', crop: true });
96
-
97
- expect(placeholderImage.getAttribute('src')).toEqual(
98
- expect.stringContaining('&method=crop')
99
- );
100
- });
101
- it('warns if gravity is provided without crop', () => {
102
- console.warn = jest.fn();
103
- setup({ aspect: '1:1', crop: false, gravity: 'north' });
104
- expect(console.warn).toHaveBeenCalled();
105
- });
106
- });
107
-
108
- describe('when image is in view', () => {
109
- beforeAll(() => {
110
- useInView.mockImplementation(() => [null, true]);
111
- });
112
-
113
- it('renders full image', () => {
114
- const { image } = setup({
115
- imageSrc: testImage
116
- });
117
-
118
- expect(image).toHaveAttribute('src', 'test-image.png');
119
- });
120
-
121
- it('applies the given alt as an aria-label', () => {
122
- const { image } = setup({
123
- alt: 'test alt'
124
- });
125
-
126
- expect(image).toHaveAttribute('alt', 'test alt');
127
- });
128
-
129
- it('defaults aspect to 1:1', () => {
130
- const { imageContainer } = setup();
131
-
132
- expect(imageContainer).toHaveStyle('padding-bottom : 100%');
133
- });
134
-
135
- it('sets aspect ratio using padding if aspect is passed', () => {
136
- const { imageContainer } = setup({ aspect: '3:2' });
137
-
138
- expect(imageContainer).toHaveStyle('padding-bottom : 66.6667%');
139
- });
140
-
141
- it('defaults to background-size contain', () => {
142
- const { image } = setup();
143
-
144
- expect(image).toHaveStyle('object-fit : contain');
145
- });
146
-
147
- it('sets background-size to cover if `cover` is passed', () => {
148
- const { image } = setup({ cover: true });
149
-
150
- expect(image).toHaveStyle('object-fit : cover');
151
- });
152
-
153
- it('sets up image to fill available space if `fillAvailableSpace` is passed', () => {
154
- const { image } = setup({ fillAvailableSpace: true });
155
-
156
- expect(image).toHaveStyle('object-fit : cover');
157
- expect(image).toHaveStyle('padding-top : 0');
158
- });
159
-
160
- it('sets opacity to 1 when image loads', () => {
161
- const { image } = setup();
162
- fireEvent.load(image);
163
-
164
- expect(image).toHaveStyle('opacity: 1');
165
- });
166
-
167
- it('fades lqip when image loads', () => {
168
- const { image, placeholderImage } = setup();
169
- fireEvent.load(image);
170
-
171
- expect(placeholderImage).toHaveStyle('opacity: 0');
172
- });
173
-
174
- test('sets quality to quality prop', () => {
175
- const { image } = setup({ quality: 1 });
176
-
177
- expect(image.getAttribute('srcSet')).toEqual(
178
- expect.stringContaining('&quality=1')
179
- );
180
- });
181
- });
182
-
183
- describe('when there is an image error', () => {
184
- beforeAll(() => {
185
- useInView.mockImplementation(() => [null, true]);
186
- });
187
-
188
- it('renders default error', () => {
189
- const { image, getByText } = setup();
190
- fireEvent.error(image);
191
-
192
- expect(getByText('Image Not Found'));
193
- });
194
-
195
- it('renders error component', () => {
196
- const { image, getByText, container } = setup({
197
- error: () => <div>some error found</div>
198
- });
199
- fireEvent.error(image);
200
-
201
- expect(getByText('some error found'));
202
- expect(queryByText(container, 'Image Not Found')).not.toBeInTheDocument();
203
- });
204
- });
205
-
206
- describe('when image url is falsy', () => {
207
- it('renders a transparent background image when null', () => {
208
- const { image } = setup({ falsySrc: true, imageSrc: null });
209
-
210
- expect(image).toHaveAttribute(`src`, transparent);
211
- expect(image).toHaveStyle('opacity : 1');
212
- });
213
- it('renders a transparent background image when undefined', () => {
214
- const { image } = setup({ falsySrc: true, imageSrc: undefined });
215
-
216
- expect(image).toHaveAttribute(`src`, transparent);
217
- expect(image).toHaveStyle('opacity: 1');
218
- });
219
- it('renders nothing and warns if false', () => {
220
- console.warn = jest.fn();
221
- const { image } = setup({ falsySrc: true, imageSrc: false });
222
-
223
- expect(image).not.toBeInTheDocument();
224
- expect(console.warn).toHaveBeenCalled();
225
- });
226
- });
227
-
228
- it('renders a webp and jpeg source', () => {
229
- const { imageContainer } = setup();
230
-
231
- const sources = imageContainer.querySelectorAll('source');
232
- expect(sources.length).toBe(2);
233
- expect(sources[0]).toHaveAttribute('type', 'image/webp');
234
- });
235
- });
236
-
237
- function setup({
238
- imageSrc,
239
- falsySrc = false,
240
- error,
241
- alt,
242
- sizes,
243
- aspect,
244
- cover,
245
- ...rest
246
- } = {}) {
247
- const channelHandler = new ChannelHandler({
248
- selectedChannel,
249
- channels
250
- });
251
- const utils = render(
252
- <ChannelProvider channelHandler={channelHandler}>
253
- <ConfigProvider config={mockShopConfig}>
254
- <Image
255
- src={falsySrc ? imageSrc : imageSrc || 'default.png'}
256
- error={error}
257
- alt={alt}
258
- sizes={sizes}
259
- aspect={aspect}
260
- cover={cover}
261
- {...rest}
262
- />
263
- </ConfigProvider>
264
- </ChannelProvider>
265
- );
266
-
267
- return {
268
- ...utils,
269
- image: utils.container.querySelector('[data-flight-image] img'),
270
- placeholderImage: utils.container.querySelector(
271
- '[data-flight-image-placeholder] img'
272
- ),
273
- imageContainer: utils.container.querySelector(
274
- '[data-flight-image-container]'
275
- )
276
- };
277
- }
1
+ import { ChannelProvider } from '@jetshop/core/components/ChannelContext';
2
+ import t from '@jetshop/intl';
3
+ import testImage from '@jetshop/ui/test-utils/fixtures/test-image.png';
4
+ import { fireEvent, queryByText, render } from '@testing-library/react';
5
+ import React from 'react';
6
+ import { useInView } from 'react-intersection-observer';
7
+ import Image from './FlightImage';
8
+ import { ChannelHandler } from '@jetshop/core/ChannelHandler/ChannelHandler';
9
+ import { selectedChannel, channels } from '@jetshop/core/test-utils/variables';
10
+ import { ConfigProvider } from '@jetshop/core/components/ConfigProvider';
11
+ import mockShopConfig from '@jetshop/core/test-utils/mockShopConfig';
12
+
13
+ // Mock intersection observer so we can always return true/false
14
+ jest.mock('react-intersection-observer');
15
+ // Suppress warnings from translations
16
+ jest.mock('@jetshop/intl');
17
+ t.mockImplementation((t) => t);
18
+
19
+ // browser mocks
20
+ global.IntersectionObserver = jest.fn(function () {
21
+ this.observe = jest.fn();
22
+ this.unobserve = jest.fn();
23
+ this.disconnect = jest.fn();
24
+ });
25
+
26
+ const transparent =
27
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
28
+
29
+ global.__IN_SERVER__ = false;
30
+
31
+ describe('Hooks image component', () => {
32
+ describe('on initial load', () => {
33
+ beforeAll(() => {
34
+ useInView.mockImplementation(() => [null, false]);
35
+ });
36
+ it('renders a lqip version of the image by default', () => {
37
+ const { placeholderImage } = setup();
38
+
39
+ const src = placeholderImage.getAttribute('src');
40
+
41
+ expect(src).toEqual(expect.stringContaining('sigma=2.5'));
42
+ expect(src).toEqual(expect.stringContaining('minampl=0.5'));
43
+ });
44
+
45
+ it('sets the lqip to the smallest of the calculated sizes', () => {
46
+ const { placeholderImage } = setup({ sizes: [0.5, 0.85, 1] });
47
+ // Should be 160
48
+ // The smallest breakpoint is 20rem, which is 360px.
49
+ // 0.5 x 360 = 160
50
+
51
+ const src = placeholderImage.getAttribute('src');
52
+
53
+ expect(src).toEqual(expect.stringContaining('width=160'));
54
+ });
55
+
56
+ it('does not render an lqip if critical is true', () => {
57
+ const { placeholderImage } = setup({ critical: true });
58
+
59
+ const src = placeholderImage.getAttribute('src');
60
+
61
+ // Sets the src to transaprent data image instead
62
+ expect(src).toEqual(expect.stringContaining('data:image'));
63
+ });
64
+
65
+ it('accepts sizes as pixel values', () => {
66
+ const { placeholderImage } = setup({ sizes: [123] });
67
+
68
+ const src = placeholderImage.getAttribute('src');
69
+
70
+ expect(src).toEqual(expect.stringContaining('width=123'));
71
+ });
72
+
73
+ it('sets opacity to 0.6 while image has not loaded', () => {
74
+ const { placeholderImage } = setup();
75
+
76
+ expect(placeholderImage).toHaveStyle('opacity: 0.6');
77
+ });
78
+ });
79
+
80
+ describe('sets the sizing method', () => {
81
+ it('to thumbnail if no aspect ratio is provided', () => {
82
+ const { placeholderImage } = setup();
83
+ });
84
+ it('to fit if an aspect ratio is provided', () => {
85
+ const { placeholderImage } = setup({ aspect: '1:1' });
86
+
87
+ expect(placeholderImage.getAttribute('src')).toEqual(
88
+ expect.stringContaining('&height=320')
89
+ );
90
+ expect(placeholderImage.getAttribute('src')).toEqual(
91
+ expect.stringContaining('&width=320')
92
+ );
93
+ });
94
+ it('to crop if crop prop is true', () => {
95
+ const { placeholderImage } = setup({ aspect: '1:1', crop: true });
96
+
97
+ expect(placeholderImage.getAttribute('src')).toEqual(
98
+ expect.stringContaining('&method=crop')
99
+ );
100
+ });
101
+ it('warns if gravity is provided without crop', () => {
102
+ console.warn = jest.fn();
103
+ setup({ aspect: '1:1', crop: false, gravity: 'north' });
104
+ expect(console.warn).toHaveBeenCalled();
105
+ });
106
+ });
107
+
108
+ describe('when image is in view', () => {
109
+ beforeAll(() => {
110
+ useInView.mockImplementation(() => [null, true]);
111
+ });
112
+
113
+ it('renders full image', () => {
114
+ const { image } = setup({
115
+ imageSrc: testImage
116
+ });
117
+
118
+ expect(image).toHaveAttribute('src', 'test-image.png');
119
+ });
120
+
121
+ it('applies the given alt as an aria-label', () => {
122
+ const { image } = setup({
123
+ alt: 'test alt'
124
+ });
125
+
126
+ expect(image).toHaveAttribute('alt', 'test alt');
127
+ });
128
+
129
+ it('defaults aspect to 1:1', () => {
130
+ const { imageContainer } = setup();
131
+
132
+ expect(imageContainer).toHaveStyle('padding-bottom : 100%');
133
+ });
134
+
135
+ it('sets aspect ratio using padding if aspect is passed', () => {
136
+ const { imageContainer } = setup({ aspect: '3:2' });
137
+
138
+ expect(imageContainer).toHaveStyle('padding-bottom : 66.6667%');
139
+ });
140
+
141
+ it('defaults to background-size contain', () => {
142
+ const { image } = setup();
143
+
144
+ expect(image).toHaveStyle('object-fit : contain');
145
+ });
146
+
147
+ it('sets background-size to cover if `cover` is passed', () => {
148
+ const { image } = setup({ cover: true });
149
+
150
+ expect(image).toHaveStyle('object-fit : cover');
151
+ });
152
+
153
+ it('sets up image to fill available space if `fillAvailableSpace` is passed', () => {
154
+ const { image } = setup({ fillAvailableSpace: true });
155
+
156
+ expect(image).toHaveStyle('object-fit : cover');
157
+ expect(image).toHaveStyle('padding-top : 0');
158
+ });
159
+
160
+ it('sets opacity to 1 when image loads', () => {
161
+ const { image } = setup();
162
+ fireEvent.load(image);
163
+
164
+ expect(image).toHaveStyle('opacity: 1');
165
+ });
166
+
167
+ it('fades lqip when image loads', () => {
168
+ const { image, placeholderImage } = setup();
169
+ fireEvent.load(image);
170
+
171
+ expect(placeholderImage).toHaveStyle('opacity: 0');
172
+ });
173
+
174
+ test('sets quality to quality prop', () => {
175
+ const { image } = setup({ quality: 1 });
176
+
177
+ expect(image.getAttribute('srcSet')).toEqual(
178
+ expect.stringContaining('&quality=1')
179
+ );
180
+ });
181
+ });
182
+
183
+ describe('when there is an image error', () => {
184
+ beforeAll(() => {
185
+ useInView.mockImplementation(() => [null, true]);
186
+ });
187
+
188
+ it('renders default error', () => {
189
+ const { image, getByText } = setup();
190
+ fireEvent.error(image);
191
+
192
+ expect(getByText('Image Not Found'));
193
+ });
194
+
195
+ it('renders error component', () => {
196
+ const { image, getByText, container } = setup({
197
+ error: () => <div>some error found</div>
198
+ });
199
+ fireEvent.error(image);
200
+
201
+ expect(getByText('some error found'));
202
+ expect(queryByText(container, 'Image Not Found')).not.toBeInTheDocument();
203
+ });
204
+ });
205
+
206
+ describe('when image url is falsy', () => {
207
+ it('renders a transparent background image when null', () => {
208
+ const { image } = setup({ falsySrc: true, imageSrc: null });
209
+
210
+ expect(image).toHaveAttribute(`src`, transparent);
211
+ expect(image).toHaveStyle('opacity : 1');
212
+ });
213
+ it('renders a transparent background image when undefined', () => {
214
+ const { image } = setup({ falsySrc: true, imageSrc: undefined });
215
+
216
+ expect(image).toHaveAttribute(`src`, transparent);
217
+ expect(image).toHaveStyle('opacity: 1');
218
+ });
219
+ it('renders nothing and warns if false', () => {
220
+ console.warn = jest.fn();
221
+ const { image } = setup({ falsySrc: true, imageSrc: false });
222
+
223
+ expect(image).not.toBeInTheDocument();
224
+ expect(console.warn).toHaveBeenCalled();
225
+ });
226
+ });
227
+
228
+ it('renders a webp and jpeg source', () => {
229
+ const { imageContainer } = setup();
230
+
231
+ const sources = imageContainer.querySelectorAll('source');
232
+ expect(sources.length).toBe(2);
233
+ expect(sources[0]).toHaveAttribute('type', 'image/webp');
234
+ });
235
+ });
236
+
237
+ function setup({
238
+ imageSrc,
239
+ falsySrc = false,
240
+ error,
241
+ alt,
242
+ sizes,
243
+ aspect,
244
+ cover,
245
+ ...rest
246
+ } = {}) {
247
+ const channelHandler = new ChannelHandler({
248
+ selectedChannel,
249
+ channels
250
+ });
251
+ const utils = render(
252
+ <ChannelProvider channelHandler={channelHandler}>
253
+ <ConfigProvider config={mockShopConfig}>
254
+ <Image
255
+ src={falsySrc ? imageSrc : imageSrc || 'default.png'}
256
+ error={error}
257
+ alt={alt}
258
+ sizes={sizes}
259
+ aspect={aspect}
260
+ cover={cover}
261
+ {...rest}
262
+ />
263
+ </ConfigProvider>
264
+ </ChannelProvider>
265
+ );
266
+
267
+ return {
268
+ ...utils,
269
+ image: utils.container.querySelector('[data-flight-image] img'),
270
+ placeholderImage: utils.container.querySelector(
271
+ '[data-flight-image-placeholder] img'
272
+ ),
273
+ imageContainer: utils.container.querySelector(
274
+ '[data-flight-image-container]'
275
+ )
276
+ };
277
+ }
package/Image/Image.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './FlightImage';
2
- export { default } from './FlightImage';
1
+ export * from './FlightImage';
2
+ export { default } from './FlightImage';
package/Image/Image.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from './FlightImage';
2
- export { default } from './FlightImage';
1
+ export * from './FlightImage';
2
+ export { default } from './FlightImage';
3
3
  //# sourceMappingURL=Image.js.map
package/Image/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { default } from './FlightImage';
1
+ export { default } from './FlightImage';
package/Image/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { default } from './FlightImage';
1
+ export { default } from './FlightImage';
2
2
  //# sourceMappingURL=index.js.map
@@ -1,46 +1,46 @@
1
- import { ImageValue, ProductImageSize } from '@jetshop/core/types';
2
- declare type ImageSrcType = string | ProductImageSize[] | ImageValue;
3
- export declare type Gravity = 'north' | 'south' | 'west' | 'east' | 'centre' | 'smart';
4
- export declare type ImageBreakpointSize = number | string;
5
- export declare type ImageBreakpointSizes = ImageBreakpointSize | ImageBreakpointSize[];
6
- interface ImageParameters {
7
- /** The image src
8
- * Also accepts an array of objects with `url` keys (deprecated image field)
9
- */
10
- src: ImageSrcType;
11
- /**
12
- * Whether to crop the image instead of resizing it when aspect ratio is provided
13
- * @default false
14
- */
15
- crop?: boolean;
16
- gravity?: Gravity;
17
- quality?: number;
18
- /** An array of image sizes, will be mapped against breakpoints.
19
- * @see https://docs.dev.jetshop.se/ui/image#the-sizes-prop
20
- */
21
- sizes: ImageBreakpointSizes;
22
- /**
23
- * The aspect ratio of the image
24
- * If unknown, use null to preserve original aspect ratio
25
- */
26
- aspect?: string;
27
- critical?: boolean;
28
- modifiedDate?: string;
29
- breakpoints: Record<string, string>;
30
- baseUrl: string;
31
- focalPointX?: number;
32
- focalPointY?: number;
33
- }
34
- /**
35
- * Dynamically constructs the query parameters used by ImageMagick to size the image appropriately.
36
- * Also generates a LQIP using query parameters, to display while the full image loads.
37
- */
38
- export declare function useConstructImage({ gravity, crop, src, sizes, aspect, critical, quality, modifiedDate, breakpoints, baseUrl, focalPointX, focalPointY }: ImageParameters): {
39
- srcset: string;
40
- webpSrcset: string;
41
- sizes: string;
42
- lqip: string;
43
- src: string;
44
- hasFalsySrc: boolean;
45
- };
46
- export {};
1
+ import { ImageValue, ProductImageSize } from '@jetshop/core/types';
2
+ declare type ImageSrcType = string | ProductImageSize[] | ImageValue;
3
+ export declare type Gravity = 'north' | 'south' | 'west' | 'east' | 'centre' | 'smart';
4
+ export declare type ImageBreakpointSize = number | string;
5
+ export declare type ImageBreakpointSizes = ImageBreakpointSize | ImageBreakpointSize[];
6
+ interface ImageParameters {
7
+ /** The image src
8
+ * Also accepts an array of objects with `url` keys (deprecated image field)
9
+ */
10
+ src: ImageSrcType;
11
+ /**
12
+ * Whether to crop the image instead of resizing it when aspect ratio is provided
13
+ * @default false
14
+ */
15
+ crop?: boolean;
16
+ gravity?: Gravity;
17
+ quality?: number;
18
+ /** An array of image sizes, will be mapped against breakpoints.
19
+ * @see https://docs.dev.jetshop.se/ui/image#the-sizes-prop
20
+ */
21
+ sizes: ImageBreakpointSizes;
22
+ /**
23
+ * The aspect ratio of the image
24
+ * If unknown, use null to preserve original aspect ratio
25
+ */
26
+ aspect?: string;
27
+ critical?: boolean;
28
+ modifiedDate?: string;
29
+ breakpoints: Record<string, string>;
30
+ baseUrl: string;
31
+ focalPointX?: number;
32
+ focalPointY?: number;
33
+ }
34
+ /**
35
+ * Dynamically constructs the query parameters used by ImageMagick to size the image appropriately.
36
+ * Also generates a LQIP using query parameters, to display while the full image loads.
37
+ */
38
+ export declare function useConstructImage({ gravity, crop, src, sizes, aspect, critical, quality, modifiedDate, breakpoints, baseUrl, focalPointX, focalPointY }: ImageParameters): {
39
+ srcset: string;
40
+ webpSrcset: string;
41
+ sizes: string;
42
+ lqip: string;
43
+ src: string;
44
+ hasFalsySrc: boolean;
45
+ };
46
+ export {};