@times-components/ts-components 1.146.2-a0ffbb6bc2acbec91d140a39f6be06256e702094.5 → 1.146.2-c12ed7999a41984c2ba8c437357e7a5df1914881.48

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 (137) hide show
  1. package/dist/components/carousel-component/CarouselComponent.stories.d.ts +1 -0
  2. package/dist/components/carousel-component/CarouselComponent.stories.js +146 -0
  3. package/dist/components/carousel-component/CarouselItem.d.ts +3 -0
  4. package/dist/components/carousel-component/CarouselItem.js +12 -0
  5. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +8 -0
  6. package/dist/components/carousel-component/DefaultNavigationArrow.js +6 -0
  7. package/dist/components/carousel-component/DefaultPageDot.d.ts +8 -0
  8. package/dist/components/carousel-component/DefaultPageDot.js +4 -0
  9. package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +1 -0
  10. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +163 -0
  11. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +1 -0
  12. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +80 -0
  13. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +1 -0
  14. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +62 -0
  15. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +1 -0
  16. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +68 -0
  17. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +1 -0
  18. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +459 -0
  19. package/dist/components/carousel-component/hooks/useCarousel.d.ts +2 -0
  20. package/dist/components/carousel-component/hooks/useCarousel.js +167 -0
  21. package/dist/components/carousel-component/index.d.ts +4 -0
  22. package/dist/components/carousel-component/index.js +20 -0
  23. package/dist/components/carousel-component/styles.d.ts +28 -0
  24. package/dist/components/carousel-component/styles.js +172 -0
  25. package/dist/components/carousel-component/types.d.ts +53 -0
  26. package/dist/components/carousel-component/types.js +2 -0
  27. package/dist/components/social-embed/SocialMediaEmbed.js +15 -122
  28. package/dist/components/social-embed/SocialVendor.d.ts +16 -1
  29. package/dist/components/social-embed/SocialVendor.js +2 -41
  30. package/dist/components/social-embed/__tests__/SocialVendor.test.js +1 -8
  31. package/dist/components/social-embed/constants.d.ts +0 -1
  32. package/dist/components/social-embed/constants.js +2 -3
  33. package/dist/components/social-embed/helpers/socialMediaVendors.js +1 -6
  34. package/dist/components/social-embed/styles.d.ts +0 -1
  35. package/dist/components/social-embed/styles.js +1 -28
  36. package/dist/components/trip-cards/SkeletonCard.d.ts +7 -0
  37. package/dist/components/trip-cards/SkeletonCard.js +22 -0
  38. package/dist/components/trip-cards/TripCard.d.ts +3 -0
  39. package/dist/components/trip-cards/TripCard.js +61 -0
  40. package/dist/components/trip-cards/TripCards.stories.d.ts +1 -0
  41. package/dist/components/trip-cards/TripCards.stories.js +159 -0
  42. package/dist/components/trip-cards/TripCardsLayout.d.ts +3 -0
  43. package/dist/components/trip-cards/TripCardsLayout.js +63 -0
  44. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +1 -0
  45. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +139 -0
  46. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +1 -0
  47. package/dist/components/trip-cards/__tests__/TripCard.test.js +165 -0
  48. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +1 -0
  49. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +353 -0
  50. package/dist/components/trip-cards/__tests__/assets.test.d.ts +1 -0
  51. package/dist/components/trip-cards/__tests__/assets.test.js +165 -0
  52. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +1 -0
  53. package/dist/components/trip-cards/__tests__/helpers.test.js +221 -0
  54. package/dist/components/trip-cards/__tests__/index.test.d.ts +1 -0
  55. package/dist/components/trip-cards/__tests__/index.test.js +482 -0
  56. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +1 -0
  57. package/dist/components/trip-cards/__tests__/mockData.test.js +57 -0
  58. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +1 -0
  59. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +194 -0
  60. package/dist/components/trip-cards/assets/BoatIcon.d.ts +1 -0
  61. package/dist/components/trip-cards/assets/BoatIcon.js +4 -0
  62. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +1 -0
  63. package/dist/components/trip-cards/assets/CalendarIcon.js +4 -0
  64. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +1 -0
  65. package/dist/components/trip-cards/assets/ChevronRightIcon.js +4 -0
  66. package/dist/components/trip-cards/assets/LocationIcon.d.ts +1 -0
  67. package/dist/components/trip-cards/assets/LocationIcon.js +4 -0
  68. package/dist/components/trip-cards/assets/MoonIcon.d.ts +1 -0
  69. package/dist/components/trip-cards/assets/MoonIcon.js +4 -0
  70. package/dist/components/trip-cards/assets/index.d.ts +6 -0
  71. package/dist/components/trip-cards/assets/index.js +7 -0
  72. package/dist/components/trip-cards/helpers.d.ts +11 -0
  73. package/dist/components/trip-cards/helpers.js +144 -0
  74. package/dist/components/trip-cards/index.d.ts +4 -0
  75. package/dist/components/trip-cards/index.js +68 -0
  76. package/dist/components/trip-cards/mockData.d.ts +3 -0
  77. package/dist/components/trip-cards/mockData.js +317 -0
  78. package/dist/components/trip-cards/skeletonStyles.d.ts +9 -0
  79. package/dist/components/trip-cards/skeletonStyles.js +37 -0
  80. package/dist/components/trip-cards/styles.d.ts +43 -0
  81. package/dist/components/trip-cards/styles.js +404 -0
  82. package/dist/components/trip-cards/types.d.ts +121 -0
  83. package/dist/components/trip-cards/types.js +2 -0
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.js +2 -1
  86. package/dist/utils/cookie.d.ts +1 -0
  87. package/dist/utils/cookie.js +8 -1
  88. package/package.json +3 -3
  89. package/rnw.js +1 -1
  90. package/src/components/carousel-component/CarouselComponent.stories.tsx +220 -0
  91. package/src/components/carousel-component/CarouselItem.tsx +26 -0
  92. package/src/components/carousel-component/DefaultNavigationArrow.tsx +37 -0
  93. package/src/components/carousel-component/DefaultPageDot.tsx +20 -0
  94. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +259 -0
  95. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +140 -0
  96. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +153 -0
  97. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +105 -0
  98. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +625 -0
  99. package/src/components/carousel-component/hooks/useCarousel.ts +229 -0
  100. package/src/components/carousel-component/index.tsx +92 -0
  101. package/src/components/carousel-component/styles.ts +188 -0
  102. package/src/components/carousel-component/types.ts +62 -0
  103. package/src/components/social-embed/SocialMediaEmbed.tsx +1 -111
  104. package/src/components/social-embed/SocialVendor.tsx +1 -46
  105. package/src/components/social-embed/__tests__/SocialVendor.test.tsx +0 -11
  106. package/src/components/social-embed/constants.ts +1 -2
  107. package/src/components/social-embed/helpers/socialMediaVendors.ts +0 -5
  108. package/src/components/social-embed/styles.ts +0 -30
  109. package/src/components/trip-cards/SkeletonCard.tsx +64 -0
  110. package/src/components/trip-cards/TripCard.tsx +172 -0
  111. package/src/components/trip-cards/TripCards.stories.tsx +224 -0
  112. package/src/components/trip-cards/TripCardsLayout.tsx +162 -0
  113. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +169 -0
  114. package/src/components/trip-cards/__tests__/TripCard.test.tsx +255 -0
  115. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +671 -0
  116. package/src/components/trip-cards/__tests__/assets.test.tsx +206 -0
  117. package/src/components/trip-cards/__tests__/helpers.test.ts +273 -0
  118. package/src/components/trip-cards/__tests__/index.test.tsx +554 -0
  119. package/src/components/trip-cards/__tests__/mockData.test.ts +67 -0
  120. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +256 -0
  121. package/src/components/trip-cards/assets/BoatIcon.tsx +17 -0
  122. package/src/components/trip-cards/assets/CalendarIcon.tsx +17 -0
  123. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +20 -0
  124. package/src/components/trip-cards/assets/LocationIcon.tsx +17 -0
  125. package/src/components/trip-cards/assets/MoonIcon.tsx +17 -0
  126. package/src/components/trip-cards/assets/index.ts +7 -0
  127. package/src/components/trip-cards/helpers.ts +181 -0
  128. package/src/components/trip-cards/index.tsx +120 -0
  129. package/src/components/trip-cards/mockData.ts +345 -0
  130. package/src/components/trip-cards/skeletonStyles.ts +46 -0
  131. package/src/components/trip-cards/styles.ts +450 -0
  132. package/src/components/trip-cards/types.ts +130 -0
  133. package/src/index.ts +2 -0
  134. package/src/utils/cookie.ts +8 -0
  135. package/dist/components/social-embed/components/FacebookComponent.d.ts +0 -6
  136. package/dist/components/social-embed/components/FacebookComponent.js +0 -74
  137. package/src/components/social-embed/components/FacebookComponent.tsx +0 -93
@@ -0,0 +1,353 @@
1
+ import React from 'react';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { TripCardsLayout } from '../TripCardsLayout';
5
+ import { tealiumTrackingHandler } from '../../../helpers/tracking/TrackingHandler';
6
+ jest.mock('../../../helpers/tracking/TrackingHandler', () => ({
7
+ tealiumTrackingHandler: jest.fn()
8
+ }));
9
+ const mockElement = {
10
+ class: 'trip-cards',
11
+ tripcards: btoa(JSON.stringify([1, 2])),
12
+ title: 'Test Cruises',
13
+ titleurl: 'https://example.com',
14
+ description: 'Test Description'
15
+ };
16
+ const MockCard = ({ card }) => (React.createElement("div", { "data-testid": "mock-card" }, card ? card.headline || 'Mock Card' : 'Mock Card'));
17
+ // Mock ResizeObserver
18
+ global.ResizeObserver = class ResizeObserver {
19
+ observe() {
20
+ // Mock implementation
21
+ }
22
+ unobserve() {
23
+ // Mock implementation
24
+ }
25
+ disconnect() {
26
+ // Mock implementation
27
+ }
28
+ };
29
+ describe('TripCardsLayout', () => {
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+ Element.prototype.scrollTo = jest.fn();
33
+ // Mock matchMedia for each test
34
+ Object.defineProperty(window, 'matchMedia', {
35
+ writable: true,
36
+ configurable: true,
37
+ value: jest.fn().mockImplementation(query => ({
38
+ matches: false,
39
+ media: query,
40
+ onchange: null,
41
+ addListener: jest.fn(),
42
+ removeListener: jest.fn(),
43
+ addEventListener: jest.fn(),
44
+ removeEventListener: jest.fn(),
45
+ dispatchEvent: jest.fn()
46
+ }))
47
+ });
48
+ });
49
+ afterEach(() => {
50
+ jest.clearAllMocks();
51
+ });
52
+ describe('Rendering', () => {
53
+ it('renders with title and description', () => {
54
+ const items = [
55
+ { id: '1', data: undefined },
56
+ { id: '2', data: undefined }
57
+ ];
58
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
59
+ expect(screen.getByText('Test Cruises')).toBeInTheDocument();
60
+ expect(screen.getByText('Test Description')).toBeInTheDocument();
61
+ });
62
+ it('renders empty title when not provided', () => {
63
+ const elementWithoutTitle = {
64
+ ...mockElement,
65
+ title: undefined
66
+ };
67
+ const items = [{ id: '1', data: undefined }];
68
+ const { container } = render(React.createElement(TripCardsLayout, { element: elementWithoutTitle, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
69
+ const title = container.querySelector('h2');
70
+ expect(title).toBeInTheDocument();
71
+ expect(title).toBeEmptyDOMElement();
72
+ });
73
+ it('renders empty description when not provided', () => {
74
+ const elementWithoutDesc = {
75
+ ...mockElement,
76
+ description: undefined
77
+ };
78
+ const items = [{ id: '1', data: undefined }];
79
+ const { container } = render(React.createElement(TripCardsLayout, { element: elementWithoutDesc, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
80
+ const description = container.querySelector('p');
81
+ expect(description).toBeInTheDocument();
82
+ expect(description).toBeEmptyDOMElement();
83
+ });
84
+ it('renders title link when provided', () => {
85
+ const items = [{ id: '1', data: undefined }];
86
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
87
+ const link = screen.getByTestId('trip-cards-title-link');
88
+ expect(link).toHaveAttribute('href', 'https://example.com');
89
+ expect(link).toHaveAttribute('target', '_blank');
90
+ expect(link).toHaveAttribute('rel', 'noopener noreferrer');
91
+ });
92
+ it('renders two links when titleurl is provided', () => {
93
+ const items = [{ id: '1', data: undefined }];
94
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
95
+ const links = screen.getAllByRole('link');
96
+ expect(links).toHaveLength(2);
97
+ const titleLink = screen.getByTestId('trip-cards-title-link');
98
+ const iconLink = screen.getByTestId('title-link');
99
+ expect(titleLink).toHaveAttribute('href', 'https://example.com');
100
+ expect(iconLink).toHaveAttribute('href', 'https://example.com');
101
+ });
102
+ it('does not render title link when not provided', () => {
103
+ const elementWithoutLink = {
104
+ ...mockElement,
105
+ titleurl: undefined
106
+ };
107
+ const items = [{ id: '1', data: undefined }];
108
+ render(React.createElement(TripCardsLayout, { element: elementWithoutLink, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
109
+ const links = screen.queryAllByRole('link');
110
+ expect(links.length).toBe(0);
111
+ });
112
+ it('renders ChevronRightIcon in title link', () => {
113
+ const items = [{ id: '1', data: undefined }];
114
+ const { container } = render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
115
+ const svg = container.querySelector('svg');
116
+ expect(svg).toBeInTheDocument();
117
+ });
118
+ });
119
+ describe('Static Grid Layout', () => {
120
+ it('renders static grid for exactly 2 items', () => {
121
+ const items = [
122
+ { id: '1', data: undefined },
123
+ { id: '2', data: undefined }
124
+ ];
125
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
126
+ const staticGrid = screen.getByTestId('static-cards-grid');
127
+ expect(staticGrid).toBeInTheDocument();
128
+ });
129
+ it('renders correct number of cards in static grid', () => {
130
+ const items = [
131
+ { id: '1', data: undefined },
132
+ { id: '2', data: undefined }
133
+ ];
134
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
135
+ const cards = screen.getAllByTestId('mock-card');
136
+ expect(cards.length).toBe(2);
137
+ });
138
+ it('passes correct props to CardComponent in static grid', () => {
139
+ const mockData = {
140
+ cruise_id: '1',
141
+ image: 'test.jpg',
142
+ headline: 'Test Cruise',
143
+ date: 'Jan 2024',
144
+ duration: '7 nights',
145
+ route: 'Test Route',
146
+ ship: 'Test Ship',
147
+ price: '£1000',
148
+ logo: 'logo.png',
149
+ logo_url: 'https://example.com',
150
+ logo_name: 'Test Cruise Line',
151
+ cta_url: 'https://example.com',
152
+ cta_text: 'View'
153
+ };
154
+ const items = [{ id: '1', data: mockData }, { id: '2', data: undefined }];
155
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
156
+ expect(screen.getByText('Test Cruise')).toBeInTheDocument();
157
+ });
158
+ });
159
+ describe('Carousel Layout', () => {
160
+ it('renders carousel for more than 2 items', () => {
161
+ const items = [
162
+ { id: '1', data: undefined },
163
+ { id: '2', data: undefined },
164
+ { id: '3', data: undefined }
165
+ ];
166
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
167
+ const cards = screen.getAllByTestId('mock-card');
168
+ expect(cards.length).toBe(3);
169
+ });
170
+ it('renders navigation arrows in carousel', () => {
171
+ const items = [
172
+ { id: '1', data: undefined },
173
+ { id: '2', data: undefined },
174
+ { id: '3', data: undefined }
175
+ ];
176
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
177
+ expect(screen.getByLabelText('Previous items')).toBeInTheDocument();
178
+ expect(screen.getByLabelText('Next items')).toBeInTheDocument();
179
+ });
180
+ it('renders page dots in carousel', () => {
181
+ const items = [
182
+ { id: '1', data: undefined },
183
+ { id: '2', data: undefined },
184
+ { id: '3', data: undefined },
185
+ { id: '4', data: undefined }
186
+ ];
187
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
188
+ expect(screen.getByLabelText('Previous items')).toBeInTheDocument();
189
+ expect(screen.getByLabelText('Next items')).toBeInTheDocument();
190
+ // With 4 items and 2 per page, we have 2 pages, so we should have 2 dot buttons
191
+ const pageDots = screen.getAllByLabelText(/Go to page/i);
192
+ expect(pageDots.length).toBe(2);
193
+ });
194
+ it('renders carousel for 1 item', () => {
195
+ const items = [{ id: '1', data: undefined }];
196
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
197
+ const cards = screen.getAllByTestId('mock-card');
198
+ expect(cards.length).toBe(1);
199
+ });
200
+ it('wraps cards in CarouselItem with correct widthConfig', () => {
201
+ const items = [
202
+ { id: '1', data: undefined },
203
+ { id: '2', data: undefined },
204
+ { id: '3', data: undefined }
205
+ ];
206
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
207
+ // Verify carousel is rendering by checking for cards
208
+ const cards = screen.getAllByTestId('mock-card');
209
+ expect(cards.length).toBe(3);
210
+ });
211
+ });
212
+ describe('Card Rendering', () => {
213
+ it('renders each item with unique key', () => {
214
+ const items = [
215
+ { id: 'card-1', data: undefined },
216
+ { id: 'card-2', data: undefined }
217
+ ];
218
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
219
+ const cards = screen.getAllByTestId('mock-card');
220
+ expect(cards.length).toBe(2);
221
+ });
222
+ it('passes data to CardComponent', () => {
223
+ const mockData = {
224
+ cruise_id: '123',
225
+ image: 'image.jpg',
226
+ headline: 'Specific Cruise',
227
+ date: 'Feb 2024',
228
+ duration: '10 nights',
229
+ route: 'Route A',
230
+ ship: 'Ship X',
231
+ price: '£2000',
232
+ logo: 'logo.png',
233
+ logo_url: 'https://example.com',
234
+ logo_name: 'Test Cruise Line',
235
+ cta_url: 'https://example.com',
236
+ cta_text: 'Book'
237
+ };
238
+ const items = [
239
+ { id: '1', data: mockData },
240
+ { id: '2', data: undefined },
241
+ { id: '3', data: undefined }
242
+ ];
243
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
244
+ expect(screen.getByText('Specific Cruise')).toBeInTheDocument();
245
+ });
246
+ it('handles empty items array', () => {
247
+ const { container } = render(React.createElement(TripCardsLayout, { element: mockElement, items: [], CardComponent: MockCard, itemsPerPage: 2 }));
248
+ expect(container.firstChild).toBeInTheDocument();
249
+ const cards = screen.queryAllByTestId('mock-card');
250
+ expect(cards.length).toBe(0);
251
+ });
252
+ });
253
+ describe('Container Structure', () => {
254
+ it('renders main container', () => {
255
+ const items = [{ id: '1', data: undefined }];
256
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
257
+ const mainContainer = screen.getByTestId('trip-cards-container');
258
+ expect(mainContainer).toBeInTheDocument();
259
+ });
260
+ it('renders title section', () => {
261
+ const items = [{ id: '1', data: undefined }];
262
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
263
+ const titleSection = screen.getByTestId('title-section');
264
+ expect(titleSection).toBeInTheDocument();
265
+ });
266
+ it('renders title bar with content', () => {
267
+ const items = [{ id: '1', data: undefined }];
268
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
269
+ const titleBar = screen.getByTestId('title-bar');
270
+ const titleContent = screen.getByTestId('title-content');
271
+ expect(titleBar).toBeInTheDocument();
272
+ expect(titleContent).toBeInTheDocument();
273
+ });
274
+ });
275
+ describe('ItemsPerPage', () => {
276
+ it('respects itemsPerPage prop', () => {
277
+ const items = Array.from({ length: 6 }, (_, i) => ({
278
+ id: `${i}`,
279
+ data: undefined
280
+ }));
281
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 3 }));
282
+ const cards = screen.getAllByTestId('mock-card');
283
+ expect(cards.length).toBe(6);
284
+ });
285
+ it('handles itemsPerPage of 1', () => {
286
+ const items = [
287
+ { id: '1', data: undefined },
288
+ { id: '2', data: undefined }
289
+ ];
290
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 1 }));
291
+ const cards = screen.getAllByTestId('mock-card');
292
+ expect(cards.length).toBe(2);
293
+ });
294
+ });
295
+ describe('Edge Cases', () => {
296
+ it('handles large number of items', () => {
297
+ const items = Array.from({ length: 50 }, (_, i) => ({
298
+ id: `${i}`,
299
+ data: undefined
300
+ }));
301
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
302
+ const cards = screen.getAllByTestId('mock-card');
303
+ expect(cards.length).toBe(50);
304
+ });
305
+ it('handles empty title and description', () => {
306
+ const emptyElement = {
307
+ ...mockElement,
308
+ title: '',
309
+ description: ''
310
+ };
311
+ const items = [{ id: '1', data: undefined }];
312
+ const { container } = render(React.createElement(TripCardsLayout, { element: emptyElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
313
+ const title = container.querySelector('h2');
314
+ const description = container.querySelector('p');
315
+ expect(title).toBeInTheDocument();
316
+ expect(description).toBeInTheDocument();
317
+ if (title && description) {
318
+ expect(title.textContent).toBe('');
319
+ expect(description.textContent).toBe('');
320
+ }
321
+ });
322
+ });
323
+ describe('Tracking', () => {
324
+ it('calls tealiumTrackingHandler when title link is clicked', () => {
325
+ const items = [{ id: '1', data: undefined }];
326
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
327
+ const titleLink = screen.getByTestId('trip-cards-title-link');
328
+ fireEvent.click(titleLink);
329
+ expect(tealiumTrackingHandler).toHaveBeenCalledWith('trip cards component Test Cruises', 'navigation', 'click', undefined, undefined, {
330
+ app_content_location: 'uk'
331
+ });
332
+ });
333
+ it('calls tealiumTrackingHandler when icon link is clicked', () => {
334
+ const items = [{ id: '1', data: undefined }];
335
+ render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
336
+ const iconLink = screen.getByTestId('title-link');
337
+ fireEvent.click(iconLink);
338
+ expect(tealiumTrackingHandler).toHaveBeenCalledWith('trip cards component Test Cruises', 'navigation', 'click', undefined, undefined, {
339
+ app_content_location: 'uk'
340
+ });
341
+ });
342
+ it('does not call tealiumTrackingHandler when title link is not clicked', () => {
343
+ const elementWithoutLink = {
344
+ ...mockElement,
345
+ titleurl: undefined
346
+ };
347
+ const items = [{ id: '1', data: undefined }];
348
+ render(React.createElement(TripCardsLayout, { element: elementWithoutLink, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
349
+ expect(tealiumTrackingHandler).not.toHaveBeenCalled();
350
+ });
351
+ });
352
+ });
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpcENhcmRzTGF5b3V0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL19fdGVzdHNfXy9UcmlwQ2FyZHNMYXlvdXQudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRW5GLElBQUksQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBRUosTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLFlBQVk7SUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSyxFQUFFLGNBQWM7SUFDckIsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixXQUFXLEVBQUUsa0JBQWtCO0NBQ2hDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUN6RCw0Q0FBaUIsV0FBVyxJQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQzlDLENBQ1AsQ0FBQztBQUVGLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sY0FB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
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,165 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { BoatIcon, CalendarIcon, ChevronRightIcon, LocationIcon, MoonIcon } from '../assets';
5
+ describe('Trip Cards Assets', () => {
6
+ describe('BoatIcon', () => {
7
+ it('renders correctly', () => {
8
+ const { container } = render(React.createElement(BoatIcon, null));
9
+ const svg = container.querySelector('svg');
10
+ expect(svg).toBeInTheDocument();
11
+ });
12
+ it('has correct viewBox', () => {
13
+ const { container } = render(React.createElement(BoatIcon, null));
14
+ const svg = container.querySelector('svg');
15
+ expect(svg).toHaveAttribute('viewBox');
16
+ });
17
+ it('accepts custom props', () => {
18
+ const { container } = render(React.createElement(BoatIcon, { className: "custom-class" }));
19
+ const svg = container.querySelector('svg');
20
+ expect(svg).toHaveClass('custom-class');
21
+ });
22
+ it('has fill attribute', () => {
23
+ const { container } = render(React.createElement(BoatIcon, null));
24
+ const svg = container.querySelector('svg');
25
+ expect(svg).toHaveAttribute('fill');
26
+ });
27
+ });
28
+ describe('CalendarIcon', () => {
29
+ it('renders correctly', () => {
30
+ const { container } = render(React.createElement(CalendarIcon, null));
31
+ const svg = container.querySelector('svg');
32
+ expect(svg).toBeInTheDocument();
33
+ });
34
+ it('has correct viewBox', () => {
35
+ const { container } = render(React.createElement(CalendarIcon, null));
36
+ const svg = container.querySelector('svg');
37
+ expect(svg).toHaveAttribute('viewBox');
38
+ });
39
+ it('accepts custom props', () => {
40
+ const { container } = render(React.createElement(CalendarIcon, { "data-testid": "calendar" }));
41
+ const svg = container.querySelector('svg');
42
+ expect(svg).toHaveAttribute('data-testid', 'calendar');
43
+ });
44
+ it('renders path elements', () => {
45
+ const { container } = render(React.createElement(CalendarIcon, null));
46
+ const paths = container.querySelectorAll('path');
47
+ expect(paths.length).toBeGreaterThan(0);
48
+ });
49
+ });
50
+ describe('ChevronRightIcon', () => {
51
+ it('renders correctly', () => {
52
+ const { container } = render(React.createElement(ChevronRightIcon, null));
53
+ const svg = container.querySelector('svg');
54
+ expect(svg).toBeInTheDocument();
55
+ });
56
+ it('has correct dimensions', () => {
57
+ const { container } = render(React.createElement(ChevronRightIcon, null));
58
+ const svg = container.querySelector('svg');
59
+ expect(svg).toHaveAttribute('width', '16');
60
+ expect(svg).toHaveAttribute('height', '16');
61
+ });
62
+ it('has correct viewBox', () => {
63
+ const { container } = render(React.createElement(ChevronRightIcon, null));
64
+ const svg = container.querySelector('svg');
65
+ expect(svg).toHaveAttribute('viewBox', '0 0 16 16');
66
+ });
67
+ it('renders with currentColor stroke', () => {
68
+ const { container } = render(React.createElement(ChevronRightIcon, null));
69
+ const path = container.querySelector('path');
70
+ expect(path).toHaveAttribute('stroke', 'currentColor');
71
+ });
72
+ it('accepts custom props', () => {
73
+ const { container } = render(React.createElement(ChevronRightIcon, { style: { color: 'red' } }));
74
+ const svg = container.querySelector('svg');
75
+ expect(svg).toHaveStyle({ color: 'red' });
76
+ });
77
+ });
78
+ describe('LocationIcon', () => {
79
+ it('renders correctly', () => {
80
+ const { container } = render(React.createElement(LocationIcon, null));
81
+ const svg = container.querySelector('svg');
82
+ expect(svg).toBeInTheDocument();
83
+ });
84
+ it('has correct viewBox', () => {
85
+ const { container } = render(React.createElement(LocationIcon, null));
86
+ const svg = container.querySelector('svg');
87
+ expect(svg).toHaveAttribute('viewBox');
88
+ });
89
+ it('accepts custom props', () => {
90
+ const { container } = render(React.createElement(LocationIcon, { "aria-label": "location" }));
91
+ const svg = container.querySelector('svg');
92
+ expect(svg).toHaveAttribute('aria-label', 'location');
93
+ });
94
+ it('renders path elements', () => {
95
+ const { container } = render(React.createElement(LocationIcon, null));
96
+ const path = container.querySelector('path');
97
+ expect(path).toBeInTheDocument();
98
+ });
99
+ });
100
+ describe('MoonIcon', () => {
101
+ it('renders correctly', () => {
102
+ const { container } = render(React.createElement(MoonIcon, null));
103
+ const svg = container.querySelector('svg');
104
+ expect(svg).toBeInTheDocument();
105
+ });
106
+ it('has correct viewBox', () => {
107
+ const { container } = render(React.createElement(MoonIcon, null));
108
+ const svg = container.querySelector('svg');
109
+ expect(svg).toHaveAttribute('viewBox');
110
+ });
111
+ it('has correct dimensions', () => {
112
+ const { container } = render(React.createElement(MoonIcon, null));
113
+ const svg = container.querySelector('svg');
114
+ expect(svg).toHaveAttribute('width');
115
+ expect(svg).toHaveAttribute('height');
116
+ });
117
+ it('accepts custom props', () => {
118
+ const { container } = render(React.createElement(MoonIcon, { id: "moon-icon" }));
119
+ const svg = container.querySelector('svg');
120
+ expect(svg).toHaveAttribute('id', 'moon-icon');
121
+ });
122
+ it('renders path with fill color', () => {
123
+ const { container } = render(React.createElement(MoonIcon, null));
124
+ const path = container.querySelector('path');
125
+ expect(path).toHaveAttribute('fill');
126
+ });
127
+ });
128
+ describe('Icons Integration', () => {
129
+ it('all icons render without errors', () => {
130
+ const { container } = render(React.createElement("div", null,
131
+ React.createElement(BoatIcon, null),
132
+ React.createElement(CalendarIcon, null),
133
+ React.createElement(ChevronRightIcon, null),
134
+ React.createElement(LocationIcon, null),
135
+ React.createElement(MoonIcon, null)));
136
+ const svgs = container.querySelectorAll('svg');
137
+ expect(svgs.length).toBe(5);
138
+ });
139
+ it('icons can be styled with className', () => {
140
+ const { container } = render(React.createElement("div", null,
141
+ React.createElement(BoatIcon, { className: "icon-style" }),
142
+ React.createElement(CalendarIcon, { className: "icon-style" }),
143
+ React.createElement(LocationIcon, { className: "icon-style" })));
144
+ const svgs = container.querySelectorAll('.icon-style');
145
+ expect(svgs.length).toBe(3);
146
+ });
147
+ it('icons maintain SVG structure', () => {
148
+ const icons = [
149
+ React.createElement(BoatIcon, { key: "boat" }),
150
+ React.createElement(CalendarIcon, { key: "calendar" }),
151
+ React.createElement(ChevronRightIcon, { key: "chevron" }),
152
+ React.createElement(LocationIcon, { key: "location" }),
153
+ React.createElement(MoonIcon, { key: "moon" })
154
+ ];
155
+ icons.forEach(icon => {
156
+ const { container } = render(icon);
157
+ const svg = container.querySelector('svg');
158
+ if (svg) {
159
+ expect(svg.tagName).toBe('svg');
160
+ }
161
+ });
162
+ });
163
+ });
164
+ });
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL19fdGVzdHNfXy9hc3NldHMudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osUUFBUSxFQUNULE1BQU0sV0FBVyxDQUFDO0FBRW5CLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7UUFDeEIsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUMzQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFFBQVEsT0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLE9BQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDOUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLElBQUMsU0FBUyxFQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDcEUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUM1QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFFBQVEsT0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1lBQzNCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsb0JBQUMsWUFBWSxPQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtZQUM3QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksT0FBRyxDQUFDLENBQUM7WUFDL0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtZQUM5QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksbUJBQWEsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUN0RSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtZQUMvQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksT0FBRyxDQUFDLENBQUM7WUFDL0MsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7WUFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxnQkFBZ0IsT0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7WUFDaEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxnQkFBZ0IsT0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxnQkFBZ0IsT0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxnQkFBZ0IsT0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDOUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FDMUIsb0JBQUMsZ0JBQWdCLElBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFJLENBQzlDLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUMzQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFlBQVksT0FBRyxDQUFDLENBQUM7WUFDL0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxZQUFZLE9BQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDOUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxZQUFZLGtCQUFZLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDckUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7WUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxZQUFZLE9BQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7WUFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLE9BQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsb0JBQUMsUUFBUSxPQUFHLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsb0JBQUMsUUFBUSxPQUFHLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDOUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLElBQUMsRUFBRSxFQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDMUQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLE9BQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQzFCO2dCQUNFLG9CQUFDLFFBQVEsT0FBRztnQkFDWixvQkFBQyxZQUFZLE9BQUc7Z0JBQ2hCLG9CQUFDLGdCQUFnQixPQUFHO2dCQUNwQixvQkFBQyxZQUFZLE9BQUc7Z0JBQ2hCLG9CQUFDLFFBQVEsT0FBRyxDQUNSLENBQ1AsQ0FBQztZQUVGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7WUFDNUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FDMUI7Z0JBQ0Usb0JBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxZQUFZLEdBQUc7Z0JBQ25DLG9CQUFDLFlBQVksSUFBQyxTQUFTLEVBQUMsWUFBWSxHQUFHO2dCQUN2QyxvQkFBQyxZQUFZLElBQUMsU0FBUyxFQUFDLFlBQVksR0FBRyxDQUNuQyxDQUNQLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHO2dCQUNaLG9CQUFDLFFBQVEsSUFBQyxHQUFHLEVBQUMsTUFBTSxHQUFHO2dCQUN2QixvQkFBQyxZQUFZLElBQUMsR0FBRyxFQUFDLFVBQVUsR0FBRztnQkFDL0Isb0JBQUMsZ0JBQWdCLElBQUMsR0FBRyxFQUFDLFNBQVMsR0FBRztnQkFDbEMsb0JBQUMsWUFBWSxJQUFDLEdBQUcsRUFBQyxVQUFVLEdBQUc7Z0JBQy9CLG9CQUFDLFFBQVEsSUFBQyxHQUFHLEVBQUMsTUFBTSxHQUFHO2FBQ3hCLENBQUM7WUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEdBQUcsRUFBRTtvQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDakM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyJ9