@rileybathurst/paddle 0.0.34 → 0.0.37
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/README.md +1 -1
- package/package.json +13 -4
- package/src/App.tsx +0 -1
- package/src/Button.tsx +15 -0
- package/src/PaddleBookNow.tsx +15 -0
- package/src/PaddleComposition.tsx +56 -0
- package/src/PaddleLocationCard.tsx +146 -0
- package/src/PaddleLocationDeck.tsx +21 -0
- package/src/PaddleSocials.tsx +44 -0
- package/src/PaddleTestimonials.tsx +24 -0
- package/src/PaddleTicket.tsx +53 -0
- package/src/PaddleTime.tsx +75 -0
- package/src/Test.tsx +3 -0
- package/src/assets/facebook-icon.tsx +26 -0
- package/src/assets/instagram-icon.tsx +27 -0
- package/src/assets/tripadvisor-icon.tsx +17 -0
- package/src/index.tsx +31 -1
- package/src/stories/BookNow.stories.tsx +19 -0
- package/src/stories/BookNow.tsx +29 -0
- package/src/stories/BrandList.stories.tsx +19 -0
- package/src/stories/BrandList.tsx +19 -0
- package/src/stories/Button.stories.tsx +19 -0
- package/src/stories/Button.tsx +15 -35
- package/src/stories/Card.stories.tsx +19 -0
- package/src/stories/Card.tsx +43 -0
- package/src/stories/Colors.mdx +71 -0
- package/src/stories/Composition.stories.tsx +19 -0
- package/src/stories/Composition.tsx +21 -0
- package/src/stories/Deal.tsx +31 -0
- package/src/stories/Deck.stories.tsx +19 -0
- package/src/stories/Deck.tsx +22 -0
- package/src/stories/Eyebrow.stories.tsx +19 -0
- package/src/stories/Eyebrow.tsx +21 -0
- package/src/stories/Footer.stories.tsx +19 -0
- package/src/stories/Footer.tsx +94 -0
- package/src/stories/Header.stories.ts +7 -7
- package/src/stories/Header.tsx +23 -51
- package/src/stories/Language.stories.tsx +19 -0
- package/src/stories/Language.tsx +22 -0
- package/src/stories/Links.stories.tsx +19 -0
- package/src/stories/Links.tsx +25 -0
- package/src/stories/Location.stories.tsx +19 -0
- package/src/stories/Location.tsx +55 -0
- package/src/stories/LocationDeck.stories.tsx +19 -0
- package/src/stories/LocationDeck.tsx +42 -0
- package/src/stories/Logo.stories.tsx +19 -0
- package/src/stories/Logo.tsx +60 -0
- package/src/stories/Page.stories.ts +6 -15
- package/src/stories/Page.tsx +116 -63
- package/src/stories/Pricing.stories.tsx +19 -0
- package/src/stories/Pricing.tsx +74 -0
- package/src/stories/Socials.stories.tsx +19 -0
- package/src/stories/Socials.tsx +50 -0
- package/src/stories/Spec.stories.tsx +19 -0
- package/src/stories/Spec.tsx +99 -0
- package/src/stories/Svg.stories.tsx +19 -0
- package/src/stories/Svg.tsx +23 -0
- package/src/stories/Testimonial.stories.tsx +19 -0
- package/src/stories/Testimonial.tsx +24 -0
- package/src/stories/Testimonials.stories.tsx +19 -0
- package/src/stories/Testimonials.tsx +42 -0
- package/src/stories/Ticket.stories.tsx +19 -0
- package/src/stories/Ticket.tsx +47 -0
- package/src/stories/TopBar.stories.tsx +19 -0
- package/src/stories/TopBar.tsx +19 -0
- package/src/stories/Typography.mdx +51 -0
- package/src/stories/Typography.stories.tsx +19 -0
- package/src/stories/Typography.tsx +39 -0
- package/src/stories/Widths.stories.tsx +19 -0
- package/src/stories/Widths.tsx +151 -0
- package/src/styles/a11y.css +10 -0
- package/src/styles/app.css +9 -1
- package/src/styles/body.css +0 -9
- package/src/styles/buttons.css +41 -0
- package/src/styles/color.css +21 -0
- package/src/styles/layout.css +156 -0
- package/src/styles/links.css +23 -0
- package/src/styles/lists.css +17 -0
- package/src/styles/media.css +139 -0
- package/src/styles/typography.css +229 -0
- package/src/styles/variables.css +140 -0
- package/src/testimonial-fragment.tsx +11 -0
- package/src/types/location-card-types.ts +24 -0
- package/src/types/ticket-types.ts +19 -0
- package/.eslintrc.cjs +0 -14
- package/.storybook/main.ts +0 -20
- package/.storybook/preview.ts +0 -16
- package/index.html +0 -13
- package/public/vite.svg +0 -1
- package/src/App.css +0 -42
- package/src/stories/Button.stories.ts +0 -52
- package/src/stories/button.css +0 -30
- package/src/test.tsx +0 -11
- package/tsconfig.json +0 -25
- package/tsconfig.node.json +0 -11
- package/vite.config.ts +0 -7
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { BrandList } from './BrandList';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: BrandList,
|
|
8
|
+
title: 'Molecules/BrandList',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof BrandList>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Link } from 'react-aria-components';
|
|
4
|
+
import { faker } from '@faker-js/faker';
|
|
5
|
+
|
|
6
|
+
export const BrandList = () => {
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
// <ul className='brand_list'>
|
|
10
|
+
<li key='kayak test brand'>
|
|
11
|
+
{/* // ? why test */}
|
|
12
|
+
<Link href={faker.location.city()}>
|
|
13
|
+
<svg viewBox="0 0 201.9 202.6" xmlns="http://www.w3.org/2000/svg"><title>boardworks </title><path d="m201.9 96.5c-67.3 0-134 0-200.6 0 4.6-5.2 7.5-11.6 16.6-11.5 23.7.3 47.3-1.6 70.3-8 8.6-2.4 16.8-6.2 24.7-10.4 5.6-3 10.4-7.8 9.7-15.1-.7-7.4-6.2-11.2-12.4-13.7-16.7-6.6-33-4.3-48.9 2.8-3.1 1.4-6.1 3.1-9.1 4.6-.3-.4-.6-.8-1-1.1 3.5-3.2 7.1-6.3 10.4-9.6 9.7-9.6 19.3-19.3 29-29 7.2-7.1 13.7-7.4 20.8-.3 29.9 29.7 59.6 59.6 89.4 89.5.4.3.5.7 1.1 1.8z" /><path d="m0 106.4h17.2c12.5 0 25 .2 37.5-.1 7.3-.2 13.3 2.4 17.3 8.1 4.1 5.9 7.5 12.5 10.7 19 3.9 8.1 6.9 16.6 11.1 24.5 6.6 12.6 15.4 23.4 29.3 28.5-4.1 4.3-7.9 8.7-12.2 12.5-5.1 4.5-11.2 4.9-17.1 1.1-3.4-2.2-6.5-5.1-9.5-8.1-26.9-27-53.8-54.1-80.7-81.1-1-1.2-2-2.5-3.6-4.4z" /><path d="m81.8 106.5h49.2c-6.6 10.2-8.8 20.8-4.1 31.9 4.8 11.3 13.8 17.1 27 18.2-7 6.9-13.4 13.4-19.9 19.6-.8.8-3 1.1-4.1.6-5.4-2.8-11.8-4.8-15.5-9.1-6.3-7.4-11.4-15.9-15.8-24.6-6.2-11.9-11.2-24.3-16.8-36.6z" /><path d="m202.5 106.4c-1.6 1.9-2.4 3-3.4 4.1-8.4 8.5-16.5 17.4-25.5 25.4-4.3 3.8-9.9 6.7-15.4 8.7-6.8 2.5-13.3.3-18.1-5.2-4.7-5.3-6.2-11.7-4.1-18.6 2.8-9 10.1-14.3 19.4-14.3 15.3-.1 30.6-.1 47.1-.1z" /></svg>
|
|
14
|
+
{faker.location.city()}
|
|
15
|
+
</Link>
|
|
16
|
+
</li>
|
|
17
|
+
// </ul>
|
|
18
|
+
);
|
|
19
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Button } from './Button';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Button,
|
|
8
|
+
title: 'Atoms/Button',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Button>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
package/src/stories/Button.tsx
CHANGED
|
@@ -1,49 +1,29 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
import './button.css';
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
4
3
|
|
|
5
4
|
interface ButtonProps {
|
|
6
|
-
/**
|
|
7
|
-
* Is this the principal call to action on the page?
|
|
8
|
-
*/
|
|
9
5
|
primary?: boolean;
|
|
10
|
-
/**
|
|
11
|
-
* What background color to use
|
|
12
|
-
*/
|
|
13
|
-
backgroundColor?: string;
|
|
14
|
-
/**
|
|
15
|
-
* How large should the button be?
|
|
16
|
-
*/
|
|
17
|
-
size?: 'small' | 'medium' | 'large';
|
|
18
|
-
/**
|
|
19
|
-
* Button contents
|
|
20
|
-
*/
|
|
21
|
-
label: string;
|
|
22
|
-
/**
|
|
23
|
-
* Optional click handler
|
|
24
|
-
*/
|
|
25
6
|
onClick?: () => void;
|
|
26
7
|
}
|
|
27
8
|
|
|
28
|
-
/**
|
|
29
|
-
* Primary UI component for user interaction
|
|
30
|
-
*/
|
|
31
9
|
export const Button = ({
|
|
32
10
|
primary = false,
|
|
33
|
-
size = 'medium',
|
|
34
|
-
backgroundColor,
|
|
35
|
-
label,
|
|
36
11
|
...props
|
|
37
12
|
}: ButtonProps) => {
|
|
38
|
-
|
|
13
|
+
|
|
39
14
|
return (
|
|
40
|
-
<
|
|
41
|
-
type="button"
|
|
42
|
-
className={['storybook-button', `storybook-button--${size}`, mode].join(' ')}
|
|
43
|
-
style={{ backgroundColor }}
|
|
15
|
+
<main
|
|
44
16
|
{...props}
|
|
45
17
|
>
|
|
46
|
-
{
|
|
47
|
-
|
|
18
|
+
{primary ? 'primary' : 'secondary'}
|
|
19
|
+
<button type='button'>Button</button>
|
|
20
|
+
<button className='button__hover' type='button'>Hover</button>
|
|
21
|
+
<button className='button__active' type='button'>Active</button>
|
|
22
|
+
<hr />
|
|
23
|
+
<button className='button__mullen' type='button'>Button Mullen</button>
|
|
24
|
+
<button className='button__mullen--hover' type='button'>Mullen Hover</button>
|
|
25
|
+
<button className='button__mullen--active' type='button'>Mullen Active</button>
|
|
26
|
+
<p>// TODO: I have some problems with this I dont like the pink</p>
|
|
27
|
+
</main>
|
|
48
28
|
);
|
|
49
|
-
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Card } from './Card';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Card,
|
|
8
|
+
title: 'Molecules/Card',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Card>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// TODO: faker with an internet connection
|
|
2
|
+
// this is the Name.tsx file
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Link } from 'react-aria-components';
|
|
5
|
+
import { faker } from '@faker-js/faker';
|
|
6
|
+
import { BookNow } from './BookNow';
|
|
7
|
+
|
|
8
|
+
export const Card = () => {
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<div className='deck'>
|
|
12
|
+
<Link href="#" className="card">
|
|
13
|
+
{/* <img
|
|
14
|
+
src='https://tahoe-city-kayak.s3.us-west-1.amazonaws.com/textures/jason-leung-Oc81QL8Crtg-unsplash-hd.webp'
|
|
15
|
+
alt=""
|
|
16
|
+
className='card__placeholder'
|
|
17
|
+
/> */}
|
|
18
|
+
<h4 className="card__title">
|
|
19
|
+
{faker.location.city()}
|
|
20
|
+
</h4>
|
|
21
|
+
|
|
22
|
+
<div className="card__specs">
|
|
23
|
+
<h4>
|
|
24
|
+
{/* <time>
|
|
25
|
+
18:30 - 20:30
|
|
26
|
+
</time> */}
|
|
27
|
+
</h4>
|
|
28
|
+
<h4>
|
|
29
|
+
{/* // ? does this need capitalization */}
|
|
30
|
+
{faker.helpers.arrayElement(['easy', 'medium', 'hard'])} <span className="card__span">Fitness</span>
|
|
31
|
+
</h4>
|
|
32
|
+
</div>
|
|
33
|
+
<hr />
|
|
34
|
+
<p>{faker.lorem.lines(2)}</p>
|
|
35
|
+
<hr />
|
|
36
|
+
<div className="card__details">
|
|
37
|
+
<h5>${faker.number.int(100)}</h5>
|
|
38
|
+
<BookNow />
|
|
39
|
+
</div>
|
|
40
|
+
</Link>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Meta, ColorPalette, ColorItem } from "@storybook/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="Colors" />
|
|
4
|
+
|
|
5
|
+
<ColorPalette>
|
|
6
|
+
<ColorItem
|
|
7
|
+
title="Mullen"
|
|
8
|
+
subtitle="base 100 - Tahoe City"
|
|
9
|
+
colors={{
|
|
10
|
+
mullen100: "hsl(0, 50%, 50%)",
|
|
11
|
+
mullen200: "hsl(0, 50%, 37.5%)",
|
|
12
|
+
mullen300: "hsl(0, 50%, 25%)",
|
|
13
|
+
}}
|
|
14
|
+
/>
|
|
15
|
+
<ColorItem
|
|
16
|
+
title="Sand"
|
|
17
|
+
subtitle="base 100 - Tahoe City"
|
|
18
|
+
colors={{
|
|
19
|
+
sand100: "hsl(25, 37%, 95%)",
|
|
20
|
+
sand150: "hsl(25, 37%, 92.5%)",
|
|
21
|
+
sand200: "hsl(25, 37%, 87.5%)",
|
|
22
|
+
sand300: "hsl(25, 37%, 75%)",
|
|
23
|
+
}}
|
|
24
|
+
/>
|
|
25
|
+
|
|
26
|
+
<ColorItem
|
|
27
|
+
title="Ink"
|
|
28
|
+
subtitle="base 100 - Tahoe City"
|
|
29
|
+
colors={{
|
|
30
|
+
ink100: "hsl(210, 50%, 12.5%)",
|
|
31
|
+
ink200: "hsl(210, 50%, 7.5%)",
|
|
32
|
+
ink300: "hsl(210, 50%, 5%)",
|
|
33
|
+
}}
|
|
34
|
+
/>
|
|
35
|
+
<ColorItem
|
|
36
|
+
title="Navy"
|
|
37
|
+
subtitle="base 400 - South Lake"
|
|
38
|
+
colors={{
|
|
39
|
+
navy200: "oklch(75% 0.12 230)",
|
|
40
|
+
navy300: "oklch(62.5% 0.14 230)",
|
|
41
|
+
navy400: "oklch(50% 0.14 230)",
|
|
42
|
+
navy500: "oklch(37.5% 0.14 230)",
|
|
43
|
+
navy600: "oklch(25% 0.12 230)"
|
|
44
|
+
}}
|
|
45
|
+
/>
|
|
46
|
+
<ColorItem
|
|
47
|
+
title="Sunshine"
|
|
48
|
+
subtitle="base 500 - South Lake"
|
|
49
|
+
colors={{
|
|
50
|
+
navy100: "oklch(97.5% 0.025 95)",
|
|
51
|
+
navy200: "oklch(95% 0.05 95)",
|
|
52
|
+
navy300: "oklch(92.5% 0.1 95)",
|
|
53
|
+
navy400: "oklch(90% 0.15 95)",
|
|
54
|
+
navy500: "oklch(87.5% 0.2 95)"
|
|
55
|
+
}}
|
|
56
|
+
/>
|
|
57
|
+
<ColorItem
|
|
58
|
+
title="Neutrals"
|
|
59
|
+
colors={{
|
|
60
|
+
blackmetal: "hsl(210, 25%, 2.5%)",
|
|
61
|
+
blackout: "hsl(210, 25%, 12.5%)",
|
|
62
|
+
raven: "hsl(210, 25%, 25%)",
|
|
63
|
+
industrial: "hsl(210, 7.5%, 37.5%)",
|
|
64
|
+
grey: "hsl(210, 7.5%, 50%)",
|
|
65
|
+
cold: "hsl(210, 7.5%, 62.5%)",
|
|
66
|
+
tin: "hsl(210, 12.5%, 75%)",
|
|
67
|
+
cloud: "hsl(210, 18.75%, 87.5%)",
|
|
68
|
+
brilliance: "hsl(210, 25%, 97.5%)",
|
|
69
|
+
}}
|
|
70
|
+
/>
|
|
71
|
+
</ColorPalette>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Composition } from './Composition';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Composition,
|
|
8
|
+
title: 'Molecules/Composition',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Composition>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
interface CompositionProps {
|
|
5
|
+
primary?: boolean;
|
|
6
|
+
onClick?: () => void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const Composition = ({
|
|
10
|
+
primary = false,
|
|
11
|
+
...props
|
|
12
|
+
}: CompositionProps) => {
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<div className="composition">
|
|
16
|
+
{/* <WaterTexture className="texture-1" /> */}
|
|
17
|
+
{/* <TopThree className="texture-2 img__wrapped" /> */}
|
|
18
|
+
{/* {sport === 'paddleboard' ? <Supper className="paddler" /> : <Kayaker className="paddler" />} */}
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// havent figured out how to get this in yet
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { faker } from '@faker-js/faker';
|
|
5
|
+
|
|
6
|
+
export const Deal = () => {
|
|
7
|
+
const roll = faker.number.int(10);
|
|
8
|
+
if (roll < 1) {
|
|
9
|
+
return (
|
|
10
|
+
<h1>There are no cards available</h1>
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// <Ticket key={i} />
|
|
15
|
+
const content = [];
|
|
16
|
+
for (let i = 0; i < roll; i++) {
|
|
17
|
+
content.push(
|
|
18
|
+
{ i }
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
console.log(content);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
{content.map((piece) => (
|
|
27
|
+
piece.i
|
|
28
|
+
))}
|
|
29
|
+
</>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Deck } from './Deck';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Deck,
|
|
8
|
+
title: 'Organisms/Deck',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Deck>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Ticket } from './Ticket';
|
|
4
|
+
|
|
5
|
+
interface DeckProps {
|
|
6
|
+
primary?: boolean;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const Deck = ({
|
|
11
|
+
primary = false,
|
|
12
|
+
...props
|
|
13
|
+
}: DeckProps) => {
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className='deck'>
|
|
17
|
+
{/* // TODO: deal */}
|
|
18
|
+
<Ticket />
|
|
19
|
+
<Ticket />
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Eyebrow } from './Eyebrow';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Eyebrow,
|
|
8
|
+
title: 'Atoms/Eyebrow',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Eyebrow>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
interface EyebrowProps {
|
|
5
|
+
primary?: boolean;
|
|
6
|
+
onClick?: () => void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const Eyebrow = ({
|
|
10
|
+
primary = false,
|
|
11
|
+
...props
|
|
12
|
+
}: EyebrowProps) => {
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<hgroup className='eyebrow crest'>
|
|
16
|
+
{/* // TODO: fix the metaphor */}
|
|
17
|
+
<p className='eyebrow brow'>Eyebrow</p>
|
|
18
|
+
<h3 className='supra'>Supra</h3>
|
|
19
|
+
</hgroup>
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Footer } from './Footer';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
component: Footer,
|
|
8
|
+
title: 'Organisms/Footer',
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Footer>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// this is the Name.tsx file
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Link } from 'react-aria-components';
|
|
4
|
+
import { faker } from '@faker-js/faker';
|
|
5
|
+
|
|
6
|
+
import { Pricing } from './Pricing';
|
|
7
|
+
import { LocationDeck } from './LocationDeck';
|
|
8
|
+
import { Socials } from './Socials';
|
|
9
|
+
|
|
10
|
+
function Deal() {
|
|
11
|
+
|
|
12
|
+
const roll = faker.number.int(10);
|
|
13
|
+
|
|
14
|
+
if (roll < 1) {
|
|
15
|
+
return (
|
|
16
|
+
<h1>double zero</h1>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const content = [];
|
|
21
|
+
for (let i = 0; i < roll; i++) {
|
|
22
|
+
content.push(
|
|
23
|
+
<li key={faker.location.city()}>
|
|
24
|
+
<a href={faker.location.city()}
|
|
25
|
+
target="_blank"
|
|
26
|
+
rel='noopener noreferrer'
|
|
27
|
+
>
|
|
28
|
+
{faker.location.city()} Kayak & Paddleboard
|
|
29
|
+
</a>
|
|
30
|
+
</li>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return content;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface FooterProps {
|
|
38
|
+
primary?: boolean;
|
|
39
|
+
onClick?: () => void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const Footer = ({
|
|
43
|
+
primary = false,
|
|
44
|
+
...props
|
|
45
|
+
}: FooterProps) => {
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<footer>
|
|
49
|
+
<section>
|
|
50
|
+
<h3 className='sr-only'>
|
|
51
|
+
<Link href="/">{faker.company.name()}</Link>
|
|
52
|
+
</h3>
|
|
53
|
+
<Link href="/" className="logo-link">
|
|
54
|
+
{/* // TODO: */}
|
|
55
|
+
{/* <Logo /> */}
|
|
56
|
+
</Link>
|
|
57
|
+
<p>© {new Date().getFullYear()}</p>
|
|
58
|
+
<hr />
|
|
59
|
+
<nav>
|
|
60
|
+
{/* <MenuList /> */}
|
|
61
|
+
</nav>
|
|
62
|
+
<hr />
|
|
63
|
+
<div className="footer__contact">
|
|
64
|
+
{/* <Phone /> */}
|
|
65
|
+
<a
|
|
66
|
+
href={`mailto:${faker.internet.email()}`}
|
|
67
|
+
rel="norel norefferer"
|
|
68
|
+
className="button"
|
|
69
|
+
>
|
|
70
|
+
{faker.internet.email()}
|
|
71
|
+
</a>
|
|
72
|
+
<Socials />
|
|
73
|
+
</div>
|
|
74
|
+
<hr />
|
|
75
|
+
<div className="footer__locations">
|
|
76
|
+
<h3>Our Partner Locations</h3>
|
|
77
|
+
<ul>
|
|
78
|
+
<Deal />
|
|
79
|
+
</ul>
|
|
80
|
+
</div>
|
|
81
|
+
</section>
|
|
82
|
+
<section>
|
|
83
|
+
<Pricing book={false} />
|
|
84
|
+
<hr />
|
|
85
|
+
|
|
86
|
+
<LocationDeck
|
|
87
|
+
// locations={data.allStrapiLocation}
|
|
88
|
+
background={false}
|
|
89
|
+
/>
|
|
90
|
+
</section>
|
|
91
|
+
|
|
92
|
+
</footer >
|
|
93
|
+
);
|
|
94
|
+
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from
|
|
2
|
-
import { fn } from
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { fn } from "@storybook/test";
|
|
3
3
|
|
|
4
|
-
import { Header } from
|
|
4
|
+
import { Header } from "./Header";
|
|
5
5
|
|
|
6
6
|
const meta = {
|
|
7
|
-
title:
|
|
7
|
+
title: "Organisms/Header",
|
|
8
8
|
component: Header,
|
|
9
9
|
// This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
|
|
10
|
-
tags: [
|
|
10
|
+
tags: ["autodocs"],
|
|
11
11
|
parameters: {
|
|
12
12
|
// More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
|
|
13
|
-
layout:
|
|
13
|
+
layout: "fullscreen",
|
|
14
14
|
},
|
|
15
15
|
args: {
|
|
16
16
|
onLogin: fn(),
|
|
@@ -25,7 +25,7 @@ type Story = StoryObj<typeof meta>;
|
|
|
25
25
|
export const LoggedIn: Story = {
|
|
26
26
|
args: {
|
|
27
27
|
user: {
|
|
28
|
-
name:
|
|
28
|
+
name: "Jane Doe",
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
};
|
package/src/stories/Header.tsx
CHANGED
|
@@ -1,56 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { faker } from '@faker-js/faker';
|
|
3
|
+
import { Link } from 'react-aria-components';
|
|
4
|
+
import { TopBar } from './TopBar';
|
|
5
|
+
import { Logo } from './Logo';
|
|
2
6
|
|
|
3
|
-
|
|
4
|
-
import './header.css';
|
|
5
|
-
|
|
6
|
-
type User = {
|
|
7
|
-
name: string;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
interface HeaderProps {
|
|
11
|
-
user?: User;
|
|
12
|
-
onLogin?: () => void;
|
|
13
|
-
onLogout?: () => void;
|
|
14
|
-
onCreateAccount?: () => void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const Header = ({ user, onLogin, onLogout, onCreateAccount }: HeaderProps) => (
|
|
7
|
+
export const Header = () => (
|
|
18
8
|
<header>
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
</g>
|
|
36
|
-
</svg>
|
|
37
|
-
<h1>Acme</h1>
|
|
38
|
-
</div>
|
|
39
|
-
<div>
|
|
40
|
-
{user ? (
|
|
41
|
-
<>
|
|
42
|
-
<span className="welcome">
|
|
43
|
-
Welcome, <b>{user.name}</b>!
|
|
44
|
-
</span>
|
|
45
|
-
<Button size="small" onClick={onLogout} label="Log out" />
|
|
46
|
-
</>
|
|
47
|
-
) : (
|
|
48
|
-
<>
|
|
49
|
-
<Button size="small" onClick={onLogin} label="Log in" />
|
|
50
|
-
<Button primary size="small" onClick={onCreateAccount} label="Sign up" />
|
|
51
|
-
</>
|
|
52
|
-
)}
|
|
53
|
-
</div>
|
|
9
|
+
<TopBar />
|
|
10
|
+
<div className="logo-container" >
|
|
11
|
+
<Link
|
|
12
|
+
href="/"
|
|
13
|
+
className="link__subtle"
|
|
14
|
+
>
|
|
15
|
+
<Logo />
|
|
16
|
+
</Link>
|
|
17
|
+
<h1 className='sr-only'>
|
|
18
|
+
<Link
|
|
19
|
+
href="/"
|
|
20
|
+
className="link__subtle"
|
|
21
|
+
>
|
|
22
|
+
{faker.location.city()} kayak & Paddleboard
|
|
23
|
+
</Link>
|
|
24
|
+
</h1>
|
|
54
25
|
</div>
|
|
26
|
+
{/* // TODO: <p>small nav is going to be a pain to build here I bet</p> */}
|
|
55
27
|
</header>
|
|
56
28
|
);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// this is the Name.stories.tsx file
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { Language } from './Language';
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
title: 'Atoms/Language',
|
|
8
|
+
component: Language,
|
|
9
|
+
args: { onClick: fn() },
|
|
10
|
+
} satisfies Meta<typeof Language>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Primary: Story = {
|
|
16
|
+
args: {
|
|
17
|
+
primary: true,
|
|
18
|
+
},
|
|
19
|
+
};
|