@hubspot/cms-component-library 0.1.0 → 0.2.0

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 (143) hide show
  1. package/components/componentLibrary/Accordion/AccordionContent/ContentFields.tsx +5 -3
  2. package/components/componentLibrary/Accordion/AccordionItem/StyleFields.tsx +5 -3
  3. package/components/componentLibrary/Accordion/AccordionItem/index.module.scss +2 -2
  4. package/components/componentLibrary/Accordion/AccordionItem/index.tsx +3 -3
  5. package/components/componentLibrary/Accordion/AccordionTitle/ContentFields.tsx +5 -3
  6. package/components/componentLibrary/Accordion/AccordionTitle/index.module.scss +2 -2
  7. package/components/componentLibrary/Accordion/stories/Accordion.stories.tsx +80 -1
  8. package/components/componentLibrary/Accordion/stories/AccordionDecorator.tsx +14 -14
  9. package/components/componentLibrary/Button/ContentFields.tsx +5 -3
  10. package/components/componentLibrary/Button/StyleFields.tsx +5 -3
  11. package/components/componentLibrary/Button/index.module.scss +22 -14
  12. package/components/componentLibrary/Button/index.tsx +6 -6
  13. package/components/componentLibrary/Button/stories/Button.AsButton.stories.tsx +30 -1
  14. package/components/componentLibrary/Button/stories/Button.AsLink.stories.tsx +38 -1
  15. package/components/componentLibrary/Button/stories/ButtonDecorator.tsx +1 -1
  16. package/components/componentLibrary/Card/StyleFields.tsx +5 -3
  17. package/components/componentLibrary/Card/stories/Card.stories.tsx +46 -1
  18. package/components/componentLibrary/Card/stories/CardDecorator.tsx +1 -1
  19. package/components/componentLibrary/Divider/ContentFields.tsx +5 -3
  20. package/components/componentLibrary/Divider/StyleFields.tsx +5 -3
  21. package/components/componentLibrary/Divider/index.module.scss +6 -6
  22. package/components/componentLibrary/Divider/index.tsx +7 -3
  23. package/components/componentLibrary/Divider/stories/Divider.stories.tsx +44 -50
  24. package/components/componentLibrary/Divider/stories/{DividerDecorator.module.css → DividerDecorator.module.scss} +5 -4
  25. package/components/componentLibrary/Divider/stories/DividerDecorator.tsx +1 -1
  26. package/components/componentLibrary/Divider/types.ts +3 -1
  27. package/components/componentLibrary/Drawer/hooks/index.tsx +13 -0
  28. package/components/componentLibrary/Drawer/index.module.scss +94 -0
  29. package/components/componentLibrary/Drawer/index.tsx +131 -0
  30. package/components/componentLibrary/Drawer/llm.txt +416 -0
  31. package/components/componentLibrary/Drawer/stories/Drawer.stories.tsx +512 -0
  32. package/components/componentLibrary/Drawer/stories/DrawerDecorator.module.scss +8 -0
  33. package/components/componentLibrary/Drawer/stories/DrawerDecorator.tsx +18 -0
  34. package/components/componentLibrary/Drawer/types.ts +25 -0
  35. package/components/componentLibrary/Flex/stories/FlexDecorator.tsx +1 -1
  36. package/components/componentLibrary/Flex/types.ts +3 -1
  37. package/components/componentLibrary/Grid/stories/Grid.stories.tsx +454 -152
  38. package/components/componentLibrary/Grid/stories/GridDecorator.tsx +2 -2
  39. package/components/componentLibrary/Heading/ContentFields.tsx +5 -3
  40. package/components/componentLibrary/Heading/StyleFields.tsx +11 -9
  41. package/components/componentLibrary/Heading/index.tsx +3 -3
  42. package/components/componentLibrary/Heading/llm.txt +8 -8
  43. package/components/componentLibrary/Heading/stories/Heading.stories.tsx +3 -3
  44. package/components/componentLibrary/Heading/stories/HeadingDecorator.tsx +1 -1
  45. package/components/componentLibrary/Heading/types.ts +4 -4
  46. package/components/componentLibrary/Icon/ContentFields.tsx +5 -3
  47. package/components/componentLibrary/Icon/stories/Icon.stories.tsx +1 -1
  48. package/components/componentLibrary/Icon/stories/IconDecorator.tsx +1 -1
  49. package/components/componentLibrary/Image/ContentFields.tsx +5 -3
  50. package/components/componentLibrary/Image/index.tsx +4 -4
  51. package/components/componentLibrary/Image/llm.txt +17 -17
  52. package/components/componentLibrary/Image/stories/Image.stories.tsx +61 -18
  53. package/components/componentLibrary/Image/stories/ImageDecorator.tsx +1 -1
  54. package/components/componentLibrary/Image/types.ts +2 -2
  55. package/components/componentLibrary/LanguageSwitcher/ContentFields.tsx +18 -0
  56. package/components/componentLibrary/LanguageSwitcher/LanguageOptions.module.scss +37 -0
  57. package/components/componentLibrary/LanguageSwitcher/LanguageOptions.tsx +65 -0
  58. package/components/componentLibrary/LanguageSwitcher/StyleFields.tsx +48 -0
  59. package/components/componentLibrary/LanguageSwitcher/_dummyData.tsx +247 -0
  60. package/components/componentLibrary/LanguageSwitcher/assets/Globe.tsx +16 -0
  61. package/components/componentLibrary/LanguageSwitcher/index.module.scss +58 -0
  62. package/components/componentLibrary/LanguageSwitcher/index.tsx +125 -0
  63. package/components/componentLibrary/LanguageSwitcher/llm.txt +380 -0
  64. package/components/componentLibrary/LanguageSwitcher/stories/LanguageSwitcher.stories.tsx +349 -0
  65. package/components/componentLibrary/LanguageSwitcher/stories/LanguageSwitcherDecorator.module.scss +5 -0
  66. package/components/componentLibrary/LanguageSwitcher/stories/LanguageSwitcherDecorator.tsx +8 -0
  67. package/components/componentLibrary/LanguageSwitcher/types.ts +48 -0
  68. package/components/componentLibrary/LanguageSwitcher/utils.tsx +38 -0
  69. package/components/componentLibrary/Link/ContentFields.tsx +5 -3
  70. package/components/componentLibrary/Link/StyleFields.tsx +5 -3
  71. package/components/componentLibrary/Link/index.module.scss +10 -0
  72. package/components/componentLibrary/Link/index.tsx +24 -14
  73. package/components/componentLibrary/Link/stories/Link.stories.tsx +35 -5
  74. package/components/componentLibrary/Link/stories/LinkDecorator.tsx +11 -1
  75. package/components/componentLibrary/Link/types.ts +22 -13
  76. package/components/componentLibrary/List/ContentFields.tsx +5 -3
  77. package/components/componentLibrary/List/ListItem/ContentFields.tsx +6 -17
  78. package/components/componentLibrary/List/ListItem/index.module.scss +1 -13
  79. package/components/componentLibrary/List/ListItem/index.tsx +3 -30
  80. package/components/componentLibrary/List/ListItem/types.ts +1 -16
  81. package/components/componentLibrary/List/StyleFields.tsx +15 -18
  82. package/components/componentLibrary/List/index.module.scss +3 -0
  83. package/components/componentLibrary/List/index.tsx +5 -2
  84. package/components/componentLibrary/List/llm.txt +73 -103
  85. package/components/componentLibrary/List/stories/List.stories.tsx +56 -80
  86. package/components/componentLibrary/List/stories/ListDecorator.tsx +3 -6
  87. package/components/componentLibrary/List/types.ts +1 -3
  88. package/components/componentLibrary/Logo/_dummyLogoData.ts +12 -0
  89. package/components/componentLibrary/Logo/assets/hubspot-logo.png +0 -0
  90. package/components/componentLibrary/Logo/index.module.scss +22 -0
  91. package/components/componentLibrary/Logo/index.tsx +73 -0
  92. package/components/componentLibrary/Logo/llm.txt +262 -0
  93. package/components/componentLibrary/Logo/stories/Logo.stories.tsx +88 -0
  94. package/components/componentLibrary/Logo/stories/LogoDecorator.module.scss +10 -0
  95. package/components/componentLibrary/Logo/stories/LogoDecorator.tsx +8 -0
  96. package/components/componentLibrary/Logo/types.tsx +16 -0
  97. package/components/componentLibrary/Menu/ContentFields.tsx +16 -0
  98. package/components/componentLibrary/Menu/MenuItem/Chevron/index.module.scss +6 -0
  99. package/components/componentLibrary/Menu/MenuItem/Chevron/index.tsx +17 -0
  100. package/components/componentLibrary/Menu/MenuItem/index.module.scss +7 -0
  101. package/components/componentLibrary/Menu/MenuItem/index.tsx +266 -0
  102. package/components/componentLibrary/Menu/MenuItem/types.ts +17 -0
  103. package/components/componentLibrary/Menu/NavigationMenu/ContentFields.tsx +20 -0
  104. package/components/componentLibrary/Menu/NavigationMenu/index.tsx +18 -0
  105. package/components/componentLibrary/Menu/NavigationMenu/islands/NavigationMenuIsland.tsx +95 -0
  106. package/components/componentLibrary/Menu/NavigationMenu/islands/index.module.scss +100 -0
  107. package/components/componentLibrary/Menu/NavigationMenu/islands/types.ts +19 -0
  108. package/components/componentLibrary/Menu/NavigationMenu/llm.txt +197 -0
  109. package/components/componentLibrary/Menu/NavigationMenu/stories/NavigationMenu.stories.tsx +286 -0
  110. package/components/componentLibrary/Menu/NavigationMenu/stories/NavigationMenuDecorator.module.scss +15 -0
  111. package/components/componentLibrary/Menu/NavigationMenu/stories/NavigationMenuDecorator.tsx +12 -0
  112. package/components/componentLibrary/Menu/NavigationMenu/types.ts +3 -0
  113. package/components/componentLibrary/Menu/VerticalMenu/ContentFields.tsx +20 -0
  114. package/components/componentLibrary/Menu/VerticalMenu/index.tsx +18 -0
  115. package/components/componentLibrary/Menu/VerticalMenu/islands/index.module.scss +53 -0
  116. package/components/componentLibrary/Menu/VerticalMenu/islands/verticalMenuIsland.tsx +78 -0
  117. package/components/componentLibrary/Menu/VerticalMenu/llm.txt +177 -0
  118. package/components/componentLibrary/Menu/VerticalMenu/stories/VerticalMenu.stories.tsx +242 -0
  119. package/components/componentLibrary/Menu/VerticalMenu/stories/VerticalMenuDecorator.module.scss +19 -0
  120. package/components/componentLibrary/Menu/VerticalMenu/stories/VerticalMenuDecorator.tsx +12 -0
  121. package/components/componentLibrary/Menu/VerticalMenu/types.ts +21 -0
  122. package/components/componentLibrary/Menu/_dummyMenuData.js +1346 -0
  123. package/components/componentLibrary/Menu/types.ts +56 -0
  124. package/components/componentLibrary/Menu/utils/transformMenuData.ts +11 -0
  125. package/components/componentLibrary/_patterns/README.md +15 -17
  126. package/components/componentLibrary/_patterns/checklist-and-examples.md +17 -17
  127. package/components/componentLibrary/_patterns/component-structure.md +21 -23
  128. package/components/componentLibrary/_patterns/css-patterns.md +170 -18
  129. package/components/componentLibrary/_patterns/field-patterns.md +97 -27
  130. package/components/componentLibrary/_patterns/function-declaration-patterns.md +281 -0
  131. package/components/componentLibrary/_patterns/llm-txt.template.md +4 -2
  132. package/components/componentLibrary/_patterns/prop-naming-patterns.md +208 -0
  133. package/components/componentLibrary/_patterns/storybook-patterns.md +25 -8
  134. package/components/componentLibrary/_patterns/typescript-patterns.md +6 -3
  135. package/package.json +4 -2
  136. /package/components/componentLibrary/Button/stories/{ButtonDecorator.module.css → ButtonDecorator.module.scss} +0 -0
  137. /package/components/componentLibrary/Card/stories/{CardDecorator.module.css → CardDecorator.module.scss} +0 -0
  138. /package/components/componentLibrary/Flex/stories/{FlexDecorator.module.css → FlexDecorator.module.scss} +0 -0
  139. /package/components/componentLibrary/Grid/stories/{GridDecorator.module.css → GridDecorator.module.scss} +0 -0
  140. /package/components/componentLibrary/Heading/stories/{HeadingDecorator.module.css → HeadingDecorator.module.scss} +0 -0
  141. /package/components/componentLibrary/Icon/stories/{IconDecorator.module.css → IconDecorator.module.scss} +0 -0
  142. /package/components/componentLibrary/Image/stories/{ImageDecorator.module.css → ImageDecorator.module.scss} +0 -0
  143. /package/components/componentLibrary/Image/stories/assets/{catSmile.jpg → cat-smile.jpg} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
- import Grid from '../index.js';
2
+ import Grid, { GridItem } from '../index.js';
3
3
  import { GridProps } from '../types.js';
4
4
  import { withGridStyles } from './GridDecorator.js';
5
5
  import { SBContainer } from '@sb-utils/SBContainer.js';
@@ -29,12 +29,12 @@ export const Default: Story = {
29
29
  gap: '16px',
30
30
  children: (
31
31
  <>
32
- <SBDemoBox>Box 1</SBDemoBox>
33
- <SBDemoBox>Box 2</SBDemoBox>
34
- <SBDemoBox>Box 3</SBDemoBox>
35
- <SBDemoBox>Box 4</SBDemoBox>
36
- <SBDemoBox>Box 5</SBDemoBox>
37
- <SBDemoBox>Box 6</SBDemoBox>
32
+ <GridItem as={SBDemoBox}>Box 1</GridItem>
33
+ <GridItem as={SBDemoBox}>Box 2</GridItem>
34
+ <GridItem as={SBDemoBox}>Box 3</GridItem>
35
+ <GridItem as={SBDemoBox}>Box 4</GridItem>
36
+ <GridItem as={SBDemoBox}>Box 5</GridItem>
37
+ <GridItem as={SBDemoBox}>Box 6</GridItem>
38
38
  </>
39
39
  ),
40
40
  },
@@ -48,12 +48,12 @@ export const TemplateColumns: Story = {
48
48
  <h4>Equal Columns (repeat)</h4>
49
49
  <p>3 equal columns using repeat(3, 1fr)</p>
50
50
  <Grid templateColumns="repeat(3, 1fr)" gap="16px">
51
- <SBDemoBox>1</SBDemoBox>
52
- <SBDemoBox>2</SBDemoBox>
53
- <SBDemoBox>3</SBDemoBox>
54
- <SBDemoBox>4</SBDemoBox>
55
- <SBDemoBox>5</SBDemoBox>
56
- <SBDemoBox>6</SBDemoBox>
51
+ <GridItem as={SBDemoBox}>1</GridItem>
52
+ <GridItem as={SBDemoBox}>2</GridItem>
53
+ <GridItem as={SBDemoBox}>3</GridItem>
54
+ <GridItem as={SBDemoBox}>4</GridItem>
55
+ <GridItem as={SBDemoBox}>5</GridItem>
56
+ <GridItem as={SBDemoBox}>6</GridItem>
57
57
  </Grid>
58
58
  </SBContainer>
59
59
 
@@ -61,9 +61,9 @@ export const TemplateColumns: Story = {
61
61
  <h4>Fixed and Flexible Columns</h4>
62
62
  <p>200px, auto, 1fr - fixed, content-fit, and flexible</p>
63
63
  <Grid templateColumns="200px auto 1fr" gap="16px">
64
- <SBDemoBox>200px</SBDemoBox>
65
- <SBDemoBox>Auto</SBDemoBox>
66
- <SBDemoBox>1fr</SBDemoBox>
64
+ <GridItem as={SBDemoBox}>200px</GridItem>
65
+ <GridItem as={SBDemoBox}>Auto</GridItem>
66
+ <GridItem as={SBDemoBox}>1fr</GridItem>
67
67
  </Grid>
68
68
  </SBContainer>
69
69
 
@@ -71,11 +71,11 @@ export const TemplateColumns: Story = {
71
71
  <h4>Responsive Columns (auto-fit)</h4>
72
72
  <p>Automatically fits columns, minimum 150px each</p>
73
73
  <Grid templateColumns="repeat(auto-fit, minmax(150px, 1fr))" gap="16px">
74
- <SBDemoBox>1</SBDemoBox>
75
- <SBDemoBox>2</SBDemoBox>
76
- <SBDemoBox>3</SBDemoBox>
77
- <SBDemoBox>4</SBDemoBox>
78
- <SBDemoBox>5</SBDemoBox>
74
+ <GridItem as={SBDemoBox}>1</GridItem>
75
+ <GridItem as={SBDemoBox}>2</GridItem>
76
+ <GridItem as={SBDemoBox}>3</GridItem>
77
+ <GridItem as={SBDemoBox}>4</GridItem>
78
+ <GridItem as={SBDemoBox}>5</GridItem>
79
79
  </Grid>
80
80
  </SBContainer>
81
81
 
@@ -86,9 +86,9 @@ export const TemplateColumns: Story = {
86
86
  templateColumns="repeat(auto-fill, minmax(100px, 1fr))"
87
87
  gap="16px"
88
88
  >
89
- <SBDemoBox>1</SBDemoBox>
90
- <SBDemoBox>2</SBDemoBox>
91
- <SBDemoBox>3</SBDemoBox>
89
+ <GridItem as={SBDemoBox}>1</GridItem>
90
+ <GridItem as={SBDemoBox}>2</GridItem>
91
+ <GridItem as={SBDemoBox}>3</GridItem>
92
92
  </Grid>
93
93
  </SBContainer>
94
94
  </SBContainer>
@@ -107,12 +107,12 @@ export const TemplateRows: Story = {
107
107
  templateRows="repeat(2, 100px)"
108
108
  gap="16px"
109
109
  >
110
- <SBDemoBox>1</SBDemoBox>
111
- <SBDemoBox>2</SBDemoBox>
112
- <SBDemoBox>3</SBDemoBox>
113
- <SBDemoBox>4</SBDemoBox>
114
- <SBDemoBox>5</SBDemoBox>
115
- <SBDemoBox>6</SBDemoBox>
110
+ <GridItem as={SBDemoBox}>1</GridItem>
111
+ <GridItem as={SBDemoBox}>2</GridItem>
112
+ <GridItem as={SBDemoBox}>3</GridItem>
113
+ <GridItem as={SBDemoBox}>4</GridItem>
114
+ <GridItem as={SBDemoBox}>5</GridItem>
115
+ <GridItem as={SBDemoBox}>6</GridItem>
116
116
  </Grid>
117
117
  </SBContainer>
118
118
 
@@ -125,9 +125,9 @@ export const TemplateRows: Story = {
125
125
  gap="16px"
126
126
  style={{ height: '300px' }}
127
127
  >
128
- <SBDemoBox>Header</SBDemoBox>
129
- <SBDemoBox>Main Content (fills space)</SBDemoBox>
130
- <SBDemoBox>Footer</SBDemoBox>
128
+ <GridItem as={SBDemoBox}>Header</GridItem>
129
+ <GridItem as={SBDemoBox}>Main Content (fills space)</GridItem>
130
+ <GridItem as={SBDemoBox}>Footer</GridItem>
131
131
  </Grid>
132
132
  </SBContainer>
133
133
  </SBContainer>
@@ -142,11 +142,11 @@ export const AutoFlow: Story = {
142
142
  <h4>Row Flow (Default)</h4>
143
143
  <p>Items flow horizontally across rows</p>
144
144
  <Grid templateColumns="repeat(3, 1fr)" autoFlow="row" gap="16px">
145
- <SBDemoBox>1</SBDemoBox>
146
- <SBDemoBox>2</SBDemoBox>
147
- <SBDemoBox>3</SBDemoBox>
148
- <SBDemoBox>4</SBDemoBox>
149
- <SBDemoBox>5</SBDemoBox>
145
+ <GridItem as={SBDemoBox}>1</GridItem>
146
+ <GridItem as={SBDemoBox}>2</GridItem>
147
+ <GridItem as={SBDemoBox}>3</GridItem>
148
+ <GridItem as={SBDemoBox}>4</GridItem>
149
+ <GridItem as={SBDemoBox}>5</GridItem>
150
150
  </Grid>
151
151
  </SBContainer>
152
152
 
@@ -154,11 +154,11 @@ export const AutoFlow: Story = {
154
154
  <h4>Column Flow</h4>
155
155
  <p>Items flow vertically down columns</p>
156
156
  <Grid templateRows="repeat(3, 1fr)" autoFlow="column" gap="16px">
157
- <SBDemoBox>1</SBDemoBox>
158
- <SBDemoBox>2</SBDemoBox>
159
- <SBDemoBox>3</SBDemoBox>
160
- <SBDemoBox>4</SBDemoBox>
161
- <SBDemoBox>5</SBDemoBox>
157
+ <GridItem as={SBDemoBox}>1</GridItem>
158
+ <GridItem as={SBDemoBox}>2</GridItem>
159
+ <GridItem as={SBDemoBox}>3</GridItem>
160
+ <GridItem as={SBDemoBox}>4</GridItem>
161
+ <GridItem as={SBDemoBox}>5</GridItem>
162
162
  </Grid>
163
163
  </SBContainer>
164
164
 
@@ -166,11 +166,15 @@ export const AutoFlow: Story = {
166
166
  <h4>Dense Packing</h4>
167
167
  <p>Fills gaps with smaller items</p>
168
168
  <Grid templateColumns="repeat(4, 1fr)" autoFlow="row dense" gap="16px">
169
- <SBDemoBox style={{ gridColumn: 'span 2' }}>1 (spans 2)</SBDemoBox>
170
- <SBDemoBox>2</SBDemoBox>
171
- <SBDemoBox>3</SBDemoBox>
172
- <SBDemoBox>4</SBDemoBox>
173
- <SBDemoBox style={{ gridColumn: 'span 2' }}>5 (spans 2)</SBDemoBox>
169
+ <GridItem as={SBDemoBox} gridColumn="span 2">
170
+ 1 (spans 2)
171
+ </GridItem>
172
+ <GridItem as={SBDemoBox}>2</GridItem>
173
+ <GridItem as={SBDemoBox}>3</GridItem>
174
+ <GridItem as={SBDemoBox}>4</GridItem>
175
+ <GridItem as={SBDemoBox} gridColumn="span 2">
176
+ 5 (spans 2)
177
+ </GridItem>
174
178
  </Grid>
175
179
  </SBContainer>
176
180
  </SBContainer>
@@ -190,9 +194,9 @@ export const AlignItems: Story = {
190
194
  alignItems="stretch"
191
195
  gap="16px"
192
196
  >
193
- <SBDemoBox>1</SBDemoBox>
194
- <SBDemoBox>2</SBDemoBox>
195
- <SBDemoBox>3</SBDemoBox>
197
+ <GridItem as={SBDemoBox}>1</GridItem>
198
+ <GridItem as={SBDemoBox}>2</GridItem>
199
+ <GridItem as={SBDemoBox}>3</GridItem>
196
200
  </Grid>
197
201
  </SBContainer>
198
202
 
@@ -205,9 +209,11 @@ export const AlignItems: Story = {
205
209
  alignItems="start"
206
210
  gap="16px"
207
211
  >
208
- <SBDemoBox>1</SBDemoBox>
209
- <SBDemoBox tall>2</SBDemoBox>
210
- <SBDemoBox>3</SBDemoBox>
212
+ <GridItem as={SBDemoBox}>1</GridItem>
213
+ <GridItem as={SBDemoBox} tall>
214
+ 2
215
+ </GridItem>
216
+ <GridItem as={SBDemoBox}>3</GridItem>
211
217
  </Grid>
212
218
  </SBContainer>
213
219
 
@@ -220,9 +226,11 @@ export const AlignItems: Story = {
220
226
  alignItems="center"
221
227
  gap="16px"
222
228
  >
223
- <SBDemoBox>1</SBDemoBox>
224
- <SBDemoBox tall>2</SBDemoBox>
225
- <SBDemoBox>3</SBDemoBox>
229
+ <GridItem as={SBDemoBox}>1</GridItem>
230
+ <GridItem as={SBDemoBox} tall>
231
+ 2
232
+ </GridItem>
233
+ <GridItem as={SBDemoBox}>3</GridItem>
226
234
  </Grid>
227
235
  </SBContainer>
228
236
 
@@ -235,9 +243,11 @@ export const AlignItems: Story = {
235
243
  alignItems="end"
236
244
  gap="16px"
237
245
  >
238
- <SBDemoBox>1</SBDemoBox>
239
- <SBDemoBox tall>2</SBDemoBox>
240
- <SBDemoBox>3</SBDemoBox>
246
+ <GridItem as={SBDemoBox}>1</GridItem>
247
+ <GridItem as={SBDemoBox} tall>
248
+ 2
249
+ </GridItem>
250
+ <GridItem as={SBDemoBox}>3</GridItem>
241
251
  </Grid>
242
252
  </SBContainer>
243
253
  </SBContainer>
@@ -256,9 +266,9 @@ export const JustifyContent: Story = {
256
266
  gap="16px"
257
267
  style={{ border: '2px dashed #ccc', padding: '16px' }}
258
268
  >
259
- <SBDemoBox>1</SBDemoBox>
260
- <SBDemoBox>2</SBDemoBox>
261
- <SBDemoBox>3</SBDemoBox>
269
+ <GridItem as={SBDemoBox}>1</GridItem>
270
+ <GridItem as={SBDemoBox}>2</GridItem>
271
+ <GridItem as={SBDemoBox}>3</GridItem>
262
272
  </Grid>
263
273
  </SBContainer>
264
274
 
@@ -270,9 +280,9 @@ export const JustifyContent: Story = {
270
280
  gap="16px"
271
281
  style={{ border: '2px dashed #ccc', padding: '16px' }}
272
282
  >
273
- <SBDemoBox>1</SBDemoBox>
274
- <SBDemoBox>2</SBDemoBox>
275
- <SBDemoBox>3</SBDemoBox>
283
+ <GridItem as={SBDemoBox}>1</GridItem>
284
+ <GridItem as={SBDemoBox}>2</GridItem>
285
+ <GridItem as={SBDemoBox}>3</GridItem>
276
286
  </Grid>
277
287
  </SBContainer>
278
288
 
@@ -284,9 +294,9 @@ export const JustifyContent: Story = {
284
294
  gap="16px"
285
295
  style={{ border: '2px dashed #ccc', padding: '16px' }}
286
296
  >
287
- <SBDemoBox>1</SBDemoBox>
288
- <SBDemoBox>2</SBDemoBox>
289
- <SBDemoBox>3</SBDemoBox>
297
+ <GridItem as={SBDemoBox}>1</GridItem>
298
+ <GridItem as={SBDemoBox}>2</GridItem>
299
+ <GridItem as={SBDemoBox}>3</GridItem>
290
300
  </Grid>
291
301
  </SBContainer>
292
302
 
@@ -298,9 +308,9 @@ export const JustifyContent: Story = {
298
308
  gap="16px"
299
309
  style={{ border: '2px dashed #ccc', padding: '16px' }}
300
310
  >
301
- <SBDemoBox>1</SBDemoBox>
302
- <SBDemoBox>2</SBDemoBox>
303
- <SBDemoBox>3</SBDemoBox>
311
+ <GridItem as={SBDemoBox}>1</GridItem>
312
+ <GridItem as={SBDemoBox}>2</GridItem>
313
+ <GridItem as={SBDemoBox}>3</GridItem>
304
314
  </Grid>
305
315
  </SBContainer>
306
316
 
@@ -312,9 +322,9 @@ export const JustifyContent: Story = {
312
322
  gap="16px"
313
323
  style={{ border: '2px dashed #ccc', padding: '16px' }}
314
324
  >
315
- <SBDemoBox>1</SBDemoBox>
316
- <SBDemoBox>2</SBDemoBox>
317
- <SBDemoBox>3</SBDemoBox>
325
+ <GridItem as={SBDemoBox}>1</GridItem>
326
+ <GridItem as={SBDemoBox}>2</GridItem>
327
+ <GridItem as={SBDemoBox}>3</GridItem>
318
328
  </Grid>
319
329
  </SBContainer>
320
330
 
@@ -326,9 +336,9 @@ export const JustifyContent: Story = {
326
336
  gap="16px"
327
337
  style={{ border: '2px dashed #ccc', padding: '16px' }}
328
338
  >
329
- <SBDemoBox>1</SBDemoBox>
330
- <SBDemoBox>2</SBDemoBox>
331
- <SBDemoBox>3</SBDemoBox>
339
+ <GridItem as={SBDemoBox}>1</GridItem>
340
+ <GridItem as={SBDemoBox}>2</GridItem>
341
+ <GridItem as={SBDemoBox}>3</GridItem>
332
342
  </Grid>
333
343
  </SBContainer>
334
344
  </SBContainer>
@@ -342,48 +352,48 @@ export const Gaps: Story = {
342
352
  <SBContainer addBackground>
343
353
  <h4>No Gap</h4>
344
354
  <Grid templateColumns="repeat(3, 1fr)">
345
- <SBDemoBox>1</SBDemoBox>
346
- <SBDemoBox>2</SBDemoBox>
347
- <SBDemoBox>3</SBDemoBox>
348
- <SBDemoBox>4</SBDemoBox>
349
- <SBDemoBox>5</SBDemoBox>
350
- <SBDemoBox>6</SBDemoBox>
355
+ <GridItem as={SBDemoBox}>1</GridItem>
356
+ <GridItem as={SBDemoBox}>2</GridItem>
357
+ <GridItem as={SBDemoBox}>3</GridItem>
358
+ <GridItem as={SBDemoBox}>4</GridItem>
359
+ <GridItem as={SBDemoBox}>5</GridItem>
360
+ <GridItem as={SBDemoBox}>6</GridItem>
351
361
  </Grid>
352
362
  </SBContainer>
353
363
 
354
364
  <SBContainer addBackground>
355
365
  <h4>8px Gap</h4>
356
366
  <Grid templateColumns="repeat(3, 1fr)" gap="8px">
357
- <SBDemoBox>1</SBDemoBox>
358
- <SBDemoBox>2</SBDemoBox>
359
- <SBDemoBox>3</SBDemoBox>
360
- <SBDemoBox>4</SBDemoBox>
361
- <SBDemoBox>5</SBDemoBox>
362
- <SBDemoBox>6</SBDemoBox>
367
+ <GridItem as={SBDemoBox}>1</GridItem>
368
+ <GridItem as={SBDemoBox}>2</GridItem>
369
+ <GridItem as={SBDemoBox}>3</GridItem>
370
+ <GridItem as={SBDemoBox}>4</GridItem>
371
+ <GridItem as={SBDemoBox}>5</GridItem>
372
+ <GridItem as={SBDemoBox}>6</GridItem>
363
373
  </Grid>
364
374
  </SBContainer>
365
375
 
366
376
  <SBContainer addBackground>
367
377
  <h4>16px Gap</h4>
368
378
  <Grid templateColumns="repeat(3, 1fr)" gap="16px">
369
- <SBDemoBox>1</SBDemoBox>
370
- <SBDemoBox>2</SBDemoBox>
371
- <SBDemoBox>3</SBDemoBox>
372
- <SBDemoBox>4</SBDemoBox>
373
- <SBDemoBox>5</SBDemoBox>
374
- <SBDemoBox>6</SBDemoBox>
379
+ <GridItem as={SBDemoBox}>1</GridItem>
380
+ <GridItem as={SBDemoBox}>2</GridItem>
381
+ <GridItem as={SBDemoBox}>3</GridItem>
382
+ <GridItem as={SBDemoBox}>4</GridItem>
383
+ <GridItem as={SBDemoBox}>5</GridItem>
384
+ <GridItem as={SBDemoBox}>6</GridItem>
375
385
  </Grid>
376
386
  </SBContainer>
377
387
 
378
388
  <SBContainer addBackground>
379
389
  <h4>24px Gap</h4>
380
390
  <Grid templateColumns="repeat(3, 1fr)" gap="24px">
381
- <SBDemoBox>1</SBDemoBox>
382
- <SBDemoBox>2</SBDemoBox>
383
- <SBDemoBox>3</SBDemoBox>
384
- <SBDemoBox>4</SBDemoBox>
385
- <SBDemoBox>5</SBDemoBox>
386
- <SBDemoBox>6</SBDemoBox>
391
+ <GridItem as={SBDemoBox}>1</GridItem>
392
+ <GridItem as={SBDemoBox}>2</GridItem>
393
+ <GridItem as={SBDemoBox}>3</GridItem>
394
+ <GridItem as={SBDemoBox}>4</GridItem>
395
+ <GridItem as={SBDemoBox}>5</GridItem>
396
+ <GridItem as={SBDemoBox}>6</GridItem>
387
397
  </Grid>
388
398
  </SBContainer>
389
399
  </SBContainer>
@@ -397,26 +407,26 @@ export const SemanticElements: Story = {
397
407
  <SBContainer addBackground>
398
408
  <h4>As Section</h4>
399
409
  <Grid as="section" templateColumns="repeat(3, 1fr)" gap="16px">
400
- <SBDemoBox>Item 1</SBDemoBox>
401
- <SBDemoBox>Item 2</SBDemoBox>
402
- <SBDemoBox>Item 3</SBDemoBox>
410
+ <GridItem as={SBDemoBox}>Item 1</GridItem>
411
+ <GridItem as={SBDemoBox}>Item 2</GridItem>
412
+ <GridItem as={SBDemoBox}>Item 3</GridItem>
403
413
  </Grid>
404
414
  </SBContainer>
405
415
 
406
416
  <SBContainer addBackground>
407
417
  <h4>As Nav</h4>
408
418
  <Grid as="nav" templateColumns="repeat(3, 1fr)" gap="16px">
409
- <SBDemoBox>Home</SBDemoBox>
410
- <SBDemoBox>About</SBDemoBox>
411
- <SBDemoBox>Contact</SBDemoBox>
419
+ <GridItem as={SBDemoBox}>Home</GridItem>
420
+ <GridItem as={SBDemoBox}>About</GridItem>
421
+ <GridItem as={SBDemoBox}>Contact</GridItem>
412
422
  </Grid>
413
423
  </SBContainer>
414
424
 
415
425
  <SBContainer addBackground>
416
426
  <h4>As Article</h4>
417
427
  <Grid as="article" templateColumns="1fr 2fr" gap="16px">
418
- <SBDemoBox>Sidebar</SBDemoBox>
419
- <SBDemoBox>Main Content</SBDemoBox>
428
+ <GridItem as={SBDemoBox}>Sidebar</GridItem>
429
+ <GridItem as={SBDemoBox}>Main Content</GridItem>
420
430
  </Grid>
421
431
  </SBContainer>
422
432
  </SBContainer>
@@ -430,10 +440,10 @@ export const InlineGrid: Story = {
430
440
  <SBContainer addBackground>
431
441
  <h4>Regular Grid (Block Level)</h4>
432
442
  <p>Before grid container</p>
433
- <Grid templateColumns="repeat(3, 1fr)" gap="8px">
434
- <SBDemoBox>1</SBDemoBox>
435
- <SBDemoBox>2</SBDemoBox>
436
- <SBDemoBox>3</SBDemoBox>
443
+ <Grid templateColumns="repeat(3, 1fr)" gap="8px" marginBlock="16px">
444
+ <GridItem as={SBDemoBox}>1</GridItem>
445
+ <GridItem as={SBDemoBox}>2</GridItem>
446
+ <GridItem as={SBDemoBox}>3</GridItem>
437
447
  </Grid>
438
448
  <p>After grid container</p>
439
449
  </SBContainer>
@@ -443,9 +453,9 @@ export const InlineGrid: Story = {
443
453
  <p>
444
454
  Before grid container{' '}
445
455
  <Grid inline templateColumns="repeat(3, 1fr)" gap="8px">
446
- <SBDemoBox>1</SBDemoBox>
447
- <SBDemoBox>2</SBDemoBox>
448
- <SBDemoBox>3</SBDemoBox>
456
+ <GridItem as={SBDemoBox}>1</GridItem>
457
+ <GridItem as={SBDemoBox}>2</GridItem>
458
+ <GridItem as={SBDemoBox}>3</GridItem>
449
459
  </Grid>{' '}
450
460
  after grid container
451
461
  </p>
@@ -467,10 +477,14 @@ export const LayoutExamples: Story = {
467
477
  gap="16px"
468
478
  style={{ height: '400px' }}
469
479
  >
470
- <SBDemoBox style={{ gridColumn: '1 / -1' }}>Header</SBDemoBox>
471
- <SBDemoBox>Sidebar</SBDemoBox>
472
- <SBDemoBox>Main Content</SBDemoBox>
473
- <SBDemoBox style={{ gridColumn: '1 / -1' }}>Footer</SBDemoBox>
480
+ <GridItem as={SBDemoBox} gridColumn="1 / -1">
481
+ Header
482
+ </GridItem>
483
+ <GridItem as={SBDemoBox}>Sidebar</GridItem>
484
+ <GridItem as={SBDemoBox}>Main Content</GridItem>
485
+ <GridItem as={SBDemoBox} gridColumn="1 / -1">
486
+ Footer
487
+ </GridItem>
474
488
  </Grid>
475
489
  </SBContainer>
476
490
 
@@ -482,13 +496,13 @@ export const LayoutExamples: Story = {
482
496
  templateRows="repeat(2, 150px)"
483
497
  gap="16px"
484
498
  >
485
- <SBDemoBox style={{ gridColumn: 'span 2', gridRow: 'span 2' }}>
499
+ <GridItem as={SBDemoBox} gridColumn="span 2" gridRow="span 2">
486
500
  Featured Article
487
- </SBDemoBox>
488
- <SBDemoBox>Article 2</SBDemoBox>
489
- <SBDemoBox>Article 3</SBDemoBox>
490
- <SBDemoBox>Article 4</SBDemoBox>
491
- <SBDemoBox>Article 5</SBDemoBox>
501
+ </GridItem>
502
+ <GridItem as={SBDemoBox}>Article 2</GridItem>
503
+ <GridItem as={SBDemoBox}>Article 3</GridItem>
504
+ <GridItem as={SBDemoBox}>Article 4</GridItem>
505
+ <GridItem as={SBDemoBox}>Article 5</GridItem>
492
506
  </Grid>
493
507
  </SBContainer>
494
508
  </SBContainer>
@@ -514,12 +528,12 @@ export const ResponsiveGrid: Story = {
514
528
  templateColumnsLg="repeat(3, 1fr)"
515
529
  gap="16px"
516
530
  >
517
- <SBDemoBox>Item 1</SBDemoBox>
518
- <SBDemoBox>Item 2</SBDemoBox>
519
- <SBDemoBox>Item 3</SBDemoBox>
520
- <SBDemoBox>Item 4</SBDemoBox>
521
- <SBDemoBox>Item 5</SBDemoBox>
522
- <SBDemoBox>Item 6</SBDemoBox>
531
+ <GridItem as={SBDemoBox}>Item 1</GridItem>
532
+ <GridItem as={SBDemoBox}>Item 2</GridItem>
533
+ <GridItem as={SBDemoBox}>Item 3</GridItem>
534
+ <GridItem as={SBDemoBox}>Item 4</GridItem>
535
+ <GridItem as={SBDemoBox}>Item 5</GridItem>
536
+ <GridItem as={SBDemoBox}>Item 6</GridItem>
523
537
  </Grid>
524
538
  </SBContainer>
525
539
 
@@ -532,12 +546,12 @@ export const ResponsiveGrid: Story = {
532
546
  gapMd="16px"
533
547
  gapLg="24px"
534
548
  >
535
- <SBDemoBox>1</SBDemoBox>
536
- <SBDemoBox>2</SBDemoBox>
537
- <SBDemoBox>3</SBDemoBox>
538
- <SBDemoBox>4</SBDemoBox>
539
- <SBDemoBox>5</SBDemoBox>
540
- <SBDemoBox>6</SBDemoBox>
549
+ <GridItem as={SBDemoBox}>1</GridItem>
550
+ <GridItem as={SBDemoBox}>2</GridItem>
551
+ <GridItem as={SBDemoBox}>3</GridItem>
552
+ <GridItem as={SBDemoBox}>4</GridItem>
553
+ <GridItem as={SBDemoBox}>5</GridItem>
554
+ <GridItem as={SBDemoBox}>6</GridItem>
541
555
  </Grid>
542
556
  </SBContainer>
543
557
 
@@ -552,11 +566,11 @@ export const ResponsiveGrid: Story = {
552
566
  autoFlowLg="row"
553
567
  gap="16px"
554
568
  >
555
- <SBDemoBox>1</SBDemoBox>
556
- <SBDemoBox>2</SBDemoBox>
557
- <SBDemoBox>3</SBDemoBox>
558
- <SBDemoBox>4</SBDemoBox>
559
- <SBDemoBox>5</SBDemoBox>
569
+ <GridItem as={SBDemoBox}>1</GridItem>
570
+ <GridItem as={SBDemoBox}>2</GridItem>
571
+ <GridItem as={SBDemoBox}>3</GridItem>
572
+ <GridItem as={SBDemoBox}>4</GridItem>
573
+ <GridItem as={SBDemoBox}>5</GridItem>
560
574
  </Grid>
561
575
  </SBContainer>
562
576
 
@@ -571,9 +585,9 @@ export const ResponsiveGrid: Story = {
571
585
  alignItemsLg="start"
572
586
  gap="16px"
573
587
  >
574
- <SBDemoBox>1</SBDemoBox>
575
- <SBDemoBox>2</SBDemoBox>
576
- <SBDemoBox>3</SBDemoBox>
588
+ <GridItem as={SBDemoBox}>1</GridItem>
589
+ <GridItem as={SBDemoBox}>2</GridItem>
590
+ <GridItem as={SBDemoBox}>3</GridItem>
577
591
  </Grid>
578
592
  </SBContainer>
579
593
 
@@ -586,16 +600,304 @@ export const ResponsiveGrid: Story = {
586
600
  templateColumns="1fr"
587
601
  templateColumnsMd="200px 1fr"
588
602
  templateColumnsLg="250px 1fr"
589
- templateRows="auto 1fr auto"
603
+ templateRows="auto auto auto auto"
604
+ templateRowsMd="auto 1fr auto"
590
605
  gap="12px"
591
606
  gapMd="16px"
592
607
  gapLg="24px"
593
608
  style={{ height: '400px' }}
594
609
  >
595
- <SBDemoBox style={{ gridColumn: '1 / -1' }}>Header</SBDemoBox>
596
- <SBDemoBox>Sidebar</SBDemoBox>
597
- <SBDemoBox>Main Content</SBDemoBox>
598
- <SBDemoBox style={{ gridColumn: '1 / -1' }}>Footer</SBDemoBox>
610
+ <GridItem as={SBDemoBox} gridColumn="1 / -1">
611
+ Header
612
+ </GridItem>
613
+ <GridItem as={SBDemoBox}>Sidebar</GridItem>
614
+ <GridItem as={SBDemoBox} style={{ paddingBottom: '32px' }}>
615
+ Main Content
616
+ </GridItem>
617
+ <GridItem as={SBDemoBox} gridColumn="1 / -1">
618
+ Footer
619
+ </GridItem>
620
+ </Grid>
621
+ </SBContainer>
622
+ </SBContainer>
623
+ ),
624
+ };
625
+
626
+ export const GridItemPlacement: Story = {
627
+ name: 'GridItem - Column & Row Placement',
628
+ render: () => (
629
+ <SBContainer flex direction="column" gap="extralarge" minWidth="600px">
630
+ <SBContainer addBackground>
631
+ <h4>Column Spanning</h4>
632
+ <p>Use gridColumn prop to span multiple columns</p>
633
+ <Grid templateColumns="repeat(4, 1fr)" gap="16px">
634
+ <GridItem as={SBDemoBox} gridColumn="span 2">
635
+ Spans 2 columns
636
+ </GridItem>
637
+ <GridItem as={SBDemoBox}>Auto</GridItem>
638
+ <GridItem as={SBDemoBox}>Auto</GridItem>
639
+ <GridItem as={SBDemoBox} gridColumn="span 3">
640
+ Spans 3 columns
641
+ </GridItem>
642
+ <GridItem as={SBDemoBox}>Auto</GridItem>
643
+ </Grid>
644
+ </SBContainer>
645
+
646
+ <SBContainer addBackground>
647
+ <h4>Explicit Placement</h4>
648
+ <p>Use gridColumn and gridRow to place items at specific positions</p>
649
+ <Grid
650
+ templateColumns="repeat(3, 1fr)"
651
+ templateRows="repeat(3, 100px)"
652
+ gap="16px"
653
+ >
654
+ <GridItem as={SBDemoBox} gridColumn="1" gridRow="1">
655
+ 1,1
656
+ </GridItem>
657
+ <GridItem as={SBDemoBox} gridColumn="3" gridRow="1">
658
+ 3,1
659
+ </GridItem>
660
+ <GridItem as={SBDemoBox} gridColumn="2" gridRow="2">
661
+ 2,2 (center)
662
+ </GridItem>
663
+ <GridItem as={SBDemoBox} gridColumn="1" gridRow="3">
664
+ 1,3
665
+ </GridItem>
666
+ <GridItem as={SBDemoBox} gridColumn="3" gridRow="3">
667
+ 3,3
668
+ </GridItem>
669
+ </Grid>
670
+ </SBContainer>
671
+
672
+ <SBContainer addBackground>
673
+ <h4>Line-Based Placement</h4>
674
+ <p>Use line numbers for precise control</p>
675
+ <Grid
676
+ templateColumns="repeat(4, 1fr)"
677
+ templateRows="repeat(2, 100px)"
678
+ gap="16px"
679
+ >
680
+ <GridItem as={SBDemoBox} gridColumn="1 / 3" gridRow="1">
681
+ Columns 1-3
682
+ </GridItem>
683
+ <GridItem as={SBDemoBox} gridColumn="3 / 5" gridRow="1 / 3">
684
+ Columns 3-5, Rows 1-3
685
+ </GridItem>
686
+ <GridItem as={SBDemoBox} gridColumn="1 / 3" gridRow="2">
687
+ Columns 1-3, Row 2
688
+ </GridItem>
689
+ </Grid>
690
+ </SBContainer>
691
+ </SBContainer>
692
+ ),
693
+ };
694
+
695
+ export const GridItemAlignment: Story = {
696
+ name: 'GridItem - Individual Alignment',
697
+ render: () => (
698
+ <SBContainer flex direction="column" gap="extralarge" minWidth="600px">
699
+ <SBContainer addBackground>
700
+ <h4>Align Self</h4>
701
+ <p>Override grid-level alignment for individual items</p>
702
+ <Grid
703
+ templateColumns="repeat(3, 1fr)"
704
+ templateRows="150px"
705
+ alignItems="stretch"
706
+ gap="16px"
707
+ >
708
+ <GridItem as={SBDemoBox} alignSelf="start">
709
+ Start
710
+ </GridItem>
711
+ <GridItem as={SBDemoBox} alignSelf="center">
712
+ Center
713
+ </GridItem>
714
+ <GridItem as={SBDemoBox} alignSelf="end">
715
+ End
716
+ </GridItem>
717
+ </Grid>
718
+ </SBContainer>
719
+
720
+ <SBContainer addBackground>
721
+ <h4>Justify Self</h4>
722
+ <p>Control horizontal alignment within grid cell</p>
723
+ <Grid templateColumns="repeat(3, 200px)" gap="16px">
724
+ <GridItem as={SBDemoBox} justifySelf="start">
725
+ Start
726
+ </GridItem>
727
+ <GridItem as={SBDemoBox} justifySelf="center">
728
+ Center
729
+ </GridItem>
730
+ <GridItem as={SBDemoBox} justifySelf="end">
731
+ End
732
+ </GridItem>
733
+ </Grid>
734
+ </SBContainer>
735
+
736
+ <SBContainer addBackground>
737
+ <h4>Combined Alignment</h4>
738
+ <p>Use both alignSelf and justifySelf together</p>
739
+ <Grid templateColumns="repeat(3, 1fr)" templateRows="150px" gap="16px">
740
+ <GridItem as={SBDemoBox} alignSelf="start" justifySelf="start">
741
+ Top Left
742
+ </GridItem>
743
+ <GridItem as={SBDemoBox} alignSelf="center" justifySelf="center">
744
+ Center
745
+ </GridItem>
746
+ <GridItem as={SBDemoBox} alignSelf="end" justifySelf="end">
747
+ Bottom Right
748
+ </GridItem>
749
+ </Grid>
750
+ </SBContainer>
751
+ </SBContainer>
752
+ ),
753
+ };
754
+
755
+ export const GridItemResponsive: Story = {
756
+ name: 'GridItem - Responsive Positioning',
757
+ render: () => (
758
+ <SBContainer flex direction="column" gap="extralarge" minWidth="600px">
759
+ <SBContainer addBackground>
760
+ <h4>Responsive Spanning</h4>
761
+ <p>
762
+ Mobile: full width | Tablet: spans 2 cols | Desktop: single column
763
+ </p>
764
+ <p style={{ fontSize: '12px', color: '#666' }}>
765
+ Resize browser to see changes
766
+ </p>
767
+ <Grid
768
+ templateColumns="1fr"
769
+ templateColumnsMd="repeat(3, 1fr)"
770
+ templateColumnsLg="repeat(4, 1fr)"
771
+ gap="16px"
772
+ >
773
+ <GridItem
774
+ as={SBDemoBox}
775
+ gridColumn="1"
776
+ gridColumnMd="span 2"
777
+ gridColumnLg="span 1"
778
+ >
779
+ Responsive Span
780
+ </GridItem>
781
+ <GridItem as={SBDemoBox}>Item 2</GridItem>
782
+ <GridItem as={SBDemoBox}>Item 3</GridItem>
783
+ <GridItem as={SBDemoBox}>Item 4</GridItem>
784
+ </Grid>
785
+ </SBContainer>
786
+
787
+ <SBContainer addBackground>
788
+ <h4>Responsive Position Changes</h4>
789
+ <p>Items change position at different breakpoints</p>
790
+ <Grid
791
+ templateColumns="1fr"
792
+ templateColumnsMd="repeat(2, 1fr)"
793
+ templateColumnsLg="repeat(3, 1fr)"
794
+ gap="16px"
795
+ >
796
+ <GridItem
797
+ as={SBDemoBox}
798
+ gridColumn="1"
799
+ gridColumnMd="2"
800
+ gridColumnLg="1"
801
+ >
802
+ Position changes
803
+ </GridItem>
804
+ <GridItem
805
+ as={SBDemoBox}
806
+ gridColumn="1"
807
+ gridColumnMd="1"
808
+ gridColumnLg="3"
809
+ >
810
+ Also repositions
811
+ </GridItem>
812
+ <GridItem as={SBDemoBox}>Auto placed</GridItem>
813
+ </Grid>
814
+ </SBContainer>
815
+
816
+ <SBContainer addBackground>
817
+ <h4>Responsive Alignment</h4>
818
+ <p>Alignment changes at different breakpoints</p>
819
+ <Grid templateColumns="repeat(3, 1fr)" templateRows="120px" gap="16px">
820
+ <GridItem
821
+ as={SBDemoBox}
822
+ alignSelf="start"
823
+ alignSelfMd="center"
824
+ alignSelfLg="end"
825
+ >
826
+ Changes alignment
827
+ </GridItem>
828
+ <GridItem
829
+ as={SBDemoBox}
830
+ justifySelf="start"
831
+ justifySelfMd="center"
832
+ justifySelfLg="end"
833
+ >
834
+ Shifts horizontally
835
+ </GridItem>
836
+ <GridItem as={SBDemoBox}>Regular item</GridItem>
837
+ </Grid>
838
+ </SBContainer>
839
+ </SBContainer>
840
+ ),
841
+ };
842
+
843
+ export const GridItemWithComponents: Story = {
844
+ name: 'GridItem - With Components (as prop)',
845
+ render: () => (
846
+ <SBContainer flex direction="column" gap="extralarge" minWidth="600px">
847
+ <SBContainer addBackground>
848
+ <h4>GridItem as Semantic Elements</h4>
849
+ <p>Use the `as` prop to render GridItem as different HTML elements</p>
850
+ <Grid as="section" templateColumns="repeat(2, 1fr)" gap="16px">
851
+ <GridItem as="article">
852
+ <div
853
+ style={{
854
+ padding: '16px',
855
+ background: '#f0f0f0',
856
+ borderRadius: '4px',
857
+ }}
858
+ >
859
+ Article element
860
+ </div>
861
+ </GridItem>
862
+ <GridItem as="aside">
863
+ <div
864
+ style={{
865
+ padding: '16px',
866
+ background: '#f0f0f0',
867
+ borderRadius: '4px',
868
+ }}
869
+ >
870
+ Aside element
871
+ </div>
872
+ </GridItem>
873
+ <GridItem as="header" gridColumn="1 / -1">
874
+ <div
875
+ style={{
876
+ padding: '16px',
877
+ background: '#f0f0f0',
878
+ borderRadius: '4px',
879
+ }}
880
+ >
881
+ Header element (full width)
882
+ </div>
883
+ </GridItem>
884
+ </Grid>
885
+ </SBContainer>
886
+
887
+ <SBContainer addBackground>
888
+ <h4>GridItem as Component</h4>
889
+ <p>Use GridItem with `as` prop to render as SBDemoBox component</p>
890
+ <Grid templateColumns="repeat(3, 1fr)" gap="16px">
891
+ <GridItem as={SBDemoBox} gridColumn="span 2">
892
+ GridItem as SBDemoBox (spans 2 columns)
893
+ </GridItem>
894
+ <GridItem as={SBDemoBox}>
895
+ GridItem as SBDemoBox (auto-placed)
896
+ </GridItem>
897
+ <GridItem as={SBDemoBox}>GridItem as SBDemoBox</GridItem>
898
+ <GridItem as={SBDemoBox} gridColumn="2 / 4">
899
+ GridItem as SBDemoBox (columns 2-4)
900
+ </GridItem>
599
901
  </Grid>
600
902
  </SBContainer>
601
903
  </SBContainer>