@rileybathurst/paddle 1.9.26 → 1.9.27

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.26",
4
+ "version": "1.9.27",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "tsc --noEmit && stay-gold && vite",
@@ -11,7 +11,8 @@
11
11
  "preview": "vite preview",
12
12
  "storybook": "tsc --noEmit && stay-gold && storybook dev -p 6006",
13
13
  "build-storybook": "storybook build",
14
- "release": "npm version patch && npm login && npm publish"
14
+ "release": "npm version patch && npm login && npm publish",
15
+ "stay-gold": "stay-gold"
15
16
  },
16
17
  "dependencies": {
17
18
  "color-cards": "^1.0.18",
package/src/index.tsx CHANGED
@@ -4,6 +4,7 @@ export * from "./paddle-time";
4
4
  export * from "./paddle-remainder";
5
5
  export * from "./paddle-format-phone-number";
6
6
  export * from "./paddle-featured-sort";
7
+ export * from "./paddle-menu";
7
8
 
8
9
  // Molecules
9
10
  export * from "./paddle-composition";
@@ -0,0 +1,80 @@
1
+ import React, { useEffect, useId, useRef, useState } from "react";
2
+ import { Link } from "gatsby"
3
+ import { PaddleBookNow } from "./paddle-book-now";
4
+ import type { PaddleBookNowTypes } from "./types/paddle-book-now-types";
5
+
6
+ // ? Can this be kept here or does it need to be seperate from the component?
7
+ type PaddleMenuTypes = PaddleBookNowTypes & {
8
+ menu_items: {
9
+ href: string;
10
+ label: string;
11
+ }[];
12
+ };
13
+ export const PaddleMenu = ({ menu_items, peek_base, strapiBranchName }: PaddleMenuTypes) => {
14
+
15
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
16
+ const menuId = useId();
17
+ const menuButtonRef = useRef<HTMLButtonElement>(null);
18
+
19
+ useEffect(() => {
20
+ const onKeyDown = (event: KeyboardEvent) => {
21
+ if (event.key === "Escape") {
22
+ setIsMenuOpen(false);
23
+ menuButtonRef.current?.focus();
24
+ }
25
+ };
26
+
27
+ window.addEventListener("keydown", onKeyDown);
28
+
29
+ return () => {
30
+ window.removeEventListener("keydown", onKeyDown);
31
+ };
32
+ }, []);
33
+
34
+ const closeMenu = () => {
35
+ setIsMenuOpen(false);
36
+ };
37
+
38
+ return (
39
+ <nav className="nav" aria-label="Main navigation">
40
+ <button
41
+ ref={menuButtonRef}
42
+ className="menu-toggle"
43
+ type="button"
44
+ aria-expanded={isMenuOpen}
45
+ aria-controls={menuId}
46
+ aria-label={isMenuOpen ? "Close main menu" : "Open main menu"}
47
+ onClick={() => {
48
+ setIsMenuOpen((currentlyOpen) => !currentlyOpen);
49
+ }}
50
+ >
51
+ Menu
52
+ </button>
53
+
54
+ <ul
55
+ id={menuId}
56
+ className={`menu-list ${isMenuOpen ? "is-open" : ""}`}
57
+ onClick={(event) => {
58
+ if (event.target instanceof HTMLAnchorElement) {
59
+ closeMenu();
60
+ }
61
+ }}
62
+ >
63
+ {menu_items.map((item) => (
64
+ <li key={item.href}>
65
+ {/* // * using aria components for storybook */}
66
+ <Link to={item.href}>
67
+ {item.label}
68
+ </Link>
69
+ </li>
70
+ ))}
71
+ <li>
72
+ <PaddleBookNow
73
+ peek_base={peek_base}
74
+ strapiBranchName={strapiBranchName}
75
+ />
76
+ </li>
77
+ </ul>
78
+ </nav>
79
+ );
80
+ };
@@ -10,7 +10,6 @@
10
10
  @import "cards";
11
11
  @import "media";
12
12
  @import "color";
13
- @import "panels";
14
13
  @import "links";
15
14
  @import "buttons";
16
15
  @import "lists";
@@ -99,8 +99,10 @@ button:active {
99
99
  /*------------------------------------*/
100
100
 
101
101
  .tahoe-city {
102
+
102
103
  button,
103
- .button, .book-now {
104
+ .button,
105
+ .book-now {
104
106
  background-color: var(--tanager-200);
105
107
  border-color: var(--tanager-100);
106
108
  color: white;
@@ -111,9 +113,9 @@ button:active {
111
113
  .book-now:hover,
112
114
  .button__hover {
113
115
  @media (prefers-color-scheme: light) {
114
- background-color: var(--tanager-300);
115
- border-color: var(--tanager-200);
116
- color: var(--neutral-200);
116
+ background-color: var(--tanager-300);
117
+ border-color: var(--tanager-200);
118
+ color: var(--neutral-200);
117
119
  }
118
120
  }
119
121
 
@@ -123,8 +125,8 @@ button:active {
123
125
  .button__active {
124
126
  @media (prefers-color-scheme: light) {
125
127
  background-color: var(--tanager-400);
126
- border-color: var(--tanager-300);
127
- color: var(--neutral-300);
128
+ border-color: var(--tanager-300);
129
+ color: var(--neutral-300);
128
130
  }
129
131
  }
130
132
  }
@@ -134,12 +136,12 @@ button:active {
134
136
  /*------------------------------------*/
135
137
 
136
138
  .south-tahoe {
139
+
137
140
  button,
138
141
  .button,
139
142
  select {
140
143
  background-color: var(--lake-200);
141
- border-color: var(--lake-100);
142
- color: var(--cloud-color);
144
+ border-color: var(--lake-300);
143
145
  }
144
146
 
145
147
  @media (prefers-color-scheme: dark) {
@@ -153,20 +155,19 @@ button:active {
153
155
  }
154
156
 
155
157
  button:hover,
156
- .button__hover,
157
158
  .button:hover,
159
+ .button__hover,
158
160
  select:hover {
159
- background-color: var(--lake-400);
161
+ background-color: var(--lake-300);
160
162
  border-color: var(--lake-400);
161
- color: var(--lake-700);
162
163
  }
163
164
 
164
- .button__active select:active {
165
+ button:active,
166
+ .button:active,
167
+ select:active,
168
+ .button__active {
165
169
  background-color: var(--lake-400);
166
170
  border-color: var(--lake-500);
167
- /* this goes passed the 400 / 500 dark light split Im not sure if I want to change it */
168
- /* maybe it needs a very occasional 450 */
169
- color: var(--lake-800);
170
171
  }
171
172
 
172
173
  .book-now {
@@ -227,4 +228,4 @@ menu button {
227
228
  footer .book-now {
228
229
  margin-block-start: 0;
229
230
  margin-block-end: var(--baseline);
230
- }
231
+ }
@@ -75,17 +75,23 @@ hr {
75
75
 
76
76
  .panel {
77
77
  background-color: var(--neutral-200);
78
+ box-shadow: 0 0 0 100vmax var(--neutral-200);
79
+ clip-path: inset(0 -100vmax);
80
+
78
81
 
79
82
  @media (prefers-color-scheme: dark) {
80
83
  background-color: var(--neutral-700);
84
+ box-shadow: 0 0 0 100vmax var(--neutral-700);
81
85
  }
82
86
  }
83
87
 
84
88
  .tahoe-city .panel {
85
- background-color: var(--sand-200);
89
+ background-color: var(--sand-300);
90
+ box-shadow: 0 0 0 100vmax var(--sand-300);
86
91
 
87
92
  @media (prefers-color-scheme: dark) {
88
93
  background-color: var(--lake-700);
94
+ box-shadow: 0 0 0 100vmax var(--lake-700);
89
95
  }
90
96
  }
91
97
 
@@ -40,49 +40,3 @@ a:where(:hover, :focus) {
40
40
  a svg {
41
41
  transition: var(--fade);
42
42
  }
43
-
44
- /*------------------*/
45
- /* #MENU LIST */
46
- /*------------------*/
47
-
48
- .menu-list {
49
- padding: 0;
50
- }
51
-
52
- /* TODO: v1.2 a lot of this is smaller than the variables test it all */
53
- .menu-list a:not(.button) {
54
- padding: 0.25rem;
55
- border-radius: 0.25rem;
56
- display: inline-block;
57
- border: 1px solid transparent;
58
- transition: var(--slow);
59
- text-decoration: none;
60
-
61
- @media (min-width: 40rem) {
62
- padding: 0.5rem;
63
- border-radius: 0.5rem;
64
- }
65
- }
66
-
67
- .south-tahoe {
68
- /* ? is *:not expensive? */
69
- /* ? I guess this is brands and logo seems I could do this a smarter way */
70
- *:not(.social) > a {
71
- svg {
72
- fill: var(--lake-600);
73
- transition: 0.2s ease;
74
-
75
- @media (prefers-color-scheme: dark) {
76
- fill: var(--lake-400);
77
- }
78
- }
79
-
80
- a svg:where(:hover, :focus) {
81
- fill: var(--lake-300);
82
- }
83
-
84
- a.hover svg {
85
- fill: var(--lake-300);
86
- }
87
- }
88
- }
@@ -64,7 +64,7 @@ ol {
64
64
  }
65
65
  }
66
66
 
67
- .tour__minimum {
67
+ .flex-row-wrap {
68
68
  display: flex;
69
69
  flex-flow: row wrap;
70
70
  gap: var(--vinson);
@@ -2,128 +2,95 @@
2
2
  /* #NAV */
3
3
  /*------------------------------------*/
4
4
 
5
- /* TODO: variables */
6
-
7
5
  header {
8
6
  z-index: var(--floor);
9
7
  position: relative;
10
8
  }
11
9
 
12
- .menu__small-button {
13
- margin-block-end: 0;
14
- transform: translate3D(0, 0, 0); /* I need this to hide things */
15
- line-height: 1.5;
16
- height: var(--denali);
17
- overflow: hidden;
18
- z-index: var(--floor);
19
- position: relative;
20
- /* width: calc(100% - 1rem); */
21
- width: 100%;
10
+ .nav {
22
11
  margin-inline: auto;
23
- box-shadow: var(--penumbra);
24
- border: none;
25
- /* Book now colors */
26
- background-color: var(--neutral-800);
27
- color: var(--neutral-300);
28
-
29
- @media (prefers-color-scheme: dark) {
30
- background-color: var(--neutral-300);
31
- color: var(--neutral-800);
32
- }
12
+ max-width: calc(100% - var(--denali));
13
+ padding-block-end: var(--elbrus);
14
+
33
15
  }
34
16
 
35
- .spinning-button {
36
- position: fixed; /* I never like these things but it's needed here */
37
- height: var(--vinson);
38
- line-height: 2;
39
- transition: 2s ease;
40
- margin-block-start: -1rem; /* I dont know why I have to add this something about defaults probably */
17
+ .menu-toggle {
18
+ width: 100%;
19
+ margin: 0;
20
+ border: 1px solid var(--neutral-600);
21
+ border-radius: var(--kosciuszko);
22
+ background-color: var(--neutral-700);
23
+ color: var(--neutral-100);
24
+ padding: 0.75rem 1rem;
25
+ line-height: 1.2;
41
26
  }
42
27
 
43
- nav {
44
- margin: var(--kilimanjaro);
45
- margin-block-start: 0; /* testing slide menu */
46
- transition: 2s ease;
47
- padding-inline-start: var(--kilimanjaro);
48
-
49
- @media (min-width: 40rem) {
50
- max-width: var(--pelican);
51
- margin: 0 auto;
52
- }
53
-
54
- ul {
55
- display: flex;
56
- flex-flow: row wrap;
57
- justify-content: space-between;
58
- margin-block: 0; /* testing slide menu */
59
- padding-block-start: calc(var(--elbrus) / 2); /* 1.25/2= 0.625 */
60
- /* TODO: check if this can be kosciuszko */
61
- list-style: none;
62
- padding-inline-start: 0;
63
- align-items: baseline;
64
-
65
- li {
66
- margin-block-end: 0;
67
- }
68
- }
28
+ .menu-list {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--kilimanjaro);
32
+ align-items: stretch;
33
+ max-height: 0;
34
+ margin-block: 0;
35
+ overflow: hidden;
36
+ opacity: 0;
37
+ transform: translateY(-0.75rem);
38
+ visibility: hidden;
39
+ pointer-events: none;
40
+ transition: var(--fade), visibility 0s linear 320ms;
41
+ padding: 0;
42
+ list-style: none;
69
43
  }
70
44
 
71
- .menu__small {
45
+ .menu-list.is-open {
46
+ max-height: max-content;
47
+ margin-block-start: var(--kosciuszko);
48
+ opacity: 1;
49
+ transform: translateY(0);
50
+ visibility: visible;
51
+ pointer-events: auto;
72
52
  transition: var(--fade);
53
+ }
54
+
55
+ /* TODO: header only has panel color at small size */
56
+
57
+ /*------------------------------------*/
58
+ /* #MIN WIDTH */
59
+ /*------------------------------------*/
73
60
 
74
- button {
61
+ @media (min-width: 40rem) {
62
+ .nav {
75
63
  display: flex;
76
- align-items: center;
64
+ align-items: baseline;
77
65
  justify-content: center;
78
- border-radius: 0;
66
+ padding-block-end: 0;
79
67
  }
80
68
 
81
- nav {
82
- padding-inline-start: 0;
69
+ .menu-toggle {
70
+ display: none;
83
71
  }
84
72
 
85
- ul {
86
- flex-direction: column;
87
- gap: var(--vinson);
88
- z-index: var(--floor);
89
- position: relative;
90
- /* v1.2 keep this untill i know why I used a custom */
91
- /* background-color: hsl(25, 37%, 87.5%); ? why is this custom */
92
- /* box-shadow: 0 0 0 100vmax hsl(25, 37%, 87.5%); ? why is this custom */
93
- background-color: var(--neutral-300);
94
- box-shadow: 0 0 0 100vmax var(--neutral-300);
95
- clip-path: inset(0 -100vmax);
96
-
97
- @media (prefers-color-scheme: dark) {
98
- background-color: var(--neutral-700);
99
- box-shadow: 0 0 0 100vmax var(--neutral-700);
100
- }
101
-
102
- li a {
103
- padding-inline: calc(var(--elbrus) / 2);
104
- padding-block: calc(var(--elbrus) / 4);
105
- text-decoration: underline;
106
- }
107
-
108
- li:first-child {
109
- margin-block-start: 0;
110
- }
111
-
112
- li:last-child {
113
- margin-block-end: var(--kilimanjaro);
114
- }
115
-
116
- .book-now {
117
- margin: 0;
118
- }
73
+ .menu-list {
74
+ display: flex;
75
+ flex-flow: row wrap;
76
+ align-items: stretch;
77
+ justify-content: flex-start;
78
+ gap: var(--kilimanjaro);
79
+ max-height: none;
80
+ overflow: visible;
81
+ opacity: 1;
82
+ transform: none;
83
+ visibility: visible;
84
+ pointer-events: auto;
85
+ transition: none;
86
+ margin-block: 0;
119
87
  }
120
88
  }
121
89
 
122
- .tahoe-city .menu__small ul {
123
- /* * reverts to clean dark scheme */
124
- @media (prefers-color-scheme: light) {
125
- background-color: var(--sand-100);
126
- box-shadow: 0 0 0 100vmax var(--sand-100);
127
- clip-path: inset(0 -100vmax);
90
+ @media (prefers-color-scheme: dark) {
91
+ .menu-toggle {
92
+ background-color: var(--neutral-200);
93
+ color: var(--neutral-800);
94
+ border-color: var(--neutral-300);
128
95
  }
129
- }
96
+ }
@@ -154,46 +154,8 @@
154
154
  /*------------------*/
155
155
  /* #TRANSITIONS */
156
156
  /*------------------*/
157
- --easing: cubic-bezier(0.5, 0, 0.5, 1);
158
- --fade: 0.2s var(--easing);
159
- --slow: 0.5s var(--easing);
160
- }
161
-
162
- /* * this is specifically outside of :root */
163
- /*------------------------------------*/
164
- /* #PANELS */
165
- /*------------------------------------*/
166
-
167
- /* .panel-horizon
168
- .panel-surface
169
- .panel-breeze
170
- .panel-cloud
171
- .panel-storm
172
- .panel-summit
173
- .panel-aurora
174
- .panel-cosmos */
175
-
176
- .south-tahoe {
177
- /* Panels are used to group content and provide visual separation */
178
- /* * I'm not sure this is quite right but working on ideas */
179
- /* .horizon { base level } */
180
- /* Panels are used to group content and provide visual separation */
181
- /* * I'm not sure this is quite right but working on ideas */
182
- /* .horizon { base level } */
183
-
184
- /* .cloud { floating, elevated content } */
185
- --cloud-background-color: var(--lake-100);
186
- --cloud-color: var(--lake-600);
187
- --cloud-border-color: var(--lake-300);
188
-
189
- --cloud-dark-background-color: var(--lake-800);
190
- --cloud-dark-color: var(--lake-200);
191
-
192
- /* .aurora { special, highlighted areas } */
193
- /* --aurora-background-color: var(--neutral-100); */
194
- --aurora-background-color: white;
195
- --aurora-color: var(--neutral-600);
196
-
197
- --aurora-dark-background-color: black;
198
- --aurora-dark-color: var(--neutral-200);
199
- }
157
+ --fade: max-height 320ms ease, opacity 220ms ease,
158
+ transform 320ms ease, margin-block-start 320ms ease;
159
+
160
+ --slow: 0.5s ease;
161
+ }
@@ -2,20 +2,6 @@
2
2
  /* #VISIBILITY */
3
3
  /*------------------*/
4
4
 
5
- .menu__large {
6
- padding-inline: var(--elbrus);
7
-
8
- @media (max-width: 40rem) {
9
- display: none;
10
- }
11
- }
12
-
13
- @media (min-width: 40rem) {
14
- .menu__small {
15
- display: none;
16
- }
17
- }
18
-
19
5
  .possibly-empty:empty {
20
6
  display: none;
21
7
  }
@@ -1,103 +0,0 @@
1
- /*------------------------------------*/
2
- /* #PANELS */
3
- /*------------------------------------*/
4
-
5
- /* Panels are used to group content and provide visual separation */
6
- /* .horizon { base level } */
7
- /* .cloud { floating, elevated content } */
8
- /* .aurora { special, highlighted areas } */
9
-
10
- .cloud {
11
- background-color: var(--neutral-200);
12
- box-shadow: 0 0 0 100vmax var(--neutral-200);
13
- clip-path: inset(0 -100vmax);
14
-
15
- @media (prefers-color-scheme: dark) {
16
- background-color: var(--neutral-700);
17
- box-shadow: 0 0 0 100vmax var(--neutral-700);
18
- color: var(--neutral-200);
19
- }
20
-
21
- /* * additional safety step */
22
- @media (prefers-color-scheme: light) {
23
- button,
24
- .button {
25
- background-color: var(--neutral-100);
26
- border-color: white;
27
- }
28
- }
29
-
30
- /* * fixes color bleed check the tours page */
31
- > *:last-child {
32
- margin-block-end: 0;
33
- }
34
-
35
- .ticket {
36
- background-color: var(--neutral-100);
37
-
38
- @media (prefers-color-scheme: dark) {
39
- background-color: var(--neutral-800);
40
- }
41
- }
42
- }
43
-
44
- .aurora,
45
- .react-aria-Breadcrumbs {
46
- background-color: white;
47
- box-shadow: 0 0 0 100vmax white;
48
- clip-path: inset(0 -100vmax);
49
-
50
- @media (prefers-color-scheme: dark) {
51
- background-color: black;
52
- box-shadow: 0 0 0 100vmax black;
53
- }
54
- }
55
-
56
- .tahoe-city {
57
- .cloud {
58
- background-color: var(--sand-100);
59
- }
60
- }
61
-
62
- .south-tahoe {
63
- .cloud {
64
- background-color: var(--cloud-background-color);
65
- box-shadow: 0 0 0 100vmax var(--cloud-background-color);
66
- clip-path: inset(0 -100vmax);
67
- color: var(--cloud-color);
68
-
69
- @media (prefers-color-scheme: dark) {
70
- background-color: var(--cloud-dark-background-color);
71
- box-shadow: 0 0 0 100vmax var(--cloud-dark-background-color);
72
- color: var(--cloud-dark-color);
73
- }
74
-
75
- a:not(button):not(.button):not(.book-now) {
76
- @media (prefers-color-scheme: dark) {
77
- color: var(--lake-400);
78
- }
79
- }
80
-
81
- button,
82
- .button {
83
- background-color: var(--aurora-background-color);
84
-
85
- @media (prefers-color-scheme: dark) {
86
- background-color: var(--aurora-dark-background-color);
87
- }
88
- }
89
- }
90
-
91
- .aurora {
92
- background-color: var(--aurora-background-color);
93
- box-shadow: 0 0 0 100vmax var(--aurora-background-color);
94
- clip-path: inset(0 -100vmax);
95
- color: var(--aurora-color);
96
-
97
- @media (prefers-color-scheme: dark) {
98
- background-color: var(--aurora-dark-background-color);
99
- box-shadow: 0 0 0 100vmax var(--aurora-dark-background-color);
100
- color: var(--aurora-dark-color);
101
- }
102
- }
103
- }