@buildcanada/components 0.3.3 → 0.3.5

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.
Files changed (145) hide show
  1. package/dist/content/Card/Card.d.ts +62 -0
  2. package/dist/content/Card/Card.d.ts.map +1 -0
  3. package/dist/content/Card/Card.js +45 -0
  4. package/dist/content/Card/Card.scss +281 -0
  5. package/dist/content/Card/index.d.ts +3 -0
  6. package/dist/content/Card/index.d.ts.map +1 -0
  7. package/dist/content/Card/index.js +2 -0
  8. package/dist/content/Hero/Hero.d.ts +28 -0
  9. package/dist/content/Hero/Hero.d.ts.map +1 -0
  10. package/dist/content/Hero/Hero.js +16 -0
  11. package/dist/content/Hero/Hero.scss +150 -0
  12. package/dist/content/Hero/index.d.ts +3 -0
  13. package/dist/content/Hero/index.d.ts.map +1 -0
  14. package/dist/content/Hero/index.js +2 -0
  15. package/dist/content/StatBlock/StatBlock.d.ts +15 -0
  16. package/dist/content/StatBlock/StatBlock.d.ts.map +1 -0
  17. package/dist/content/StatBlock/StatBlock.js +10 -0
  18. package/dist/content/StatBlock/StatBlock.scss +83 -0
  19. package/dist/content/StatBlock/index.d.ts +3 -0
  20. package/dist/content/StatBlock/index.d.ts.map +1 -0
  21. package/dist/content/StatBlock/index.js +2 -0
  22. package/dist/feedback/Dialog/Dialog.d.ts +18 -0
  23. package/dist/feedback/Dialog/Dialog.d.ts.map +1 -0
  24. package/dist/feedback/Dialog/Dialog.js +33 -0
  25. package/dist/feedback/Dialog/Dialog.scss +158 -0
  26. package/dist/feedback/Dialog/index.d.ts +2 -0
  27. package/dist/feedback/Dialog/index.d.ts.map +1 -0
  28. package/dist/feedback/Dialog/index.js +1 -0
  29. package/dist/feedback/PopupForm/PopupForm.d.ts +24 -0
  30. package/dist/feedback/PopupForm/PopupForm.d.ts.map +1 -0
  31. package/dist/feedback/PopupForm/PopupForm.js +13 -0
  32. package/dist/feedback/PopupForm/PopupForm.scss +34 -0
  33. package/dist/feedback/PopupForm/index.d.ts +2 -0
  34. package/dist/feedback/PopupForm/index.d.ts.map +1 -0
  35. package/dist/feedback/PopupForm/index.js +1 -0
  36. package/dist/index.d.ts +21 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +25 -0
  39. package/dist/layout/Container/Container.d.ts +11 -0
  40. package/dist/layout/Container/Container.d.ts.map +1 -0
  41. package/dist/layout/Container/Container.js +7 -0
  42. package/dist/layout/Container/Container.scss +40 -0
  43. package/dist/layout/Container/index.d.ts +3 -0
  44. package/dist/layout/Container/index.d.ts.map +1 -0
  45. package/dist/layout/Container/index.js +2 -0
  46. package/dist/layout/Divider/Divider.d.ts +12 -0
  47. package/dist/layout/Divider/Divider.d.ts.map +1 -0
  48. package/dist/layout/Divider/Divider.js +7 -0
  49. package/dist/layout/Divider/Divider.scss +117 -0
  50. package/dist/layout/Divider/index.d.ts +3 -0
  51. package/dist/layout/Divider/index.d.ts.map +1 -0
  52. package/dist/layout/Divider/index.js +2 -0
  53. package/dist/layout/Grid/Grid.d.ts +24 -0
  54. package/dist/layout/Grid/Grid.d.ts.map +1 -0
  55. package/dist/layout/Grid/Grid.js +11 -0
  56. package/dist/layout/Grid/Grid.scss +81 -0
  57. package/dist/layout/Grid/index.d.ts +3 -0
  58. package/dist/layout/Grid/index.d.ts.map +1 -0
  59. package/dist/layout/Grid/index.js +2 -0
  60. package/dist/layout/Section/Section.d.ts +13 -0
  61. package/dist/layout/Section/Section.d.ts.map +1 -0
  62. package/dist/layout/Section/Section.js +7 -0
  63. package/dist/layout/Section/Section.scss +74 -0
  64. package/dist/layout/Section/index.d.ts +3 -0
  65. package/dist/layout/Section/index.d.ts.map +1 -0
  66. package/dist/layout/Section/index.js +2 -0
  67. package/dist/layout/Stack/Stack.d.ts +18 -0
  68. package/dist/layout/Stack/Stack.d.ts.map +1 -0
  69. package/dist/layout/Stack/Stack.js +7 -0
  70. package/dist/layout/Stack/Stack.scss +61 -0
  71. package/dist/layout/Stack/index.d.ts +3 -0
  72. package/dist/layout/Stack/index.d.ts.map +1 -0
  73. package/dist/layout/Stack/index.js +2 -0
  74. package/dist/navigation/Footer/Footer.d.ts +31 -0
  75. package/dist/navigation/Footer/Footer.d.ts.map +1 -0
  76. package/dist/navigation/Footer/Footer.js +21 -0
  77. package/dist/navigation/Footer/Footer.scss +233 -0
  78. package/dist/navigation/Footer/index.d.ts +3 -0
  79. package/dist/navigation/Footer/index.d.ts.map +1 -0
  80. package/dist/navigation/Footer/index.js +2 -0
  81. package/dist/navigation/Header/Header.d.ts +23 -0
  82. package/dist/navigation/Header/Header.d.ts.map +1 -0
  83. package/dist/navigation/Header/Header.js +16 -0
  84. package/dist/navigation/Header/Header.scss +325 -0
  85. package/dist/navigation/Header/index.d.ts +3 -0
  86. package/dist/navigation/Header/index.d.ts.map +1 -0
  87. package/dist/navigation/Header/index.js +2 -0
  88. package/dist/primitives/Button/Button.d.ts +31 -0
  89. package/dist/primitives/Button/Button.d.ts.map +1 -0
  90. package/dist/primitives/Button/Button.js +36 -0
  91. package/dist/primitives/Button/Button.scss +218 -0
  92. package/dist/primitives/Button/index.d.ts +3 -0
  93. package/dist/primitives/Button/index.d.ts.map +1 -0
  94. package/dist/primitives/Button/index.js +2 -0
  95. package/dist/primitives/Checkbox/Checkbox.d.ts +13 -0
  96. package/dist/primitives/Checkbox/Checkbox.d.ts.map +1 -0
  97. package/dist/primitives/Checkbox/Checkbox.js +10 -0
  98. package/dist/primitives/Checkbox/Checkbox.scss +114 -0
  99. package/dist/primitives/Checkbox/index.d.ts +3 -0
  100. package/dist/primitives/Checkbox/index.d.ts.map +1 -0
  101. package/dist/primitives/Checkbox/index.js +2 -0
  102. package/dist/primitives/TextField/TextField.d.ts +22 -0
  103. package/dist/primitives/TextField/TextField.d.ts.map +1 -0
  104. package/dist/primitives/TextField/TextField.js +14 -0
  105. package/dist/primitives/TextField/TextField.scss +93 -0
  106. package/dist/primitives/TextField/index.d.ts +3 -0
  107. package/dist/primitives/TextField/index.d.ts.map +1 -0
  108. package/dist/primitives/TextField/index.js +2 -0
  109. package/dist/styles/fonts.scss +27 -0
  110. package/dist/styles/main.scss +36 -0
  111. package/dist/styles/tokens.scss +301 -0
  112. package/dist/styles/typography.scss +232 -0
  113. package/package.json +12 -11
  114. package/src/content/Card/Card.stories.tsx +389 -0
  115. package/src/content/Card/index.ts +2 -2
  116. package/src/content/Hero/Hero.stories.tsx +299 -0
  117. package/src/content/Hero/index.ts +2 -2
  118. package/src/content/StatBlock/StatBlock.stories.tsx +331 -0
  119. package/src/content/StatBlock/index.ts +2 -2
  120. package/src/feedback/Dialog/Dialog.stories.tsx +286 -0
  121. package/src/feedback/Dialog/index.ts +1 -1
  122. package/src/feedback/PopupForm/PopupForm.stories.tsx +341 -0
  123. package/src/feedback/PopupForm/PopupForm.tsx +2 -2
  124. package/src/feedback/PopupForm/index.ts +1 -1
  125. package/src/index.ts +15 -15
  126. package/src/layout/Container/Container.stories.tsx +153 -0
  127. package/src/layout/Container/index.ts +2 -2
  128. package/src/layout/Divider/Divider.stories.tsx +204 -0
  129. package/src/layout/Divider/index.ts +2 -2
  130. package/src/layout/Grid/Grid.stories.tsx +263 -0
  131. package/src/layout/Grid/index.ts +2 -2
  132. package/src/layout/Section/Section.stories.tsx +173 -0
  133. package/src/layout/Section/index.ts +2 -2
  134. package/src/layout/Stack/Stack.stories.tsx +342 -0
  135. package/src/layout/Stack/index.ts +2 -2
  136. package/src/navigation/Footer/Footer.stories.tsx +351 -0
  137. package/src/navigation/Footer/index.ts +2 -2
  138. package/src/navigation/Header/Header.stories.tsx +346 -0
  139. package/src/navigation/Header/index.ts +2 -2
  140. package/src/primitives/Button/Button.stories.tsx +300 -0
  141. package/src/primitives/Button/index.ts +2 -2
  142. package/src/primitives/Checkbox/Checkbox.stories.tsx +204 -0
  143. package/src/primitives/Checkbox/index.ts +2 -2
  144. package/src/primitives/TextField/TextField.stories.tsx +265 -0
  145. package/src/primitives/TextField/index.ts +2 -2
@@ -0,0 +1,233 @@
1
+ @use "../../styles/tokens" as *;
2
+ @use "../../styles/typography" as *;
3
+
4
+ /*******************************************************************************
5
+ * Footer Component
6
+ ******************************************************************************/
7
+
8
+ .bc-footer {
9
+ background-color: $charcoal;
10
+ color: $white;
11
+ padding: $space-8 0;
12
+
13
+ /***************************************************************************
14
+ * Inner Container
15
+ ***************************************************************************/
16
+
17
+ &__inner {
18
+ max-width: 1280px;
19
+ margin: 0 auto;
20
+ padding: 0 $space-3;
21
+
22
+ @include md-up {
23
+ padding: 0 $space-5;
24
+ }
25
+ }
26
+
27
+ /***************************************************************************
28
+ * Main Section
29
+ ***************************************************************************/
30
+
31
+ &__main {
32
+ display: grid;
33
+ gap: $space-6;
34
+
35
+ @include md-up {
36
+ grid-template-columns: auto 1fr auto;
37
+ align-items: start;
38
+ }
39
+ }
40
+
41
+ /***************************************************************************
42
+ * Logo
43
+ ***************************************************************************/
44
+
45
+ &__logo {
46
+ img {
47
+ height: 32px;
48
+ width: auto;
49
+ filter: brightness(0) invert(1);
50
+ }
51
+ }
52
+
53
+ /***************************************************************************
54
+ * Navigation
55
+ ***************************************************************************/
56
+
57
+ &__nav {
58
+ @include md-up {
59
+ justify-self: center;
60
+ }
61
+ }
62
+
63
+ &__nav-list {
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ gap: $space-1 $space-3;
67
+ list-style: none;
68
+ margin: 0;
69
+ padding: 0;
70
+ }
71
+
72
+ &__nav-link {
73
+ @include label;
74
+ color: rgba($white, 0.8);
75
+ text-decoration: none;
76
+ transition: color $transition-fast;
77
+
78
+ &:hover {
79
+ color: $white;
80
+ }
81
+ }
82
+
83
+ /***************************************************************************
84
+ * Newsletter
85
+ ***************************************************************************/
86
+
87
+ &__newsletter {
88
+ @include md-up {
89
+ text-align: right;
90
+ max-width: 320px;
91
+ }
92
+ }
93
+
94
+ &__newsletter-heading {
95
+ @include h4;
96
+ color: $white;
97
+ margin: 0 0 calc($space-1 / 2);
98
+ }
99
+
100
+ &__newsletter-description {
101
+ @include body-3;
102
+ color: rgba($white, 0.7);
103
+ margin: 0 0 $space-2;
104
+ }
105
+
106
+ &__newsletter-form {
107
+ display: flex;
108
+ gap: calc($space-1 / 2);
109
+ }
110
+
111
+ &__newsletter-input {
112
+ @include body-3;
113
+ flex: 1;
114
+ min-width: 0;
115
+ padding: $space-1 $space-2;
116
+ border: none;
117
+ border-radius: $radius-none;
118
+ background-color: rgba($white, 0.1);
119
+ color: $white;
120
+
121
+ &::placeholder {
122
+ color: rgba($white, 0.5);
123
+ }
124
+
125
+ &:focus {
126
+ outline: 2px solid $auburn;
127
+ outline-offset: -2px;
128
+ }
129
+ }
130
+
131
+ &__newsletter-button {
132
+ @include button-text-sm;
133
+ padding: $space-1 $space-2;
134
+ background-color: $auburn;
135
+ color: $white;
136
+ border: none;
137
+ border-radius: $radius-none;
138
+ cursor: pointer;
139
+ transition: background-color $transition-fast;
140
+
141
+ &:hover {
142
+ background-color: $auburn-600;
143
+ }
144
+ }
145
+
146
+ /***************************************************************************
147
+ * Bottom Section
148
+ ***************************************************************************/
149
+
150
+ &__bottom {
151
+ display: flex;
152
+ flex-wrap: wrap;
153
+ align-items: center;
154
+ justify-content: space-between;
155
+ gap: $space-2;
156
+ margin-top: $space-6;
157
+ padding-top: $space-4;
158
+ border-top: 1px solid rgba($white, 0.1);
159
+ }
160
+
161
+ /***************************************************************************
162
+ * Social Links
163
+ ***************************************************************************/
164
+
165
+ &__social {
166
+ display: flex;
167
+ gap: $space-2;
168
+ }
169
+
170
+ &__social-link {
171
+ display: flex;
172
+ align-items: center;
173
+ justify-content: center;
174
+ width: 36px;
175
+ height: 36px;
176
+ color: rgba($white, 0.7);
177
+ transition: color $transition-fast;
178
+
179
+ &:hover {
180
+ color: $white;
181
+ }
182
+
183
+ svg {
184
+ width: 20px;
185
+ height: 20px;
186
+ }
187
+ }
188
+
189
+ /***************************************************************************
190
+ * Copyright
191
+ ***************************************************************************/
192
+
193
+ &__copyright {
194
+ @include body-3;
195
+ color: rgba($white, 0.5);
196
+ margin: 0;
197
+ }
198
+
199
+ /***************************************************************************
200
+ * Quote
201
+ ***************************************************************************/
202
+
203
+ &__quote {
204
+ margin-top: $space-6;
205
+ padding-top: $space-4;
206
+ border-top: 1px solid rgba($white, 0.1);
207
+ text-align: center;
208
+ }
209
+
210
+ &__quote-text {
211
+ @include body-1;
212
+ font-style: italic;
213
+ color: rgba($white, 0.8);
214
+ margin: 0 0 $space-1;
215
+ max-width: 640px;
216
+ margin-left: auto;
217
+ margin-right: auto;
218
+
219
+ &::before {
220
+ content: '"';
221
+ }
222
+
223
+ &::after {
224
+ content: '"';
225
+ }
226
+ }
227
+
228
+ &__quote-attribution {
229
+ @include micro;
230
+ color: rgba($white, 0.5);
231
+ font-style: normal;
232
+ }
233
+ }
@@ -0,0 +1,3 @@
1
+ export { Footer, type FooterProps, type FooterLink, type SocialLink } from "./Footer.js";
2
+ export { default } from "./Footer.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/navigation/Footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Footer } from "./Footer.js";
2
+ export { default } from "./Footer.js";
@@ -0,0 +1,23 @@
1
+ export interface NavItem {
2
+ label: string;
3
+ href: string;
4
+ dropdown?: NavItem[];
5
+ }
6
+ export interface HeaderProps {
7
+ logo: React.ReactNode;
8
+ navItems?: NavItem[];
9
+ cta?: {
10
+ label: string;
11
+ href: string;
12
+ };
13
+ announcement?: {
14
+ text: string;
15
+ href?: string;
16
+ variant?: "default" | "auburn";
17
+ };
18
+ className?: string;
19
+ style?: React.CSSProperties;
20
+ }
21
+ export declare function Header({ logo, navItems, cta, announcement, className, style, }: HeaderProps): import("react/jsx-runtime").JSX.Element;
22
+ export default Header;
23
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/navigation/Header/Header.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE;QACF,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;KACjC,CAAA;IACD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC9B;AAED,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,QAAa,EACb,GAAG,EACH,YAAY,EACZ,SAAS,EACT,KAAK,GACR,EAAE,WAAW,2CAsJb;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import cx from "classnames";
3
+ import { useState } from "react";
4
+ export function Header({ logo, navItems = [], cta, announcement, className, style, }) {
5
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
6
+ const [openDropdown, setOpenDropdown] = useState(null);
7
+ const classes = cx("bc-header", className);
8
+ return (_jsxs("header", { className: classes, style: style, children: [announcement && (_jsx("div", { className: cx("bc-header__announcement", {
9
+ "bc-header__announcement--auburn": announcement.variant === "auburn",
10
+ }), children: announcement.href ? (_jsx("a", { href: announcement.href, children: announcement.text })) : (_jsx("span", { children: announcement.text })) })), _jsxs("div", { className: "bc-header__main", children: [_jsx("div", { className: "bc-header__logo", children: logo }), _jsx("nav", { className: "bc-header__nav", "aria-label": "Main navigation", children: _jsx("ul", { className: "bc-header__nav-list", children: navItems.map((item) => (_jsx("li", { className: cx("bc-header__nav-item", {
11
+ "bc-header__nav-item--has-dropdown": item.dropdown,
12
+ }), onMouseEnter: () => item.dropdown && setOpenDropdown(item.label), onMouseLeave: () => item.dropdown && setOpenDropdown(null), children: item.dropdown ? (_jsxs(_Fragment, { children: [_jsxs("button", { className: "bc-header__nav-link bc-header__nav-link--dropdown", "aria-expanded": openDropdown === item.label, "aria-haspopup": "true", children: [item.label, _jsx("svg", { className: "bc-header__dropdown-icon", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }) })] }), openDropdown === item.label && (_jsx("ul", { className: "bc-header__dropdown", children: item.dropdown.map((subItem) => (_jsx("li", { children: _jsx("a", { href: subItem.href, className: "bc-header__dropdown-link", children: subItem.label }) }, subItem.label))) }))] })) : (_jsx("a", { href: item.href, className: "bc-header__nav-link", children: item.label })) }, item.label))) }) }), cta && (_jsx("a", { href: cta.href, className: "bc-header__cta", children: cta.label })), _jsx("button", { className: "bc-header__mobile-toggle", onClick: () => setMobileMenuOpen(!mobileMenuOpen), "aria-expanded": mobileMenuOpen, "aria-label": "Toggle navigation menu", children: _jsx("span", { className: "bc-header__hamburger" }) })] }), _jsx("div", { className: cx("bc-header__mobile-menu", {
13
+ "bc-header__mobile-menu--open": mobileMenuOpen,
14
+ }), children: _jsxs("nav", { "aria-label": "Mobile navigation", children: [_jsx("ul", { className: "bc-header__mobile-nav", children: navItems.map((item) => (_jsxs("li", { children: [_jsx("a", { href: item.href, className: "bc-header__mobile-link", onClick: () => setMobileMenuOpen(false), children: item.label }), item.dropdown && (_jsx("ul", { className: "bc-header__mobile-subnav", children: item.dropdown.map((subItem) => (_jsx("li", { children: _jsx("a", { href: subItem.href, className: "bc-header__mobile-link bc-header__mobile-link--sub", onClick: () => setMobileMenuOpen(false), children: subItem.label }) }, subItem.label))) }))] }, item.label))) }), cta && (_jsx("a", { href: cta.href, className: "bc-header__mobile-cta", onClick: () => setMobileMenuOpen(false), children: cta.label }))] }) })] }));
15
+ }
16
+ export default Header;
@@ -0,0 +1,325 @@
1
+ @use "../../styles/tokens" as *;
2
+ @use "../../styles/typography" as *;
3
+
4
+ /*******************************************************************************
5
+ * Header Component
6
+ ******************************************************************************/
7
+
8
+ .bc-header {
9
+ position: sticky;
10
+ top: 0;
11
+ z-index: $z-sticky;
12
+ background-color: $white;
13
+ border-bottom: 1px solid $border-muted;
14
+
15
+ /***************************************************************************
16
+ * Announcement Banner
17
+ ***************************************************************************/
18
+
19
+ &__announcement {
20
+ background-color: $charcoal;
21
+ color: $white;
22
+ text-align: center;
23
+ padding: calc($space-1 / 2) $space-2;
24
+ @include body-3;
25
+
26
+ a {
27
+ color: inherit;
28
+ text-decoration: underline;
29
+
30
+ &:hover {
31
+ text-decoration: none;
32
+ }
33
+ }
34
+
35
+ &--auburn {
36
+ background-color: $auburn;
37
+ }
38
+ }
39
+
40
+ /***************************************************************************
41
+ * Main Header Row
42
+ ***************************************************************************/
43
+
44
+ &__main {
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: space-between;
48
+ padding: $space-2 $space-3;
49
+ max-width: 1280px;
50
+ margin: 0 auto;
51
+
52
+ @include md-up {
53
+ padding: $space-2 $space-5;
54
+ }
55
+ }
56
+
57
+ /***************************************************************************
58
+ * Logo
59
+ ***************************************************************************/
60
+
61
+ &__logo {
62
+ flex-shrink: 0;
63
+
64
+ a {
65
+ display: block;
66
+ text-decoration: none;
67
+ }
68
+
69
+ img {
70
+ height: 32px;
71
+ width: auto;
72
+
73
+ @include md-up {
74
+ height: 40px;
75
+ }
76
+ }
77
+ }
78
+
79
+ /***************************************************************************
80
+ * Desktop Navigation
81
+ ***************************************************************************/
82
+
83
+ &__nav {
84
+ display: none;
85
+
86
+ @include md-up {
87
+ display: block;
88
+ }
89
+ }
90
+
91
+ &__nav-list {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: $space-1;
95
+ list-style: none;
96
+ margin: 0;
97
+ padding: 0;
98
+ }
99
+
100
+ &__nav-item {
101
+ position: relative;
102
+
103
+ &--has-dropdown {
104
+ // Keep dropdown open when hovering over it
105
+ &:hover .bc-header__dropdown {
106
+ display: block;
107
+ }
108
+ }
109
+ }
110
+
111
+ &__nav-link {
112
+ @include label;
113
+ display: inline-flex;
114
+ align-items: center;
115
+ gap: calc($space-1 / 2);
116
+ padding: $space-1 $space-2;
117
+ color: $text-primary;
118
+ text-decoration: none;
119
+ background: none;
120
+ border: none;
121
+ cursor: pointer;
122
+ transition: color $transition-fast;
123
+
124
+ &:hover {
125
+ color: $auburn;
126
+ }
127
+
128
+ &--dropdown {
129
+ // Visual indicator for dropdown
130
+ }
131
+ }
132
+
133
+ &__dropdown-icon {
134
+ width: 16px;
135
+ height: 16px;
136
+ transition: transform $transition-fast;
137
+
138
+ .bc-header__nav-item:hover & {
139
+ transform: rotate(180deg);
140
+ }
141
+ }
142
+
143
+ /***************************************************************************
144
+ * Dropdown Menu
145
+ ***************************************************************************/
146
+
147
+ &__dropdown {
148
+ display: none;
149
+ position: absolute;
150
+ top: 100%;
151
+ left: 0;
152
+ min-width: 200px;
153
+ background-color: $white;
154
+ border: 1px solid $border-muted;
155
+ box-shadow: $shadow-md;
156
+ list-style: none;
157
+ margin: 0;
158
+ padding: $space-1 0;
159
+ z-index: $z-dropdown;
160
+ }
161
+
162
+ &__dropdown-link {
163
+ @include body-2;
164
+ display: block;
165
+ padding: $space-1 $space-2;
166
+ color: $text-primary;
167
+ text-decoration: none;
168
+ transition: background-color $transition-fast;
169
+
170
+ &:hover {
171
+ background-color: $linen;
172
+ color: $auburn;
173
+ }
174
+ }
175
+
176
+ /***************************************************************************
177
+ * CTA Button
178
+ ***************************************************************************/
179
+
180
+ &__cta {
181
+ @include button-text-sm;
182
+ display: none;
183
+ padding: $space-1 $space-2;
184
+ background-color: $auburn;
185
+ color: $white;
186
+ text-decoration: none;
187
+ border-radius: $radius-none;
188
+ transition: background-color $transition-fast;
189
+
190
+ &:hover {
191
+ background-color: $auburn-600;
192
+ }
193
+
194
+ @include md-up {
195
+ display: inline-block;
196
+ }
197
+ }
198
+
199
+ /***************************************************************************
200
+ * Mobile Toggle
201
+ ***************************************************************************/
202
+
203
+ &__mobile-toggle {
204
+ display: flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ width: 44px;
208
+ height: 44px;
209
+ padding: 0;
210
+ background: none;
211
+ border: none;
212
+ cursor: pointer;
213
+
214
+ @include md-up {
215
+ display: none;
216
+ }
217
+ }
218
+
219
+ &__hamburger {
220
+ position: relative;
221
+ width: 24px;
222
+ height: 2px;
223
+ background-color: $charcoal;
224
+ transition: background-color $transition-fast;
225
+
226
+ &::before,
227
+ &::after {
228
+ content: "";
229
+ position: absolute;
230
+ left: 0;
231
+ width: 100%;
232
+ height: 2px;
233
+ background-color: $charcoal;
234
+ transition: transform $transition-fast;
235
+ }
236
+
237
+ &::before {
238
+ top: -8px;
239
+ }
240
+
241
+ &::after {
242
+ bottom: -8px;
243
+ }
244
+ }
245
+
246
+ &__mobile-toggle[aria-expanded="true"] &__hamburger {
247
+ background-color: transparent;
248
+
249
+ &::before {
250
+ transform: translateY(8px) rotate(45deg);
251
+ }
252
+
253
+ &::after {
254
+ transform: translateY(-8px) rotate(-45deg);
255
+ }
256
+ }
257
+
258
+ /***************************************************************************
259
+ * Mobile Menu
260
+ ***************************************************************************/
261
+
262
+ &__mobile-menu {
263
+ display: none;
264
+ position: absolute;
265
+ top: 100%;
266
+ left: 0;
267
+ right: 0;
268
+ background-color: $white;
269
+ border-bottom: 1px solid $border-muted;
270
+ padding: $space-3;
271
+ box-shadow: $shadow-lg;
272
+
273
+ &--open {
274
+ display: block;
275
+ }
276
+
277
+ @include md-up {
278
+ display: none !important;
279
+ }
280
+ }
281
+
282
+ &__mobile-nav {
283
+ list-style: none;
284
+ margin: 0;
285
+ padding: 0;
286
+ }
287
+
288
+ &__mobile-link {
289
+ @include label;
290
+ display: block;
291
+ padding: $space-2 0;
292
+ color: $text-primary;
293
+ text-decoration: none;
294
+ border-bottom: 1px solid $border-muted;
295
+
296
+ &:hover {
297
+ color: $auburn;
298
+ }
299
+
300
+ &--sub {
301
+ @include body-2;
302
+ padding-left: $space-3;
303
+ font-weight: 400;
304
+ }
305
+ }
306
+
307
+ &__mobile-subnav {
308
+ list-style: none;
309
+ margin: 0;
310
+ padding: 0;
311
+ }
312
+
313
+ &__mobile-cta {
314
+ @include button-text-md;
315
+ display: block;
316
+ width: 100%;
317
+ margin-top: $space-3;
318
+ padding: $space-2;
319
+ background-color: $auburn;
320
+ color: $white;
321
+ text-align: center;
322
+ text-decoration: none;
323
+ border-radius: $radius-none;
324
+ }
325
+ }
@@ -0,0 +1,3 @@
1
+ export { Header, type HeaderProps, type NavItem } from "./Header.js";
2
+ export { default } from "./Header.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/navigation/Header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Header } from "./Header.js";
2
+ export { default } from "./Header.js";
@@ -0,0 +1,31 @@
1
+ import { IconDefinition } from "@fortawesome/free-solid-svg-icons";
2
+ export type ButtonVariant = "solid-auburn" | "solid-charcoal" | "solid-linen" | "outline-auburn" | "outline-charcoal" | "outline-white";
3
+ export type ButtonSize = "sm" | "md" | "lg";
4
+ type ButtonCommonProps = {
5
+ children?: React.ReactNode;
6
+ text?: string;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ variant?: ButtonVariant;
10
+ size?: ButtonSize;
11
+ icon?: IconDefinition | null;
12
+ iconPosition?: "left" | "right";
13
+ fullWidth?: boolean;
14
+ disabled?: boolean;
15
+ ariaLabel?: string;
16
+ dataTrackNote?: string;
17
+ };
18
+ type WithHrefProps = {
19
+ href: string;
20
+ onClick?: never;
21
+ type?: never;
22
+ };
23
+ type WithOnClickProps = {
24
+ onClick?: () => void;
25
+ href?: never;
26
+ type?: "button" | "submit";
27
+ };
28
+ export type ButtonProps = (ButtonCommonProps & WithHrefProps) | (ButtonCommonProps & WithOnClickProps);
29
+ export declare function Button({ variant, size, className, style, href, onClick, text, children, ariaLabel, type, icon, iconPosition, fullWidth, dataTrackNote, disabled, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
30
+ export default Button;
31
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAgB,MAAM,mCAAmC,CAAA;AAEhF,MAAM,MAAM,aAAa,GACnB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,CAAA;AAErB,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE3C,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,IAAI,CAAC,EAAE,KAAK,CAAA;CACf,CAAA;AAED,KAAK,gBAAgB,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,WAAW,GACjB,CAAC,iBAAiB,GAAG,aAAa,CAAC,GACnC,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,CAAA;AAE5C,wBAAgB,MAAM,CAAC,EACnB,OAAwB,EACxB,IAAW,EACX,SAAS,EACT,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,IAAe,EACf,IAAmB,EACnB,YAAsB,EACtB,SAAiB,EACjB,aAAa,EACb,QAAQ,GACX,EAAE,WAAW,2CAwDb;AAED,eAAe,MAAM,CAAA"}