@rileybathurst/paddle 1.0.9 → 1.0.11
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 +3 -2
- package/src/Badges.stories.tsx +18 -0
- package/src/Badges.tsx +33 -0
- package/src/Bag.stories.tsx +18 -0
- package/src/Bag.tsx +14 -0
- package/src/PaddleLocationCard.tsx +27 -21
- package/src/PaddleLocationDeck.tsx +3 -5
- package/src/PaddleSpecs.tsx +34 -26
- package/src/Purchase.stories.tsx +18 -0
- package/src/Purchase.tsx +51 -0
- package/src/TextureBackgrounds.stories.tsx +18 -0
- package/src/TextureBackgrounds.tsx +31 -0
- package/src/styles/astro.css +1 -1
- package/src/styles/cards.css +100 -75
- package/src/styles/color.css +15 -0
- package/src/styles/layout.css +44 -1
- package/src/styles/links.css +1 -1
- package/src/styles/lists.css +16 -9
- package/src/styles/media.css +5 -0
- package/src/styles/panels.css +5 -0
- package/src/styles/typography.css +4 -2
- package/src/styles/variables.css +5 -9
- package/src/types/location-card-types.ts +2 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rileybathurst/paddle",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.11",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "vite",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"@biomejs/biome": "2.0.2",
|
|
27
27
|
"@chromatic-com/storybook": "^4.0.0",
|
|
28
28
|
"@faker-js/faker": "^9.8.0",
|
|
29
|
+
"@storybook/addon-a11y": "^9.0.13",
|
|
29
30
|
"@storybook/addon-docs": "^9.0.11",
|
|
30
31
|
"@storybook/addon-links": "^9.0.11",
|
|
31
32
|
"@storybook/addon-themes": "^9.0.11",
|
|
@@ -55,4 +56,4 @@
|
|
|
55
56
|
"overrides": {
|
|
56
57
|
"storybook": "$storybook"
|
|
57
58
|
}
|
|
58
|
-
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { Badges } from './Badges';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
component: Badges,
|
|
7
|
+
title: 'Atoms/Badges',
|
|
8
|
+
args: {},
|
|
9
|
+
} satisfies Meta<typeof Badges>;
|
|
10
|
+
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
|
|
14
|
+
export const Primary: Story = {
|
|
15
|
+
args: {
|
|
16
|
+
primary: true,
|
|
17
|
+
},
|
|
18
|
+
};
|
package/src/Badges.tsx
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import { faker } from '@faker-js/faker/locale/zu_ZA';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
|
|
5
|
+
interface NameTypes {
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
const Name = ({ name }: NameTypes) => {
|
|
9
|
+
return (
|
|
10
|
+
<div className="badge">
|
|
11
|
+
<h5 className="capitalize">{name}</h5>
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const Badges = () => {
|
|
17
|
+
// TODO: deal with multiple
|
|
18
|
+
|
|
19
|
+
// Discount
|
|
20
|
+
if (faker.datatype.boolean()) {
|
|
21
|
+
return (
|
|
22
|
+
<div className="badge">
|
|
23
|
+
<h5 className="capitalize">{faker.number.int({ min: 1, max: 100 })}% off</h5>
|
|
24
|
+
</div>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (faker.datatype.boolean()) {
|
|
29
|
+
return <Name name={faker.helpers.arrayElement(['inflatable', 'demo', faker.airline.airline().name])} />;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { Bag } from './Bag';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
component: Bag,
|
|
7
|
+
title: 'Organisms/Bag',
|
|
8
|
+
args: {},
|
|
9
|
+
} satisfies Meta<typeof Bag>;
|
|
10
|
+
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
|
|
14
|
+
export const Primary: Story = {
|
|
15
|
+
args: {
|
|
16
|
+
primary: true,
|
|
17
|
+
},
|
|
18
|
+
};
|
package/src/Bag.tsx
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { faker } from "@faker-js/faker";
|
|
4
|
+
import { Purchase } from "./Purchase";
|
|
5
|
+
|
|
6
|
+
export const Bag = () => {
|
|
7
|
+
return (
|
|
8
|
+
<div className="bag">
|
|
9
|
+
{Array.from({ length: faker.number.int({ min: 1, max: 10 }) }).map(() => (
|
|
10
|
+
<Purchase key={faker.string.uuid()} />
|
|
11
|
+
))}
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
14
|
+
};
|
|
@@ -117,7 +117,7 @@ interface ContentTypes {
|
|
|
117
117
|
season_end?: string;
|
|
118
118
|
|
|
119
119
|
offSeasonDetails?: string;
|
|
120
|
-
|
|
120
|
+
phoneNumber?: number;
|
|
121
121
|
|
|
122
122
|
streetAddress?: string;
|
|
123
123
|
addressLocality?: string;
|
|
@@ -129,7 +129,6 @@ const PhoneContent = ({
|
|
|
129
129
|
link,
|
|
130
130
|
svg,
|
|
131
131
|
name,
|
|
132
|
-
address,
|
|
133
132
|
description,
|
|
134
133
|
opening_time,
|
|
135
134
|
closing_time,
|
|
@@ -141,7 +140,7 @@ const PhoneContent = ({
|
|
|
141
140
|
season_start,
|
|
142
141
|
season_end,
|
|
143
142
|
offSeasonDetails,
|
|
144
|
-
|
|
143
|
+
phoneNumber,
|
|
145
144
|
}: ContentTypes) => {
|
|
146
145
|
return (
|
|
147
146
|
<>
|
|
@@ -156,9 +155,11 @@ const PhoneContent = ({
|
|
|
156
155
|
<div className="svg" dangerouslySetInnerHTML={{ __html: svg }} />
|
|
157
156
|
</a>
|
|
158
157
|
) : (
|
|
159
|
-
|
|
160
|
-
<
|
|
161
|
-
|
|
158
|
+
link && (
|
|
159
|
+
<Link to={link} className="location">
|
|
160
|
+
<div className="svg" dangerouslySetInnerHTML={{ __html: svg }} />
|
|
161
|
+
</Link>
|
|
162
|
+
)
|
|
162
163
|
)}
|
|
163
164
|
|
|
164
165
|
<div>
|
|
@@ -173,11 +174,15 @@ const PhoneContent = ({
|
|
|
173
174
|
<h3>{name}</h3>
|
|
174
175
|
</a>
|
|
175
176
|
) : (
|
|
176
|
-
|
|
177
|
-
<
|
|
178
|
-
|
|
177
|
+
link && (
|
|
178
|
+
<Link to={link} title={name}>
|
|
179
|
+
<h3>{name}</h3>
|
|
180
|
+
</Link>
|
|
181
|
+
)
|
|
182
|
+
)}
|
|
183
|
+
{phoneNumber && (
|
|
184
|
+
<Phone phone={phoneNumber} />
|
|
179
185
|
)}
|
|
180
|
-
<Phone phone={phone} />
|
|
181
186
|
</div>
|
|
182
187
|
|
|
183
188
|
{streetAddress ||
|
|
@@ -202,15 +207,17 @@ const PhoneContent = ({
|
|
|
202
207
|
/>
|
|
203
208
|
</a>
|
|
204
209
|
) : (
|
|
205
|
-
|
|
206
|
-
<
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
link && (
|
|
211
|
+
<Link to={link} title={name}>
|
|
212
|
+
<Place
|
|
213
|
+
commonName={commonName}
|
|
214
|
+
streetAddress={streetAddress}
|
|
215
|
+
addressLocality={addressLocality}
|
|
216
|
+
addressRegion={addressRegion}
|
|
217
|
+
postalCode={postalCode}
|
|
218
|
+
/>
|
|
219
|
+
</Link>
|
|
220
|
+
)
|
|
214
221
|
)
|
|
215
222
|
) : null}
|
|
216
223
|
|
|
@@ -236,7 +243,6 @@ const PhoneContent = ({
|
|
|
236
243
|
const Content = ({
|
|
237
244
|
svg,
|
|
238
245
|
name,
|
|
239
|
-
address,
|
|
240
246
|
description,
|
|
241
247
|
opening_time,
|
|
242
248
|
closing_time,
|
|
@@ -330,7 +336,7 @@ export const PaddleLocationCard = ({
|
|
|
330
336
|
season_start={season_start}
|
|
331
337
|
season_end={season_end}
|
|
332
338
|
offSeasonDetails={offSeasonDetails}
|
|
333
|
-
|
|
339
|
+
phoneNumber={phoneNumber}
|
|
334
340
|
/>
|
|
335
341
|
</div>
|
|
336
342
|
);
|
|
@@ -13,19 +13,17 @@ export const PaddleLocationDeck = ({
|
|
|
13
13
|
nodes,
|
|
14
14
|
season_start,
|
|
15
15
|
season_end,
|
|
16
|
-
phone
|
|
17
|
-
background,
|
|
16
|
+
phone
|
|
18
17
|
}: LocationDeckTypes) => {
|
|
19
18
|
return (
|
|
20
19
|
<section className="location-deck">
|
|
21
20
|
{nodes.map((location: PaddleLocationCardTypes) => (
|
|
22
21
|
<PaddleLocationCard
|
|
23
22
|
key={location.id}
|
|
24
|
-
{...location}
|
|
25
|
-
background={background}
|
|
26
23
|
season_start={season_start}
|
|
27
24
|
season_end={season_end}
|
|
28
|
-
|
|
25
|
+
phoneNumber={phone}
|
|
26
|
+
{...location}
|
|
29
27
|
/>
|
|
30
28
|
))}
|
|
31
29
|
</section>
|
package/src/PaddleSpecs.tsx
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import PaddleRemainder from "./paddle-remainder.tsx"
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import PaddleRemainder from "./paddle-remainder.tsx";
|
|
3
3
|
|
|
4
4
|
interface SpecsTypes {
|
|
5
|
-
[key: string]:
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
[key: string]:
|
|
6
|
+
| string
|
|
7
|
+
| number
|
|
8
|
+
| {
|
|
9
|
+
[key: string]: string | number[];
|
|
10
|
+
};
|
|
8
11
|
}
|
|
9
12
|
// * moving the section tag to the parent component means you can loop yourself
|
|
10
13
|
export const PaddleSpecs = (specs: SpecsTypes) =>
|
|
11
14
|
// <section className='specs'>
|
|
12
15
|
Object.entries(specs).map(([key, value]) => {
|
|
13
|
-
|
|
14
16
|
// console.log(key, value);
|
|
15
17
|
|
|
16
18
|
if (!value) {
|
|
17
19
|
return null;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
if (key ===
|
|
22
|
+
if (key === "time" && typeof value === "object") {
|
|
21
23
|
return (
|
|
22
24
|
<div key={key} className="spec">
|
|
23
25
|
<h2>{value.value}</h2>
|
|
@@ -28,22 +30,22 @@ export const PaddleSpecs = (specs: SpecsTypes) =>
|
|
|
28
30
|
// * I cant remeber others yet
|
|
29
31
|
}
|
|
30
32
|
|
|
31
|
-
if (key ===
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
if (key === "cost" && typeof value === "object" && value.discount) {
|
|
34
|
+
const amount = (Number(value.price) -
|
|
35
|
+
Number(value.discount) * (Number(value.price) / 100)) as number;
|
|
34
36
|
|
|
35
37
|
return (
|
|
36
38
|
<>
|
|
37
39
|
{/* // TODO: add color */}
|
|
38
40
|
<div className="spec">
|
|
39
|
-
<h2
|
|
41
|
+
<h2>
|
|
42
|
+
<del>Original Price</del>
|
|
43
|
+
</h2>
|
|
40
44
|
<h3>
|
|
41
|
-
<del>
|
|
42
|
-
${value.price}
|
|
43
|
-
</del>
|
|
45
|
+
<del>${value.price}</del>
|
|
44
46
|
</h3>
|
|
45
47
|
</div>
|
|
46
|
-
<div className="spec
|
|
48
|
+
<div className="spec">
|
|
47
49
|
<h2>Sale Price</h2>
|
|
48
50
|
{value.discount}% off
|
|
49
51
|
<h3>${amount}</h3>
|
|
@@ -54,22 +56,28 @@ export const PaddleSpecs = (specs: SpecsTypes) =>
|
|
|
54
56
|
|
|
55
57
|
/* I didnt know you could call yourself like this */
|
|
56
58
|
/* I guess its not a infinite loop as its not calling an object */
|
|
57
|
-
if (typeof value ===
|
|
58
|
-
return
|
|
59
|
-
<PaddleSpecs {...value} />
|
|
60
|
-
);
|
|
59
|
+
if (typeof value === "object") {
|
|
60
|
+
return <PaddleSpecs {...value} />;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
return (
|
|
64
64
|
<div key={key} className="spec">
|
|
65
65
|
<h2>{key}</h2>
|
|
66
66
|
<h3>
|
|
67
|
-
{key ===
|
|
68
|
-
{key ===
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
{key === "price" ? <span className="spec__unit">$</span> : null}
|
|
68
|
+
{key === "length" && typeof value === "number" ? (
|
|
69
|
+
<PaddleRemainder inches={value} />
|
|
70
|
+
) : (
|
|
71
|
+
value
|
|
72
|
+
)}
|
|
73
|
+
{key === "hullweight" || key === "riggedweight" ? (
|
|
74
|
+
<span className="spec__unit">lbs</span>
|
|
75
|
+
) : null}
|
|
76
|
+
{key === "width" || key === "length" || key === "capacity" ? (
|
|
77
|
+
<span className="spec__unit">"</span>
|
|
78
|
+
) : null}
|
|
71
79
|
</h3>
|
|
72
80
|
</div>
|
|
73
|
-
)
|
|
74
|
-
})
|
|
75
|
-
// </section>
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
// </section>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { Purchase } from './Purchase';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
component: Purchase,
|
|
7
|
+
title: 'Molecules/Purchase',
|
|
8
|
+
args: {},
|
|
9
|
+
} satisfies Meta<typeof Purchase>;
|
|
10
|
+
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
|
|
14
|
+
export const Primary: Story = {
|
|
15
|
+
args: {
|
|
16
|
+
primary: true,
|
|
17
|
+
},
|
|
18
|
+
};
|
package/src/Purchase.tsx
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Retail Card
|
|
2
|
+
import React from "react";
|
|
3
|
+
// import { GatsbyImage } from 'gatsby-plugin-image';
|
|
4
|
+
import { faker } from "@faker-js/faker";
|
|
5
|
+
import { Badges } from "./Badges";
|
|
6
|
+
// import { Badges } from './Badges';
|
|
7
|
+
// import { Remainder } from './Remainder';
|
|
8
|
+
// import { useRetailContext } from '../context/RetailContext';
|
|
9
|
+
import { TextureBackgrounds } from "./TextureBackgrounds";
|
|
10
|
+
|
|
11
|
+
export const Purchase = () => {
|
|
12
|
+
return (
|
|
13
|
+
<article key={faker.string.uuid()} className="purchase">
|
|
14
|
+
{/* // This is currently a wrapper and not used */}
|
|
15
|
+
<div className="purchase-collage">
|
|
16
|
+
<TextureBackgrounds />
|
|
17
|
+
<a href={faker.music.songName()} className="image-link">
|
|
18
|
+
{/* <GatsbyImage
|
|
19
|
+
image={cutout?.localFile?.childImageSharp?.gatsbyImageData}
|
|
20
|
+
alt={cutout?.alternativeText || `${title} by ${brand.slug}`}
|
|
21
|
+
className="cutout"
|
|
22
|
+
objectFit="contain"
|
|
23
|
+
// TODO: this has been causing some problems but keep an eye on it
|
|
24
|
+
/> */}
|
|
25
|
+
</a>
|
|
26
|
+
|
|
27
|
+
<Badges
|
|
28
|
+
// inflatable={faker.datatype.boolean()}
|
|
29
|
+
// demo={faker.datatype.boolean()}
|
|
30
|
+
// discount={faker.datatype.boolean() ? faker.number.int({ min: 1, max: 100 }) : undefined}
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
33
|
+
<h4 className="purchase__title">
|
|
34
|
+
<a href={faker.music.songName()}>{faker.music.album()}</a>
|
|
35
|
+
</h4>
|
|
36
|
+
<hr />
|
|
37
|
+
{/* // ? I think this is too long */}
|
|
38
|
+
<p>{faker.lorem.paragraph()}</p>
|
|
39
|
+
<hr />
|
|
40
|
+
<div className="purchase__details">
|
|
41
|
+
<h4>
|
|
42
|
+
{/* <Remainder inches={length} /> */}
|
|
43
|
+
long by {faker.number.int({ min: 1, max: 100 })}" wide
|
|
44
|
+
</h4>
|
|
45
|
+
<h5 className="capitalize">
|
|
46
|
+
Capacity {faker.number.int({ min: 1, max: 100 })} lbs
|
|
47
|
+
</h5>
|
|
48
|
+
</div>
|
|
49
|
+
</article>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { TextureBackgrounds } from './TextureBackgrounds';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
component: TextureBackgrounds,
|
|
7
|
+
title: 'Atoms/TextureBackgrounds',
|
|
8
|
+
args: {},
|
|
9
|
+
} satisfies Meta<typeof TextureBackgrounds>;
|
|
10
|
+
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
|
|
14
|
+
export const Primary: Story = {
|
|
15
|
+
args: {
|
|
16
|
+
primary: true,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { faker } from "@faker-js/faker";
|
|
4
|
+
|
|
5
|
+
export const TextureBackgrounds = () => {
|
|
6
|
+
return (
|
|
7
|
+
<>
|
|
8
|
+
<img
|
|
9
|
+
src={faker.image.dataUri()}
|
|
10
|
+
className="texture-slice crop"
|
|
11
|
+
alt="top texture"
|
|
12
|
+
/>
|
|
13
|
+
<img
|
|
14
|
+
src={faker.image.dataUri()}
|
|
15
|
+
className="texture-slice"
|
|
16
|
+
alt="bottom texture"
|
|
17
|
+
/>
|
|
18
|
+
<svg viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg">
|
|
19
|
+
<title>Diagonal line decoration</title>
|
|
20
|
+
<line
|
|
21
|
+
x1="0"
|
|
22
|
+
y1="630"
|
|
23
|
+
x2="1200"
|
|
24
|
+
y2="0"
|
|
25
|
+
// only color the stroke in css so it has dark mode
|
|
26
|
+
strokeWidth="3"
|
|
27
|
+
/>
|
|
28
|
+
</svg>
|
|
29
|
+
</>
|
|
30
|
+
);
|
|
31
|
+
};
|
package/src/styles/astro.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* straight pull for menu so its going to take a bunch of work but this keeps everything sperate */
|
|
1
|
+
/* TODO: Not in use yet straight pull for menu so its going to take a bunch of work but this keeps everything sperate */
|
|
2
2
|
|
|
3
3
|
.menu-button {
|
|
4
4
|
background-color: hotpink !important;
|
package/src/styles/cards.css
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/*------------------*/
|
|
2
|
-
/* #CARDS */
|
|
2
|
+
/* #CARDS / PURCHASE / TICKET */
|
|
3
3
|
/*------------------*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
/* was deck */
|
|
6
|
+
.bag {
|
|
6
7
|
margin-block-end: var(--aconcagua);
|
|
7
8
|
|
|
8
9
|
display: grid;
|
|
9
10
|
grid-template-columns: repeat(auto-fill, minmax(var(--condor), 1fr));
|
|
11
|
+
|
|
12
|
+
/* TODO: clamp */
|
|
13
|
+
gap: var(--kosciuszko);
|
|
10
14
|
}
|
|
11
15
|
|
|
12
|
-
/*
|
|
13
|
-
.
|
|
16
|
+
/* was card */
|
|
17
|
+
.purchase {
|
|
14
18
|
padding: 0;
|
|
15
19
|
display: flex;
|
|
16
20
|
flex-direction: column;
|
|
@@ -19,12 +23,58 @@
|
|
|
19
23
|
border-radius: var(--card-radius);
|
|
20
24
|
/* needed to control nested elements */
|
|
21
25
|
text-decoration: none;
|
|
26
|
+
box-shadow: var(--penumbra);
|
|
27
|
+
|
|
28
|
+
background-color: white;
|
|
22
29
|
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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(--black-metal);
|
|
52
|
+
stroke: var(--black-metal);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.cutout {
|
|
57
|
+
object-fit: contain;
|
|
58
|
+
place-self: center;
|
|
59
|
+
/* box-shadow: var(--umbra); */
|
|
60
|
+
z-index: 2; /* TODO: variable */
|
|
61
|
+
grid-row: 1/1;
|
|
62
|
+
filter: drop-shadow(5px 5px 5px var(--black-out));
|
|
63
|
+
aspect-ratio: 16/9;
|
|
64
|
+
width: 100%;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
svg {
|
|
68
|
+
z-index: 1; /* TODO: variable */
|
|
69
|
+
max-height: 100%; /* overwrite the default */
|
|
70
|
+
margin: calc(var(--elbrus) / 2);
|
|
71
|
+
width: calc(100% - var(--elbrus));
|
|
72
|
+
stroke: whitesmoke;
|
|
73
|
+
|
|
74
|
+
@media (prefers-color-scheme: dark) {
|
|
75
|
+
stroke: var(--black-metal);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
28
78
|
}
|
|
29
79
|
|
|
30
80
|
.image-link {
|
|
@@ -37,49 +87,21 @@
|
|
|
37
87
|
transform: scale(1.05);
|
|
38
88
|
}
|
|
39
89
|
|
|
40
|
-
.
|
|
41
|
-
margin-block-end: var(--kilimanjaro);
|
|
42
|
-
transition: var(--fade);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.card__image:where(:hover, :focus) {
|
|
46
|
-
filter: brightness(80%);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.card__title {
|
|
90
|
+
.purchase__title {
|
|
50
91
|
font-size: var(--denali);
|
|
51
92
|
margin-inline: var(--kosciuszko);
|
|
52
93
|
line-height: var(--aconcagua);
|
|
53
94
|
}
|
|
54
95
|
|
|
55
|
-
|
|
56
|
-
width: calc(100% - var(--kilimanjaro));
|
|
57
|
-
display: flex;
|
|
58
|
-
flex-flow: row wrap;
|
|
59
|
-
align-items: baseline;
|
|
60
|
-
justify-content: space-between;
|
|
61
|
-
margin-inline: var(--kosciuszko);
|
|
62
|
-
margin-block-end: var(--elbrus);
|
|
63
|
-
|
|
64
|
-
> * {
|
|
65
|
-
margin: 0; /* reset */
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.card__span {
|
|
70
|
-
font-size: var(--vinson);
|
|
71
|
-
text-transform: uppercase;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
hr {
|
|
96
|
+
hr, p {
|
|
75
97
|
margin-inline: var(--kosciuszko);
|
|
76
98
|
}
|
|
77
99
|
|
|
78
|
-
img {
|
|
100
|
+
/* img {
|
|
79
101
|
width: 100%;
|
|
80
|
-
}
|
|
102
|
+
} */
|
|
81
103
|
|
|
82
|
-
.
|
|
104
|
+
.purchase__details {
|
|
83
105
|
display: flex;
|
|
84
106
|
gap: var(--vinson);
|
|
85
107
|
width: calc(100% - var(--kilimanjaro));
|
|
@@ -109,10 +131,14 @@
|
|
|
109
131
|
|
|
110
132
|
.badge {
|
|
111
133
|
z-index: var(--floor);
|
|
112
|
-
|
|
134
|
+
justify-self: end;
|
|
135
|
+
align-self: start;
|
|
113
136
|
padding: var(--kosciuszko);
|
|
114
137
|
margin: var(--kosciuszko);
|
|
115
138
|
border-radius: var(--card-radius);
|
|
139
|
+
|
|
140
|
+
background-color: var(--neutral-200);
|
|
141
|
+
border: 1px solid var(--neutral-100);
|
|
116
142
|
opacity: 0.9;
|
|
117
143
|
|
|
118
144
|
h5 {
|
|
@@ -123,7 +149,17 @@
|
|
|
123
149
|
}
|
|
124
150
|
}
|
|
125
151
|
|
|
126
|
-
.
|
|
152
|
+
.tahoe-city .purchase {
|
|
153
|
+
background-color: var(--sand-100);
|
|
154
|
+
|
|
155
|
+
hr {
|
|
156
|
+
border-color: var(--sand-400);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* south-tahoe currently does not have a purchase */
|
|
161
|
+
|
|
162
|
+
.purchase:hover,
|
|
127
163
|
.ticket:hover {
|
|
128
164
|
p {
|
|
129
165
|
text-decoration: underline;
|
|
@@ -135,15 +171,11 @@
|
|
|
135
171
|
}
|
|
136
172
|
}
|
|
137
173
|
|
|
138
|
-
.
|
|
174
|
+
.bag:empty {
|
|
139
175
|
display: none;
|
|
140
176
|
}
|
|
141
177
|
|
|
142
|
-
.
|
|
143
|
-
grid-template-columns: 1fr;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.deck__more {
|
|
178
|
+
.bag__more {
|
|
147
179
|
max-width: var(--pelican);
|
|
148
180
|
margin-inline: auto;
|
|
149
181
|
padding-inline: var(--kosciuszko);
|
|
@@ -154,28 +186,6 @@
|
|
|
154
186
|
}
|
|
155
187
|
}
|
|
156
188
|
|
|
157
|
-
.ticket img {
|
|
158
|
-
aspect-ratio: 16 / 9;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.south-tahoe .ticket {
|
|
162
|
-
background-color: var(--lake-200);
|
|
163
|
-
border: 1px solid var(--lake-300);
|
|
164
|
-
box-shadow: var(--penumbra);
|
|
165
|
-
color: var(--lake-600);
|
|
166
|
-
|
|
167
|
-
@media (prefers-color-scheme: dark) {
|
|
168
|
-
background-color: var(--lake-700);
|
|
169
|
-
border-color: var(--lake-600);
|
|
170
|
-
/* box-shadow: var(--penumbra--dark); */
|
|
171
|
-
color: var(--lake-200);
|
|
172
|
-
|
|
173
|
-
a:not(.book-now) {
|
|
174
|
-
color: var(--lake-200);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
189
|
/*------------------*/
|
|
180
190
|
/* #RETAIL LOGO */
|
|
181
191
|
/*------------------*/
|
|
@@ -237,6 +247,7 @@
|
|
|
237
247
|
|
|
238
248
|
img {
|
|
239
249
|
width: 100%;
|
|
250
|
+
aspect-ratio: 16 / 9;
|
|
240
251
|
}
|
|
241
252
|
|
|
242
253
|
> a {
|
|
@@ -263,6 +274,20 @@
|
|
|
263
274
|
}
|
|
264
275
|
}
|
|
265
276
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
277
|
+
.south-tahoe .ticket {
|
|
278
|
+
background-color: var(--lake-200);
|
|
279
|
+
border: 1px solid var(--lake-300);
|
|
280
|
+
box-shadow: var(--penumbra);
|
|
281
|
+
color: var(--lake-600);
|
|
282
|
+
|
|
283
|
+
@media (prefers-color-scheme: dark) {
|
|
284
|
+
background-color: var(--lake-700);
|
|
285
|
+
border-color: var(--lake-600);
|
|
286
|
+
/* box-shadow: var(--penumbra--dark); */
|
|
287
|
+
color: var(--lake-200);
|
|
288
|
+
|
|
289
|
+
a:not(.book-now) {
|
|
290
|
+
color: var(--lake-200);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
package/src/styles/color.css
CHANGED
|
@@ -25,6 +25,13 @@ body:has(#storybook-root) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
body .tahoe-city {
|
|
29
|
+
@media (prefers-color-scheme: dark) {
|
|
30
|
+
background-color: var(--navy-300);
|
|
31
|
+
color: var(--brilliance);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
28
35
|
body .south-tahoe {
|
|
29
36
|
@media (prefers-color-scheme: dark) {
|
|
30
37
|
background-color: var(--lake-800);
|
|
@@ -71,3 +78,11 @@ body .south-tahoe {
|
|
|
71
78
|
color: var(--neutral-200);
|
|
72
79
|
}
|
|
73
80
|
}
|
|
81
|
+
|
|
82
|
+
/*------------------------------------*/
|
|
83
|
+
/* #SPECS */
|
|
84
|
+
/*------------------------------------*/
|
|
85
|
+
|
|
86
|
+
.specs h2, .specs .spec__unit {
|
|
87
|
+
color: grey;
|
|
88
|
+
}
|
package/src/styles/layout.css
CHANGED
|
@@ -17,6 +17,7 @@ main,
|
|
|
17
17
|
footer,
|
|
18
18
|
.react-aria-Breadcrumbs,
|
|
19
19
|
.deck,
|
|
20
|
+
.bag,
|
|
20
21
|
.flight {
|
|
21
22
|
margin-inline: auto;
|
|
22
23
|
padding-inline: var(--kosciuszko);
|
|
@@ -54,6 +55,7 @@ main,
|
|
|
54
55
|
.albatross,
|
|
55
56
|
footer,
|
|
56
57
|
.deck,
|
|
58
|
+
.bag,
|
|
57
59
|
.flight,
|
|
58
60
|
.react-aria-Breadcrumbs {
|
|
59
61
|
max-width: min(var(--albatross), calc(100vw - var(--denali)));
|
|
@@ -404,7 +406,6 @@ header {
|
|
|
404
406
|
grid-column: 3;
|
|
405
407
|
grid-row: 2;
|
|
406
408
|
aspect-ratio: 1;
|
|
407
|
-
border: none;
|
|
408
409
|
box-shadow: none;
|
|
409
410
|
margin-block: 1rem;
|
|
410
411
|
border-radius: 50%;
|
|
@@ -446,3 +447,45 @@ header {
|
|
|
446
447
|
height: auto;
|
|
447
448
|
}
|
|
448
449
|
}
|
|
450
|
+
|
|
451
|
+
/*------------------*/
|
|
452
|
+
/* #SPECS */
|
|
453
|
+
/*------------------*/
|
|
454
|
+
|
|
455
|
+
.spec {
|
|
456
|
+
display: flex;
|
|
457
|
+
gap: 1rem;
|
|
458
|
+
flex-flow: row wrap;
|
|
459
|
+
justify-content: space-between;
|
|
460
|
+
align-items: baseline;
|
|
461
|
+
align-items: flex-start;
|
|
462
|
+
/* addding this border has to flip the margins */
|
|
463
|
+
border-block-start: 1px solid var(--tin-soldier);
|
|
464
|
+
text-transform: uppercase;
|
|
465
|
+
|
|
466
|
+
height: 2lh;
|
|
467
|
+
margin-block-start: 1lh;
|
|
468
|
+
@supports not (margin: 1lh) {
|
|
469
|
+
height: 2.5rem;
|
|
470
|
+
margin-block-start: 1.25rem;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
h2,
|
|
474
|
+
h3 {
|
|
475
|
+
line-height: 2rem;
|
|
476
|
+
margin-block-end: 0.25rem;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.spec-flex {
|
|
480
|
+
display: flex;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/* bug fix that maybe could be done with .sr-only being different but this works */
|
|
485
|
+
.spec:has(.sr-only) {
|
|
486
|
+
align-items: center;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
.spec:last-child {
|
|
490
|
+
border-bottom: none;
|
|
491
|
+
}
|
package/src/styles/links.css
CHANGED
|
@@ -14,7 +14,7 @@ a:where(:hover, :focus) {
|
|
|
14
14
|
|
|
15
15
|
/* this is getting too big and complex try go the other way for what it is */
|
|
16
16
|
.tahoe-city a:not(.social a):not(button):not(.button):not(.book-now) {
|
|
17
|
-
color: var(--
|
|
17
|
+
color: var(--tanager-100);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
.south-tahoe a {
|
package/src/styles/lists.css
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
/*------------------*/
|
|
8
8
|
|
|
9
9
|
ul {
|
|
10
|
-
padding-inline-start:
|
|
10
|
+
padding-inline-start: var(--kosciuszko);
|
|
11
11
|
margin: 0; /* reset */
|
|
12
|
+
list-style: none; /* reset */
|
|
12
13
|
|
|
13
14
|
li {
|
|
14
15
|
display: block;
|
|
@@ -17,6 +18,7 @@ ul {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
ol {
|
|
21
|
+
margin-block-start: 0;
|
|
20
22
|
li {
|
|
21
23
|
display: inline flow-root list-item;
|
|
22
24
|
margin-block-end: var(--baseline);
|
|
@@ -70,7 +72,8 @@ ol {
|
|
|
70
72
|
display: flex;
|
|
71
73
|
flex-flow: row wrap;
|
|
72
74
|
gap: 1rem;
|
|
73
|
-
align-items:
|
|
75
|
+
align-items: baseline;
|
|
76
|
+
justify-content: space-between;
|
|
74
77
|
}
|
|
75
78
|
|
|
76
79
|
/*------------------*/
|
|
@@ -176,7 +179,8 @@ ol {
|
|
|
176
179
|
|
|
177
180
|
svg {
|
|
178
181
|
transition: var(--fade);
|
|
179
|
-
margin: var(--baseline);
|
|
182
|
+
margin-block: var(--baseline);
|
|
183
|
+
margin-inline: auto;
|
|
180
184
|
min-width: 3rem; /* guess and check */
|
|
181
185
|
|
|
182
186
|
@media (min-width: 20rem) {
|
|
@@ -201,18 +205,21 @@ ol {
|
|
|
201
205
|
|
|
202
206
|
.date-time {
|
|
203
207
|
display: flex;
|
|
204
|
-
flex-flow:
|
|
208
|
+
flex-flow: row wrap;
|
|
205
209
|
gap: 0.5rem;
|
|
206
|
-
|
|
207
|
-
text-align: center;
|
|
210
|
+
place-items: baseline;
|
|
208
211
|
|
|
209
|
-
|
|
212
|
+
> * {
|
|
213
|
+
margin: 0;
|
|
214
|
+
padding: 0;
|
|
215
|
+
line-height: 2;
|
|
210
216
|
width: max-content;
|
|
211
217
|
}
|
|
212
218
|
|
|
219
|
+
/* .date {
|
|
220
|
+
} */
|
|
221
|
+
|
|
213
222
|
.time {
|
|
214
|
-
padding: 0.5rem;
|
|
215
223
|
border-radius: var(--border-radius);
|
|
216
|
-
width: max-content;
|
|
217
224
|
}
|
|
218
225
|
}
|
package/src/styles/media.css
CHANGED
package/src/styles/panels.css
CHANGED
|
@@ -67,7 +67,6 @@ h3,
|
|
|
67
67
|
|
|
68
68
|
h4,
|
|
69
69
|
.kilimanjaro,
|
|
70
|
-
/* .spec h2 put this inline */
|
|
71
70
|
.spec h2 {
|
|
72
71
|
font-size: 1.5rem; /* 24px */
|
|
73
72
|
line-height: 2rem; /* 32px */
|
|
@@ -231,9 +230,12 @@ select {
|
|
|
231
230
|
/* #DEL */
|
|
232
231
|
/*------------------*/
|
|
233
232
|
|
|
234
|
-
|
|
233
|
+
/* TODO: v1.2 */
|
|
234
|
+
/* I think this is the only place its used but describes why */
|
|
235
|
+
/* .single__description del {
|
|
235
236
|
color: hsl(var(--sand__base), var(--dim));
|
|
236
237
|
@media (prefers-color-scheme: dark) {
|
|
237
238
|
color: hsl(var(--sand__base), var(--dark));
|
|
238
239
|
}
|
|
239
240
|
}
|
|
241
|
+
*/
|
package/src/styles/variables.css
CHANGED
|
@@ -7,11 +7,6 @@
|
|
|
7
7
|
/* #COLOR */
|
|
8
8
|
/*------------------------------------*/
|
|
9
9
|
|
|
10
|
-
/* TODO: v1.2 swap to tanager and remove */
|
|
11
|
-
--ruby-100: hsl(0, 50%, 50%); /* base */
|
|
12
|
-
--ruby-200: hsl(0, 50%, 37.5%);
|
|
13
|
-
--ruby-300: hsl(0, 50%, 25%);
|
|
14
|
-
|
|
15
10
|
--sand-100: hsl(25, 37%, 95%);
|
|
16
11
|
--sand-150: hsl(25, 37%, 92.5%);
|
|
17
12
|
--sand-200: hsl(25, 37%, 87.5%);
|
|
@@ -21,7 +16,7 @@
|
|
|
21
16
|
--navy-200: oklch(37.5% 0.07 230);
|
|
22
17
|
--navy-300: oklch(25% 0.04 230);
|
|
23
18
|
|
|
24
|
-
@supports not (
|
|
19
|
+
@supports not (color: oklch(50% 0.09 230)) {
|
|
25
20
|
--navy-100: #1b6c8c;
|
|
26
21
|
--navy-200: #0a475f;
|
|
27
22
|
--navy-300: #092531;
|
|
@@ -55,7 +50,7 @@
|
|
|
55
50
|
--sand-400: oklch(0.88 0.04 50);
|
|
56
51
|
/* this finishes where 500 normally would go dark */
|
|
57
52
|
|
|
58
|
-
@supports not (color: oklch(0.
|
|
53
|
+
@supports not (color: oklch(0.97 0.01 50)) {
|
|
59
54
|
--sand-100: #fbf3ef;
|
|
60
55
|
--sand-200: #faebe3;
|
|
61
56
|
--sand-300: #f6dfd3;
|
|
@@ -65,8 +60,9 @@
|
|
|
65
60
|
/* South Tahoe */
|
|
66
61
|
/* Lake */
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
--lake-100: oklch(
|
|
63
|
+
/* ! whats going on with the 2x 100? */
|
|
64
|
+
/* --lake-100: oklch(99% 0.001 230); */
|
|
65
|
+
--lake-100: oklch(94% 0.03 230);
|
|
70
66
|
--lake-200: oklch(93% 0.04 230);
|
|
71
67
|
--lake-300: oklch(90% 0.055 230);
|
|
72
68
|
--lake-400: oklch(83% 0.08 230);
|