braid-design-system 34.1.0 → 34.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 (58) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/dist/color-mode/query-param.d.cts +1 -1
  3. package/dist/color-mode/query-param.d.mts +1 -1
  4. package/dist/css.cjs +3 -2
  5. package/dist/css.d.cts +4 -0
  6. package/dist/css.d.mts +4 -0
  7. package/dist/css.mjs +3 -2
  8. package/dist/lib/components/Badge/Badge.cjs +3 -1
  9. package/dist/lib/components/Badge/Badge.d.cts +2 -0
  10. package/dist/lib/components/Badge/Badge.d.mts +2 -0
  11. package/dist/lib/components/Badge/Badge.mjs +3 -1
  12. package/dist/lib/components/Drawer/Drawer.d.cts +1 -1
  13. package/dist/lib/components/Drawer/Drawer.d.mts +1 -1
  14. package/dist/lib/components/MenuRenderer/MenuRenderer.cjs +1 -1
  15. package/dist/lib/components/MenuRenderer/MenuRenderer.mjs +1 -1
  16. package/dist/lib/components/private/Modal/Modal.css.cjs +20 -3
  17. package/dist/lib/components/private/Modal/Modal.css.mjs +18 -5
  18. package/dist/lib/components/private/Modal/ModalContent.cjs +131 -67
  19. package/dist/lib/components/private/Modal/ModalContent.d.cts +9 -3
  20. package/dist/lib/components/private/Modal/ModalContent.d.mts +9 -3
  21. package/dist/lib/components/private/Modal/ModalContent.mjs +134 -70
  22. package/dist/lib/components/private/ScrollContainer/ScrollContainer.cjs +25 -6
  23. package/dist/lib/components/private/ScrollContainer/ScrollContainer.css.cjs +14 -6
  24. package/dist/lib/components/private/ScrollContainer/ScrollContainer.css.mjs +15 -7
  25. package/dist/lib/components/private/ScrollContainer/ScrollContainer.mjs +25 -6
  26. package/dist/lib/components/private/scrollbars.css.cjs +27 -0
  27. package/dist/lib/components/private/scrollbars.css.mjs +26 -0
  28. package/dist/lib/playroom/snippets/BrandedContainer.cjs +16 -0
  29. package/dist/lib/playroom/snippets/BrandedContainer.mjs +15 -0
  30. package/dist/lib/playroom/snippets/CardList.cjs +10 -0
  31. package/dist/lib/playroom/snippets/CardList.mjs +9 -0
  32. package/dist/lib/playroom/snippets/CompactPage.cjs +10 -0
  33. package/dist/lib/playroom/snippets/CompactPage.mjs +9 -0
  34. package/dist/lib/playroom/snippets/DividedList.cjs +10 -0
  35. package/dist/lib/playroom/snippets/DividedList.mjs +9 -0
  36. package/dist/lib/playroom/snippets/Form.cjs +14 -0
  37. package/dist/lib/playroom/snippets/Form.mjs +13 -0
  38. package/dist/lib/playroom/snippets/SpaciousPage.cjs +10 -0
  39. package/dist/lib/playroom/snippets/SpaciousPage.mjs +9 -0
  40. package/dist/lib/playroom/snippets/StandardPage.cjs +10 -0
  41. package/dist/lib/playroom/snippets/StandardPage.mjs +9 -0
  42. package/dist/lib/playroom/snippets/StandardSection.cjs +10 -0
  43. package/dist/lib/playroom/snippets/StandardSection.mjs +9 -0
  44. package/dist/lib/playroom/snippets/SteppedSection.cjs +10 -0
  45. package/dist/lib/playroom/snippets/SteppedSection.mjs +9 -0
  46. package/dist/lib/playroom/snippets/TabbedSection.cjs +10 -0
  47. package/dist/lib/playroom/snippets/TabbedSection.mjs +9 -0
  48. package/dist/lib/playroom/snippets/TableSection.cjs +10 -0
  49. package/dist/lib/playroom/snippets/TableSection.mjs +9 -0
  50. package/dist/lib/playroom/snippets.cjs +22 -4
  51. package/dist/lib/playroom/snippets.mjs +108 -90
  52. package/dist/lib/themes/baseTokens/nvl.cjs +1 -1
  53. package/dist/lib/themes/baseTokens/nvl.mjs +1 -1
  54. package/package.json +3 -4
  55. package/dist/lib/playroom/snippets/layouts.cjs +0 -22
  56. package/dist/lib/playroom/snippets/layouts.mjs +0 -21
  57. package/dist/lib/playroom/snippets/sections.cjs +0 -59
  58. package/dist/lib/playroom/snippets/sections.mjs +0 -58
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-design-system",
3
- "version": "34.1.0",
3
+ "version": "34.2.0",
4
4
  "description": "Themeable design system for the SEEK Group",
5
5
  "homepage": "https://seek-oss.github.io/braid-design-system/",
6
6
  "bugs": {
@@ -105,7 +105,7 @@
105
105
  ],
106
106
  "dependencies": {
107
107
  "@capsizecss/core": "^4.1.2",
108
- "@capsizecss/metrics": "^3.0.0",
108
+ "@capsizecss/metrics": "^4.0.0",
109
109
  "@capsizecss/vanilla-extract": "^2.0.4",
110
110
  "@floating-ui/react-dom": "^2.1.6",
111
111
  "@vanilla-extract/css": "^1.9.2",
@@ -140,13 +140,11 @@
140
140
  "@testing-library/user-event": "^14.4.3",
141
141
  "@types/autosuggest-highlight": "^3.1.1",
142
142
  "@types/babel__core": "^7.20.1",
143
- "@types/gradient-parser": "^0.1.5",
144
143
  "@types/lodash.curry": "^4.1.9",
145
144
  "@types/node": "^22.16.0",
146
145
  "@types/react": "^19.1.8",
147
146
  "@types/react-dom": "^19.1.6",
148
147
  "@types/sanitize-html": "^2.13.0",
149
- "@types/testing-library__jest-dom": "^5.9.1",
150
148
  "@types/throttle-debounce": "^5.0.2",
151
149
  "@vanilla-extract/rollup-plugin": "^1.5.1",
152
150
  "babel-plugin-macros": "^3.1.0",
@@ -163,6 +161,7 @@
163
161
  "react": "^19.1.0",
164
162
  "react-dom": "^19.1.0",
165
163
  "sanitize-html": "^2.12.1",
164
+ "skott": "^0.32.1",
166
165
  "storybook": "^10.2.7",
167
166
  "svgo": "^2.8.0",
168
167
  "title-case": "^3.0.3",
@@ -1,22 +0,0 @@
1
-
2
- //#region src/lib/playroom/snippets/layouts.ts
3
- const snippets = [
4
- {
5
- group: "Layouts",
6
- name: "Standard Page",
7
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xxlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"2\">Standard Page</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with{\" \"}\n <Strong>xxlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>medium PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text>\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>standard Text</Strong> and grouping with a{\" \"}\n <Strong>medium Stack</Strong>.\n </Text>\n\n <Text>Use this layout as a starting point.</Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
8
- },
9
- {
10
- group: "Layouts",
11
- name: "Compact Page",
12
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"2\">Compact Page</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with{\" \"}\n <Strong>xlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>medium PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text>\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>standard Text</Strong> and grouping with a{\" \"}\n <Strong>medium Stack</Strong>.\n </Text>\n\n <Text>\n Use this layout as a starting point where information density needs to\n be optimised.\n </Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
13
- },
14
- {
15
- group: "Layouts",
16
- name: "Spacious Page",
17
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xxxlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"large\">\n <Stack space=\"large\">\n <Heading level=\"1\">Spacious Page</Heading>\n\n <Text size=\"large\">\n Combines a <Strong>Heading level 1</Strong> with{\" \"}\n <Strong>xxxlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>large PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text size=\"large\">\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>large Text</Strong> and grouping with a{\" \"}\n <Strong>large Stack</Strong>.\n </Text>\n\n <Text size=\"large\">\n Use this layout for landing pages and larger form content.\n </Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
18
- }
19
- ];
20
-
21
- //#endregion
22
- exports.snippets = snippets;
@@ -1,21 +0,0 @@
1
- //#region src/lib/playroom/snippets/layouts.ts
2
- const snippets = [
3
- {
4
- group: "Layouts",
5
- name: "Standard Page",
6
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xxlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"2\">Standard Page</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with{\" \"}\n <Strong>xxlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>medium PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text>\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>standard Text</Strong> and grouping with a{\" \"}\n <Strong>medium Stack</Strong>.\n </Text>\n\n <Text>Use this layout as a starting point.</Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
7
- },
8
- {
9
- group: "Layouts",
10
- name: "Compact Page",
11
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"2\">Compact Page</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with{\" \"}\n <Strong>xlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>medium PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text>\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>standard Text</Strong> and grouping with a{\" \"}\n <Strong>medium Stack</Strong>.\n </Text>\n\n <Text>\n Use this layout as a starting point where information density needs to\n be optimised.\n </Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"medium\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
12
- },
13
- {
14
- group: "Layouts",
15
- name: "Spacious Page",
16
- code: "<Page footer={<PlaceholderFooter />} footerPosition=\"belowFold\">\n <Stack space=\"xxxlarge\">\n <PlaceholderHeader />\n\n <PageBlock width=\"large\">\n <Stack space=\"large\">\n <Heading level=\"1\">Spacious Page</Heading>\n\n <Text size=\"large\">\n Combines a <Strong>Heading level 1</Strong> with{\" \"}\n <Strong>xxxlarge Stack</Strong> spacing between sections, where each\n section uses a <Strong>large PageBlock</Strong> to establish content\n max width and consistent screen gutters.\n </Text>\n\n <Text size=\"large\">\n If providing text immediately below the Heading, consider using{\" \"}\n <Strong>large Text</Strong> and grouping with a{\" \"}\n <Strong>large Stack</Strong>.\n </Text>\n\n <Text size=\"large\">\n Use this layout for landing pages and larger form content.\n </Text>\n </Stack>\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={300} />\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={250} />\n </PageBlock>\n\n <PageBlock width=\"large\">\n <Placeholder label=\"Section\" height={400} />\n </PageBlock>\n </Stack>\n</Page>"
17
- }
18
- ];
19
-
20
- //#endregion
21
- export { snippets };
@@ -1,59 +0,0 @@
1
-
2
- //#region src/lib/playroom/snippets/sections.ts
3
- const snippets = [
4
- {
5
- group: "Sections",
6
- name: "Standard Section",
7
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text tone=\"secondary\">\n Subtitle (optional, consider using secondary tone to avoid clashing with\n content below)\n </Text>\n </Stack>\n\n <Text>\n Combines a <Strong>Heading level 3</Strong> with a{\" \"}\n <Strong>medium Stack</Strong> spacing content groups within the section.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis\n cursus quam nec volutpat. In hac habitasse platea dictumst. Praesent\n egestas erat id mollis imperdiet. Vestibulum non commodo nisi, sed tempus\n magna. Duis a malesuada diam.\n </Text>\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
8
- },
9
- {
10
- group: "Sections",
11
- name: "Card list",
12
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n <Stack component=\"ul\" space=\"small\">\n {[\n {\n title: \"Item 1\",\n subTitle: \"Ea proident nulla veniam\",\n description: \"Lorem ipsum\",\n date: \"2d ago\",\n },\n {\n title: \"Item 2\",\n subTitle: \"Occaecat ad sunt elit\",\n description: \"Consectetur adipiscing\",\n date: \"6d ago\",\n },\n {\n title: \"Item 3\",\n subTitle: \"Commodo exercitation nisi laborum\",\n description: \"Vel odio\",\n date: \"3w ago\",\n },\n ].map((item) => (\n <Box component=\"li\" key={item.title}>\n <Card component=\"article\">\n <Stack space=\"medium\">\n <Stack space=\"small\">\n <Heading level=\"4\">{item.title}</Heading>\n <Text>{item.subTitle}</Text>\n </Stack>\n <Text>{item.description}</Text>\n <Text tone=\"secondary\">{item.date}</Text>\n </Stack>\n </Card>\n </Box>\n ))}\n </Stack>\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
13
- },
14
- {
15
- group: "Sections",
16
- name: "Divided list",
17
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n {[\n {\n title: \"Item 1\",\n description: \"Lorem ipsum\",\n },\n {\n title: \"Item 2\",\n description: \"Consectetur adipiscing\",\n },\n {\n title: \"Item 3\",\n description: \"Vel odio\",\n },\n ].map((item) => (\n <>\n <Columns space=\"small\">\n <Column>\n <Stack space=\"small\">\n <Text component=\"h4\" weight=\"strong\">\n {item.title}\n </Text>\n <Text tone=\"secondary\">{item.description}</Text>\n </Stack>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconEdit />}\n label=\"Edit\"\n />\n </Column>\n </Columns>\n <Divider />\n </>\n ))}\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
18
- },
19
- {
20
- group: "Sections",
21
- name: "Branded container",
22
- description: "Full bleed",
23
- code: "<Box background=\"brand\" paddingY=\"xlarge\">\n <PageBlock width=\"medium\">\n <Stack space=\"large\">\n <Heading level=\"2\">Heading</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with a{\" \"}\n <Strong>large Stack</Strong> spacing content groups within the section.\n <br />\n Uses a <Strong>PageBlock</Strong> inside the section to maintain screen\n gutters on small screens.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis\n cursus quam nec volutpat. In hac habitasse platea dictumst. Praesent\n egestas erat id mollis imperdiet. Vestibulum non commodo nisi, sed\n tempus magna. Duis a malesuada diam.\n </Text>\n </Stack>\n </PageBlock>\n</Box>"
24
- },
25
- {
26
- group: "Sections",
27
- name: "Branded container",
28
- description: "Rounded from desktop (full bleed below)",
29
- code: "<Box paddingX={{ desktop: \"gutter\" }}>\n <ContentBlock width=\"large\">\n <Box\n background=\"brand\"\n paddingY=\"xlarge\"\n borderRadius={{ desktop: \"xlarge\" }}\n >\n <PageBlock width=\"medium\">\n <Stack space=\"large\">\n <Heading level=\"2\">Heading</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with a{\" \"}\n <Strong>large Stack</Strong> spacing content groups within the\n section.\n <br />\n Uses a <Strong>PageBlock</Strong> inside the section to maintain\n screen gutters on small screens.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In\n convallis cursus quam nec volutpat. In hac habitasse platea\n dictumst. Praesent egestas erat id mollis imperdiet. Vestibulum non\n commodo nisi, sed tempus magna. Duis a malesuada diam.\n </Text>\n </Stack>\n </PageBlock>\n </Box>\n </ContentBlock>\n</Box>"
30
- },
31
- {
32
- group: "Sections",
33
- name: "Form (basic)",
34
- code: "<PageBlock width=\"medium\">\n <Stack space=\"xlarge\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text>\n For forms with minimal or no validation as errors will impact layout.\n </Text>\n\n <Text>\n Uses a <Strong>large Stack</Strong> for fields, with a{\" \"}\n <Strong>xlarge Stack</Strong> separating the actions from the form.\n </Text>\n </Stack>\n\n <Stack space=\"large\">\n <TextField label=\"TextField\" />\n\n <Dropdown\n label=\"Dropdown\"\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n >\n <option>Option 1</option>\n <option>Option 2</option>\n <option>Option 3</option>\n </Dropdown>\n\n <MonthPicker label=\"MonthPicker\" />\n\n <Checkbox label=\"Checkbox\" />\n </Stack>\n\n <Actions>\n <Button>Primary action</Button>\n <Button variant=\"transparent\" onClick={() => toggleState(\"error\")}>\n Toggle error\n </Button>\n </Actions>\n </Stack>\n</PageBlock>"
35
- },
36
- {
37
- group: "Sections",
38
- name: "Form (validation)",
39
- code: "<PageBlock width=\"medium\">\n <Stack space=\"xlarge\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text>\n For forms that are more likely to show validation errors, it is\n recommended to use <Strong>reserveMessageSpace</Strong> to prevent the\n elements shifting when messages appear.\n </Text>\n\n <Text>\n Uses a <Strong>small Stack</Strong> for fields, with a{\" \"}\n <Strong>large Stack</Strong> separating the actions from the form.\n </Text>\n </Stack>\n\n <Stack space=\"large\">\n <Stack space=\"small\">\n <TextField\n label=\"TextField\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n\n <Dropdown\n label=\"Dropdown\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n >\n <option>Option 1</option>\n <option>Option 2</option>\n <option>Option 3</option>\n </Dropdown>\n\n <MonthPicker\n label=\"MonthPicker\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n\n <Checkbox\n label=\"Checkbox\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n </Stack>\n\n <Actions>\n <Button onClick={() => toggleState(\"error\")}>Toggle errors</Button>\n </Actions>\n </Stack>\n </Stack>\n</PageBlock>"
40
- },
41
- {
42
- group: "Sections",
43
- name: "Table",
44
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n <Table label=\"Table Block\">\n <TableHeader>\n <TableRow>\n <TableHeaderCell width=\"content\">\n <Text>Status</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 1</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 2</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 3</Text>\n </TableHeaderCell>\n <TableHeaderCell width=\"content\" align=\"right\">\n <Text>Actions</Text>\n </TableHeaderCell>\n </TableRow>\n </TableHeader>\n <TableBody>\n {[\n {\n status: \"Lorem\",\n data1: \"Sit\",\n data2: \"Amet\",\n data3: \"Consectetur\",\n },\n {\n status: \"Ipsum\",\n data1: \"Adipiscing\",\n data2: \"Elit\",\n data3: \"Praesent\",\n },\n {\n status: \"Dolor\",\n data1: \"Semper\",\n data2: \"Interdum\",\n data3: \"Viverra\",\n },\n ].map((row) => (\n <TableRow key={row.data1}>\n <TableCell width=\"content\">\n <Badge>{row.status}</Badge>\n </TableCell>\n <TableCell>\n <Text>{row.data1}</Text>\n </TableCell>\n <TableCell>\n <Text>{row.data2}</Text>\n </TableCell>\n <TableCell>\n <Text>{row.data3}</Text>\n </TableCell>\n <TableCell width=\"content\" align=\"right\">\n <OverflowMenu size=\"small\" label=\"Options\">\n <MenuItem>Option 1</MenuItem>\n <MenuItem>Option 2</MenuItem>\n </OverflowMenu>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Stack>\n</PageBlock>"
45
- },
46
- {
47
- group: "Sections",
48
- name: "Stepper",
49
- code: "<PageBlock width=\"medium\">\n {setDefaultState(\"progress\", 1)}\n {setDefaultState(\"activeStep\", 1)}\n <Stack space=\"large\">\n <Stepper\n label=\"Stepped Block\"\n align=\"left\"\n progress={getState(\"progress\")}\n activeStep={getState(\"activeStep\")}\n onStepClick={({ stepNumber }) => setState(\"activeStep\", stepNumber)}\n >\n <Step>Step 1</Step>\n <Step>Step 2</Step>\n <Step>Step 3</Step>\n <Step>Step 4</Step>\n <Step>Step 5</Step>\n </Stepper>\n\n {getState(\"activeStep\") === 1 && (\n <Placeholder label=\"Step content 1\" height={400} />\n )}\n {getState(\"activeStep\") === 2 && (\n <Placeholder label=\"Step content 2\" height={400} />\n )}\n {getState(\"activeStep\") === 3 && (\n <Placeholder label=\"Step content 3\" height={400} />\n )}\n {getState(\"activeStep\") === 4 && (\n <Placeholder label=\"Step content 4\" height={400} />\n )}\n {getState(\"activeStep\") === 5 && (\n <Placeholder label=\"Step content 5\" height={400} />\n )}\n\n <Columns space=\"small\">\n <Column>\n {getState(\"activeStep\") > 1 && (\n <Actions>\n <Button\n icon={<IconArrow direction=\"left\" />}\n onClick={() => setState(\"activeStep\", getState(\"activeStep\") - 1)}\n >\n Back\n </Button>\n </Actions>\n )}\n </Column>\n <Column width=\"content\">\n {getState(\"activeStep\") < 5 && (\n <Actions>\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() => {\n const newStep = getState(\"activeStep\") + 1\n setState(\"activeStep\", newStep)\n if (newStep > getState(\"progress\")) {\n setState(\"progress\", newStep)\n }\n }}\n >\n Continue\n </Button>\n </Actions>\n )}\n </Column>\n </Columns>\n </Stack>\n</PageBlock>"
50
- },
51
- {
52
- group: "Sections",
53
- name: "Tabs",
54
- code: "<PageBlock width=\"medium\">\n <TabsProvider>\n <Stack space=\"large\">\n <Tabs divider=\"none\" label=\"Tabs Block\">\n <Tab>Tab 1</Tab>\n <Tab>Tab 2</Tab>\n <Tab>Tab 3</Tab>\n </Tabs>\n\n <TabPanels>\n <TabPanel>\n <Placeholder label=\"Tab 1 content\" height={500} />\n </TabPanel>\n <TabPanel>\n <Placeholder label=\"Tab 2 content\" height={300} />\n </TabPanel>\n <TabPanel>\n <Placeholder label=\"Tab 3 content\" height={400} />\n </TabPanel>\n </TabPanels>\n </Stack>\n </TabsProvider>\n</PageBlock>"
55
- }
56
- ];
57
-
58
- //#endregion
59
- exports.snippets = snippets;
@@ -1,58 +0,0 @@
1
- //#region src/lib/playroom/snippets/sections.ts
2
- const snippets = [
3
- {
4
- group: "Sections",
5
- name: "Standard Section",
6
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text tone=\"secondary\">\n Subtitle (optional, consider using secondary tone to avoid clashing with\n content below)\n </Text>\n </Stack>\n\n <Text>\n Combines a <Strong>Heading level 3</Strong> with a{\" \"}\n <Strong>medium Stack</Strong> spacing content groups within the section.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis\n cursus quam nec volutpat. In hac habitasse platea dictumst. Praesent\n egestas erat id mollis imperdiet. Vestibulum non commodo nisi, sed tempus\n magna. Duis a malesuada diam.\n </Text>\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
7
- },
8
- {
9
- group: "Sections",
10
- name: "Card list",
11
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n <Stack component=\"ul\" space=\"small\">\n {[\n {\n title: \"Item 1\",\n subTitle: \"Ea proident nulla veniam\",\n description: \"Lorem ipsum\",\n date: \"2d ago\",\n },\n {\n title: \"Item 2\",\n subTitle: \"Occaecat ad sunt elit\",\n description: \"Consectetur adipiscing\",\n date: \"6d ago\",\n },\n {\n title: \"Item 3\",\n subTitle: \"Commodo exercitation nisi laborum\",\n description: \"Vel odio\",\n date: \"3w ago\",\n },\n ].map((item) => (\n <Box component=\"li\" key={item.title}>\n <Card component=\"article\">\n <Stack space=\"medium\">\n <Stack space=\"small\">\n <Heading level=\"4\">{item.title}</Heading>\n <Text>{item.subTitle}</Text>\n </Stack>\n <Text>{item.description}</Text>\n <Text tone=\"secondary\">{item.date}</Text>\n </Stack>\n </Card>\n </Box>\n ))}\n </Stack>\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
12
- },
13
- {
14
- group: "Sections",
15
- name: "Divided list",
16
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n {[\n {\n title: \"Item 1\",\n description: \"Lorem ipsum\",\n },\n {\n title: \"Item 2\",\n description: \"Consectetur adipiscing\",\n },\n {\n title: \"Item 3\",\n description: \"Vel odio\",\n },\n ].map((item) => (\n <>\n <Columns space=\"small\">\n <Column>\n <Stack space=\"small\">\n <Text component=\"h4\" weight=\"strong\">\n {item.title}\n </Text>\n <Text tone=\"secondary\">{item.description}</Text>\n </Stack>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconEdit />}\n label=\"Edit\"\n />\n </Column>\n </Columns>\n <Divider />\n </>\n ))}\n\n <Actions>\n <Button>Action (optional)</Button>\n </Actions>\n </Stack>\n</PageBlock>"
17
- },
18
- {
19
- group: "Sections",
20
- name: "Branded container",
21
- description: "Full bleed",
22
- code: "<Box background=\"brand\" paddingY=\"xlarge\">\n <PageBlock width=\"medium\">\n <Stack space=\"large\">\n <Heading level=\"2\">Heading</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with a{\" \"}\n <Strong>large Stack</Strong> spacing content groups within the section.\n <br />\n Uses a <Strong>PageBlock</Strong> inside the section to maintain screen\n gutters on small screens.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis\n cursus quam nec volutpat. In hac habitasse platea dictumst. Praesent\n egestas erat id mollis imperdiet. Vestibulum non commodo nisi, sed\n tempus magna. Duis a malesuada diam.\n </Text>\n </Stack>\n </PageBlock>\n</Box>"
23
- },
24
- {
25
- group: "Sections",
26
- name: "Branded container",
27
- description: "Rounded from desktop (full bleed below)",
28
- code: "<Box paddingX={{ desktop: \"gutter\" }}>\n <ContentBlock width=\"large\">\n <Box\n background=\"brand\"\n paddingY=\"xlarge\"\n borderRadius={{ desktop: \"xlarge\" }}\n >\n <PageBlock width=\"medium\">\n <Stack space=\"large\">\n <Heading level=\"2\">Heading</Heading>\n\n <Text>\n Combines a <Strong>Heading level 2</Strong> with a{\" \"}\n <Strong>large Stack</Strong> spacing content groups within the\n section.\n <br />\n Uses a <Strong>PageBlock</Strong> inside the section to maintain\n screen gutters on small screens.\n </Text>\n\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. In\n convallis cursus quam nec volutpat. In hac habitasse platea\n dictumst. Praesent egestas erat id mollis imperdiet. Vestibulum non\n commodo nisi, sed tempus magna. Duis a malesuada diam.\n </Text>\n </Stack>\n </PageBlock>\n </Box>\n </ContentBlock>\n</Box>"
29
- },
30
- {
31
- group: "Sections",
32
- name: "Form (basic)",
33
- code: "<PageBlock width=\"medium\">\n <Stack space=\"xlarge\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text>\n For forms with minimal or no validation as errors will impact layout.\n </Text>\n\n <Text>\n Uses a <Strong>large Stack</Strong> for fields, with a{\" \"}\n <Strong>xlarge Stack</Strong> separating the actions from the form.\n </Text>\n </Stack>\n\n <Stack space=\"large\">\n <TextField label=\"TextField\" />\n\n <Dropdown\n label=\"Dropdown\"\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n >\n <option>Option 1</option>\n <option>Option 2</option>\n <option>Option 3</option>\n </Dropdown>\n\n <MonthPicker label=\"MonthPicker\" />\n\n <Checkbox label=\"Checkbox\" />\n </Stack>\n\n <Actions>\n <Button>Primary action</Button>\n <Button variant=\"transparent\" onClick={() => toggleState(\"error\")}>\n Toggle error\n </Button>\n </Actions>\n </Stack>\n</PageBlock>"
34
- },
35
- {
36
- group: "Sections",
37
- name: "Form (validation)",
38
- code: "<PageBlock width=\"medium\">\n <Stack space=\"xlarge\">\n <Stack space=\"small\">\n <Heading level=\"3\">Heading</Heading>\n\n <Text>\n For forms that are more likely to show validation errors, it is\n recommended to use <Strong>reserveMessageSpace</Strong> to prevent the\n elements shifting when messages appear.\n </Text>\n\n <Text>\n Uses a <Strong>small Stack</Strong> for fields, with a{\" \"}\n <Strong>large Stack</Strong> separating the actions from the form.\n </Text>\n </Stack>\n\n <Stack space=\"large\">\n <Stack space=\"small\">\n <TextField\n label=\"TextField\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n\n <Dropdown\n label=\"Dropdown\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n >\n <option>Option 1</option>\n <option>Option 2</option>\n <option>Option 3</option>\n </Dropdown>\n\n <MonthPicker\n label=\"MonthPicker\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n\n <Checkbox\n label=\"Checkbox\"\n reserveMessageSpace\n tone={getState(\"error\") ? \"critical\" : undefined}\n message={getState(\"error\") ? \"Required field\" : undefined}\n />\n </Stack>\n\n <Actions>\n <Button onClick={() => toggleState(\"error\")}>Toggle errors</Button>\n </Actions>\n </Stack>\n </Stack>\n</PageBlock>"
39
- },
40
- {
41
- group: "Sections",
42
- name: "Table",
43
- code: "<PageBlock width=\"medium\">\n <Stack space=\"medium\">\n <Heading level=\"3\">Heading (optional)</Heading>\n\n <Table label=\"Table Block\">\n <TableHeader>\n <TableRow>\n <TableHeaderCell width=\"content\">\n <Text>Status</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 1</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 2</Text>\n </TableHeaderCell>\n <TableHeaderCell>\n <Text>Data 3</Text>\n </TableHeaderCell>\n <TableHeaderCell width=\"content\" align=\"right\">\n <Text>Actions</Text>\n </TableHeaderCell>\n </TableRow>\n </TableHeader>\n <TableBody>\n {[\n {\n status: \"Lorem\",\n data1: \"Sit\",\n data2: \"Amet\",\n data3: \"Consectetur\",\n },\n {\n status: \"Ipsum\",\n data1: \"Adipiscing\",\n data2: \"Elit\",\n data3: \"Praesent\",\n },\n {\n status: \"Dolor\",\n data1: \"Semper\",\n data2: \"Interdum\",\n data3: \"Viverra\",\n },\n ].map((row) => (\n <TableRow key={row.data1}>\n <TableCell width=\"content\">\n <Badge>{row.status}</Badge>\n </TableCell>\n <TableCell>\n <Text>{row.data1}</Text>\n </TableCell>\n <TableCell>\n <Text>{row.data2}</Text>\n </TableCell>\n <TableCell>\n <Text>{row.data3}</Text>\n </TableCell>\n <TableCell width=\"content\" align=\"right\">\n <OverflowMenu size=\"small\" label=\"Options\">\n <MenuItem>Option 1</MenuItem>\n <MenuItem>Option 2</MenuItem>\n </OverflowMenu>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Stack>\n</PageBlock>"
44
- },
45
- {
46
- group: "Sections",
47
- name: "Stepper",
48
- code: "<PageBlock width=\"medium\">\n {setDefaultState(\"progress\", 1)}\n {setDefaultState(\"activeStep\", 1)}\n <Stack space=\"large\">\n <Stepper\n label=\"Stepped Block\"\n align=\"left\"\n progress={getState(\"progress\")}\n activeStep={getState(\"activeStep\")}\n onStepClick={({ stepNumber }) => setState(\"activeStep\", stepNumber)}\n >\n <Step>Step 1</Step>\n <Step>Step 2</Step>\n <Step>Step 3</Step>\n <Step>Step 4</Step>\n <Step>Step 5</Step>\n </Stepper>\n\n {getState(\"activeStep\") === 1 && (\n <Placeholder label=\"Step content 1\" height={400} />\n )}\n {getState(\"activeStep\") === 2 && (\n <Placeholder label=\"Step content 2\" height={400} />\n )}\n {getState(\"activeStep\") === 3 && (\n <Placeholder label=\"Step content 3\" height={400} />\n )}\n {getState(\"activeStep\") === 4 && (\n <Placeholder label=\"Step content 4\" height={400} />\n )}\n {getState(\"activeStep\") === 5 && (\n <Placeholder label=\"Step content 5\" height={400} />\n )}\n\n <Columns space=\"small\">\n <Column>\n {getState(\"activeStep\") > 1 && (\n <Actions>\n <Button\n icon={<IconArrow direction=\"left\" />}\n onClick={() => setState(\"activeStep\", getState(\"activeStep\") - 1)}\n >\n Back\n </Button>\n </Actions>\n )}\n </Column>\n <Column width=\"content\">\n {getState(\"activeStep\") < 5 && (\n <Actions>\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() => {\n const newStep = getState(\"activeStep\") + 1\n setState(\"activeStep\", newStep)\n if (newStep > getState(\"progress\")) {\n setState(\"progress\", newStep)\n }\n }}\n >\n Continue\n </Button>\n </Actions>\n )}\n </Column>\n </Columns>\n </Stack>\n</PageBlock>"
49
- },
50
- {
51
- group: "Sections",
52
- name: "Tabs",
53
- code: "<PageBlock width=\"medium\">\n <TabsProvider>\n <Stack space=\"large\">\n <Tabs divider=\"none\" label=\"Tabs Block\">\n <Tab>Tab 1</Tab>\n <Tab>Tab 2</Tab>\n <Tab>Tab 3</Tab>\n </Tabs>\n\n <TabPanels>\n <TabPanel>\n <Placeholder label=\"Tab 1 content\" height={500} />\n </TabPanel>\n <TabPanel>\n <Placeholder label=\"Tab 2 content\" height={300} />\n </TabPanel>\n <TabPanel>\n <Placeholder label=\"Tab 3 content\" height={400} />\n </TabPanel>\n </TabPanels>\n </Stack>\n </TabsProvider>\n</PageBlock>"
54
- }
55
- ];
56
-
57
- //#endregion
58
- export { snippets };