@times-components/ts-components 1.145.1-76ee0965069e2a17bc1f8dcf02d24e8fefd6869a.0 → 1.145.1-7e7a12feaf05c514789e802bf49cadca92e6a2b9.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 (143) hide show
  1. package/dist/components/carousel-component/CarouselComponent.stories.js +146 -0
  2. package/dist/components/carousel-component/CarouselItem.d.ts +3 -0
  3. package/dist/components/carousel-component/CarouselItem.js +11 -0
  4. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +8 -0
  5. package/dist/components/carousel-component/DefaultNavigationArrow.js +6 -0
  6. package/dist/components/carousel-component/DefaultPageDot.d.ts +8 -0
  7. package/dist/components/carousel-component/DefaultPageDot.js +4 -0
  8. package/dist/components/{opta/football/opta-match-stats/matchday-live/__tests__/OptaMatchStatsMatchdayLive.test.d.ts → carousel-component/__tests__/CarouselComponent.test.d.ts} +0 -1
  9. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +163 -0
  10. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +1 -0
  11. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +80 -0
  12. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +1 -0
  13. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +62 -0
  14. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +1 -0
  15. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +68 -0
  16. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +1 -0
  17. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +459 -0
  18. package/dist/components/carousel-component/hooks/useCarousel.d.ts +2 -0
  19. package/dist/components/carousel-component/hooks/useCarousel.js +175 -0
  20. package/dist/components/carousel-component/index.d.ts +4 -0
  21. package/dist/components/carousel-component/index.js +20 -0
  22. package/dist/components/carousel-component/styles.d.ts +27 -0
  23. package/dist/components/carousel-component/styles.js +169 -0
  24. package/dist/components/carousel-component/types.d.ts +53 -0
  25. package/dist/components/carousel-component/types.js +2 -0
  26. package/dist/components/opta/football/opta-match-stats/shared/styles.js +1 -8
  27. package/dist/components/trip-cards/SkeletonCard.d.ts +6 -0
  28. package/dist/components/trip-cards/SkeletonCard.js +21 -0
  29. package/dist/components/trip-cards/TripCard.d.ts +3 -0
  30. package/dist/components/trip-cards/TripCard.js +49 -0
  31. package/dist/components/trip-cards/TripCards.stories.d.ts +1 -0
  32. package/dist/components/trip-cards/TripCards.stories.js +189 -0
  33. package/dist/components/trip-cards/TripCardsLayout.d.ts +3 -0
  34. package/dist/components/trip-cards/TripCardsLayout.js +37 -0
  35. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +1 -0
  36. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +139 -0
  37. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +1 -0
  38. package/dist/components/trip-cards/__tests__/TripCard.test.js +95 -0
  39. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +1 -0
  40. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +277 -0
  41. package/dist/components/trip-cards/__tests__/assets.test.d.ts +1 -0
  42. package/dist/components/trip-cards/__tests__/assets.test.js +165 -0
  43. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +1 -0
  44. package/dist/components/trip-cards/__tests__/helpers.test.js +216 -0
  45. package/dist/components/trip-cards/__tests__/index.test.d.ts +1 -0
  46. package/dist/components/trip-cards/__tests__/index.test.js +433 -0
  47. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +1 -0
  48. package/dist/components/trip-cards/__tests__/mockData.test.js +57 -0
  49. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +1 -0
  50. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +194 -0
  51. package/dist/components/trip-cards/assets/BoatIcon.d.ts +1 -0
  52. package/dist/components/trip-cards/assets/BoatIcon.js +4 -0
  53. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +1 -0
  54. package/dist/components/trip-cards/assets/CalendarIcon.js +4 -0
  55. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +1 -0
  56. package/dist/components/trip-cards/assets/ChevronRightIcon.js +4 -0
  57. package/dist/components/trip-cards/assets/LocationIcon.d.ts +1 -0
  58. package/dist/components/trip-cards/assets/LocationIcon.js +4 -0
  59. package/dist/components/trip-cards/assets/MoonIcon.d.ts +1 -0
  60. package/dist/components/trip-cards/assets/MoonIcon.js +4 -0
  61. package/dist/components/trip-cards/assets/index.d.ts +6 -0
  62. package/dist/components/trip-cards/assets/index.js +7 -0
  63. package/dist/components/trip-cards/helpers.d.ts +4 -0
  64. package/dist/components/trip-cards/helpers.js +115 -0
  65. package/dist/components/trip-cards/index.d.ts +4 -0
  66. package/dist/components/trip-cards/index.js +70 -0
  67. package/dist/components/trip-cards/mockData.d.ts +3 -0
  68. package/dist/components/trip-cards/mockData.js +317 -0
  69. package/dist/components/trip-cards/skeletonStyles.d.ts +9 -0
  70. package/dist/components/trip-cards/skeletonStyles.js +37 -0
  71. package/dist/components/trip-cards/styles.d.ts +38 -0
  72. package/dist/components/trip-cards/styles.js +401 -0
  73. package/dist/components/trip-cards/types.d.ts +119 -0
  74. package/dist/components/trip-cards/types.js +2 -0
  75. package/dist/index.d.ts +1 -0
  76. package/dist/index.js +2 -4
  77. package/package.json +3 -3
  78. package/rnw.js +1 -1
  79. package/src/components/carousel-component/CarouselComponent.stories.tsx +220 -0
  80. package/src/components/carousel-component/CarouselItem.tsx +25 -0
  81. package/src/components/carousel-component/DefaultNavigationArrow.tsx +37 -0
  82. package/src/components/carousel-component/DefaultPageDot.tsx +20 -0
  83. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +259 -0
  84. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +140 -0
  85. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +153 -0
  86. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +105 -0
  87. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +625 -0
  88. package/src/components/carousel-component/hooks/useCarousel.ts +231 -0
  89. package/src/components/carousel-component/index.tsx +92 -0
  90. package/src/components/carousel-component/styles.ts +185 -0
  91. package/src/components/carousel-component/types.ts +62 -0
  92. package/src/components/opta/football/opta-match-stats/commentary/__tests__/__snapshots__/OptaMatchStatsCommentary.test.tsx.snap +1 -1
  93. package/src/components/opta/football/opta-match-stats/shared/styles.ts +0 -8
  94. package/src/components/opta/football/opta-match-stats/stats-graphs/__tests__/__snapshots__/OptaMatchStatsGraphs.test.tsx.snap +1 -1
  95. package/src/components/trip-cards/SkeletonCard.tsx +62 -0
  96. package/src/components/trip-cards/TripCard.tsx +143 -0
  97. package/src/components/trip-cards/TripCards.stories.tsx +254 -0
  98. package/src/components/trip-cards/TripCardsLayout.tsx +108 -0
  99. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +169 -0
  100. package/src/components/trip-cards/__tests__/TripCard.test.tsx +120 -0
  101. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +532 -0
  102. package/src/components/trip-cards/__tests__/assets.test.tsx +206 -0
  103. package/src/components/trip-cards/__tests__/helpers.test.ts +266 -0
  104. package/src/components/trip-cards/__tests__/index.test.tsx +495 -0
  105. package/src/components/trip-cards/__tests__/mockData.test.ts +67 -0
  106. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +256 -0
  107. package/src/components/trip-cards/assets/BoatIcon.tsx +17 -0
  108. package/src/components/trip-cards/assets/CalendarIcon.tsx +17 -0
  109. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +20 -0
  110. package/src/components/trip-cards/assets/LocationIcon.tsx +17 -0
  111. package/src/components/trip-cards/assets/MoonIcon.tsx +17 -0
  112. package/src/components/trip-cards/assets/index.ts +7 -0
  113. package/src/components/trip-cards/helpers.ts +150 -0
  114. package/src/components/trip-cards/index.tsx +119 -0
  115. package/src/components/trip-cards/mockData.ts +345 -0
  116. package/src/components/trip-cards/skeletonStyles.ts +46 -0
  117. package/src/components/trip-cards/styles.ts +446 -0
  118. package/src/components/trip-cards/types.ts +128 -0
  119. package/src/index.ts +2 -3
  120. package/dist/components/opta/football/opta-match-stats/matchday-live/DesktopWidget.d.ts +0 -10
  121. package/dist/components/opta/football/opta-match-stats/matchday-live/DesktopWidget.js +0 -69
  122. package/dist/components/opta/football/opta-match-stats/matchday-live/MobileWidget.d.ts +0 -12
  123. package/dist/components/opta/football/opta-match-stats/matchday-live/MobileWidget.js +0 -90
  124. package/dist/components/opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.d.ts +0 -12
  125. package/dist/components/opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.js +0 -10
  126. package/dist/components/opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.stories.js +0 -24
  127. package/dist/components/opta/football/opta-match-stats/matchday-live/__tests__/OptaMatchStatsMatchdayLive.test.js +0 -48
  128. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/MatchdayLiveController.d.ts +0 -1
  129. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/MatchdayLiveController.js +0 -19
  130. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/NavigationWrapper.d.ts +0 -12
  131. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/NavigationWrapper.js +0 -67
  132. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/WidgetContainer.d.ts +0 -6
  133. package/dist/components/opta/football/opta-match-stats/matchday-live/styles/WidgetContainer.js +0 -714
  134. package/src/components/opta/football/opta-match-stats/matchday-live/DesktopWidget.tsx +0 -108
  135. package/src/components/opta/football/opta-match-stats/matchday-live/MobileWidget.tsx +0 -158
  136. package/src/components/opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.stories.tsx +0 -38
  137. package/src/components/opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.tsx +0 -23
  138. package/src/components/opta/football/opta-match-stats/matchday-live/__tests__/OptaMatchStatsMatchdayLive.test.tsx +0 -61
  139. package/src/components/opta/football/opta-match-stats/matchday-live/__tests__/__snapshots__/OptaMatchStatsMatchdayLive.test.tsx.snap +0 -61
  140. package/src/components/opta/football/opta-match-stats/matchday-live/styles/MatchdayLiveController.tsx +0 -19
  141. package/src/components/opta/football/opta-match-stats/matchday-live/styles/NavigationWrapper.tsx +0 -81
  142. package/src/components/opta/football/opta-match-stats/matchday-live/styles/WidgetContainer.tsx +0 -745
  143. /package/dist/components/{opta/football/opta-match-stats/matchday-live/OptaMatchStatsMatchdayLive.stories.d.ts → carousel-component/CarouselComponent.stories.d.ts} +0 -0
@@ -0,0 +1,189 @@
1
+ import React from 'react';
2
+ import { storiesOf } from '@storybook/react';
3
+ import { TripCards } from './index';
4
+ import styled from 'styled-components';
5
+ const spacing = (multiplier) => `${multiplier * 8}px`;
6
+ const breakpoints = {
7
+ medium: 768,
8
+ wide: 1024
9
+ };
10
+ const InteractiveContainer = styled.div `
11
+ position: relative;
12
+ margin-bottom: ${spacing(4)};
13
+ padding: 0 ${spacing(2)};
14
+
15
+ @media (min-width: ${breakpoints.medium}px) {
16
+ width: 80.8%;
17
+ margin-left: auto;
18
+ margin-right: auto;
19
+ padding: 0;
20
+ }
21
+
22
+ @media (min-width: ${breakpoints.wide}px) {
23
+ width: 56.2%;
24
+ }
25
+ `;
26
+ storiesOf('Typescript Component/TripCards', module)
27
+ .add('Channel View Two Cards', () => (React.createElement(TripCards, { element: {
28
+ class: 'trip-cards',
29
+ tripcards: btoa(JSON.stringify([2074350, 2140335])),
30
+ title: 'Similar cruises',
31
+ titleurl: 'https://www.thetimes.com/travel/holidays',
32
+ description: 'Brought to you by Times Holidays'
33
+ }, useMockData: true, widthContainerConfig: {
34
+ mobile: '390px',
35
+ tablet: '728px',
36
+ desktop: '984px',
37
+ xl: '1144px'
38
+ } })))
39
+ .add('Channel View Three Cards', () => (React.createElement(TripCards, { element: {
40
+ class: 'trip-cards',
41
+ tripcards: btoa(JSON.stringify([2074350, 2140335, 2177685])),
42
+ title: 'Featured Voyages',
43
+ titleurl: 'https://www.thetimes.com/travel/holidays',
44
+ description: 'Handpicked by our travel experts'
45
+ }, forceStaticGrid: true, maxWidthItemConfig: {
46
+ mobile: '320px',
47
+ tablet: '320px',
48
+ desktop: '314px',
49
+ xl: '368px'
50
+ }, widthContainerConfig: {
51
+ mobile: '390px',
52
+ tablet: '728px',
53
+ desktop: '984px',
54
+ xl: '1144px'
55
+ }, imgHeight: {
56
+ $heightXs: '153px',
57
+ $heightSm: '213px',
58
+ $heightMd: '213px',
59
+ $heightLg: '210px',
60
+ $heightXl: '245px'
61
+ }, useMockData: true })))
62
+ .add('Article View Two Trip Cards', () => (React.createElement(InteractiveContainer, null,
63
+ React.createElement(TripCards, { element: {
64
+ class: 'trip-cards',
65
+ tripcards: btoa(JSON.stringify([2074350, 2140335])),
66
+ title: 'Similar cruises',
67
+ titleurl: 'https://www.thetimes.com/travel/holidays',
68
+ description: 'Brought to you by Times Holidays'
69
+ }, useMockData: true, maxWidthItemConfig: {
70
+ mobile: '320px',
71
+ tablet: '260px',
72
+ desktop: '260px',
73
+ xl: '300px'
74
+ }, widthContainerConfig: {
75
+ mobile: '390px',
76
+ tablet: '620px',
77
+ desktop: '574px',
78
+ xl: '663px'
79
+ }, imgHeight: {
80
+ $heightXs: '153px',
81
+ $heightSm: '213px',
82
+ $heightMd: '173px',
83
+ $heightLg: '173px',
84
+ $heightXl: '200px'
85
+ } }))))
86
+ .add('Article View Three Cards', () => (React.createElement(InteractiveContainer, null,
87
+ React.createElement(TripCards, { element: {
88
+ class: 'trip-cards',
89
+ tripcards: btoa(JSON.stringify([2074350, 2140335, 2177685])),
90
+ title: 'Similar cruises',
91
+ titleurl: 'https://www.thetimes.com/travel/holidays',
92
+ description: 'Brought to you by Times Holidays'
93
+ }, useMockData: true, maxWidthItemConfig: {
94
+ mobile: '320px',
95
+ tablet: '260px',
96
+ desktop: '260px',
97
+ xl: '300px'
98
+ }, widthContainerConfig: {
99
+ mobile: '390px',
100
+ tablet: '620px',
101
+ desktop: '574px',
102
+ xl: '663px'
103
+ }, imgHeight: {
104
+ $heightXs: '153px',
105
+ $heightSm: '213px',
106
+ $heightMd: '213px',
107
+ $heightLg: '173px',
108
+ $heightXl: '200px'
109
+ } }))))
110
+ .add('Article View Two Trip Cards', () => (React.createElement(InteractiveContainer, null,
111
+ React.createElement(TripCards, { element: {
112
+ class: 'trip-cards',
113
+ tripcards: btoa(JSON.stringify([2074350, 2140335])),
114
+ title: 'Similar cruises',
115
+ titleurl: 'https://www.thetimes.com/travel/holidays',
116
+ description: 'Brought to you by Times Holidays'
117
+ }, useMockData: true, maxWidthItemConfig: {
118
+ mobile: '320px',
119
+ tablet: '260px',
120
+ desktop: '260px',
121
+ xl: '300px'
122
+ }, widthContainerConfig: {
123
+ mobile: '390px',
124
+ tablet: '620px',
125
+ desktop: '574px',
126
+ xl: '663px'
127
+ }, imgHeight: {
128
+ $heightXs: '153px',
129
+ $heightSm: '213px',
130
+ $heightMd: '173px',
131
+ $heightLg: '173px',
132
+ $heightXl: '200px'
133
+ } }))))
134
+ .add('Article View Trip Cards', () => (React.createElement(InteractiveContainer, null,
135
+ React.createElement(TripCards, { element: {
136
+ class: 'trip-cards',
137
+ tripcards: btoa(JSON.stringify([2074350, 2140335, 2177685])),
138
+ title: 'Similar cruises',
139
+ titleurl: 'https://www.thetimes.com/travel/holidays',
140
+ description: 'Brought to you by Times Holidays'
141
+ }, useMockData: true, maxWidthItemConfig: {
142
+ mobile: '320px',
143
+ tablet: '260px',
144
+ desktop: '260px',
145
+ xl: '300px'
146
+ }, widthContainerConfig: {
147
+ mobile: '390px',
148
+ tablet: '620px',
149
+ desktop: '574px',
150
+ xl: '663px'
151
+ }, imgHeight: {
152
+ $heightXs: '153px',
153
+ $heightSm: '213px',
154
+ $heightMd: '173px',
155
+ $heightLg: '173px',
156
+ $heightXl: '200px'
157
+ } }))))
158
+ .add('Article View Six Cards', () => (React.createElement(InteractiveContainer, null,
159
+ React.createElement(TripCards, { element: {
160
+ class: 'trip-cards',
161
+ tripcards: btoa(JSON.stringify([
162
+ 2074350,
163
+ 2140335,
164
+ 2177685,
165
+ 2074351,
166
+ 2140336,
167
+ 2177686
168
+ ])),
169
+ title: 'Similar cruises',
170
+ titleurl: 'https://www.thetimes.com/travel/holidays',
171
+ description: 'Brought to you by Times Holidays'
172
+ }, useMockData: true, maxWidthItemConfig: {
173
+ mobile: '320px',
174
+ tablet: '260px',
175
+ desktop: '260px',
176
+ xl: '300px'
177
+ }, widthContainerConfig: {
178
+ mobile: '390px',
179
+ tablet: '620px',
180
+ desktop: '574px',
181
+ xl: '663px'
182
+ }, imgHeight: {
183
+ $heightXs: '153px',
184
+ $heightSm: '213px',
185
+ $heightMd: '173px',
186
+ $heightLg: '173px',
187
+ $heightXl: '200px'
188
+ } }))));
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpcENhcmRzLnN0b3JpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL1RyaXBDYXJkcy5zdG9yaWVzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFFdkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQztBQUU5RCxNQUFNLFdBQVcsR0FBRztJQUNsQixNQUFNLEVBQUUsR0FBRztJQUNYLElBQUksRUFBRSxJQUFJO0NBQ1gsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQTs7bUJBRXBCLE9BQU8sQ0FBQyxDQUFDLENBQUM7ZUFDZCxPQUFPLENBQUMsQ0FBQyxDQUFDOzt1QkFFRixXQUFXLENBQUMsTUFBTTs7Ozs7Ozt1QkFPbEIsV0FBVyxDQUFDLElBQUk7OztDQUd0QyxDQUFDO0FBRUYsU0FBUyxDQUFDLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQztLQUNoRCxHQUFHLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FDbkMsb0JBQUMsU0FBUyxJQUNSLE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRSxZQUFZO1FBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ25ELEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsUUFBUSxFQUFFLDBDQUEwQztRQUNwRCxXQUFXLEVBQUUsa0NBQWtDO0tBQ2hELEVBQ0Qs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
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ import { TripCardsLayoutProps } from './types';
3
+ export declare const TripCardsLayout: FC<TripCardsLayoutProps>;
@@ -0,0 +1,37 @@
1
+ import React, { useRef, useState, useEffect } from 'react';
2
+ import { CarouselComponent, CarouselItem } from '../carousel-component';
3
+ import { Container, TitleSection, TitleBar, TitleContent, Title, Subtitle, TitleLink, StaticCardsGrid } from './styles';
4
+ import { ChevronRightIcon } from './assets';
5
+ export const TripCardsLayout = ({ element, items, CardComponent, itemsPerPage, widthContainerConfig = {}, widthItemConfig, maxWidthItemConfig, imgHeight, forceStaticGrid }) => {
6
+ const { titleurl, title, description } = element;
7
+ const gridRef = useRef(null);
8
+ const [hasOverflow, setHasOverflow] = useState(false);
9
+ const [isTabletMobile, setIsTabletMobile] = useState(false);
10
+ const isStaticGrid = items.length === 2 || forceStaticGrid;
11
+ useEffect(() => {
12
+ const checkScreenAndOverflow = () => {
13
+ setIsTabletMobile(window.innerWidth <= 768);
14
+ if (isStaticGrid && gridRef.current) {
15
+ const isOverflowing = gridRef.current.scrollWidth > gridRef.current.clientWidth;
16
+ setHasOverflow(isOverflowing);
17
+ }
18
+ };
19
+ checkScreenAndOverflow();
20
+ window.addEventListener('resize', checkScreenAndOverflow);
21
+ return () => window.removeEventListener('resize', checkScreenAndOverflow);
22
+ }, [items, isStaticGrid]);
23
+ const shouldUseCarousel = (isTabletMobile && items.length >= 3) || (!isStaticGrid || hasOverflow);
24
+ return (React.createElement(Container, Object.assign({ "data-testid": "trip-cards-container" }, widthContainerConfig),
25
+ React.createElement(TitleSection, { "data-testid": "title-section" },
26
+ React.createElement(TitleBar, { "data-testid": "title-bar" },
27
+ React.createElement(TitleContent, { "data-testid": "title-content" },
28
+ React.createElement(Title, { "data-testid": "trip-cards-title" }, title),
29
+ React.createElement(Subtitle, { "data-testid": "trip-cards-subtitle" }, description)),
30
+ titleurl && (React.createElement(TitleLink, { href: titleurl, target: "_blank", rel: "noopener noreferrer", "data-testid": "title-link" },
31
+ React.createElement(ChevronRightIcon, null))))),
32
+ !shouldUseCarousel ? (React.createElement(StaticCardsGrid, { "data-testid": "static-cards-grid", ref: gridRef }, items.map(item => (React.createElement(CardComponent, { imgHeight: imgHeight, key: item.id, card: item.data, isStaticGrid: true }))))) : (React.createElement(CarouselComponent, { items: items.map(item => (React.createElement(CarouselItem, { key: item.id, widthItemConfig: widthItemConfig, maxWidthItemConfig: maxWidthItemConfig },
33
+ React.createElement(CardComponent, { card: item.data, imgHeight: imgHeight })))), options: {
34
+ itemsPerPage
35
+ }, showArrows: !isStaticGrid, showDots: true }))));
36
+ };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpcENhcmRzTGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9UcmlwQ2FyZHNMYXlvdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQU0sTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFDUixZQUFZLEVBQ1osS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsZUFBZSxFQUNoQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUE2QixDQUFDLEVBQ3hELE9BQU8sRUFDUCxLQUFLLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsR0FBRyxFQUFFLEVBQ3pCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGVBQWUsRUFDaEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUM7SUFFM0QsU0FBUyxDQUNQLEdBQUcsRUFBRTtRQUNILE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO1lBQ2xDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7WUFFNUMsSUFBSSxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxhQUFhLEdBQ2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUM1RCxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUM7UUFFRixzQkFBc0IsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM1RSxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQ3RCLENBQUM7SUFFRixNQUFNLGlCQUFpQixHQUNyQixDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLENBQUM7SUFFMUUsT0FBTyxDQUNMLG9CQUFDLFNBQVMsaUNBQWEsc0JBQXNCLElBQUssb0JBQW9CO1FBQ3BFLG9CQUFDLFlBQVksbUJBQWEsZUFBZTtZQUN2QyxvQkFBQyxRQUFRLG1CQUFhLFdBQVc7Z0JBQy9CLG9CQUFDLFlBQVksbUJBQWEsZUFBZTtvQkFDdkMsb0JBQUMsS0FBSyxtQkFBYSxrQkFBa0IsSUFBRSxLQUFLLENBQVM7b0JBQ3JELG9CQUFDLFFBQVEsbUJBQWEscUJBQXFCLElBQUUsV0FBVyxDQUFZLENBQ3ZEO2dCQUNkLFFBQVEsSUFBSSxDQUNYLG9CQUFDLFNBQVMsSUFDUixJQUFJLEVBQUUsUUFBUSxFQUNkLE1BQU0sRUFBQyxRQUFRLEVBQ2YsR0FBRyxFQUFDLHFCQUFxQixpQkFDYixZQUFZO29CQUV4QixvQkFBQyxnQkFBZ0IsT0FBRyxDQUNWLENBQ2IsQ0FDUSxDQUNFO1FBRWQsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FDcEIsb0JBQUMsZUFBZSxtQkFBYSxtQkFBbUIsRUFBQyxHQUFHLEVBQUUsT0FBTyxJQUMxRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDakIsb0JBQUMsYUFBYSxJQUNaLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUNaLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUNmLFlBQVksRUFBRSxJQUFJLEdBQ2xCLENBQ0gsQ0FBQyxDQUNjLENBQ25CLENBQUMsQ0FBQyxDQUFDLENBQ0Ysb0JBQUMsaUJBQWlCLElBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDdkIsb0JBQUMsWUFBWSxJQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUNaLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGtCQUFrQixFQUFFLGtCQUFrQjtnQkFFdEMsb0JBQUMsYUFBYSxJQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUksQ0FDM0MsQ0FDaEIsQ0FBQyxFQUNGLE9BQU8sRUFBRTtnQkFDUCxZQUFZO2FBQ2IsRUFDRCxVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQ3pCLFFBQVEsRUFBRSxJQUFJLEdBQ2QsQ0FDSCxDQUNTLENBQ2IsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,139 @@
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { SkeletonCard } from '../SkeletonCard';
5
+ describe('SkeletonCard', () => {
6
+ it('renders without crashing', () => {
7
+ const { container } = render(React.createElement(SkeletonCard, null));
8
+ expect(container.firstChild).toBeInTheDocument();
9
+ });
10
+ it('renders placeholder image', () => {
11
+ render(React.createElement(SkeletonCard, null));
12
+ const imageContainer = screen.getByTestId('skeleton-image-container');
13
+ expect(imageContainer).toBeInTheDocument();
14
+ });
15
+ it('renders skeleton headline', () => {
16
+ render(React.createElement(SkeletonCard, null));
17
+ const skeletonHeadline = screen.getByTestId('skeleton-headline');
18
+ expect(skeletonHeadline).toBeInTheDocument();
19
+ });
20
+ it('renders four skeleton data points in the list', () => {
21
+ render(React.createElement(SkeletonCard, null));
22
+ const dataPoints = [
23
+ screen.getByTestId('skeleton-data-point-1'),
24
+ screen.getByTestId('skeleton-data-point-2'),
25
+ screen.getByTestId('skeleton-data-point-3'),
26
+ screen.getByTestId('skeleton-data-point-4')
27
+ ];
28
+ expect(dataPoints.length).toBe(4);
29
+ });
30
+ it('renders skeleton lines for data points', () => {
31
+ render(React.createElement(SkeletonCard, null));
32
+ const skeletonLines = [
33
+ screen.getByTestId('skeleton-line-1'),
34
+ screen.getByTestId('skeleton-line-2'),
35
+ screen.getByTestId('skeleton-line-3'),
36
+ screen.getByTestId('skeleton-line-4'),
37
+ screen.getByTestId('skeleton-price-label')
38
+ ];
39
+ expect(skeletonLines.length).toBe(5);
40
+ });
41
+ it('renders skeleton price', () => {
42
+ render(React.createElement(SkeletonCard, null));
43
+ const skeletonPrice = screen.getByTestId('skeleton-price');
44
+ expect(skeletonPrice).toBeInTheDocument();
45
+ });
46
+ it('renders skeleton button', () => {
47
+ render(React.createElement(SkeletonCard, null));
48
+ const skeletonButton = screen.getByTestId('skeleton-button');
49
+ expect(skeletonButton).toBeInTheDocument();
50
+ });
51
+ it('has correct card structure', () => {
52
+ render(React.createElement(SkeletonCard, null));
53
+ const cardContainer = screen.getByTestId('skeleton-card-container');
54
+ const cardContent = screen.getByTestId('skeleton-card-content');
55
+ const topContainer = screen.getByTestId('skeleton-top-container');
56
+ const bottomContainer = screen.getByTestId('skeleton-bottom-container');
57
+ expect(cardContainer).toBeInTheDocument();
58
+ expect(cardContent).toBeInTheDocument();
59
+ expect(topContainer).toBeInTheDocument();
60
+ expect(bottomContainer).toBeInTheDocument();
61
+ });
62
+ it('renders price section with container', () => {
63
+ render(React.createElement(SkeletonCard, null));
64
+ const priceSection = screen.getByTestId('skeleton-price-section');
65
+ const priceContainer = screen.getByTestId('skeleton-price-container');
66
+ expect(priceSection).toBeInTheDocument();
67
+ expect(priceContainer).toBeInTheDocument();
68
+ });
69
+ it('renders data points list', () => {
70
+ render(React.createElement(SkeletonCard, null));
71
+ const dataPointsList = screen.getByTestId('skeleton-data-points-list');
72
+ expect(dataPointsList).toBeInTheDocument();
73
+ });
74
+ it('skeleton lines are rendered for each data point', () => {
75
+ render(React.createElement(SkeletonCard, null));
76
+ const skeletonLines = [
77
+ screen.getByTestId('skeleton-line-1'),
78
+ screen.getByTestId('skeleton-line-2'),
79
+ screen.getByTestId('skeleton-line-3'),
80
+ screen.getByTestId('skeleton-line-4'),
81
+ screen.getByTestId('skeleton-price-label')
82
+ ];
83
+ expect(skeletonLines.length).toBe(5);
84
+ });
85
+ it('renders with correct skeleton styling', () => {
86
+ render(React.createElement(SkeletonCard, null));
87
+ expect(screen.getByTestId('skeleton-headline')).toBeInTheDocument();
88
+ expect(screen.getByTestId('skeleton-price')).toBeInTheDocument();
89
+ expect(screen.getByTestId('skeleton-button')).toBeInTheDocument();
90
+ // Check that skeleton lines are present
91
+ expect(screen.getByTestId('skeleton-line-1')).toBeInTheDocument();
92
+ });
93
+ it('renders consistent structure', () => {
94
+ render(React.createElement(SkeletonCard, null));
95
+ expect(screen.getByTestId('skeleton-card-container')).toBeInTheDocument();
96
+ expect(screen.getByTestId('skeleton-image-container')).toBeInTheDocument();
97
+ expect(screen.getByTestId('skeleton-card-content')).toBeInTheDocument();
98
+ expect(screen.getByTestId('skeleton-top-container')).toBeInTheDocument();
99
+ expect(screen.getByTestId('skeleton-bottom-container')).toBeInTheDocument();
100
+ });
101
+ it('can render multiple skeleton cards', () => {
102
+ render(React.createElement(React.Fragment, null,
103
+ React.createElement(SkeletonCard, null),
104
+ React.createElement(SkeletonCard, null),
105
+ React.createElement(SkeletonCard, null)));
106
+ const cards = screen.getAllByTestId('skeleton-card-container');
107
+ expect(cards.length).toBe(3);
108
+ });
109
+ it('renders skeleton elements in correct order', () => {
110
+ render(React.createElement(SkeletonCard, null));
111
+ const cardContent = screen.getByTestId('skeleton-card-content');
112
+ const topContainer = screen.getByTestId('skeleton-top-container');
113
+ const bottomContainer = screen.getByTestId('skeleton-bottom-container');
114
+ // Verify both containers exist as children of card content
115
+ expect(cardContent.contains(topContainer)).toBe(true);
116
+ expect(cardContent.contains(bottomContainer)).toBe(true);
117
+ });
118
+ it('skeleton button has correct structure', () => {
119
+ render(React.createElement(SkeletonCard, null));
120
+ const skeletonButton = screen.getByTestId('skeleton-button');
121
+ expect(skeletonButton.tagName.toLowerCase()).toBe('div');
122
+ });
123
+ it('skeleton lines have correct width props', () => {
124
+ render(React.createElement(SkeletonCard, null));
125
+ // Check that the skeleton lines are rendered
126
+ expect(screen.getByTestId('skeleton-line-1')).toBeInTheDocument();
127
+ expect(screen.getByTestId('skeleton-line-2')).toBeInTheDocument();
128
+ expect(screen.getByTestId('skeleton-line-3')).toBeInTheDocument();
129
+ expect(screen.getByTestId('skeleton-line-4')).toBeInTheDocument();
130
+ });
131
+ it('renders without any interactive elements', () => {
132
+ const { container } = render(React.createElement(SkeletonCard, null));
133
+ const buttons = container.querySelectorAll('button');
134
+ const links = container.querySelectorAll('a');
135
+ expect(buttons.length).toBe(0);
136
+ expect(links.length).toBe(0);
137
+ });
138
+ });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25DYXJkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL19fdGVzdHNfXy9Ta2VsZXRvbkNhcmQudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTywyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksT0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLENBQUMsb0JBQUMsWUFBWSxPQUFHLENBQUMsQ0FBQztRQUN6QixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLE1BQU0sQ0FBQyxvQkFBQyxZQUFZLE9BQUcsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxnQkFB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
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { TripCard } from '../TripCard';
5
+ const mockCard = {
6
+ cruise_id: '2074350',
7
+ image: 'https://example.com/image.jpg',
8
+ headline: 'Mediterranean from Barcelona',
9
+ date: 'Oct 2025 - Oct 2025',
10
+ duration: 'Seven Days',
11
+ route: 'Barcelona → Marseille',
12
+ ship: 'MSC Seaside',
13
+ price: '£2000',
14
+ logo: 'https://example.com/logo.png',
15
+ logo_url: 'https://example.com',
16
+ cta_url: 'https://example.com/cruise',
17
+ cta_text: 'View Itinerary'
18
+ };
19
+ describe('TripCard', () => {
20
+ it('renders card with all required data', () => {
21
+ render(React.createElement(TripCard, { card: mockCard }));
22
+ expect(screen.getByText('Mediterranean from Barcelona')).toBeInTheDocument();
23
+ expect(screen.getByText('Oct 2025 - Oct 2025')).toBeInTheDocument();
24
+ expect(screen.getByText('Seven Days')).toBeInTheDocument();
25
+ expect(screen.getByText('Barcelona → Marseille')).toBeInTheDocument();
26
+ expect(screen.getByText('MSC Seaside')).toBeInTheDocument();
27
+ expect(screen.getByText('£2000')).toBeInTheDocument();
28
+ expect(screen.getByText('From')).toBeInTheDocument();
29
+ expect(screen.getByText('View Itinerary')).toBeInTheDocument();
30
+ });
31
+ it('renders image with correct src and alt', () => {
32
+ render(React.createElement(TripCard, { card: mockCard }));
33
+ const image = screen.getByAltText('Mediterranean from Barcelona');
34
+ expect(image).toHaveAttribute('src', 'https://example.com/image.jpg');
35
+ });
36
+ it('renders offer label when provided', () => {
37
+ const cardWithOffer = {
38
+ ...mockCard,
39
+ offer_label: 'Special Offer'
40
+ };
41
+ render(React.createElement(TripCard, { card: cardWithOffer }));
42
+ expect(screen.getByText('Special Offer')).toBeInTheDocument();
43
+ });
44
+ it('renders gift banner when provided', () => {
45
+ const cardWithGift = {
46
+ ...mockCard,
47
+ gift_banner: 'Free gift with purchase'
48
+ };
49
+ render(React.createElement(TripCard, { card: cardWithGift }));
50
+ expect(screen.getByText('Free gift with purchase')).toBeInTheDocument();
51
+ });
52
+ it('renders original price when provided', () => {
53
+ const cardWithOriginalPrice = {
54
+ ...mockCard,
55
+ original_price: '£2500'
56
+ };
57
+ render(React.createElement(TripCard, { card: cardWithOriginalPrice }));
58
+ expect(screen.getByText('£2500')).toBeInTheDocument();
59
+ });
60
+ it('does not render "From" when price is "Enquire now"', () => {
61
+ const cardWithEnquire = {
62
+ ...mockCard,
63
+ price: 'Enquire now'
64
+ };
65
+ render(React.createElement(TripCard, { card: cardWithEnquire }));
66
+ expect(screen.queryByText('From')).not.toBeInTheDocument();
67
+ expect(screen.getByText('Enquire now')).toBeInTheDocument();
68
+ });
69
+ it('renders all CTA links with correct href and target', () => {
70
+ render(React.createElement(TripCard, { card: mockCard }));
71
+ const links = screen.getAllByRole('link');
72
+ const imageLink = links[0];
73
+ const headlineLink = links[1];
74
+ const ctaButton = screen.getByText('View Itinerary').closest('a');
75
+ expect(imageLink).toHaveAttribute('href', 'https://example.com/cruise');
76
+ expect(imageLink).toHaveAttribute('target', '_blank');
77
+ expect(headlineLink).toHaveAttribute('href', 'https://example.com/cruise');
78
+ expect(ctaButton).toHaveAttribute('href', 'https://example.com/cruise');
79
+ });
80
+ it('renders logo with link when provided', () => {
81
+ render(React.createElement(TripCard, { card: mockCard }));
82
+ const logoLink = screen.getByRole('link', { name: /partner logo/i });
83
+ expect(logoLink).toHaveAttribute('href', 'https://example.com');
84
+ const logoImg = screen.getByAltText('Partner logo');
85
+ expect(logoImg).toHaveAttribute('src', 'https://example.com/logo.png');
86
+ });
87
+ it('shows card image after it loads', () => {
88
+ render(React.createElement(TripCard, { card: mockCard }));
89
+ const cardImage = screen.getByAltText('Mediterranean from Barcelona');
90
+ expect(cardImage).toHaveStyle({ display: 'none' });
91
+ fireEvent.load(cardImage);
92
+ expect(cardImage).toHaveStyle({ display: 'block' });
93
+ });
94
+ });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpcENhcmQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvX190ZXN0c19fL1RyaXBDYXJkLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsTUFBTSxRQUFRLEdBQW9CO0lBQ2hDLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLEtBQUssRUFBRSwrQkFBK0I7SUFDdEMsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFFBQVEsRUFBRSxZQUFZO0lBQ3RCLEtBQUssRUFBRSx1QkFBdUI7SUFDOUIsSUFBSSxFQUFFLGFBQWE7SUFDbkIsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLFFBQVEsRUFBRSxxQkFBcUI7SUFDL0IsT0FBTyxFQUFFLDRCQUE0QjtJQUNyQyxRQUFRLEVBQUUsZ0JBQWdCO0NBQzNCLENBQUM7QUFFRixRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtJQUN4QixFQUFFLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1FBQzdDLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLElBQUMsSUFBSSxFQUFFLFFBQVEsR0FBSSxDQUFDLENBQUM7UUFFckMsTUFBTSxDQUNKLE1BQU0sQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FDakQsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFD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
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';