@rileybathurst/paddle 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +7 -17
- 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 +14 -8
- package/src/styles/panels.css +5 -0
- package/src/styles/typography.css +4 -2
- package/src/styles/variables.css +5 -9
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.10",
|
|
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
|
+
};
|
|
@@ -18,11 +18,11 @@ type PlaceTypes = {
|
|
|
18
18
|
const Place = ({ commonName, streetAddress, addressLocality, addressRegion, postalCode }: PlaceTypes) => {
|
|
19
19
|
return (
|
|
20
20
|
<address>
|
|
21
|
-
{commonName ? commonName : null}
|
|
22
|
-
{streetAddress ? streetAddress : null}
|
|
23
|
-
{addressLocality ? addressLocality : null}
|
|
24
|
-
{addressRegion ? addressRegion : null}
|
|
25
|
-
{postalCode ? postalCode : null}
|
|
21
|
+
{commonName ? (<>{commonName}, </>) : null},
|
|
22
|
+
{streetAddress ? (<>{streetAddress}, </>) : null}
|
|
23
|
+
{addressLocality ? (<>{addressLocality}, </>) : null}
|
|
24
|
+
{addressRegion ? (<>{addressRegion}, </>) : null}
|
|
25
|
+
{postalCode ? (<>{postalCode}, </>) : null}
|
|
26
26
|
</address>
|
|
27
27
|
)
|
|
28
28
|
}
|
|
@@ -62,13 +62,9 @@ const Season = ({
|
|
|
62
62
|
return (
|
|
63
63
|
<p>
|
|
64
64
|
{opening_time ? "Open Daily: " : null}
|
|
65
|
-
<br />
|
|
66
65
|
{opening_time && closing_time ? (
|
|
67
|
-
<
|
|
68
|
-
<HourMin time={opening_time} /> - <HourMin time={closing_time} />
|
|
69
|
-
</span>
|
|
66
|
+
<><HourMin time={opening_time} /> - <HourMin time={closing_time} /> </>
|
|
70
67
|
) : null}
|
|
71
|
-
<br />
|
|
72
68
|
Weather Permitting
|
|
73
69
|
</p>
|
|
74
70
|
);
|
|
@@ -80,13 +76,7 @@ const Season = ({
|
|
|
80
76
|
<p>We're closed for the season</p>
|
|
81
77
|
|
|
82
78
|
{currentDay < seasonStartDate ? (
|
|
83
|
-
<p>
|
|
84
|
-
We will reopen
|
|
85
|
-
<br />
|
|
86
|
-
{season_start}
|
|
87
|
-
<br />
|
|
88
|
-
Weather Permitting
|
|
89
|
-
</p>
|
|
79
|
+
<p>We will reopen {season_start}, Weather Permitting</p>
|
|
90
80
|
) : null}
|
|
91
81
|
|
|
92
82
|
{offSeasonDetails ? <p>{offSeasonDetails}</p> : null}
|
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
|
@@ -17,6 +17,7 @@ ul {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
ol {
|
|
20
|
+
margin-block-start: 0;
|
|
20
21
|
li {
|
|
21
22
|
display: inline flow-root list-item;
|
|
22
23
|
margin-block-end: var(--baseline);
|
|
@@ -70,7 +71,8 @@ ol {
|
|
|
70
71
|
display: flex;
|
|
71
72
|
flex-flow: row wrap;
|
|
72
73
|
gap: 1rem;
|
|
73
|
-
align-items:
|
|
74
|
+
align-items: baseline;
|
|
75
|
+
justify-content: space-between;
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
/*------------------*/
|
|
@@ -176,7 +178,8 @@ ol {
|
|
|
176
178
|
|
|
177
179
|
svg {
|
|
178
180
|
transition: var(--fade);
|
|
179
|
-
margin: var(--baseline);
|
|
181
|
+
margin-block: var(--baseline);
|
|
182
|
+
margin-inline: auto;
|
|
180
183
|
min-width: 3rem; /* guess and check */
|
|
181
184
|
|
|
182
185
|
@media (min-width: 20rem) {
|
|
@@ -201,18 +204,21 @@ ol {
|
|
|
201
204
|
|
|
202
205
|
.date-time {
|
|
203
206
|
display: flex;
|
|
204
|
-
flex-flow:
|
|
207
|
+
flex-flow: row wrap;
|
|
205
208
|
gap: 0.5rem;
|
|
206
|
-
|
|
207
|
-
text-align: center;
|
|
209
|
+
place-items: baseline;
|
|
208
210
|
|
|
209
|
-
|
|
211
|
+
> * {
|
|
212
|
+
margin: 0;
|
|
213
|
+
padding: 0;
|
|
214
|
+
line-height: 2;
|
|
210
215
|
width: max-content;
|
|
211
216
|
}
|
|
212
217
|
|
|
218
|
+
/* .date {
|
|
219
|
+
} */
|
|
220
|
+
|
|
213
221
|
.time {
|
|
214
|
-
padding: 0.5rem;
|
|
215
222
|
border-radius: var(--border-radius);
|
|
216
|
-
width: max-content;
|
|
217
223
|
}
|
|
218
224
|
}
|
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);
|