@rileybathurst/paddle 1.9.29 → 1.9.31

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rileybathurst/paddle",
3
3
  "private": false,
4
- "version": "1.9.29",
4
+ "version": "1.9.31",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "tsc --noEmit && stay-gold && vite",
package/src/index.tsx CHANGED
@@ -19,6 +19,7 @@ export * from "./paddle-testimonial";
19
19
  export * from "./paddle-purchase";
20
20
  export * from "./paddle-pricing-chart";
21
21
  export * from "./paddle-texture-backgrounds";
22
+ export * from "./paddle-compare";
22
23
 
23
24
  // Organisms
24
25
  export * from "./paddle-location-deck";
@@ -42,4 +43,5 @@ export * from "./types/paddle-purchase-types";
42
43
  export * from "./types/paddle-purchase-image-types";
43
44
  export * from "./types/paddle-brand-list-types";
44
45
  export * from "./types/paddle-book-now-types";
45
- export * from "./types/paddle-testimonial-types";
46
+ export * from "./types/paddle-testimonial-types";
47
+ export * from "./types/paddle-compare-types";
@@ -1,10 +1,10 @@
1
- // TODO: this is not ready dont use it
2
- // Vite runs so I feel like I can pull this into it for testing itll be abit of a thing that might not be used but I think easier than storybook
1
+ // ! this is the next fix
3
2
 
4
3
  import React from 'react';
5
4
 
6
- // import { PaddleTime } from './paddle-time';
5
+ import { PaddleTime } from './paddle-time';
7
6
  import { PaddleBookNow } from './paddle-book-now';
7
+ import type { PaddleCompareTypes } from './types/paddle-compare-types';
8
8
 
9
9
  type CompareDetailsProps = {
10
10
  title: string;
@@ -97,68 +97,14 @@ const CompareDetails = ({
97
97
  )
98
98
  }
99
99
 
100
- type PaddleCompareTypes = {
101
- tours: {
102
- id: number;
103
- name: string;
104
- slug: string;
105
- sport: string;
106
- duration?: string;
107
- timeframe?: string;
108
- start?: string;
109
- finish?: string;
110
- fitness?: string;
111
- location: string;
112
- excerpt: string;
113
- minimum: number;
114
- price: number;
115
- peek?: string;
116
- }[];
117
- strapiBranchName: string;
118
- peek_base: string;
119
- };
120
- export const PaddleCompare = ({ tours, strapiBranchName, peek_base }: PaddleCompareTypes) => {
121
-
122
- /* const [id1, setID1] = useState(tours[0].id);
123
- const [id2, setID2] = useState(tours[1].id);
124
-
125
- const [tour1, setTour1] = useState(tours[0].name);
126
- const [tour2, setTour2] = useState(tours[1].name);
127
-
128
- const [link1, setLink1] = useState(tours[0].slug);
129
- const [link2, setLink2] = useState(tours[1].slug);
130
-
131
- const [sport1, setSport1] = useState(tours[0].sport);
132
- const [sport2, setSport2] = useState(tours[1].sport);
133
100
 
134
- const [duration1, setDuration1] = useState(tours[0].duration || 'not set');
135
- const [duration2, setDuration2] = useState(tours[1].duration || 'not set');
136
-
137
- const [timeframe1, setTimeframe1] = useState(tours[0].timeframe || 'not set');
138
- const [timeframe2, setTimeframe2] = useState(tours[1].timeframe || 'not set');
139
-
140
- const [start1, setStart1] = useState(tours[0].start || 'not set');
141
- const [start2, setStart2] = useState(tours[1].start || 'not set');
142
-
143
- const [finish1, setFinish1] = useState(tours[0].finish || 'not set');
144
- const [finish2, setFinish2] = useState(tours[1].finish || 'not set');
145
-
146
- const [excerpt1, setExcerpt1] = useState(tours[0].excerpt || 'not set');
147
- const [excerpt2, setExcerpt2] = useState(tours[1].excerpt || 'not set');
148
-
149
- const [minimum1, setMinimum1] = useState(tours[0].minimum || 0);
150
- const [minimum2, setMinimum2] = useState(tours[1].minimum || 0);
151
-
152
- const [price1, setPrice1] = useState(tours[0].price || 0);
153
- const [price2, setPrice2] = useState(tours[1].price || 0);
154
-
155
- const [peeks1, setPeeks1] = useState(tours[0].peek || 'not set');
156
- const [peeks2, setPeeks2] = useState(tours[1].peek || 'not set');
101
+ export const PaddleCompare = ({ tours, strapiBranchName, peek_base }: PaddleCompareTypes) => {
157
102
 
158
- const [fitness1, setFitness1] = useState(tours[0].fitness || 'fitness');
159
- const [fitness2, setFitness2] = useState(tours[1].fitness || 'fitness'); */
103
+ // TODO: testing
104
+ console.log(tours);
105
+ console.log(strapiBranchName);
106
+ console.log(peek_base);
160
107
 
161
- // I dont know if this works as a state but I need to slowly build it all back out as its a mess
162
108
  let id1 = tours[0].id;
163
109
  let id2 = tours[1].id;
164
110
 
@@ -5,41 +5,41 @@ import { PaddleInchesRemainder } from "./paddle-inches-remainder";
5
5
  import { PaddleTextureBackgrounds } from "./paddle-texture-backgrounds";
6
6
  import { PaddlePurchaseAndImageTypes } from "./types/paddle-purchase-image-types";
7
7
 
8
- function Name({ name }: { name: string }) {
9
- return (
10
- <div className="badge">
11
- <h5 className="capitalize">{name}</h5>
12
- </div>
13
- );
14
- }
8
+ type BadgeTypes = Record<string, boolean | number | undefined>;
15
9
 
16
- interface BadgeTypes {
17
- inflatable: boolean;
18
- demo: boolean;
19
- discount?: number;
20
- }
10
+ type BadgesProps = {
11
+ badges: BadgeTypes;
12
+ };
13
+ const Badges = ({ badges }: BadgesProps) => {
14
+ return (
15
+ <>
16
+ {Object.entries(badges).map(([key, value]) => {
21
17
 
22
- // TODO: use the way I do specs for this
23
- // TODO: deal with multiple
24
- const Badges = ({ inflatable, demo, discount }: BadgeTypes) => {
25
- if (discount) {
26
- return (
27
- <div className="badge">
28
- <h5 className="capitalize">{discount}% off</h5>
29
- </div>
30
- );
31
- }
18
+ if (!value) {
19
+ return null;
20
+ }
32
21
 
33
- if (inflatable) {
34
- return <Name name="inflatable" />;
35
- }
22
+ if (key === "discount" && typeof value === "number") {
23
+ return (
24
+ <div className="badge" key={key}>
25
+ <h5 className="capitalize">{value}% off</h5>
26
+ </div>
27
+ );
28
+ }
36
29
 
37
- if (demo) {
38
- return <Name name="demo" />;
39
- }
30
+ if (value === true) {
31
+ return (
32
+ <div className="badge" key={key}>
33
+ <h5 className="capitalize">{key}</h5>
34
+ </div>
35
+ );
36
+ }
40
37
 
41
- return null;
42
- }
38
+ return null;
39
+ })}
40
+ </>
41
+ );
42
+ };
43
43
 
44
44
 
45
45
  export const PaddlePurchase = ({
@@ -88,11 +88,19 @@ export const PaddlePurchase = ({
88
88
  />
89
89
  )}
90
90
  </Link>
91
- <Badges
92
- inflatable={inflatable}
93
- demo={demo}
94
- discount={discount}
95
- />
91
+
92
+ {inflatable || demo || discount ? (
93
+ <div className="badges">
94
+ <Badges
95
+ badges={{
96
+ inflatable: inflatable,
97
+ demo: demo,
98
+ discount: discount
99
+ }}
100
+ />
101
+ </div>
102
+ ) : null}
103
+
96
104
  </div>
97
105
  <h4 className="purchase__title">
98
106
  <Link to={`/retail/${sport.slug}/${brand.slug}/${slug}`}>{title}</Link>
@@ -11,8 +11,6 @@ type PaddleSunsetTourTimesTypes = {
11
11
  }
12
12
  export const PaddleSunsetTourTimes = ({ nodes }: PaddleSunsetTourTimesTypes) =>
13
13
  <section className="paddle-sunset-tour-times">
14
- {/* // TODO: stylize start with a storybook */}
15
- {/* // TODO: current */}
16
14
  <p>*We adapt the time of our sunset tour to the sun</p>
17
15
  {nodes.map((time) => {
18
16
  const startDate = new Date(time.startDate);
@@ -25,7 +23,7 @@ export const PaddleSunsetTourTimes = ({ nodes }: PaddleSunsetTourTimesTypes) =>
25
23
  // 20:1 - 5:17
26
24
 
27
25
  return (
28
- <div key={time.id}>
26
+ <div key={time.id} className="date-time">
29
27
  <h3 className="date elbrus">
30
28
  <strong>
31
29
  {startDate.toLocaleDateString("en-US", { month: "short" })}&nbsp;
@@ -8,6 +8,8 @@
8
8
  @import "nav";
9
9
  @import "layout";
10
10
  @import "cards";
11
+ @import "purchase";
12
+ @import "ticket";
11
13
  @import "media";
12
14
  @import "color";
13
15
  @import "links";
@@ -227,5 +227,5 @@ menu button {
227
227
 
228
228
  footer .book-now {
229
229
  margin-block-start: 0;
230
- margin-block-end: var(--baseline);
230
+ margin-block-end: var(--vinson);
231
231
  }
@@ -1,163 +1,26 @@
1
1
  /*------------------*/
2
- /* #CARDS / PURCHASE / TICKET */
2
+ /* #CARDS */
3
3
  /*------------------*/
4
4
 
5
- /* was deck */
6
- .bag {
7
- margin-block-end: var(--aconcagua);
8
-
9
- display: grid;
10
- grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
11
-
12
- /* TODO: clamp */
13
- gap: var(--kosciuszko);
14
- }
15
-
16
- /* was card */
17
- .purchase {
18
- padding: 0;
19
- display: flex;
20
- flex-direction: column;
21
- justify-content: space-between;
22
- border: 1px solid transparent;
23
- border-radius: var(--card-radius);
24
- /* needed to control nested elements */
25
- text-decoration: none;
26
- box-shadow: var(--penumbra);
27
- max-width: calc(100vw - 2rem);
5
+ .purchase,
6
+ .ticket {
28
7
  background-color: white;
8
+ border: 1px solid var(--neutral-200);
9
+ border-radius: var(--card-radius);
10
+ padding: var(--kosciuszko);
29
11
 
30
- .purchase-collage {
31
- display: grid;
32
- width: 100%;
33
-
34
- > * {
35
- grid-row: 1;
36
- grid-column: 1;
37
- }
38
-
39
- .texture-slice {
40
- width: calc(100% - var(--elbrus));
41
- aspect-ratio: 16/9;
42
- height: 100%;
43
- align-self: center;
44
- margin: calc(var(--elbrus) / 2);
45
- border-radius: 0.25rem;
46
- box-shadow: var(--penumbra);
47
- border: 1px solid whitesmoke;
48
- stroke: whitesmoke;
49
-
50
- @media (prefers-color-scheme: dark) {
51
- border-color: var(--neutral-100);
52
- stroke: var(--neutral-100);
53
- }
54
- }
55
-
56
- .cutout {
57
- object-fit: contain;
58
- place-self: center;
59
- z-index: var(--understory);
60
- grid-row: 1/1;
61
- filter: drop-shadow(5px 5px 5px var(--neutral-700));
62
- aspect-ratio: 16/9;
63
- width: 100%;
64
- }
65
-
66
- svg {
67
- z-index: var(--floor);
68
- max-height: 100%; /* overwrite the default */
69
- margin: calc(var(--elbrus) / 2);
70
- width: calc(100% - var(--elbrus));
71
- stroke: whitesmoke;
72
-
73
- @media (prefers-color-scheme: dark) {
74
- stroke: var(--neutral-100);
75
- }
76
- }
77
- }
78
-
79
- .image-link {
80
- transition: var(--fade);
81
- transform: scale(1);
82
- z-index: var(--floor);
83
- }
84
-
85
- .image-link:where(:hover, :focus) {
86
- transform: scale(1.05);
87
- }
88
-
89
- .purchase__title {
90
- font-size: var(--denali);
91
- margin-inline: var(--kosciuszko);
92
- line-height: 2.5;
93
- }
94
-
95
- hr,
96
- p {
97
- margin-inline: var(--kosciuszko);
98
- }
99
-
100
- /* img {
101
- width: 100%;
102
- } */
103
-
104
- .purchase__details {
105
- display: flex;
106
- gap: var(--vinson);
107
- width: calc(100% - var(--kilimanjaro));
108
- margin-inline: var(--kosciuszko);
109
- margin-block-end: var(--elbrus);
110
- justify-content: space-between;
111
-
112
- > * {
113
- flex: 1 1;
114
- margin: 0;
115
- }
116
-
117
- h2,
118
- h3,
119
- h4,
120
- h5,
121
- h6 {
122
- font-size: clamp(var(--vinson), 1.667vw, var(--denali));
123
- font-weight: normal;
124
- line-height: 3;
125
- }
126
-
127
- button {
128
- line-height: 2;
129
- }
12
+ @media (prefers-color-scheme: light) {
13
+ box-shadow: var(--penumbra);
130
14
  }
131
15
 
132
- .badge {
133
- z-index: var(--floor);
134
- justify-self: end;
135
- align-self: start;
136
- padding: var(--kosciuszko);
137
- margin: var(--kosciuszko);
138
- border-radius: var(--card-radius);
139
-
140
- background-color: var(--neutral-200);
141
- border: 1px solid var(--neutral-100);
142
- opacity: 0.9;
143
-
144
- h5 {
145
- margin: 0;
146
- opacity: 1;
147
- font-weight: normal;
148
- }
16
+ @media (prefers-color-scheme: dark) {
17
+ background-color: var(--neutral-700);
18
+ border-color: var(--neutral-600);
149
19
  }
150
- }
151
20
 
152
- .tahoe-city .purchase {
153
- background-color: var(--sand-100);
154
21
 
155
- hr {
156
- border-color: var(--sand-400);
157
- }
158
22
  }
159
23
 
160
- /* south-tahoe currently does not have a purchase */
161
24
 
162
25
  .purchase:hover,
163
26
  .ticket:hover {
@@ -165,27 +28,11 @@
165
28
  text-decoration: underline;
166
29
  }
167
30
 
168
- /* TODO: v1.2 this could use more */
169
31
  img {
170
32
  filter: brightness(80%);
171
33
  }
172
34
  }
173
35
 
174
- .bag:empty {
175
- display: none;
176
- }
177
-
178
- .bag__more {
179
- max-width: var(--pelican);
180
- margin-inline: auto;
181
- padding-inline: var(--kosciuszko);
182
-
183
- button {
184
- margin-block-start: var(--kilimanjaro);
185
- margin-inline: auto;
186
- }
187
- }
188
-
189
36
  /*------------------*/
190
37
  /* #RETAIL LOGO */
191
38
  /*------------------*/
@@ -210,99 +57,3 @@
210
57
  margin-block-end: var(--kosciuszko);
211
58
  }
212
59
  }
213
-
214
- /*------------------------------------*/
215
- /* #TICKET */
216
- /*------------------------------------*/
217
-
218
- .flight {
219
- margin-block-end: var(--aconcagua);
220
-
221
- display: grid;
222
-
223
- /* * iPhone size breaks without this */
224
- grid-template-columns: 1fr;
225
-
226
- /* * guess and check */
227
- @media (min-width: 29rem) {
228
- grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
229
- }
230
- }
231
-
232
- .flight:empty {
233
- display: none;
234
- }
235
-
236
- .ticket {
237
- width: calc(100% - 2 * var(--kosciuszko));
238
- height: calc(100% - 2 * var(--kosciuszko));
239
- background-color: white;
240
- border: 1px solid var(--neutral-300);
241
- border-radius: var(--card-radius);
242
- padding: var(--kosciuszko);
243
-
244
- @media (prefers-color-scheme: dark) {
245
- background-color: var(--neutral-700);
246
- border-color: var(--neutral-600);
247
- }
248
-
249
- img {
250
- width: 100%;
251
- aspect-ratio: 16 / 9;
252
- }
253
-
254
- > a {
255
- display: block;
256
- }
257
-
258
- .ticket__header,
259
- .ticket__money,
260
- .ticket__specs {
261
- display: flex;
262
- flex-flow: row wrap;
263
- justify-content: space-between;
264
- align-items: baseline;
265
- gap: var(--vinson);
266
- }
267
-
268
- .ticket__header,
269
- .ticket__specs {
270
- padding-inline: var(--vinson);
271
- }
272
- }
273
-
274
- .tahoe-city .ticket {
275
- border-color: var(--sand-400);
276
-
277
- @media (prefers-color-scheme: dark) {
278
- border-color: var(--neutral-700);
279
- }
280
- }
281
-
282
- .south-tahoe .ticket {
283
- background-color: var(--lake-200);
284
- border: 1px solid var(--lake-300);
285
- box-shadow: var(--penumbra);
286
- color: var(--lake-600);
287
-
288
- .book-now {
289
- background-color: var(--neutral-100);
290
- color: var(--lake-700);
291
- }
292
-
293
- @media (prefers-color-scheme: dark) {
294
- background-color: var(--lake-700);
295
- border-color: var(--lake-600);
296
- color: var(--lake-200);
297
-
298
- .book-now {
299
- background-color: var(--lake-400);
300
- color: var(--lake-700);
301
- border-color: var(--lake-500);
302
- }
303
-
304
- a:not(.book-now) {
305
- color: var(--lake-200);
306
- }
307
- }
308
- }
@@ -25,16 +25,17 @@ body:has(#storybook-root) {
25
25
  #storybook-root {
26
26
  min-height: 100vh;
27
27
  }
28
+ }
28
29
 
29
- #storybook-root:has(.tahoe-city) {
30
- background-color: var(--sand-100);
30
+ /* * storybook body */
31
+ .tahoe-city #storybook-root {
32
+ background-color: var(--sand-100);
31
33
 
32
- @media (prefers-color-scheme: dark) {
33
- background-color: var(--lake-300);
34
- }
34
+ @media (prefers-color-scheme: dark) {
35
+ background-color: var(--lake-300);
35
36
  }
36
37
  }
37
-
38
+
38
39
  body.tahoe-city {
39
40
  @media (prefers-color-scheme: dark) {
40
41
  background-color: var(--navy-300);
@@ -143,13 +144,42 @@ hr {
143
144
 
144
145
 
145
146
  .location {
147
+ transition: var(--slow);
146
148
  background-color: white;
149
+
150
+ @media (prefers-color-scheme: light) {
151
+ box-shadow: var(--penumbra);
152
+ }
147
153
 
148
154
  @media (prefers-color-scheme: dark) {
149
155
  background-color: var(--neutral-800);
150
156
  }
151
157
  }
152
158
 
159
+ .location:hover {
160
+ background-color: var(--neutral-200);
161
+
162
+ @media (prefers-color-scheme: dark) {
163
+ background-color: var(--neutral-600);
164
+ }
165
+ }
166
+
167
+ .tahoe-city .location:hover {
168
+ background-color: var(--sand-300);
169
+
170
+ @media (prefers-color-scheme: dark) {
171
+ background-color: var(--lake-700);
172
+ }
173
+ }
174
+
175
+ .location:active {
176
+ background-color: var(--neutral-300);
177
+
178
+ @media (prefers-color-scheme: dark) {
179
+ background-color: var(--neutral-500);
180
+ }
181
+ }
182
+
153
183
  /*------------------------------------*/
154
184
  /* #SPECS */
155
185
  /*------------------------------------*/
@@ -15,7 +15,7 @@ ol {
15
15
 
16
16
  li {
17
17
  display: block;
18
- margin-block-end: var(--baseline);
18
+ margin-block-end: var(--vinson);
19
19
  padding-inline-start: 0;
20
20
  line-height: 1.5;
21
21
  }
@@ -175,7 +175,7 @@ ol {
175
175
 
176
176
  svg {
177
177
  transition: var(--fade);
178
- margin-block: var(--baseline);
178
+ margin-block: var(--vinson);
179
179
  margin-inline: auto;
180
180
  min-width: var(--everest); /* guess and check */
181
181
 
@@ -216,6 +216,6 @@ ol {
216
216
  } */
217
217
 
218
218
  .time {
219
- border-radius: var(--border-radius);
219
+ border-radius: var(--card-radius);
220
220
  }
221
221
  }
@@ -0,0 +1,172 @@
1
+ /*------------------------------------*/
2
+ /* #PURCHASE */
3
+ /*------------------------------------*/
4
+
5
+ .bag {
6
+ margin-block-end: var(--aconcagua);
7
+
8
+ display: grid;
9
+ grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
10
+
11
+ /* TODO: clamp */
12
+ gap: var(--kosciuszko);
13
+ }
14
+
15
+ /* * specific type of a card */
16
+ .purchase {
17
+ padding: 0;
18
+ display: flex;
19
+ flex-direction: column;
20
+ justify-content: space-between;
21
+ border: 1px solid transparent;
22
+ border-radius: var(--card-radius);
23
+ /* needed to control nested elements */
24
+ text-decoration: none;
25
+ box-shadow: var(--penumbra);
26
+ max-width: calc(100vw - 2rem);
27
+ background-color: white;
28
+
29
+ .purchase-collage {
30
+ display: grid;
31
+ width: 100%;
32
+
33
+ >* {
34
+ grid-row: 1;
35
+ grid-column: 1;
36
+ }
37
+
38
+ .texture-slice {
39
+ width: calc(100% - var(--elbrus));
40
+ aspect-ratio: 16/9;
41
+ height: 100%;
42
+ align-self: center;
43
+ margin: calc(var(--elbrus) / 2);
44
+ border-radius: 0.25rem;
45
+ box-shadow: var(--penumbra);
46
+ border: 1px solid whitesmoke;
47
+ stroke: whitesmoke;
48
+
49
+ @media (prefers-color-scheme: dark) {
50
+ border-color: var(--neutral-100);
51
+ stroke: var(--neutral-100);
52
+ }
53
+ }
54
+
55
+ .cutout {
56
+ object-fit: contain;
57
+ place-self: center;
58
+ z-index: var(--understory);
59
+ grid-row: 1/1;
60
+ filter: drop-shadow(5px 5px 5px var(--neutral-700));
61
+ aspect-ratio: 16/9;
62
+ width: 100%;
63
+ }
64
+
65
+ svg {
66
+ z-index: var(--floor);
67
+ max-height: 100%;
68
+ /* overwrite the default */
69
+ margin: calc(var(--elbrus) / 2);
70
+ width: calc(100% - var(--elbrus));
71
+ stroke: whitesmoke;
72
+
73
+ @media (prefers-color-scheme: dark) {
74
+ stroke: var(--neutral-100);
75
+ }
76
+ }
77
+ }
78
+
79
+ .image-link {
80
+ transition: var(--fade);
81
+ transform: scale(1);
82
+ z-index: var(--floor);
83
+ }
84
+
85
+ .image-link:where(:hover, :focus) {
86
+ transform: scale(1.05);
87
+ }
88
+
89
+ .purchase__title {
90
+ font-size: var(--denali);
91
+ margin-inline: var(--kosciuszko);
92
+ line-height: 2.5;
93
+ }
94
+
95
+ hr,
96
+ p {
97
+ margin-inline: var(--kosciuszko);
98
+ }
99
+
100
+ /* img {
101
+ width: 100%;
102
+ } */
103
+
104
+ .purchase__details {
105
+ display: flex;
106
+ gap: var(--vinson);
107
+ width: calc(100% - var(--kilimanjaro));
108
+ margin-inline: var(--kosciuszko);
109
+ margin-block-end: var(--elbrus);
110
+ justify-content: space-between;
111
+
112
+ >* {
113
+ flex: 1 1;
114
+ margin: 0;
115
+ }
116
+
117
+ h2,
118
+ h3,
119
+ h4,
120
+ h5,
121
+ h6 {
122
+ font-size: clamp(var(--vinson), 1.667vw, var(--denali));
123
+ font-weight: normal;
124
+ line-height: 3;
125
+ }
126
+
127
+ button {
128
+ line-height: 2;
129
+ }
130
+ }
131
+
132
+ .badges {
133
+ z-index: var(--floor);
134
+ justify-self: end;
135
+ align-self: start;
136
+ display: flex;
137
+ flex-flow: row wrap;
138
+ gap: var(--kosciuszko);
139
+ margin: var(--kosciuszko);
140
+ }
141
+
142
+ .badge {
143
+ padding: var(--kosciuszko);
144
+ border-radius: var(--card-radius);
145
+ background-color: var(--neutral-200);
146
+ border: 1px solid var(--neutral-100);
147
+ opacity: 0.9;
148
+
149
+ h5 {
150
+ margin: 0;
151
+ opacity: 1;
152
+ font-weight: normal;
153
+ }
154
+ }
155
+ }
156
+
157
+ /* * south-tahoe currently does not have a purchase */
158
+
159
+ .bag:empty {
160
+ display: none;
161
+ }
162
+
163
+ .bag__more {
164
+ max-width: var(--pelican);
165
+ margin-inline: auto;
166
+ padding-inline: var(--kosciuszko);
167
+
168
+ button {
169
+ margin-block-start: var(--kilimanjaro);
170
+ margin-inline: auto;
171
+ }
172
+ }
@@ -0,0 +1,86 @@
1
+ /*------------------------------------*/
2
+ /* #TICKET */
3
+ /*------------------------------------*/
4
+
5
+ .flight {
6
+ margin-block-end: var(--aconcagua);
7
+
8
+ display: grid;
9
+
10
+ /* * iPhone size breaks without this */
11
+ grid-template-columns: 1fr;
12
+
13
+ /* * guess and check */
14
+ @media (min-width: 29rem) {
15
+ grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
16
+ }
17
+ }
18
+
19
+ .flight:empty {
20
+ display: none;
21
+ }
22
+
23
+ .ticket {
24
+ width: calc(100% - 2 * var(--kosciuszko));
25
+ height: calc(100% - 2 * var(--kosciuszko));
26
+
27
+ img {
28
+ width: 100%;
29
+ aspect-ratio: 16 / 9;
30
+ }
31
+
32
+ > a {
33
+ display: block;
34
+ }
35
+
36
+ .ticket__header,
37
+ .ticket__money,
38
+ .ticket__specs {
39
+ display: flex;
40
+ flex-flow: row wrap;
41
+ justify-content: space-between;
42
+ align-items: baseline;
43
+ gap: var(--vinson);
44
+ }
45
+
46
+ .ticket__header,
47
+ .ticket__specs {
48
+ padding-inline: var(--vinson);
49
+ }
50
+ }
51
+
52
+ .tahoe-city .ticket {
53
+ border-color: var(--sand-400);
54
+
55
+ @media (prefers-color-scheme: dark) {
56
+ border-color: var(--neutral-700);
57
+ }
58
+ }
59
+
60
+ .south-tahoe .ticket {
61
+ background-color: var(--lake-200);
62
+ border: 1px solid var(--lake-300);
63
+ box-shadow: var(--penumbra);
64
+ color: var(--lake-600);
65
+
66
+ .book-now {
67
+ background-color: var(--neutral-100);
68
+ color: var(--lake-700);
69
+ }
70
+
71
+ @media (prefers-color-scheme: dark) {
72
+ background-color: var(--lake-700);
73
+ border-color: var(--lake-600);
74
+ color: var(--lake-200);
75
+
76
+ .book-now {
77
+ background-color: var(--lake-400);
78
+ color: var(--lake-700);
79
+ border-color: var(--lake-500);
80
+ }
81
+
82
+ a:not(.book-now) {
83
+ color: var(--lake-200);
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,20 @@
1
+ export type PaddleCompareTypes = {
2
+ tours: {
3
+ id: number;
4
+ name: string;
5
+ slug: string;
6
+ sport: string;
7
+ duration?: string;
8
+ timeframe?: string;
9
+ start?: string;
10
+ finish?: string;
11
+ fitness?: string;
12
+ location: string;
13
+ excerpt: string;
14
+ minimum: number;
15
+ price: number;
16
+ peek?: string;
17
+ }[];
18
+ strapiBranchName: string;
19
+ peek_base: string;
20
+ };
@@ -7,10 +7,15 @@ export type PaddlePurchaseTypes = {
7
7
  excerpt: string;
8
8
  length: number;
9
9
  width: number;
10
- inflatable: boolean;
11
10
  capacity: number;
11
+
12
+ // badge variables
13
+ inflatable: boolean;
12
14
  demo: boolean;
13
15
  discount?: number;
16
+
17
+ badges?: Record<string, boolean | number>;
18
+
14
19
  cutout: PaddleGatsbyImageType;
15
20
 
16
21
  sport: {