@times-components/ts-components 1.145.1-777882a8b99dc7733f00b94202a91fa8b7dc2a7e.1 → 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 -1
  76. package/dist/index.js +2 -2
  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,194 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { SkeletonLine, SkeletonHeadline, SkeletonPrice, SkeletonButton } from '../skeletonStyles';
5
+ describe('Skeleton Styles', () => {
6
+ describe('SkeletonLine', () => {
7
+ it('renders with default width', () => {
8
+ const { container } = render(React.createElement(SkeletonLine, null));
9
+ const element = container.firstChild;
10
+ expect(element).toBeInTheDocument();
11
+ });
12
+ it('accepts custom width prop', () => {
13
+ const { container } = render(React.createElement(SkeletonLine, { width: "80px" }));
14
+ const element = container.firstChild;
15
+ expect(element).toBeInTheDocument();
16
+ });
17
+ it('accepts custom marginBottom prop', () => {
18
+ const { container } = render(React.createElement(SkeletonLine, { marginBottom: "4px" }));
19
+ const element = container.firstChild;
20
+ expect(element).toBeInTheDocument();
21
+ });
22
+ it('accepts both width and marginBottom props', () => {
23
+ const { container } = render(React.createElement(SkeletonLine, { width: "60px", marginBottom: "8px" }));
24
+ const element = container.firstChild;
25
+ expect(element).toBeInTheDocument();
26
+ });
27
+ it('renders as a div element', () => {
28
+ const { container } = render(React.createElement(SkeletonLine, null));
29
+ const element = container.firstChild;
30
+ if (element) {
31
+ expect(element.nodeName).toBe('DIV');
32
+ }
33
+ });
34
+ it('applies skeleton styling', () => {
35
+ const { container } = render(React.createElement(SkeletonLine, null));
36
+ const element = container.firstChild;
37
+ expect(element.className).toMatch(/sc-/);
38
+ });
39
+ });
40
+ describe('SkeletonHeadline', () => {
41
+ it('renders correctly', () => {
42
+ const { container } = render(React.createElement(SkeletonHeadline, null));
43
+ const element = container.firstChild;
44
+ expect(element).toBeInTheDocument();
45
+ });
46
+ it('renders as a div element', () => {
47
+ const { container } = render(React.createElement(SkeletonHeadline, null));
48
+ const element = container.firstChild;
49
+ if (element) {
50
+ expect(element.nodeName).toBe('DIV');
51
+ }
52
+ });
53
+ it('has styled component class', () => {
54
+ const { container } = render(React.createElement(SkeletonHeadline, null));
55
+ const element = container.firstChild;
56
+ expect(element.className).toMatch(/sc-/);
57
+ });
58
+ it('accepts className prop', () => {
59
+ const { container } = render(React.createElement(SkeletonHeadline, { className: "custom" }));
60
+ const element = container.firstChild;
61
+ expect(element).toHaveClass('custom');
62
+ });
63
+ });
64
+ describe('SkeletonPrice', () => {
65
+ it('renders correctly', () => {
66
+ const { container } = render(React.createElement(SkeletonPrice, null));
67
+ const element = container.firstChild;
68
+ expect(element).toBeInTheDocument();
69
+ });
70
+ it('renders as a div element', () => {
71
+ const { container } = render(React.createElement(SkeletonPrice, null));
72
+ const element = container.firstChild;
73
+ if (element) {
74
+ expect(element.nodeName).toBe('DIV');
75
+ }
76
+ });
77
+ it('has styled component class', () => {
78
+ const { container } = render(React.createElement(SkeletonPrice, null));
79
+ const element = container.firstChild;
80
+ expect(element.className).toMatch(/sc-/);
81
+ });
82
+ it('can be used multiple times', () => {
83
+ const { container } = render(React.createElement(React.Fragment, null,
84
+ React.createElement(SkeletonPrice, null),
85
+ React.createElement(SkeletonPrice, null),
86
+ React.createElement(SkeletonPrice, null)));
87
+ const elements = container.querySelectorAll('div');
88
+ expect(elements.length).toBe(3);
89
+ });
90
+ });
91
+ describe('SkeletonButton', () => {
92
+ it('renders correctly', () => {
93
+ const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
94
+ const element = container.firstChild;
95
+ expect(element).toBeInTheDocument();
96
+ });
97
+ it('renders as div when specified', () => {
98
+ const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
99
+ const element = container.firstChild;
100
+ if (element) {
101
+ expect(element.nodeName).toBe('DIV');
102
+ }
103
+ });
104
+ it('has styled component class', () => {
105
+ const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
106
+ const element = container.firstChild;
107
+ expect(element.className).toMatch(/sc-/);
108
+ });
109
+ it('accepts additional props', () => {
110
+ const { container } = render(React.createElement(SkeletonButton, { as: "div", "data-testid": "skeleton-button" }));
111
+ const element = container.firstChild;
112
+ expect(element).toHaveAttribute('data-testid', 'skeleton-button');
113
+ });
114
+ it('is not interactive', () => {
115
+ const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
116
+ const element = container.firstChild;
117
+ if (element) {
118
+ expect(element.nodeName).toBe('DIV');
119
+ }
120
+ });
121
+ });
122
+ describe('Skeleton Components Integration', () => {
123
+ it('all skeleton components render together', () => {
124
+ const { container } = render(React.createElement("div", null,
125
+ React.createElement(SkeletonHeadline, null),
126
+ React.createElement(SkeletonLine, { width: "80px" }),
127
+ React.createElement(SkeletonPrice, null),
128
+ React.createElement(SkeletonButton, { as: "div" })));
129
+ // Verify all components are present (4 skeleton components + 1 wrapper div = 5 divs minimum)
130
+ const elements = container.querySelectorAll('div');
131
+ expect(elements.length).toBeGreaterThanOrEqual(5);
132
+ });
133
+ it('skeleton components maintain consistent styling', () => {
134
+ const { container } = render(React.createElement("div", null,
135
+ React.createElement(SkeletonLine, null),
136
+ React.createElement(SkeletonHeadline, null),
137
+ React.createElement(SkeletonPrice, null)));
138
+ const styledElements = container.querySelectorAll('[class*="sc-"]');
139
+ expect(styledElements.length).toBeGreaterThanOrEqual(3);
140
+ });
141
+ it('skeleton components are div elements by default', () => {
142
+ const { container } = render(React.createElement("div", null,
143
+ React.createElement(SkeletonLine, null),
144
+ React.createElement(SkeletonHeadline, null),
145
+ React.createElement(SkeletonPrice, null)));
146
+ const divs = Array.from(container.querySelectorAll('div'));
147
+ expect(divs.length).toBeGreaterThanOrEqual(4);
148
+ });
149
+ it('props are correctly applied to skeleton components', () => {
150
+ const { container } = render(React.createElement("div", null,
151
+ React.createElement(SkeletonLine, { width: "50px", marginBottom: "10px" }),
152
+ React.createElement(SkeletonButton, { as: "div", className: "btn-skeleton" })));
153
+ const elements = container.querySelectorAll('div');
154
+ expect(elements.length).toBeGreaterThanOrEqual(2);
155
+ });
156
+ });
157
+ describe('Styled Components Structure', () => {
158
+ it('SkeletonLine has correct structure', () => {
159
+ const { container } = render(React.createElement(SkeletonLine, null));
160
+ expect(container.firstChild).toBeTruthy();
161
+ });
162
+ it('SkeletonHeadline has correct structure', () => {
163
+ const { container } = render(React.createElement(SkeletonHeadline, null));
164
+ expect(container.firstChild).toBeTruthy();
165
+ });
166
+ it('SkeletonPrice has correct structure', () => {
167
+ const { container } = render(React.createElement(SkeletonPrice, null));
168
+ expect(container.firstChild).toBeTruthy();
169
+ });
170
+ it('SkeletonButton has correct structure', () => {
171
+ const { container } = render(React.createElement(SkeletonButton, { as: "div" }));
172
+ expect(container.firstChild).toBeTruthy();
173
+ });
174
+ });
175
+ describe('Props and Variants', () => {
176
+ it('SkeletonLine with different widths', () => {
177
+ const { rerender, container } = render(React.createElement(SkeletonLine, { width: "20px" }));
178
+ expect(container.firstChild).toBeInTheDocument();
179
+ rerender(React.createElement(SkeletonLine, { width: "100px" }));
180
+ expect(container.firstChild).toBeInTheDocument();
181
+ rerender(React.createElement(SkeletonLine, { width: "50%" }));
182
+ expect(container.firstChild).toBeInTheDocument();
183
+ });
184
+ it('SkeletonLine with different margins', () => {
185
+ const { rerender, container } = render(React.createElement(SkeletonLine, { marginBottom: "2px" }));
186
+ expect(container.firstChild).toBeInTheDocument();
187
+ rerender(React.createElement(SkeletonLine, { marginBottom: "8px" }));
188
+ expect(container.firstChild).toBeInTheDocument();
189
+ rerender(React.createElement(SkeletonLine, { marginBottom: "16px" }));
190
+ expect(container.firstChild).toBeInTheDocument();
191
+ });
192
+ });
193
+ });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b25TdHlsZXMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvX190ZXN0c19fL3NrZWxldG9uU3R5bGVzLnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTywyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsY0FBYyxFQUNmLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsb0JBQUMsWUFBWSxPQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtZQUNuQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksSUFBQyxLQUFLLEVBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM1RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFB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LEVBQUU7WUFDN0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQ3BDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsS0FBSyxHQUFHLENBQ3BDLENBQUM7WUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFakQsUUFBUSxDQUFDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFakQsUUFBUSxDQUFDLG9CQUFDLFlBQVksSUFBQyxZQUFZLEVBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare const BoatIcon: (props: any) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ export const BoatIcon = (props) => (React.createElement("svg", Object.assign({ width: "15", height: "16", viewBox: "0 0 15 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
3
+ React.createElement("path", { d: "M2.78887 3.51093V6.29999L6.98887 4.92187L11.1889 6.29999V3.51093H2.78887ZM1.34512 12.6L0.0326173 7.94062C0.0107423 7.89687 -0.000195216 7.82031 -0.000195216 7.71093C-0.000195216 7.40468 0.163867 7.18593 0.491992 7.05468L1.37793 6.75937V3.51093C1.37793 3.13906 1.52012 2.81093 1.80449 2.52656C2.08887 2.24218 2.41699 2.09999 2.78887 2.09999H4.88887V-7.20099e-06H9.08887V2.09999H11.1889C11.5607 2.09999 11.8889 2.24218 12.1732 2.52656C12.4576 2.81093 12.5998 3.13906 12.5998 3.51093V6.75937L13.4857 7.05468C13.9451 7.20781 14.0982 7.50312 13.9451 7.94062L12.6326 12.6H12.5998C11.5279 12.6 10.5873 12.1406 9.77793 11.2219C8.96856 12.1406 8.03887 12.6 6.98887 12.6C5.93887 12.6 5.00918 12.1406 4.19981 11.2219C3.39043 12.1406 2.4498 12.6 1.37793 12.6H1.34512ZM12.5998 14.0109H13.9779V15.4219H12.5998C11.6154 15.4219 10.6748 15.1922 9.77793 14.7328C8.90293 15.1703 7.97324 15.3891 6.98887 15.3891C6.00449 15.3891 5.07481 15.1703 4.19981 14.7328C3.30293 15.1922 2.3623 15.4219 1.37793 15.4219H-0.000195216V14.0109H1.37793C2.38418 14.0109 3.32481 13.7047 4.19981 13.0922C5.05293 13.6828 5.98262 13.9781 6.98887 13.9781C7.99512 13.9781 8.92481 13.6828 9.77793 13.0922C10.6529 13.7047 11.5936 14.0109 12.5998 14.0109Z", fill: "currentColor" })));
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9hdEljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9Cb2F0SWNvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUN0QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsMHJDQUEwckMsRUFDNXJDLElBQUksRUFBQyxjQUFjLEdBQ25CLENBQ0UsQ0FDUCxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare const CalendarIcon: (props: any) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ export const CalendarIcon = (props) => (React.createElement("svg", Object.assign({ width: "13", height: "14", viewBox: "0 0 13 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
3
+ React.createElement("path", { d: "M11.189 12.6V4.88907H1.41084V12.6H11.189ZM11.189 1.37813C11.5608 1.37813 11.889 1.52032 12.1733 1.80469C12.4577 2.08907 12.5999 2.41719 12.5999 2.78907V12.6C12.5999 12.9719 12.4577 13.3 12.1733 13.5844C11.889 13.8469 11.5608 13.9781 11.189 13.9781H1.41084C1.01709 13.9781 0.678028 13.8469 0.393653 13.5844C0.131152 13.3219 -9.75132e-05 12.9938 -9.75132e-05 12.6V2.78907C-9.75132e-05 2.41719 0.131152 2.08907 0.393653 1.80469C0.678028 1.52032 1.01709 1.37813 1.41084 1.37813H2.0999V5.05522e-06H3.51084V1.37813H9.08897V5.05522e-06H10.4999V1.37813H11.189ZM9.81084 6.30001V7.67813H8.3999V6.30001H9.81084ZM6.98897 6.30001V7.67813H5.61084V6.30001H6.98897ZM4.1999 6.30001V7.67813H2.78897V6.30001H4.1999Z", fill: "currentColor" })));
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXJJY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9hc3NldHMvQ2FsZW5kYXJJY29uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQzFDLDJDQUNFLEtBQUssRUFBQyxJQUFJLEVBQ1YsTUFBTSxFQUFDLElBQUksRUFDWCxPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLEtBQUssRUFBQyw0QkFBNEIsSUFDOUIsS0FBSztJQUVULDhCQUNFLENBQUMsRUFBQywwckJBQTByQixFQUM1ckIsSUFBSSxFQUFDLGNBQWMsR0FDbkIsQ0FDRSxDQUNQLENBQUMifQ==
@@ -0,0 +1 @@
1
+ export declare const ChevronRightIcon: (props: any) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ export const ChevronRightIcon = (props) => (React.createElement("svg", Object.assign({ width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
3
+ React.createElement("path", { d: "M6 12L10 8L6 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })));
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hldnJvblJpZ2h0SWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvYXNzZXRzL0NoZXZyb25SaWdodEljb24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUM5QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQ2xCLE1BQU0sRUFBQyxjQUFjLEVBQ3JCLFdBQVcsRUFBQyxLQUFLLEVBQ2pCLGFBQWEsRUFBQyxPQUFPLEVBQ3JCLGNBQWMsRUFBQyxPQUFPLEdBQ3RCLENBQ0UsQ0FDUCxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare const LocationIcon: (props: any) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ export const LocationIcon = (props) => (React.createElement("svg", Object.assign({ width: "10", height: "14", viewBox: "0 0 10 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
3
+ React.createElement("path", { d: "M3.64238 6.13594C3.99238 6.46407 4.40801 6.62813 4.88926 6.62813C5.37051 6.62813 5.7752 6.46407 6.10332 6.13594C6.45332 5.78594 6.62832 5.37032 6.62832 4.88907C6.62832 4.40782 6.45332 4.00313 6.10332 3.67501C5.7752 3.32501 5.37051 3.15001 4.88926 3.15001C4.40801 3.15001 3.99238 3.32501 3.64238 3.67501C3.31426 4.00313 3.1502 4.40782 3.1502 4.88907C3.1502 5.37032 3.31426 5.78594 3.64238 6.13594ZM1.41113 1.44376C2.37363 0.481255 3.53301 5.05522e-06 4.88926 5.05522e-06C6.24551 5.05522e-06 7.39395 0.481255 8.33457 1.44376C9.29707 2.38438 9.77832 3.53282 9.77832 4.88907C9.77832 5.56719 9.60332 6.34376 9.25332 7.21876C8.9252 8.09376 8.52051 8.91407 8.03926 9.67969C7.55801 10.4453 7.07676 11.1672 6.59551 11.8453C6.13613 12.5016 5.74238 13.0266 5.41426 13.4203L4.88926 13.9781C4.75801 13.825 4.58301 13.6281 4.36426 13.3875C4.14551 13.125 3.75176 12.6219 3.18301 11.8781C2.61426 11.1125 2.11113 10.3797 1.67363 9.67969C1.25801 8.95782 0.875196 8.14844 0.525196 7.25157C0.175196 6.35469 0.000195552 5.56719 0.000195552 4.88907C0.000195552 3.53282 0.470508 2.38438 1.41113 1.44376Z", fill: "currentColor" })));
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYXRpb25JY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJpcC1jYXJkcy9hc3NldHMvTG9jYXRpb25JY29uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQzFDLDJDQUNFLEtBQUssRUFBQyxJQUFJLEVBQ1YsTUFBTSxFQUFDLElBQUksRUFDWCxPQUFPLEVBQUMsV0FBVyxFQUNuQixJQUFJLEVBQUMsTUFBTSxFQUNYLEtBQUssRUFBQyw0QkFBNEIsSUFDOUIsS0FBSztJQUVULDhCQUNFLENBQUMsRUFBQywwakNBQTBqQyxFQUM1akMsSUFBSSxFQUFDLGNBQWMsR0FDbkIsQ0FDRSxDQUNQLENBQUMifQ==
@@ -0,0 +1 @@
1
+ export declare const MoonIcon: (props: any) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ export const MoonIcon = (props) => (React.createElement("svg", Object.assign({ width: "14", height: "15", viewBox: "0 0 14 15", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
3
+ React.createElement("path", { d: "M7.21856 0.0656178C6.69356 0.984368 6.38731 1.92499 6.29981 2.88749C6.21231 3.84999 6.31074 4.77968 6.59512 5.67656C6.90137 6.57343 7.36074 7.38281 7.97324 8.10468C8.58574 8.82656 9.31856 9.40624 10.1717 9.84374C11.0467 10.2812 12.0092 10.5109 13.0592 10.5328C12.6436 11.2328 12.1295 11.8453 11.517 12.3703C10.9045 12.8953 10.2154 13.3109 9.44981 13.6172C8.68418 13.9016 7.86387 14.0437 6.98887 14.0437C6.02637 14.0437 5.11856 13.8687 4.26543 13.5187C3.43418 13.1469 2.69043 12.6437 2.03418 12.0094C1.3998 11.3531 0.89668 10.6094 0.524805 9.77812C0.174805 8.92499 -0.000195216 8.01718 -0.000195216 7.05468C-0.000195216 6.07031 0.185742 5.15156 0.557617 4.29843C0.929492 3.44531 1.44355 2.70156 2.0998 2.06718C2.75605 1.41093 3.52168 0.907805 4.39668 0.557805C5.27168 0.18593 6.21231 0.0218678 7.21856 0.0656178Z", fill: "currentColor" })));
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9vbkljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9Nb29uSWNvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUN0QywyQ0FDRSxLQUFLLEVBQUMsSUFBSSxFQUNWLE1BQU0sRUFBQyxJQUFJLEVBQ1gsT0FBTyxFQUFDLFdBQVcsRUFDbkIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUMsNEJBQTRCLElBQzlCLEtBQUs7SUFFVCw4QkFDRSxDQUFDLEVBQUMsNnlCQUE2eUIsRUFDL3lCLElBQUksRUFBQyxjQUFjLEdBQ25CLENBQ0UsQ0FDUCxDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import { BoatIcon } from './BoatIcon';
2
+ import { CalendarIcon } from './CalendarIcon';
3
+ import { ChevronRightIcon } from './ChevronRightIcon';
4
+ import { LocationIcon } from './LocationIcon';
5
+ import { MoonIcon } from './MoonIcon';
6
+ export { BoatIcon, LocationIcon, CalendarIcon, MoonIcon, ChevronRightIcon };
@@ -0,0 +1,7 @@
1
+ import { BoatIcon } from './BoatIcon';
2
+ import { CalendarIcon } from './CalendarIcon';
3
+ import { ChevronRightIcon } from './ChevronRightIcon';
4
+ import { LocationIcon } from './LocationIcon';
5
+ import { MoonIcon } from './MoonIcon';
6
+ export { BoatIcon, LocationIcon, CalendarIcon, MoonIcon, ChevronRightIcon };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2Fzc2V0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMifQ==
@@ -0,0 +1,4 @@
1
+ import { TripCardApiData, ApiCruiseResult } from './types';
2
+ export declare const transformApiResult: (result: ApiCruiseResult) => TripCardApiData;
3
+ export declare const decodeIds: (encoded: string) => number[];
4
+ export declare const fetchCruiseCards: (cruiseIds: number[]) => Promise<TripCardApiData[]>;
@@ -0,0 +1,115 @@
1
+ const decodeHtmlEntities = (text) => {
2
+ const textarea = document.createElement('textarea');
3
+ textarea.innerHTML = text;
4
+ return textarea.value;
5
+ };
6
+ export const transformApiResult = (result) => {
7
+ const formatPrice = (price) => {
8
+ if (price === 0 || price === 'Enquire now') {
9
+ return 'Enquire now';
10
+ }
11
+ return typeof price === 'string' ? price : `£${price}`;
12
+ };
13
+ const formatRoute = (itinerary) => {
14
+ if (itinerary.length <= 2) {
15
+ return itinerary.join(' → ');
16
+ }
17
+ return `${itinerary[0]} → ${itinerary[itinerary.length - 1]}`;
18
+ };
19
+ const formatOriginalPrice = (wasPrice) => {
20
+ if (!wasPrice || wasPrice === 0 || wasPrice === 'Enquire now') {
21
+ return undefined;
22
+ }
23
+ return typeof wasPrice === 'string' ? wasPrice : `£${wasPrice}`;
24
+ };
25
+ const findCheapestCabinType = () => {
26
+ const cheapestPrice = result.prices.cheapest_price;
27
+ const cabinTypes = [
28
+ 'inside',
29
+ 'outside',
30
+ 'balcony',
31
+ 'suite'
32
+ ];
33
+ for (const cabinType of cabinTypes) {
34
+ const cabinPrice = result.prices[cabinType];
35
+ if (Number(cabinPrice) === Number(cheapestPrice)) {
36
+ return cabinType;
37
+ }
38
+ }
39
+ return null;
40
+ };
41
+ const getOriginalPrice = () => {
42
+ const cheapestCabinType = findCheapestCabinType();
43
+ if (cheapestCabinType && result.was_prices[cheapestCabinType]) {
44
+ return formatOriginalPrice(result.was_prices[cheapestCabinType]);
45
+ }
46
+ return undefined;
47
+ };
48
+ return {
49
+ cruise_id: String(result.cruise_id),
50
+ image: result.ship.image,
51
+ offer_label: result.campaigns.length > 0 ? result.campaigns[0] : undefined,
52
+ headline: decodeHtmlEntities(result.cruise_title),
53
+ date: result.extras.date,
54
+ duration: result.extras.duration,
55
+ route: formatRoute(result.itinerary),
56
+ ship: result.ship.name,
57
+ original_price: getOriginalPrice(),
58
+ price: formatPrice(result.prices.cheapest_price),
59
+ logo: result.cruise_line.logo,
60
+ logo_url: result.cruise_line.link,
61
+ cta_url: result.link,
62
+ cta_text: 'View Itinerary'
63
+ };
64
+ };
65
+ export const decodeIds = (encoded) => {
66
+ try {
67
+ const decoded = atob(encoded);
68
+ const data = JSON.parse(decoded);
69
+ if (Array.isArray(data)) {
70
+ return data;
71
+ }
72
+ return [];
73
+ }
74
+ catch (e) {
75
+ // Failed to decode trip card IDs
76
+ return [];
77
+ }
78
+ };
79
+ const isValidOffer = (result) => {
80
+ if (result.departs) {
81
+ const departDate = new Date(result.departs);
82
+ if (isNaN(departDate.getTime())) {
83
+ return false;
84
+ }
85
+ departDate.setHours(0, 0, 0, 0);
86
+ const today = new Date();
87
+ today.setHours(0, 0, 0, 0);
88
+ if (departDate < today) {
89
+ return false;
90
+ }
91
+ }
92
+ return true;
93
+ };
94
+ export const fetchCruiseCards = async (cruiseIds) => {
95
+ const formData = new FormData();
96
+ formData.append('action', 'results');
97
+ formData.append('cruise_ids', cruiseIds.join(','));
98
+ const response = await fetch('https://www.staging-thetimes.com/holidays/wp-admin/admin-ajax.php', {
99
+ method: 'POST',
100
+ body: formData
101
+ });
102
+ if (!response.ok) {
103
+ throw new Error(`HTTP error! status: ${response.status}`);
104
+ }
105
+ const data = await response.json();
106
+ if (data.results && Array.isArray(data.results)) {
107
+ const validResults = data.results.filter((result) => isValidOffer(result));
108
+ const transformedCards = validResults.map((result) => transformApiResult(result));
109
+ return cruiseIds
110
+ .map(id => transformedCards.find(card => card.cruise_id === String(id)))
111
+ .filter(Boolean);
112
+ }
113
+ throw new Error('Invalid API response format');
114
+ };
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7SUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsTUFBdUIsRUFDTixFQUFFO0lBQ25CLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBc0IsRUFBVSxFQUFFO1FBQ3JELElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssYUFBYSxFQUFFO1lBQzFDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQW1CLEVBQVUsRUFBRTtRQUNsRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixNQUFNLG1CQUFtQixHQUFHLENBQzFCLFFBQXlCLEVBQ0wsRUFBRTtRQUN0QixJQUFJLENBQUMsUUFBUSxJQUFJLFFB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
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+ import { TripCardsProps } from './types';
3
+ export declare const TripCards: FC<TripCardsProps>;
4
+ export default TripCards;
@@ -0,0 +1,70 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { TripCard } from './TripCard';
3
+ import { SkeletonCard } from './SkeletonCard';
4
+ import { TripCardsLayout } from './TripCardsLayout';
5
+ import { getMockTripCards } from './mockData';
6
+ import { decodeIds, fetchCruiseCards } from './helpers';
7
+ export const TripCards = ({ element, useMockData = false, widthContainerConfig, widthItemConfig, maxWidthItemConfig, imgHeight, forceStaticGrid }) => {
8
+ const [cards, setCards] = useState([]);
9
+ const [loading, setLoading] = useState(true);
10
+ const [error, setError] = useState(null);
11
+ const [itemsPerPage, setItemsPerPage] = useState(2);
12
+ const allIds = [...decodeIds(element.tripcards || '')].filter((id, index, self) => self.indexOf(id) === index);
13
+ useEffect(() => {
14
+ const loadCards = async () => {
15
+ if (allIds.length === 0) {
16
+ setLoading(false);
17
+ setError('No valid cruise IDs provided');
18
+ return;
19
+ }
20
+ if (useMockData) {
21
+ setCards(getMockTripCards(allIds.length));
22
+ setLoading(false);
23
+ return;
24
+ }
25
+ try {
26
+ const transformedCards = await fetchCruiseCards(allIds);
27
+ setCards(transformedCards);
28
+ }
29
+ catch (e) {
30
+ setError(e instanceof Error ? e.message : 'Failed to load cruises');
31
+ }
32
+ finally {
33
+ setLoading(false);
34
+ }
35
+ };
36
+ loadCards();
37
+ }, [element.tripcards, useMockData]);
38
+ useEffect(() => {
39
+ const handleResize = () => {
40
+ const width = window.innerWidth;
41
+ // sm/xs: < 768px → 1 card per page
42
+ // md/lg/xl: >= 768px → 2 cards per page
43
+ if (width < 768) {
44
+ setItemsPerPage(1);
45
+ }
46
+ else {
47
+ setItemsPerPage(2);
48
+ }
49
+ };
50
+ handleResize();
51
+ window.addEventListener('resize', handleResize);
52
+ return () => window.removeEventListener('resize', handleResize);
53
+ }, []);
54
+ if (loading && allIds.length > 1) {
55
+ const skeletonItems = Array.from({ length: allIds.length || 2 }, (_, i) => ({
56
+ id: `skeleton-${i}`
57
+ }));
58
+ return (React.createElement(TripCardsLayout, { element: element, items: skeletonItems, CardComponent: SkeletonCard, itemsPerPage: itemsPerPage, widthContainerConfig: widthContainerConfig, widthItemConfig: widthItemConfig, maxWidthItemConfig: maxWidthItemConfig, imgHeight: imgHeight, forceStaticGrid: forceStaticGrid }));
59
+ }
60
+ if (error || allIds.length < 2 || cards.length < 2) {
61
+ return null;
62
+ }
63
+ const cardItems = cards.map((card, index) => ({
64
+ id: `${card.cruise_id}-${index}`,
65
+ data: card
66
+ }));
67
+ return (React.createElement(TripCardsLayout, { element: element, items: cardItems, CardComponent: TripCard, itemsPerPage: itemsPerPage, widthContainerConfig: widthContainerConfig, widthItemConfig: widthItemConfig, maxWidthItemConfig: maxWidthItemConfig, imgHeight: imgHeight, forceStaticGrid: forceStaticGrid }));
68
+ };
69
+ export default TripCards;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL2luZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFNLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBdUIsQ0FBQyxFQUM1QyxPQUFPLEVBQ1AsV0FBVyxHQUFHLEtBQUssRUFDbkIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGVBQWUsRUFDaEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxN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
@@ -0,0 +1,3 @@
1
+ import { TripCardApiData, ApiCruiseResult } from './types';
2
+ export declare const mockApiResults: ApiCruiseResult[];
3
+ export declare const getMockTripCards: (count?: number | undefined) => TripCardApiData[];