@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,117 @@
1
+ @use "../../styles/tokens" as *;
2
+
3
+ /*******************************************************************************
4
+ * Divider Component
5
+ *
6
+ * Construction line motif - blueprint/draft aesthetic
7
+ ******************************************************************************/
8
+
9
+ .bc-divider {
10
+ border: none;
11
+ background-color: $border-default;
12
+
13
+ /***************************************************************************
14
+ * Orientation Variants
15
+ ***************************************************************************/
16
+
17
+ &--horizontal {
18
+ width: 100%;
19
+ height: 1px;
20
+ }
21
+
22
+ &--vertical {
23
+ width: 1px;
24
+ height: 100%;
25
+ min-height: 24px;
26
+ }
27
+
28
+ /***************************************************************************
29
+ * Style Variants
30
+ ***************************************************************************/
31
+
32
+ &--solid {
33
+ background-color: $border-default;
34
+ }
35
+
36
+ &--dashed {
37
+ background-color: transparent;
38
+
39
+ &.bc-divider--horizontal {
40
+ background-image: linear-gradient(
41
+ to right,
42
+ $border-default 50%,
43
+ transparent 50%
44
+ );
45
+ background-size: 8px 1px;
46
+ background-repeat: repeat-x;
47
+ }
48
+
49
+ &.bc-divider--vertical {
50
+ background-image: linear-gradient(
51
+ to bottom,
52
+ $border-default 50%,
53
+ transparent 50%
54
+ );
55
+ background-size: 1px 8px;
56
+ background-repeat: repeat-y;
57
+ }
58
+ }
59
+
60
+ // Construction line motif - blueprint aesthetic
61
+ &--construction {
62
+ background-color: $charcoal;
63
+ opacity: 0.15;
64
+
65
+ &.bc-divider--horizontal {
66
+ height: 1px;
67
+ }
68
+
69
+ &.bc-divider--vertical {
70
+ width: 1px;
71
+ }
72
+ }
73
+
74
+ /***************************************************************************
75
+ * Spacing Variants
76
+ ***************************************************************************/
77
+
78
+ &--spacing-none {
79
+ margin: 0;
80
+ }
81
+
82
+ &--spacing-sm {
83
+ &.bc-divider--horizontal {
84
+ margin-top: $space-2;
85
+ margin-bottom: $space-2;
86
+ }
87
+
88
+ &.bc-divider--vertical {
89
+ margin-left: $space-2;
90
+ margin-right: $space-2;
91
+ }
92
+ }
93
+
94
+ &--spacing-md {
95
+ &.bc-divider--horizontal {
96
+ margin-top: $space-4;
97
+ margin-bottom: $space-4;
98
+ }
99
+
100
+ &.bc-divider--vertical {
101
+ margin-left: $space-4;
102
+ margin-right: $space-4;
103
+ }
104
+ }
105
+
106
+ &--spacing-lg {
107
+ &.bc-divider--horizontal {
108
+ margin-top: $space-6;
109
+ margin-bottom: $space-6;
110
+ }
111
+
112
+ &.bc-divider--vertical {
113
+ margin-left: $space-6;
114
+ margin-right: $space-6;
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,3 @@
1
+ export { Divider, type DividerProps, type DividerOrientation, type DividerVariant } from "./Divider.js";
2
+ export { default } from "./Divider.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/Divider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AACvG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Divider } from "./Divider.js";
2
+ export { default } from "./Divider.js";
@@ -0,0 +1,24 @@
1
+ export type GridColumns = 1 | 2 | 3 | 4 | 6 | 12;
2
+ export type GridGap = "none" | "sm" | "md" | "lg";
3
+ export interface GridProps {
4
+ children: React.ReactNode;
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ columns?: GridColumns;
8
+ columnsMd?: GridColumns;
9
+ columnsLg?: GridColumns;
10
+ gap?: GridGap;
11
+ as?: "div" | "ul" | "ol";
12
+ }
13
+ export declare function Grid({ children, className, style, columns, columnsMd, columnsLg, gap, as: Component, }: GridProps): import("react/jsx-runtime").JSX.Element;
14
+ export interface GridItemProps {
15
+ children: React.ReactNode;
16
+ className?: string;
17
+ style?: React.CSSProperties;
18
+ span?: number;
19
+ spanMd?: number;
20
+ spanLg?: number;
21
+ }
22
+ export declare function GridItem({ children, className, style, span, spanMd, spanLg, }: GridItemProps): import("react/jsx-runtime").JSX.Element;
23
+ export default Grid;
24
+ //# sourceMappingURL=Grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../src/layout/Grid/Grid.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;AAChD,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEjD,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAA;CAC3B;AAED,wBAAgB,IAAI,CAAC,EACjB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAW,EACX,SAAS,EACT,SAAS,EACT,GAAU,EACV,EAAE,EAAE,SAAiB,GACxB,EAAE,SAAS,2CAeX;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,IAAI,EACJ,MAAM,EACN,MAAM,GACT,EAAE,aAAa,2CAcf;AAED,eAAe,IAAI,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import cx from "classnames";
3
+ export function Grid({ children, className, style, columns = 1, columnsMd, columnsLg, gap = "md", as: Component = "div", }) {
4
+ const classes = cx("bc-grid", `bc-grid--cols-${columns}`, `bc-grid--gap-${gap}`, columnsMd && `bc-grid--cols-md-${columnsMd}`, columnsLg && `bc-grid--cols-lg-${columnsLg}`, className);
5
+ return (_jsx(Component, { className: classes, style: style, children: children }));
6
+ }
7
+ export function GridItem({ children, className, style, span, spanMd, spanLg, }) {
8
+ const classes = cx("bc-grid__item", span && `bc-grid__item--span-${span}`, spanMd && `bc-grid__item--span-md-${spanMd}`, spanLg && `bc-grid__item--span-lg-${spanLg}`, className);
9
+ return (_jsx("div", { className: classes, style: style, children: children }));
10
+ }
11
+ export default Grid;
@@ -0,0 +1,81 @@
1
+ @use "../../styles/tokens" as *;
2
+
3
+ /*******************************************************************************
4
+ * Grid Component
5
+ *
6
+ * Responsive CSS Grid system
7
+ ******************************************************************************/
8
+
9
+ .bc-grid {
10
+ display: grid;
11
+ width: 100%;
12
+
13
+ /***************************************************************************
14
+ * Column Variants
15
+ ***************************************************************************/
16
+
17
+ &--cols-1 { grid-template-columns: repeat(1, 1fr); }
18
+ &--cols-2 { grid-template-columns: repeat(2, 1fr); }
19
+ &--cols-3 { grid-template-columns: repeat(3, 1fr); }
20
+ &--cols-4 { grid-template-columns: repeat(4, 1fr); }
21
+ &--cols-6 { grid-template-columns: repeat(6, 1fr); }
22
+ &--cols-12 { grid-template-columns: repeat(12, 1fr); }
23
+
24
+ @include md-up {
25
+ &--cols-md-1 { grid-template-columns: repeat(1, 1fr); }
26
+ &--cols-md-2 { grid-template-columns: repeat(2, 1fr); }
27
+ &--cols-md-3 { grid-template-columns: repeat(3, 1fr); }
28
+ &--cols-md-4 { grid-template-columns: repeat(4, 1fr); }
29
+ &--cols-md-6 { grid-template-columns: repeat(6, 1fr); }
30
+ &--cols-md-12 { grid-template-columns: repeat(12, 1fr); }
31
+ }
32
+
33
+ @include lg-up {
34
+ &--cols-lg-1 { grid-template-columns: repeat(1, 1fr); }
35
+ &--cols-lg-2 { grid-template-columns: repeat(2, 1fr); }
36
+ &--cols-lg-3 { grid-template-columns: repeat(3, 1fr); }
37
+ &--cols-lg-4 { grid-template-columns: repeat(4, 1fr); }
38
+ &--cols-lg-6 { grid-template-columns: repeat(6, 1fr); }
39
+ &--cols-lg-12 { grid-template-columns: repeat(12, 1fr); }
40
+ }
41
+
42
+ /***************************************************************************
43
+ * Gap Variants
44
+ ***************************************************************************/
45
+
46
+ &--gap-none { gap: 0; }
47
+ &--gap-sm { gap: $space-2; }
48
+ &--gap-md { gap: $space-3; }
49
+ &--gap-lg { gap: $space-4; }
50
+
51
+ /***************************************************************************
52
+ * Grid Item
53
+ ***************************************************************************/
54
+
55
+ &__item {
56
+ &--span-1 { grid-column: span 1; }
57
+ &--span-2 { grid-column: span 2; }
58
+ &--span-3 { grid-column: span 3; }
59
+ &--span-4 { grid-column: span 4; }
60
+ &--span-6 { grid-column: span 6; }
61
+ &--span-12 { grid-column: span 12; }
62
+
63
+ @include md-up {
64
+ &--span-md-1 { grid-column: span 1; }
65
+ &--span-md-2 { grid-column: span 2; }
66
+ &--span-md-3 { grid-column: span 3; }
67
+ &--span-md-4 { grid-column: span 4; }
68
+ &--span-md-6 { grid-column: span 6; }
69
+ &--span-md-12 { grid-column: span 12; }
70
+ }
71
+
72
+ @include lg-up {
73
+ &--span-lg-1 { grid-column: span 1; }
74
+ &--span-lg-2 { grid-column: span 2; }
75
+ &--span-lg-3 { grid-column: span 3; }
76
+ &--span-lg-4 { grid-column: span 4; }
77
+ &--span-lg-6 { grid-column: span 6; }
78
+ &--span-lg-12 { grid-column: span 12; }
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,3 @@
1
+ export { Grid, GridItem, type GridProps, type GridItemProps, type GridColumns, type GridGap } from "./Grid.js";
2
+ export { default } from "./Grid.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/Grid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Grid, GridItem } from "./Grid.js";
2
+ export { default } from "./Grid.js";
@@ -0,0 +1,13 @@
1
+ export type SectionBackground = "white" | "linen" | "charcoal";
2
+ export type SectionSpacing = "none" | "sm" | "md" | "lg" | "xl";
3
+ export interface SectionProps {
4
+ children: React.ReactNode;
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ background?: SectionBackground;
8
+ spacing?: SectionSpacing;
9
+ id?: string;
10
+ }
11
+ export declare function Section({ children, className, style, background, spacing, id, }: SectionProps): import("react/jsx-runtime").JSX.Element;
12
+ export default Section;
13
+ //# sourceMappingURL=Section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../src/layout/Section/Section.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE/D,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,EAAE,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,OAAO,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,UAAoB,EACpB,OAAc,EACd,EAAE,GACL,EAAE,YAAY,2CAad;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import cx from "classnames";
3
+ export function Section({ children, className, style, background = "white", spacing = "lg", id, }) {
4
+ const classes = cx("bc-section", `bc-section--bg-${background}`, `bc-section--spacing-${spacing}`, className);
5
+ return (_jsx("section", { className: classes, style: style, id: id, children: children }));
6
+ }
7
+ export default Section;
@@ -0,0 +1,74 @@
1
+ @use "../../styles/tokens" as *;
2
+
3
+ /*******************************************************************************
4
+ * Section Component
5
+ *
6
+ * Full-width section with background color variants
7
+ ******************************************************************************/
8
+
9
+ .bc-section {
10
+ width: 100%;
11
+
12
+ /***************************************************************************
13
+ * Background Variants
14
+ ***************************************************************************/
15
+
16
+ &--bg-white {
17
+ background-color: $white;
18
+ color: $text-primary;
19
+ }
20
+
21
+ &--bg-linen {
22
+ background-color: $linen;
23
+ color: $text-primary;
24
+ }
25
+
26
+ &--bg-charcoal {
27
+ background-color: $charcoal;
28
+ color: $text-inverse;
29
+ }
30
+
31
+ /***************************************************************************
32
+ * Spacing Variants
33
+ ***************************************************************************/
34
+
35
+ &--spacing-none {
36
+ padding-top: 0;
37
+ padding-bottom: 0;
38
+ }
39
+
40
+ &--spacing-sm {
41
+ padding-top: $space-4;
42
+ padding-bottom: $space-4;
43
+ }
44
+
45
+ &--spacing-md {
46
+ padding-top: $space-6;
47
+ padding-bottom: $space-6;
48
+
49
+ @include md-up {
50
+ padding-top: $space-8;
51
+ padding-bottom: $space-8;
52
+ }
53
+ }
54
+
55
+ &--spacing-lg {
56
+ padding-top: $space-8;
57
+ padding-bottom: $space-8;
58
+
59
+ @include md-up {
60
+ padding-top: $space-10;
61
+ padding-bottom: $space-10;
62
+ }
63
+ }
64
+
65
+ &--spacing-xl {
66
+ padding-top: $space-10;
67
+ padding-bottom: $space-10;
68
+
69
+ @include md-up {
70
+ padding-top: $space-12;
71
+ padding-bottom: $space-12;
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,3 @@
1
+ export { Section, type SectionProps, type SectionBackground, type SectionSpacing } from "./Section.js";
2
+ export { default } from "./Section.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/Section/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AACtG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Section } from "./Section.js";
2
+ export { default } from "./Section.js";
@@ -0,0 +1,18 @@
1
+ export type StackDirection = "vertical" | "horizontal";
2
+ export type StackSpacing = "none" | "xs" | "sm" | "md" | "lg" | "xl";
3
+ export type StackAlign = "start" | "center" | "end" | "stretch";
4
+ export type StackJustify = "start" | "center" | "end" | "between" | "around";
5
+ export interface StackProps {
6
+ children: React.ReactNode;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ direction?: StackDirection;
10
+ spacing?: StackSpacing;
11
+ align?: StackAlign;
12
+ justify?: StackJustify;
13
+ wrap?: boolean;
14
+ as?: "div" | "ul" | "ol" | "nav";
15
+ }
16
+ export declare function Stack({ children, className, style, direction, spacing, align, justify, wrap, as: Component, }: StackProps): import("react/jsx-runtime").JSX.Element;
17
+ export default Stack;
18
+ //# sourceMappingURL=Stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../../src/layout/Stack/Stack.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AACpE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAA;AAC/D,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE5E,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;CACnC;AAED,wBAAgB,KAAK,CAAC,EAClB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,SAAsB,EACtB,OAAc,EACd,KAAiB,EACjB,OAAiB,EACjB,IAAY,EACZ,EAAE,EAAE,SAAiB,GACxB,EAAE,UAAU,2CAgBZ;AAED,eAAe,KAAK,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import cx from "classnames";
3
+ export function Stack({ children, className, style, direction = "vertical", spacing = "md", align = "stretch", justify = "start", wrap = false, as: Component = "div", }) {
4
+ const classes = cx("bc-stack", `bc-stack--${direction}`, `bc-stack--spacing-${spacing}`, `bc-stack--align-${align}`, `bc-stack--justify-${justify}`, { "bc-stack--wrap": wrap }, className);
5
+ return (_jsx(Component, { className: classes, style: style, children: children }));
6
+ }
7
+ export default Stack;
@@ -0,0 +1,61 @@
1
+ @use "../../styles/tokens" as *;
2
+
3
+ /*******************************************************************************
4
+ * Stack Component
5
+ *
6
+ * Flexbox-based layout for consistent spacing
7
+ ******************************************************************************/
8
+
9
+ .bc-stack {
10
+ display: flex;
11
+
12
+ /***************************************************************************
13
+ * Direction Variants
14
+ ***************************************************************************/
15
+
16
+ &--vertical {
17
+ flex-direction: column;
18
+ }
19
+
20
+ &--horizontal {
21
+ flex-direction: row;
22
+ }
23
+
24
+ /***************************************************************************
25
+ * Spacing Variants
26
+ ***************************************************************************/
27
+
28
+ &--spacing-none { gap: 0; }
29
+ &--spacing-xs { gap: calc($space-1 / 2); }
30
+ &--spacing-sm { gap: $space-1; }
31
+ &--spacing-md { gap: $space-2; }
32
+ &--spacing-lg { gap: $space-3; }
33
+ &--spacing-xl { gap: $space-4; }
34
+
35
+ /***************************************************************************
36
+ * Alignment Variants
37
+ ***************************************************************************/
38
+
39
+ &--align-start { align-items: flex-start; }
40
+ &--align-center { align-items: center; }
41
+ &--align-end { align-items: flex-end; }
42
+ &--align-stretch { align-items: stretch; }
43
+
44
+ /***************************************************************************
45
+ * Justify Variants
46
+ ***************************************************************************/
47
+
48
+ &--justify-start { justify-content: flex-start; }
49
+ &--justify-center { justify-content: center; }
50
+ &--justify-end { justify-content: flex-end; }
51
+ &--justify-between { justify-content: space-between; }
52
+ &--justify-around { justify-content: space-around; }
53
+
54
+ /***************************************************************************
55
+ * Wrap
56
+ ***************************************************************************/
57
+
58
+ &--wrap {
59
+ flex-wrap: wrap;
60
+ }
61
+ }
@@ -0,0 +1,3 @@
1
+ export { Stack, type StackProps, type StackDirection, type StackSpacing, type StackAlign, type StackJustify, } from "./Stack.js";
2
+ export { default } from "./Stack.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/Stack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,YAAY,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Stack, } from "./Stack.js";
2
+ export { default } from "./Stack.js";
@@ -0,0 +1,31 @@
1
+ export interface FooterLink {
2
+ label: string;
3
+ href: string;
4
+ }
5
+ export interface SocialLink {
6
+ platform: "twitter" | "linkedin" | "instagram" | "github" | "email" | "bluesky";
7
+ href: string;
8
+ label?: string;
9
+ }
10
+ export interface FooterProps {
11
+ logo?: React.ReactNode;
12
+ links?: FooterLink[];
13
+ socialLinks?: SocialLink[];
14
+ newsletter?: {
15
+ heading: string;
16
+ description?: string;
17
+ placeholder?: string;
18
+ buttonText?: string;
19
+ onSubmit?: (email: string) => void;
20
+ };
21
+ quote?: {
22
+ text: string;
23
+ attribution: string;
24
+ };
25
+ copyright?: string;
26
+ className?: string;
27
+ style?: React.CSSProperties;
28
+ }
29
+ export declare function Footer({ logo, links, socialLinks, newsletter, quote, copyright, className, style, }: FooterProps): import("react/jsx-runtime").JSX.Element;
30
+ export default Footer;
31
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/navigation/Footer/Footer.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,UAAU,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KACrC,CAAA;IACD,KAAK,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC9B;AAmCD,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,KAAU,EACV,WAAgB,EAChB,UAAU,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,KAAK,GACR,EAAE,WAAW,2CAgGb;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import cx from "classnames";
3
+ const socialIcons = {
4
+ twitter: (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" }) })),
5
+ linkedin: (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }) })),
6
+ instagram: (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z" }) })),
7
+ github: (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" }) })),
8
+ email: (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: _jsx("path", { d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) })),
9
+ bluesky: (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565.139 1.908 0 3.08 0 3.768c0 .69.378 5.65.624 6.479.815 2.736 3.713 3.66 6.383 3.364.136-.02.275-.039.415-.056-.138.022-.276.04-.415.056-3.912.58-7.387 2.005-2.83 7.078 5.013 5.19 6.87-1.113 7.823-4.308.953 3.195 2.05 9.271 7.733 4.308 4.267-4.308 1.172-6.498-2.74-7.078a8.741 8.741 0 01-.415-.056c.14.017.279.036.415.056 2.67.297 5.568-.628 6.383-3.364.246-.828.624-5.79.624-6.478 0-.69-.139-1.861-.902-2.206-.659-.298-1.664-.62-4.3 1.24C16.046 4.748 13.087 8.687 12 10.8z" }) })),
10
+ };
11
+ export function Footer({ logo, links = [], socialLinks = [], newsletter, quote, copyright, className, style, }) {
12
+ const classes = cx("bc-footer", className);
13
+ const handleNewsletterSubmit = (e) => {
14
+ e.preventDefault();
15
+ const formData = new FormData(e.currentTarget);
16
+ const email = formData.get("email");
17
+ newsletter?.onSubmit?.(email);
18
+ };
19
+ return (_jsx("footer", { className: classes, style: style, children: _jsxs("div", { className: "bc-footer__inner", children: [_jsxs("div", { className: "bc-footer__main", children: [logo && _jsx("div", { className: "bc-footer__logo", children: logo }), links.length > 0 && (_jsx("nav", { className: "bc-footer__nav", "aria-label": "Footer navigation", children: _jsx("ul", { className: "bc-footer__nav-list", children: links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.href, className: "bc-footer__nav-link", children: link.label }) }, link.label))) }) })), newsletter && (_jsxs("div", { className: "bc-footer__newsletter", children: [_jsx("h4", { className: "bc-footer__newsletter-heading", children: newsletter.heading }), newsletter.description && (_jsx("p", { className: "bc-footer__newsletter-description", children: newsletter.description })), _jsxs("form", { className: "bc-footer__newsletter-form", onSubmit: handleNewsletterSubmit, children: [_jsx("input", { type: "email", name: "email", placeholder: newsletter.placeholder || "Enter your email", className: "bc-footer__newsletter-input", required: true }), _jsx("button", { type: "submit", className: "bc-footer__newsletter-button", children: newsletter.buttonText || "Subscribe" })] })] }))] }), _jsxs("div", { className: "bc-footer__bottom", children: [socialLinks.length > 0 && (_jsx("div", { className: "bc-footer__social", children: socialLinks.map((link) => (_jsx("a", { href: link.href, className: "bc-footer__social-link", "aria-label": link.label || link.platform, children: socialIcons[link.platform] }, link.platform))) })), copyright && (_jsx("p", { className: "bc-footer__copyright", children: copyright }))] }), quote && (_jsxs("div", { className: "bc-footer__quote", children: [_jsx("blockquote", { className: "bc-footer__quote-text", children: quote.text }), _jsxs("cite", { className: "bc-footer__quote-attribution", children: ["\u2014 ", quote.attribution] })] }))] }) }));
20
+ }
21
+ export default Footer;