braid-design-system 34.9.0 → 34.9.1

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 (42) hide show
  1. package/CHANGELOG.md +22 -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/lib/components/Avatar/Avatar.cjs +1 -1
  5. package/dist/lib/components/Avatar/Avatar.css.cjs +2 -1
  6. package/dist/lib/components/Avatar/Avatar.css.mjs +2 -1
  7. package/dist/lib/components/Avatar/Avatar.mjs +1 -1
  8. package/dist/lib/components/BraidPortal/BraidPortal.cjs +0 -1
  9. package/dist/lib/components/BraidPortal/BraidPortal.mjs +0 -1
  10. package/dist/lib/components/BraidProvider/BraidProvider.cjs +0 -1
  11. package/dist/lib/components/BraidProvider/BraidProvider.mjs +0 -1
  12. package/dist/lib/components/BraidProvider/VanillaThemeContainer.cjs +2 -2
  13. package/dist/lib/components/BraidProvider/VanillaThemeContainer.mjs +2 -2
  14. package/dist/lib/components/Drawer/Drawer.cjs +5 -0
  15. package/dist/lib/components/Drawer/Drawer.mjs +5 -0
  16. package/dist/lib/components/private/Modal/ModalContent.cjs +9 -4
  17. package/dist/lib/components/private/Modal/ModalContent.mjs +9 -4
  18. package/dist/lib/css/atoms/sprinkles.css.d.cts +1 -1
  19. package/dist/lib/css/atoms/sprinkles.css.d.mts +1 -1
  20. package/dist/lib/playroom/snippets/BulkActions.cjs +8 -0
  21. package/dist/lib/playroom/snippets/BulkActions.mjs +8 -0
  22. package/dist/lib/playroom/snippets/DividedLists.cjs +8 -0
  23. package/dist/lib/playroom/snippets/DividedLists.mjs +8 -0
  24. package/dist/lib/playroom/snippets/EmptyState.cjs +12 -0
  25. package/dist/lib/playroom/snippets/EmptyState.mjs +12 -0
  26. package/dist/lib/playroom/snippets/ErrorState.cjs +12 -0
  27. package/dist/lib/playroom/snippets/ErrorState.mjs +12 -0
  28. package/dist/lib/playroom/snippets/Forms.cjs +12 -0
  29. package/dist/lib/playroom/snippets/Forms.mjs +12 -0
  30. package/dist/lib/playroom/snippets/Nudge.cjs +20 -0
  31. package/dist/lib/playroom/snippets/Nudge.mjs +20 -0
  32. package/dist/lib/playroom/snippets/ServiceOutageBanner.cjs +12 -0
  33. package/dist/lib/playroom/snippets/ServiceOutageBanner.mjs +12 -0
  34. package/dist/lib/playroom/snippets/SkeletonLoader.cjs +8 -0
  35. package/dist/lib/playroom/snippets/SkeletonLoader.mjs +8 -0
  36. package/dist/lib/playroom/snippets/SocialShare.cjs +8 -0
  37. package/dist/lib/playroom/snippets/SocialShare.mjs +8 -0
  38. package/dist/lib/playroom/snippets.cjs +20 -1
  39. package/dist/lib/playroom/snippets.mjs +116 -97
  40. package/dist/playroom/components.d.cts +5 -0
  41. package/dist/playroom/components.d.mts +5 -0
  42. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # braid-design-system
2
2
 
3
+ ## 34.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - **Drawer:** Reject empty `title` ([#2171](https://github.com/seek-oss/braid-design-system/pull/2171))
8
+
9
+ An empty `title` is now treated as invalid, consistent with `aria-label`. Provide a non-empty `title`, or use `aria-label` for an untitled `Drawer`.
10
+
11
+ - **Avatar:** Ensure loading background fills completely in dark mode ([#2169](https://github.com/seek-oss/braid-design-system/pull/2169))
12
+
13
+ - playroom: Add Patterns group to snippets ([#2167](https://github.com/seek-oss/braid-design-system/pull/2167))
14
+
15
+ - **Avatar:** Prevent layout collapse inside Inline component ([#2169](https://github.com/seek-oss/braid-design-system/pull/2169))
16
+
17
+ - **BraidProvider:** Ensure default text tone follows the theme ([#2163](https://github.com/seek-oss/braid-design-system/pull/2163))
18
+
19
+ Nested `BraidProvider` components using different themes now always apply the default text tones according to the selected theme.
20
+
21
+ - **Dialog:** Restore header rendering when `title` is empty ([#2171](https://github.com/seek-oss/braid-design-system/pull/2171))
22
+
23
+ Fixes a regression where a `Dialog` with an empty `title` no longer rendered its `illustration` or `description`.
24
+
3
25
  ## 34.9.0
4
26
 
5
27
  ### Minor Changes
@@ -43,6 +43,6 @@ declare const colorModeQueryParamCheck: string;
43
43
  *
44
44
  * @returns Braid color mode preference as query string parameter
45
45
  */
46
- declare const getColorModeQueryParam: () => "" | "_bdsdm=1" | "_bdsdm=2" | "_bdsdm=0";
46
+ declare const getColorModeQueryParam: () => "_bdsdm=0" | "_bdsdm=1" | "_bdsdm=2" | "";
47
47
  //#endregion
48
48
  export { colorModeQueryParamCheck, getColorModeQueryParam };
@@ -43,6 +43,6 @@ declare const colorModeQueryParamCheck: string;
43
43
  *
44
44
  * @returns Braid color mode preference as query string parameter
45
45
  */
46
- declare const getColorModeQueryParam: () => "" | "_bdsdm=1" | "_bdsdm=2" | "_bdsdm=0";
46
+ declare const getColorModeQueryParam: () => "_bdsdm=0" | "_bdsdm=1" | "_bdsdm=2" | "";
47
47
  //#endregion
48
48
  export { colorModeQueryParamCheck, getColorModeQueryParam };
@@ -187,7 +187,6 @@ const Avatar = (0, react.forwardRef)(({ name = "", "aria-label": ariaLabel, "ari
187
187
  outline: !clickable && focusable ? "focus" : void 0,
188
188
  className: {
189
189
  [require_Avatar_css.size[size$1]]: true,
190
- [require_Avatar_css.keyline]: true,
191
190
  [require_virtualTouchable_css.virtualTouchable]: clickable && (size$1 === "xsmall" || size$1 === "small")
192
191
  },
193
192
  style: colour ? { background: colour.value } : void 0,
@@ -204,6 +203,7 @@ const Avatar = (0, react.forwardRef)(({ name = "", "aria-label": ariaLabel, "ari
204
203
  height: "full",
205
204
  overflow: "hidden",
206
205
  borderRadius,
206
+ className: require_Avatar_css.keyline,
207
207
  children: content
208
208
  })
209
209
  });
@@ -1,3 +1,4 @@
1
+ const require_px = require("../../utils/px.cjs");
1
2
  const require_vars_css = require("../../themes/vars.css.cjs");
2
3
  let _vanilla_extract_css_fileScope = require("@vanilla-extract/css/fileScope");
3
4
  let _vanilla_extract_css = require("@vanilla-extract/css");
@@ -12,7 +13,7 @@ const size = (0, _vanilla_extract_css.styleVariants)({
12
13
  xxlarge: 96
13
14
  }, (pixels) => ({
14
15
  height: pixels,
15
- width: pixels
16
+ width: `${require_px.px(pixels)} !important`
16
17
  }), "size");
17
18
  const keyline = (0, _vanilla_extract_css.style)({
18
19
  borderWidth: require_vars_css.vars.borderWidth.standard,
@@ -1,3 +1,4 @@
1
+ import { px } from "../../utils/px.mjs";
1
2
  import { vars } from "../../themes/vars.css.mjs";
2
3
  import { endFileScope, setFileScope } from "@vanilla-extract/css/fileScope";
3
4
  import { style, styleVariants } from "@vanilla-extract/css";
@@ -12,7 +13,7 @@ const size = styleVariants({
12
13
  xxlarge: 96
13
14
  }, (pixels) => ({
14
15
  height: pixels,
15
- width: pixels
16
+ width: `${px(pixels)} !important`
16
17
  }), "size");
17
18
  const keyline = style({
18
19
  borderWidth: vars.borderWidth.standard,
@@ -185,7 +185,6 @@ const Avatar = forwardRef(({ name = "", "aria-label": ariaLabel, "aria-described
185
185
  outline: !clickable && focusable ? "focus" : void 0,
186
186
  className: {
187
187
  [size[size$1]]: true,
188
- [keyline]: true,
189
188
  [virtualTouchable]: clickable && (size$1 === "xsmall" || size$1 === "small")
190
189
  },
191
190
  style: colour ? { background: colour.value } : void 0,
@@ -202,6 +201,7 @@ const Avatar = forwardRef(({ name = "", "aria-label": ariaLabel, "aria-described
202
201
  height: "full",
203
202
  overflow: "hidden",
204
203
  borderRadius,
204
+ className: keyline,
205
205
  children: content
206
206
  })
207
207
  });
@@ -10,7 +10,6 @@ const BraidPortal = ({ children, container }) => {
10
10
  value: null,
11
11
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_VanillaThemeContainer.VanillaThemeContainer, {
12
12
  theme: vanillaTheme,
13
- setDefaultTextTones: true,
14
13
  children
15
14
  })
16
15
  }), container ?? document.body);
@@ -10,7 +10,6 @@ const BraidPortal = ({ children, container }) => {
10
10
  value: null,
11
11
  children: /* @__PURE__ */ jsx(VanillaThemeContainer, {
12
12
  theme: vanillaTheme,
13
- setDefaultTextTones: true,
14
13
  children
15
14
  })
16
15
  }), container ?? document.body);
@@ -46,7 +46,6 @@ const BraidProvider = ({ theme, styleBody = true, linkComponent, children }) =>
46
46
  `
47
47
  }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_VanillaThemeContainer.VanillaThemeContainer, {
48
48
  theme: theme.vanillaTheme,
49
- setDefaultTextTones: !alreadyInBraidProvider,
50
49
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LinkComponentContext.Provider, {
51
50
  value: linkComponent || linkComponentFromContext,
52
51
  children: alreadyInBraidProvider || inTestProvider ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_BreakpointContext.BreakpointProvider, { children })
@@ -43,7 +43,6 @@ const BraidProvider = ({ theme, styleBody = true, linkComponent, children }) =>
43
43
  `
44
44
  }) : null, /* @__PURE__ */ jsx(VanillaThemeContainer, {
45
45
  theme: theme.vanillaTheme,
46
- setDefaultTextTones: !alreadyInBraidProvider,
47
46
  children: /* @__PURE__ */ jsx(LinkComponentContext.Provider, {
48
47
  value: linkComponent || linkComponentFromContext,
49
48
  children: alreadyInBraidProvider || inTestProvider ? children : /* @__PURE__ */ jsx(BreakpointProvider, { children })
@@ -2,8 +2,8 @@ const require_typography_css = require("../../css/typography.css.cjs");
2
2
  let react_jsx_runtime = require("react/jsx-runtime");
3
3
  //#region src/lib/components/BraidProvider/VanillaThemeContainer.tsx
4
4
  const textTones = [require_typography_css.lightModeTone.light, require_typography_css.darkModeTone.dark].join(" ");
5
- const VanillaThemeContainer = ({ children, theme, setDefaultTextTones }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6
- className: `${theme}${setDefaultTextTones ? ` ${textTones}` : ""}`,
5
+ const VanillaThemeContainer = ({ children, theme }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6
+ className: `${theme} ${textTones}`,
7
7
  children
8
8
  });
9
9
  //#endregion
@@ -2,8 +2,8 @@ import { darkModeTone, lightModeTone } from "../../css/typography.css.mjs";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/lib/components/BraidProvider/VanillaThemeContainer.tsx
4
4
  const textTones = [lightModeTone.light, darkModeTone.dark].join(" ");
5
- const VanillaThemeContainer = ({ children, theme, setDefaultTextTones }) => /* @__PURE__ */ jsx("div", {
6
- className: `${theme}${setDefaultTextTones ? ` ${textTones}` : ""}`,
5
+ const VanillaThemeContainer = ({ children, theme }) => /* @__PURE__ */ jsx("div", {
6
+ className: `${theme} ${textTones}`,
7
7
  children
8
8
  });
9
9
  //#endregion
@@ -23,6 +23,11 @@ const assertAccessibleName = ({ title, description, "aria-label": ariaLabel, "ar
23
23
  (0, assert.default)(typeof title === "string" !== (typeof ariaLabel === "string"), dedent.default`
24
24
  Drawer requires either a title or an aria-label.
25
25
 
26
+ ${docsMessage}
27
+ `);
28
+ (0, assert.default)(typeof title !== "string" || title.trim() !== "", dedent.default`
29
+ Drawer title must not be empty.
30
+
26
31
  ${docsMessage}
27
32
  `);
28
33
  (0, assert.default)(typeof ariaLabel !== "string" || ariaLabel.trim() !== "", dedent.default`
@@ -20,6 +20,11 @@ const assertAccessibleName = ({ title, description, "aria-label": ariaLabel, "ar
20
20
  assert(typeof title === "string" !== (typeof ariaLabel === "string"), dedent`
21
21
  Drawer requires either a title or an aria-label.
22
22
 
23
+ ${docsMessage}
24
+ `);
25
+ assert(typeof title !== "string" || title.trim() !== "", dedent`
26
+ Drawer title must not be empty.
27
+
23
28
  ${docsMessage}
24
29
  `);
25
30
  assert(typeof ariaLabel !== "string" || ariaLabel.trim() !== "", dedent`
@@ -158,6 +158,11 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
158
158
  right: "flexEnd"
159
159
  }[position];
160
160
  const modalRadius = !isDrawer ? "xlarge" : void 0;
161
+ /**
162
+ * Only Drawer supports omitting the title, in which case there is no header
163
+ * to hold the content clear of the close button.
164
+ */
165
+ const untitledDrawer = isDrawer && !title;
161
166
  const modalLayout = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ModalContentScrollLayout, {
162
167
  applyPageBlockGutters: isDrawer,
163
168
  applyFullHeight: isDrawer || allowColumnLayout && Boolean(footer) && !isMobile,
@@ -165,7 +170,7 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
165
170
  coverImageEnabled,
166
171
  hasFooter: Boolean(footer),
167
172
  children: [
168
- title ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalContentHeader, {
173
+ !untitledDrawer ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalContentHeader, {
169
174
  title,
170
175
  headingLevel,
171
176
  description,
@@ -174,7 +179,7 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
174
179
  ref: headingRef,
175
180
  reserveCloseArea: true
176
181
  }) : null,
177
- isDrawer && !title ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
182
+ untitledDrawer ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
178
183
  require_Bleed.Bleed,
179
184
  /**
180
185
  * Matches close button size so content starts below it. `bottom`
@@ -203,9 +208,9 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
203
208
  ref: dialogRef,
204
209
  role: "dialog",
205
210
  "aria-label": ariaLabel || title,
206
- "aria-describedby": title && description || ariaDescription ? descriptionId : void 0,
211
+ "aria-describedby": !untitledDrawer && description || ariaDescription ? descriptionId : void 0,
207
212
  "aria-modal": "true",
208
- tabIndex: title ? void 0 : -1,
213
+ tabIndex: untitledDrawer ? -1 : void 0,
209
214
  id: resolvedId,
210
215
  onKeyDown: handleEscape,
211
216
  position: "relative",
@@ -158,6 +158,11 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
158
158
  right: "flexEnd"
159
159
  }[position];
160
160
  const modalRadius = !isDrawer ? "xlarge" : void 0;
161
+ /**
162
+ * Only Drawer supports omitting the title, in which case there is no header
163
+ * to hold the content clear of the close button.
164
+ */
165
+ const untitledDrawer = isDrawer && !title;
161
166
  const modalLayout = /* @__PURE__ */ jsxs(ModalContentScrollLayout, {
162
167
  applyPageBlockGutters: isDrawer,
163
168
  applyFullHeight: isDrawer || allowColumnLayout && Boolean(footer) && !isMobile,
@@ -165,7 +170,7 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
165
170
  coverImageEnabled,
166
171
  hasFooter: Boolean(footer),
167
172
  children: [
168
- title ? /* @__PURE__ */ jsx(ModalContentHeader, {
173
+ !untitledDrawer ? /* @__PURE__ */ jsx(ModalContentHeader, {
169
174
  title,
170
175
  headingLevel,
171
176
  description,
@@ -174,7 +179,7 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
174
179
  ref: headingRef,
175
180
  reserveCloseArea: true
176
181
  }) : null,
177
- isDrawer && !title ? /* @__PURE__ */ jsx(
182
+ untitledDrawer ? /* @__PURE__ */ jsx(
178
183
  Bleed,
179
184
  /**
180
185
  * Matches close button size so content starts below it. `bottom`
@@ -203,9 +208,9 @@ const ModalContent = ({ id, children, description, onClose, width, closeLabel =
203
208
  ref: dialogRef,
204
209
  role: "dialog",
205
210
  "aria-label": ariaLabel || title,
206
- "aria-describedby": title && description || ariaDescription ? descriptionId : void 0,
211
+ "aria-describedby": !untitledDrawer && description || ariaDescription ? descriptionId : void 0,
207
212
  "aria-modal": "true",
208
- tabIndex: title ? void 0 : -1,
213
+ tabIndex: untitledDrawer ? -1 : void 0,
209
214
  id: resolvedId,
210
215
  onKeyDown: handleEscape,
211
216
  position: "relative",
@@ -4,7 +4,7 @@ import { ConditionalValue, RequiredConditionalValue } from "@vanilla-extract/spr
4
4
  declare const colorAtomicProperties: {
5
5
  conditions: {
6
6
  defaultCondition: "lightMode";
7
- conditionNames: ("lightMode" | "darkMode")[];
7
+ conditionNames: ("darkMode" | "lightMode")[];
8
8
  };
9
9
  styles: {
10
10
  readonly background: {
@@ -4,7 +4,7 @@ import { ConditionalValue, RequiredConditionalValue } from "@vanilla-extract/spr
4
4
  declare const colorAtomicProperties: {
5
5
  conditions: {
6
6
  defaultCondition: "lightMode";
7
- conditionNames: ("lightMode" | "darkMode")[];
7
+ conditionNames: ("darkMode" | "lightMode")[];
8
8
  };
9
9
  styles: {
10
10
  readonly background: {
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/BulkActions.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Bulk actions",
5
+ code: "<>\n {setDefaultState(\"one\", false)}\n {setDefaultState(\"two\", false)}\n {setDefaultState(\"three\", false)}\n <Stack space=\"large\">\n <Inline space=\"medium\" alignY=\"center\">\n <CheckboxStandalone\n aria-label=\"Select all\"\n checked={[getState(\"one\"), getState(\"two\"), getState(\"three\")]}\n onChange={({ currentTarget: { checked } }) => {\n setState(\"one\", checked)\n setState(\"two\", checked)\n setState(\"three\", checked)\n }}\n />\n\n {getState(\"one\") || getState(\"two\") || getState(\"three\") ? (\n <Inline space=\"large\">\n <ButtonIcon bleed icon={<IconDownload />} label=\"Action 1\" />\n <ButtonIcon bleed icon={<IconDelete />} label=\"Action 2\" />\n </Inline>\n ) : null}\n </Inline>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"one\"\n checked={getState(\"one\")}\n onChange={() => toggleState(\"one\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 1</Text>\n </Column>\n </Columns>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"two\"\n checked={getState(\"two\")}\n onChange={() => toggleState(\"two\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 2</Text>\n </Column>\n </Columns>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"three\"\n checked={getState(\"three\")}\n onChange={() => toggleState(\"three\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 3</Text>\n </Column>\n </Columns>\n </Stack>\n</>"
6
+ }];
7
+ //#endregion
8
+ exports.snippets = snippets;
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/BulkActions.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Bulk actions",
5
+ code: "<>\n {setDefaultState(\"one\", false)}\n {setDefaultState(\"two\", false)}\n {setDefaultState(\"three\", false)}\n <Stack space=\"large\">\n <Inline space=\"medium\" alignY=\"center\">\n <CheckboxStandalone\n aria-label=\"Select all\"\n checked={[getState(\"one\"), getState(\"two\"), getState(\"three\")]}\n onChange={({ currentTarget: { checked } }) => {\n setState(\"one\", checked)\n setState(\"two\", checked)\n setState(\"three\", checked)\n }}\n />\n\n {getState(\"one\") || getState(\"two\") || getState(\"three\") ? (\n <Inline space=\"large\">\n <ButtonIcon bleed icon={<IconDownload />} label=\"Action 1\" />\n <ButtonIcon bleed icon={<IconDelete />} label=\"Action 2\" />\n </Inline>\n ) : null}\n </Inline>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"one\"\n checked={getState(\"one\")}\n onChange={() => toggleState(\"one\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 1</Text>\n </Column>\n </Columns>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"two\"\n checked={getState(\"two\")}\n onChange={() => toggleState(\"two\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 2</Text>\n </Column>\n </Columns>\n <Columns space=\"small\">\n <Column width=\"content\">\n <Text>\n <CheckboxStandalone\n aria-label=\"three\"\n checked={getState(\"three\")}\n onChange={() => toggleState(\"three\")}\n />\n </Text>\n </Column>\n <Column>\n <Text>Item 3</Text>\n </Column>\n </Columns>\n </Stack>\n</>"
6
+ }];
7
+ //#endregion
8
+ export { snippets };
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/DividedLists.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Divided list",
5
+ code: "<Stack space=\"xlarge\">\n <Heading level=\"2\">Heading</Heading>\n <Stack space=\"large\">\n {[\n {\n title: \"Strong text lorem ipsum\",\n description: \"Secondary text dolor sit amet\",\n },\n {\n title: \"Strong text\",\n description: \"Secondary text consectetur adipiscing\",\n },\n {\n title: \"Strong text ipsum\",\n description: \"Secondary text vel odio\",\n },\n ].map((item) => (\n <Stack key={item.title} space=\"large\">\n <Columns space=\"small\">\n <Column>\n <Stack space=\"small\">\n <Text weight=\"strong\">{item.title}</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 </Stack>\n ))}\n </Stack>\n</Stack>"
6
+ }];
7
+ //#endregion
8
+ exports.snippets = snippets;
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/DividedLists.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Divided list",
5
+ code: "<Stack space=\"xlarge\">\n <Heading level=\"2\">Heading</Heading>\n <Stack space=\"large\">\n {[\n {\n title: \"Strong text lorem ipsum\",\n description: \"Secondary text dolor sit amet\",\n },\n {\n title: \"Strong text\",\n description: \"Secondary text consectetur adipiscing\",\n },\n {\n title: \"Strong text ipsum\",\n description: \"Secondary text vel odio\",\n },\n ].map((item) => (\n <Stack key={item.title} space=\"large\">\n <Columns space=\"small\">\n <Column>\n <Stack space=\"small\">\n <Text weight=\"strong\">{item.title}</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 </Stack>\n ))}\n </Stack>\n</Stack>"
6
+ }];
7
+ //#endregion
8
+ export { snippets };
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/EmptyState.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Empty state (full page)",
5
+ code: "<ContentBlock width=\"small\">\n <Stack align=\"center\" space={{ mobile: \"medium\", desktop: \"large\" }}>\n <Placeholder\n shape=\"round\"\n width={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n height={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n />\n\n <Stack space=\"medium\" align=\"center\">\n <Heading level=\"2\" weight=\"weak\" align=\"center\">\n An example empty state\n </Heading>\n <Text tone=\"secondary\" align=\"center\">\n This is a center aligned example with a short summary. You can use a\n button or <TextLink href=\"#\">a TextLink</TextLink> to suit your needs.\n </Text>\n <Actions>\n <Button variant=\"ghost\">Button</Button>\n </Actions>\n </Stack>\n </Stack>\n</ContentBlock>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Empty state (inline)",
9
+ code: "<Tiles columns={{ mobile: 1, tablet: 3 }} space=\"small\">\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Notice tone=\"info\">\n <Text>\n We don&rsquo;t have any data for this yet. Please check back later.\n </Text>\n </Notice>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n</Tiles>"
10
+ }];
11
+ //#endregion
12
+ exports.snippets = snippets;
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/EmptyState.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Empty state (full page)",
5
+ code: "<ContentBlock width=\"small\">\n <Stack align=\"center\" space={{ mobile: \"medium\", desktop: \"large\" }}>\n <Placeholder\n shape=\"round\"\n width={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n height={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n />\n\n <Stack space=\"medium\" align=\"center\">\n <Heading level=\"2\" weight=\"weak\" align=\"center\">\n An example empty state\n </Heading>\n <Text tone=\"secondary\" align=\"center\">\n This is a center aligned example with a short summary. You can use a\n button or <TextLink href=\"#\">a TextLink</TextLink> to suit your needs.\n </Text>\n <Actions>\n <Button variant=\"ghost\">Button</Button>\n </Actions>\n </Stack>\n </Stack>\n</ContentBlock>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Empty state (inline)",
9
+ code: "<Tiles columns={{ mobile: 1, tablet: 3 }} space=\"small\">\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Notice tone=\"info\">\n <Text>\n We don&rsquo;t have any data for this yet. Please check back later.\n </Text>\n </Notice>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n</Tiles>"
10
+ }];
11
+ //#endregion
12
+ export { snippets };
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/ErrorState.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Error state (full page)",
5
+ code: "<ContentBlock width=\"small\">\n <Stack align=\"center\" space={{ mobile: \"medium\", desktop: \"large\" }}>\n <Placeholder\n shape=\"round\"\n width={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n height={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n />\n\n <Stack space=\"medium\" align=\"center\">\n <Heading level=\"2\" weight=\"weak\" align=\"center\">\n How an error might look\n </Heading>\n <Text tone=\"secondary\" align=\"center\">\n This is a center aligned example with a short summary. You can use a\n button or <TextLink href=\"#\">a TextLink</TextLink> to suit your needs.\n </Text>\n <Actions>\n <Button variant=\"ghost\">Button</Button>\n </Actions>\n </Stack>\n </Stack>\n</ContentBlock>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Error state (inline)",
9
+ code: "<Tiles columns={{ mobile: 1, tablet: 3 }} space=\"small\">\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Notice tone=\"critical\">\n <Text>\n We can&rsquo;t load this data right now. Please check back later.\n </Text>\n </Notice>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n</Tiles>"
10
+ }];
11
+ //#endregion
12
+ exports.snippets = snippets;
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/ErrorState.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Error state (full page)",
5
+ code: "<ContentBlock width=\"small\">\n <Stack align=\"center\" space={{ mobile: \"medium\", desktop: \"large\" }}>\n <Placeholder\n shape=\"round\"\n width={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n height={responsiveValue({\n mobile: \"96px\",\n tablet: \"128px\",\n desktop: \"192px\",\n })}\n />\n\n <Stack space=\"medium\" align=\"center\">\n <Heading level=\"2\" weight=\"weak\" align=\"center\">\n How an error might look\n </Heading>\n <Text tone=\"secondary\" align=\"center\">\n This is a center aligned example with a short summary. You can use a\n button or <TextLink href=\"#\">a TextLink</TextLink> to suit your needs.\n </Text>\n <Actions>\n <Button variant=\"ghost\">Button</Button>\n </Actions>\n </Stack>\n </Stack>\n</ContentBlock>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Error state (inline)",
9
+ code: "<Tiles columns={{ mobile: 1, tablet: 3 }} space=\"small\">\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Notice tone=\"critical\">\n <Text>\n We can&rsquo;t load this data right now. Please check back later.\n </Text>\n </Notice>\n </Stack>\n </Card>\n <Card height=\"full\">\n <Stack space=\"large\">\n <Heading level=\"4\">Widget title</Heading>\n <Text>\n Widget content lorem ipsum dolor sit amet, consectetur adipiscing elit\n amet.\n </Text>\n </Stack>\n </Card>\n</Tiles>"
10
+ }];
11
+ //#endregion
12
+ export { snippets };
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/Forms.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Form",
5
+ code: "<>\n {setDefaultState(\"shouldValidate\", false)}\n {setDefaultState(\"Name\", \"\")}\n {setDefaultState(\"RoleTitle\", \"\")}\n {setDefaultState(\"textfield\", \"\")}\n <ContentBlock width=\"small\">\n <Stack space=\"xlarge\">\n <Heading level=\"2\">Form heading</Heading>\n <Stack space=\"large\">\n <Stack space=\"small\">\n <TextField\n label=\"Name\"\n onChange={setState(\"Name\")}\n value={getState(\"Name\")}\n reserveMessageSpace\n message={\n getState(\"shouldValidate\") === true &&\n getState(\"Name\").length === 0\n ? \"Enter your name\"\n : undefined\n }\n tone={\n getState(\"shouldValidate\") === true &&\n getState(\"Name\").length === 0\n ? \"critical\"\n : undefined\n }\n />\n\n <TextField\n label=\"Role title\"\n onChange={setState(\"RoleTitle\")}\n value={getState(\"RoleTitle\")}\n reserveMessageSpace\n message={\n getState(\"shouldValidate\") === true &&\n getState(\"RoleTitle\").length === 0\n ? \"Enter your role title\"\n : undefined\n }\n tone={\n getState(\"shouldValidate\") === true &&\n getState(\"RoleTitle\").length === 0\n ? \"critical\"\n : undefined\n }\n />\n\n <TextField\n label=\"Phone number\"\n onChange={setState(\"textfield\")}\n value={getState(\"textfield\")}\n secondaryLabel=\"optional\"\n reserveMessageSpace\n />\n </Stack>\n <Actions>\n <Button\n variant=\"solid\"\n onClick={() => setState(\"shouldValidate\", true)}\n >\n Submit\n </Button>\n </Actions>\n </Stack>\n </Stack>\n </ContentBlock>\n</>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Form (multi-page)",
9
+ code: "<>\n {setDefaultState(\"progress\", 2)}\n <ContentBlock width=\"small\">\n <Stack space=\"medium\">\n <Stepper label=\"Linear steps\" progress={getState(\"progress\")}>\n <Step>1. First step</Step>\n <Step>2. Second step</Step>\n <Step>3. Third step</Step>\n <Step>4. Fourth step</Step>\n </Stepper>\n <Placeholder height={500} label=\"Form contents\" />\n <Hidden below=\"tablet\">\n <Columns space=\"none\">\n <Column>\n <Inline space=\"small\">\n {getState(\"progress\") > 1 ? (\n <Button\n icon={<IconArrow direction=\"left\" />}\n variant=\"soft\"\n onClick={() => setState(\"progress\", getState(\"progress\") - 1)}\n >\n Back\n </Button>\n ) : null}\n </Inline>\n </Column>\n <Column>\n <Inline align=\"right\" space=\"medium\">\n <Inline space=\"small\">\n <Button variant=\"transparent\">Save draft</Button>\n {getState(\"progress\") < 4 ? (\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() =>\n setState(\"progress\", getState(\"progress\") + 1)\n }\n >\n Continue\n </Button>\n ) : null}\n {getState(\"progress\") > 3 ? (\n <Button\n icon={<IconSend />}\n iconPosition=\"trailing\"\n tone=\"brandAccent\"\n onClick={() =>\n setState(\"progress\", getState(\"progress\") + 1)\n }\n >\n Submit\n </Button>\n ) : null}\n </Inline>\n </Inline>\n </Column>\n </Columns>\n </Hidden>\n <Hidden above=\"mobile\">\n <Stack space=\"small\">\n <Columns space=\"xsmall\">\n <Column>\n {getState(\"progress\") > 1 ? (\n <Button\n icon={<IconArrow direction=\"left\" />}\n variant=\"soft\"\n onClick={() => setState(\"progress\", getState(\"progress\") - 1)}\n >\n Back\n </Button>\n ) : null}\n </Column>\n <Column>\n {getState(\"progress\") < 4 ? (\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() => setState(\"progress\", getState(\"progress\") + 1)}\n >\n Continue\n </Button>\n ) : null}\n {getState(\"progress\") > 3 ? (\n <Button\n icon={<IconSend />}\n iconPosition=\"trailing\"\n tone=\"brandAccent\"\n onClick={() => setState(\"progress\", getState(\"progress\") + 1)}\n >\n Submit\n </Button>\n ) : null}\n </Column>\n </Columns>\n <Button variant=\"transparent\">Save draft</Button>\n </Stack>\n </Hidden>\n </Stack>\n </ContentBlock>\n</>"
10
+ }];
11
+ //#endregion
12
+ exports.snippets = snippets;
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/Forms.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Form",
5
+ code: "<>\n {setDefaultState(\"shouldValidate\", false)}\n {setDefaultState(\"Name\", \"\")}\n {setDefaultState(\"RoleTitle\", \"\")}\n {setDefaultState(\"textfield\", \"\")}\n <ContentBlock width=\"small\">\n <Stack space=\"xlarge\">\n <Heading level=\"2\">Form heading</Heading>\n <Stack space=\"large\">\n <Stack space=\"small\">\n <TextField\n label=\"Name\"\n onChange={setState(\"Name\")}\n value={getState(\"Name\")}\n reserveMessageSpace\n message={\n getState(\"shouldValidate\") === true &&\n getState(\"Name\").length === 0\n ? \"Enter your name\"\n : undefined\n }\n tone={\n getState(\"shouldValidate\") === true &&\n getState(\"Name\").length === 0\n ? \"critical\"\n : undefined\n }\n />\n\n <TextField\n label=\"Role title\"\n onChange={setState(\"RoleTitle\")}\n value={getState(\"RoleTitle\")}\n reserveMessageSpace\n message={\n getState(\"shouldValidate\") === true &&\n getState(\"RoleTitle\").length === 0\n ? \"Enter your role title\"\n : undefined\n }\n tone={\n getState(\"shouldValidate\") === true &&\n getState(\"RoleTitle\").length === 0\n ? \"critical\"\n : undefined\n }\n />\n\n <TextField\n label=\"Phone number\"\n onChange={setState(\"textfield\")}\n value={getState(\"textfield\")}\n secondaryLabel=\"optional\"\n reserveMessageSpace\n />\n </Stack>\n <Actions>\n <Button\n variant=\"solid\"\n onClick={() => setState(\"shouldValidate\", true)}\n >\n Submit\n </Button>\n </Actions>\n </Stack>\n </Stack>\n </ContentBlock>\n</>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Form (multi-page)",
9
+ code: "<>\n {setDefaultState(\"progress\", 2)}\n <ContentBlock width=\"small\">\n <Stack space=\"medium\">\n <Stepper label=\"Linear steps\" progress={getState(\"progress\")}>\n <Step>1. First step</Step>\n <Step>2. Second step</Step>\n <Step>3. Third step</Step>\n <Step>4. Fourth step</Step>\n </Stepper>\n <Placeholder height={500} label=\"Form contents\" />\n <Hidden below=\"tablet\">\n <Columns space=\"none\">\n <Column>\n <Inline space=\"small\">\n {getState(\"progress\") > 1 ? (\n <Button\n icon={<IconArrow direction=\"left\" />}\n variant=\"soft\"\n onClick={() => setState(\"progress\", getState(\"progress\") - 1)}\n >\n Back\n </Button>\n ) : null}\n </Inline>\n </Column>\n <Column>\n <Inline align=\"right\" space=\"medium\">\n <Inline space=\"small\">\n <Button variant=\"transparent\">Save draft</Button>\n {getState(\"progress\") < 4 ? (\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() =>\n setState(\"progress\", getState(\"progress\") + 1)\n }\n >\n Continue\n </Button>\n ) : null}\n {getState(\"progress\") > 3 ? (\n <Button\n icon={<IconSend />}\n iconPosition=\"trailing\"\n tone=\"brandAccent\"\n onClick={() =>\n setState(\"progress\", getState(\"progress\") + 1)\n }\n >\n Submit\n </Button>\n ) : null}\n </Inline>\n </Inline>\n </Column>\n </Columns>\n </Hidden>\n <Hidden above=\"mobile\">\n <Stack space=\"small\">\n <Columns space=\"xsmall\">\n <Column>\n {getState(\"progress\") > 1 ? (\n <Button\n icon={<IconArrow direction=\"left\" />}\n variant=\"soft\"\n onClick={() => setState(\"progress\", getState(\"progress\") - 1)}\n >\n Back\n </Button>\n ) : null}\n </Column>\n <Column>\n {getState(\"progress\") < 4 ? (\n <Button\n variant=\"solid\"\n tone=\"formAccent\"\n icon={<IconArrow direction=\"right\" />}\n iconPosition=\"trailing\"\n onClick={() => setState(\"progress\", getState(\"progress\") + 1)}\n >\n Continue\n </Button>\n ) : null}\n {getState(\"progress\") > 3 ? (\n <Button\n icon={<IconSend />}\n iconPosition=\"trailing\"\n tone=\"brandAccent\"\n onClick={() => setState(\"progress\", getState(\"progress\") + 1)}\n >\n Submit\n </Button>\n ) : null}\n </Column>\n </Columns>\n <Button variant=\"transparent\">Save draft</Button>\n </Stack>\n </Hidden>\n </Stack>\n </ContentBlock>\n</>"
10
+ }];
11
+ //#endregion
12
+ export { snippets };
@@ -0,0 +1,20 @@
1
+ //#region src/lib/playroom/snippets/Nudge.ts
2
+ const snippets = [
3
+ {
4
+ group: "Patterns",
5
+ name: "Nudge",
6
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"gutter\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"small\", tablet: \"medium\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width={responsiveValue({\n mobile: \"80px\",\n tablet: \"96px\",\n })}\n height={responsiveValue({\n mobile: \"80px\",\n tablet: \"96px\",\n })}\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"medium\">\n <Heading level=\"4\">Create a nudge today</Heading>\n <Text>\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Inline space=\"xsmall\">\n <Button>Create nudge</Button>\n <Button variant=\"transparent\">Learn more</Button>\n </Inline>\n </Stack>\n </Column>\n </Columns>\n</Box>"
7
+ },
8
+ {
9
+ group: "Patterns",
10
+ name: "Nudge (small)",
11
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"gutter\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"xsmall\", tablet: \"small\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width={responsiveValue({\n mobile: \"72px\",\n tablet: \"80px\",\n })}\n height={responsiveValue({\n mobile: \"72px\",\n tablet: \"80px\",\n })}\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"small\">\n <Text size=\"large\" weight=\"strong\">\n Create a small nudge\n </Text>\n <Text size=\"small\">\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Inline space=\"none\">\n <Button size=\"small\">Create nudge</Button>\n </Inline>\n </Stack>\n </Column>\n </Columns>\n</Box>"
12
+ },
13
+ {
14
+ group: "Patterns",
15
+ name: "Nudge (xsmall)",
16
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"medium\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"xxsmall\", tablet: \"xsmall\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width=\"72px\"\n height=\"72px\"\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"small\">\n <Text weight=\"strong\">Create an xsmall nudge</Text>\n <Text size=\"small\">\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Text size=\"small\">\n <TextLinkButton>Create nudge</TextLinkButton>\n </Text>\n </Stack>\n </Column>\n </Columns>\n</Box>"
17
+ }
18
+ ];
19
+ //#endregion
20
+ exports.snippets = snippets;
@@ -0,0 +1,20 @@
1
+ //#region src/lib/playroom/snippets/Nudge.ts
2
+ const snippets = [
3
+ {
4
+ group: "Patterns",
5
+ name: "Nudge",
6
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"gutter\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"small\", tablet: \"medium\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width={responsiveValue({\n mobile: \"80px\",\n tablet: \"96px\",\n })}\n height={responsiveValue({\n mobile: \"80px\",\n tablet: \"96px\",\n })}\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"medium\">\n <Heading level=\"4\">Create a nudge today</Heading>\n <Text>\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Inline space=\"xsmall\">\n <Button>Create nudge</Button>\n <Button variant=\"transparent\">Learn more</Button>\n </Inline>\n </Stack>\n </Column>\n </Columns>\n</Box>"
7
+ },
8
+ {
9
+ group: "Patterns",
10
+ name: "Nudge (small)",
11
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"gutter\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"xsmall\", tablet: \"small\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width={responsiveValue({\n mobile: \"72px\",\n tablet: \"80px\",\n })}\n height={responsiveValue({\n mobile: \"72px\",\n tablet: \"80px\",\n })}\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"small\">\n <Text size=\"large\" weight=\"strong\">\n Create a small nudge\n </Text>\n <Text size=\"small\">\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Inline space=\"none\">\n <Button size=\"small\">Create nudge</Button>\n </Inline>\n </Stack>\n </Column>\n </Columns>\n</Box>"
12
+ },
13
+ {
14
+ group: "Patterns",
15
+ name: "Nudge (xsmall)",
16
+ code: "<Box background=\"formAccentSoft\" padding=\"gutter\" borderRadius=\"large\">\n <Columns reverse space=\"medium\" collapseBelow=\"tablet\">\n <Column width=\"content\">\n <Columns space=\"xsmall\">\n <Column>\n <Box\n background=\"surface\"\n borderRadius=\"full\"\n padding={{ mobile: \"xxsmall\", tablet: \"xsmall\" }}\n display=\"inlineBlock\"\n >\n <Placeholder\n shape=\"round\"\n label=\"illo\"\n width=\"72px\"\n height=\"72px\"\n />\n </Box>\n </Column>\n <Column width=\"content\">\n <ButtonIcon\n variant=\"transparent\"\n icon={<IconClear />}\n label=\"Close\"\n bleed\n />\n </Column>\n </Columns>\n </Column>\n <Column>\n <Stack space=\"small\">\n <Text weight=\"strong\">Create an xsmall nudge</Text>\n <Text size=\"small\">\n Use a nudge to drive specific behaviour that leads to better outcomes\n for customers or SEEK.\n </Text>\n <Text size=\"small\">\n <TextLinkButton>Create nudge</TextLinkButton>\n </Text>\n </Stack>\n </Column>\n </Columns>\n</Box>"
17
+ }
18
+ ];
19
+ //#endregion
20
+ export { snippets };
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/ServiceOutageBanner.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Service outage banner (widespread)",
5
+ code: "<>\n {setDefaultState(\"dialog\", false)}\n <Box\n background=\"criticalLight\"\n paddingY=\"gutter\"\n paddingX={{ mobile: \"xsmall\", tablet: \"gutter\" }}\n >\n <Stack space=\"none\" align=\"center\">\n <Text icon={<IconCritical />}>\n Critical system outage banner example. Notice how the text wraps across\n different screen sizes. We maximise text width to limit the height of\n the banner.{\" \"}\n <TextLink href=\"#\" onClick={() => toggleState(\"dialog\")}>\n Read more\n </TextLink>\n </Text>\n </Stack>\n </Box>\n <Dialog\n title=\"Critical message\"\n description={<Text tone=\"secondary\">Optional description</Text>}\n open={getState(\"dialog\")}\n onClose={() => toggleState(\"dialog\")}\n >\n <Placeholder height={100} width=\"100%\" />\n </Dialog>\n</>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Service outage banner (isolated)",
9
+ code: "<Alert tone=\"caution\" onClose={() => {}} closeLabel=\"Close info alert\">\n <Text>This is a contextual caution message that can be dismissed.</Text>\n</Alert>"
10
+ }];
11
+ //#endregion
12
+ exports.snippets = snippets;
@@ -0,0 +1,12 @@
1
+ //#region src/lib/playroom/snippets/ServiceOutageBanner.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Service outage banner (widespread)",
5
+ code: "<>\n {setDefaultState(\"dialog\", false)}\n <Box\n background=\"criticalLight\"\n paddingY=\"gutter\"\n paddingX={{ mobile: \"xsmall\", tablet: \"gutter\" }}\n >\n <Stack space=\"none\" align=\"center\">\n <Text icon={<IconCritical />}>\n Critical system outage banner example. Notice how the text wraps across\n different screen sizes. We maximise text width to limit the height of\n the banner.{\" \"}\n <TextLink href=\"#\" onClick={() => toggleState(\"dialog\")}>\n Read more\n </TextLink>\n </Text>\n </Stack>\n </Box>\n <Dialog\n title=\"Critical message\"\n description={<Text tone=\"secondary\">Optional description</Text>}\n open={getState(\"dialog\")}\n onClose={() => toggleState(\"dialog\")}\n >\n <Placeholder height={100} width=\"100%\" />\n </Dialog>\n</>"
6
+ }, {
7
+ group: "Patterns",
8
+ name: "Service outage banner (isolated)",
9
+ code: "<Alert tone=\"caution\" onClose={() => {}} closeLabel=\"Close info alert\">\n <Text>This is a contextual caution message that can be dismissed.</Text>\n</Alert>"
10
+ }];
11
+ //#endregion
12
+ export { snippets };
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/SkeletonLoader.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Skeleton loader",
5
+ code: "<Card>\n <Stack space=\"medium\">\n <Stack space=\"xsmall\">\n <Box\n background=\"neutralLight\"\n borderRadius=\"standard\"\n style={{\n height: vars.space.xxlarge,\n width: vars.space.xxxlarge,\n }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.medium, width: \"60%\" }}\n />\n </Stack>\n <Stack space=\"xsmall\">\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"90%\" }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"90%\" }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"60%\" }}\n />\n </Stack>\n <Box\n background=\"neutralLight\"\n borderRadius=\"standard\"\n style={{ height: \"40px\", width: vars.space.xxxlarge }}\n />\n </Stack>\n</Card>"
6
+ }];
7
+ //#endregion
8
+ exports.snippets = snippets;
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/SkeletonLoader.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Skeleton loader",
5
+ code: "<Card>\n <Stack space=\"medium\">\n <Stack space=\"xsmall\">\n <Box\n background=\"neutralLight\"\n borderRadius=\"standard\"\n style={{\n height: vars.space.xxlarge,\n width: vars.space.xxxlarge,\n }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.medium, width: \"60%\" }}\n />\n </Stack>\n <Stack space=\"xsmall\">\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"90%\" }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"90%\" }}\n />\n\n <Box\n background=\"neutralLight\"\n borderRadius=\"full\"\n style={{ height: vars.space.xsmall, width: \"60%\" }}\n />\n </Stack>\n <Box\n background=\"neutralLight\"\n borderRadius=\"standard\"\n style={{ height: \"40px\", width: vars.space.xxxlarge }}\n />\n </Stack>\n</Card>"
6
+ }];
7
+ //#endregion
8
+ export { snippets };
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/SocialShare.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Social share",
5
+ code: "<Inline space=\"none\">\n <MenuRenderer\n offsetSpace=\"small\"\n align=\"right\"\n width=\"small\"\n trigger={(triggerProps) => (\n <Button variant=\"transparent\" icon={<IconShare />} {...triggerProps}>\n Share job\n </Button>\n )}\n >\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialFacebook />}>\n Facebook\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialInstagram />}>\n Instagram\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialLinkedIn />}>\n LinkedIn\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialX />}>\n Twitter\n </MenuItemLink>\n <MenuItemLink\n href=\"#\"\n icon={<IconLink />}\n onClick={() =>\n showToast({\n message: \"Link copied\",\n tone: \"positive\",\n key: \"1\",\n })\n }\n >\n Copy link\n </MenuItemLink>\n </MenuRenderer>\n</Inline>"
6
+ }];
7
+ //#endregion
8
+ exports.snippets = snippets;
@@ -0,0 +1,8 @@
1
+ //#region src/lib/playroom/snippets/SocialShare.ts
2
+ const snippets = [{
3
+ group: "Patterns",
4
+ name: "Social share",
5
+ code: "<Inline space=\"none\">\n <MenuRenderer\n offsetSpace=\"small\"\n align=\"right\"\n width=\"small\"\n trigger={(triggerProps) => (\n <Button variant=\"transparent\" icon={<IconShare />} {...triggerProps}>\n Share job\n </Button>\n )}\n >\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialFacebook />}>\n Facebook\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialInstagram />}>\n Instagram\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialLinkedIn />}>\n LinkedIn\n </MenuItemLink>\n <MenuItemLink href=\"#\" target=\"_blank\" icon={<IconSocialX />}>\n Twitter\n </MenuItemLink>\n <MenuItemLink\n href=\"#\"\n icon={<IconLink />}\n onClick={() =>\n showToast({\n message: \"Link copied\",\n tone: \"positive\",\n key: \"1\",\n })\n }\n >\n Copy link\n </MenuItemLink>\n </MenuRenderer>\n</Inline>"
6
+ }];
7
+ //#endregion
8
+ export { snippets };
@@ -6,6 +6,7 @@ const require_Avatar = require("./snippets/Avatar.cjs");
6
6
  const require_Badge = require("./snippets/Badge.cjs");
7
7
  const require_Bleed = require("./snippets/Bleed.cjs");
8
8
  const require_BrandedContainer = require("./snippets/BrandedContainer.cjs");
9
+ const require_BulkActions = require("./snippets/BulkActions.cjs");
9
10
  const require_Button = require("./snippets/Button.cjs");
10
11
  const require_ButtonIcon = require("./snippets/ButtonIcon.cjs");
11
12
  const require_Card = require("./snippets/Card.cjs");
@@ -16,11 +17,15 @@ const require_CompactPage = require("./snippets/CompactPage.cjs");
16
17
  const require_ContentBlock = require("./snippets/ContentBlock.cjs");
17
18
  const require_Dialog = require("./snippets/Dialog.cjs");
18
19
  const require_Disclosure = require("./snippets/Disclosure.cjs");
20
+ const require_DividedLists = require("./snippets/DividedLists.cjs");
19
21
  const require_Divider = require("./snippets/Divider.cjs");
20
22
  const require_Drawer = require("./snippets/Drawer.cjs");
21
23
  const require_Dropdown = require("./snippets/Dropdown.cjs");
24
+ const require_EmptyState = require("./snippets/EmptyState.cjs");
25
+ const require_ErrorState = require("./snippets/ErrorState.cjs");
22
26
  const require_FieldLabel = require("./snippets/FieldLabel.cjs");
23
27
  const require_FieldMessage = require("./snippets/FieldMessage.cjs");
28
+ const require_Forms = require("./snippets/Forms.cjs");
24
29
  const require_Heading = require("./snippets/Heading.cjs");
25
30
  const require_Inline = require("./snippets/Inline.cjs");
26
31
  const require_List = require("./snippets/List.cjs");
@@ -28,6 +33,7 @@ const require_Loader = require("./snippets/Loader.cjs");
28
33
  const require_MenuRenderer = require("./snippets/MenuRenderer.cjs");
29
34
  const require_MonthPicker = require("./snippets/MonthPicker.cjs");
30
35
  const require_Notice = require("./snippets/Notice.cjs");
36
+ const require_Nudge = require("./snippets/Nudge.cjs");
31
37
  const require_OverflowMenu = require("./snippets/OverflowMenu.cjs");
32
38
  const require_Page = require("./snippets/Page.cjs");
33
39
  const require_PageBlock = require("./snippets/PageBlock.cjs");
@@ -36,6 +42,9 @@ const require_PasswordField = require("./snippets/PasswordField.cjs");
36
42
  const require_RadioGroup = require("./snippets/RadioGroup.cjs");
37
43
  const require_Rating = require("./snippets/Rating.cjs");
38
44
  const require_Secondary = require("./snippets/Secondary.cjs");
45
+ const require_ServiceOutageBanner = require("./snippets/ServiceOutageBanner.cjs");
46
+ const require_SkeletonLoader = require("./snippets/SkeletonLoader.cjs");
47
+ const require_SocialShare = require("./snippets/SocialShare.cjs");
39
48
  const require_SpaciousPage = require("./snippets/SpaciousPage.cjs");
40
49
  const require_Spread = require("./snippets/Spread.cjs");
41
50
  const require_Stack = require("./snippets/Stack.cjs");
@@ -58,6 +67,7 @@ const require_TooltipRenderer = require("./snippets/TooltipRenderer.cjs");
58
67
  const groupOrder = [
59
68
  "Layouts",
60
69
  "Sections",
70
+ "Patterns",
61
71
  "Components"
62
72
  ];
63
73
  const allSnippets = [];
@@ -68,6 +78,15 @@ const snippetsMap = {
68
78
  SpaciousPage: require_SpaciousPage.snippets,
69
79
  StandardPage: require_StandardPage.snippets,
70
80
  StandardSection: require_StandardSection.snippets,
81
+ BulkActions: require_BulkActions.snippets,
82
+ DividedLists: require_DividedLists.snippets,
83
+ EmptyState: require_EmptyState.snippets,
84
+ ErrorState: require_ErrorState.snippets,
85
+ Forms: require_Forms.snippets,
86
+ Nudge: require_Nudge.snippets,
87
+ ServiceOutageBanner: require_ServiceOutageBanner.snippets,
88
+ SkeletonLoader: require_SkeletonLoader.snippets,
89
+ SocialShare: require_SocialShare.snippets,
71
90
  Accordion: require_Accordion.snippets,
72
91
  Actions: require_Actions.snippets,
73
92
  Alert: require_Alert.snippets,
@@ -127,7 +146,7 @@ for (const [name, snippets] of Object.entries(snippetsMap)) for (const snippet o
127
146
  allSnippets.sort((a, b) => {
128
147
  const aIndex = groupOrder.indexOf(a.group);
129
148
  const bIndex = groupOrder.indexOf(b.group);
130
- return (aIndex === -1 ? 3 : aIndex) - (bIndex === -1 ? 3 : bIndex);
149
+ return (aIndex === -1 ? 4 : aIndex) - (bIndex === -1 ? 4 : bIndex);
131
150
  });
132
151
  //#endregion
133
152
  exports.default = allSnippets;
@@ -6,68 +6,87 @@ import { snippets as snippets$4 } from "./snippets/Avatar.mjs";
6
6
  import { snippets as snippets$5 } from "./snippets/Badge.mjs";
7
7
  import { snippets as snippets$6 } from "./snippets/Bleed.mjs";
8
8
  import { snippets as snippets$7 } from "./snippets/BrandedContainer.mjs";
9
- import { snippets as snippets$8 } from "./snippets/Button.mjs";
10
- import { snippets as snippets$9 } from "./snippets/ButtonIcon.mjs";
11
- import { snippets as snippets$10 } from "./snippets/Card.mjs";
12
- import { snippets as snippets$11 } from "./snippets/CardList.mjs";
13
- import { snippets as snippets$12 } from "./snippets/Checkbox.mjs";
14
- import { snippets as snippets$13 } from "./snippets/Columns.mjs";
15
- import { snippets as snippets$14 } from "./snippets/CompactPage.mjs";
16
- import { snippets as snippets$15 } from "./snippets/ContentBlock.mjs";
17
- import { snippets as snippets$16 } from "./snippets/Dialog.mjs";
18
- import { snippets as snippets$17 } from "./snippets/Disclosure.mjs";
19
- import { snippets as snippets$18 } from "./snippets/Divider.mjs";
20
- import { snippets as snippets$19 } from "./snippets/Drawer.mjs";
21
- import { snippets as snippets$20 } from "./snippets/Dropdown.mjs";
22
- import { snippets as snippets$21 } from "./snippets/FieldLabel.mjs";
23
- import { snippets as snippets$22 } from "./snippets/FieldMessage.mjs";
24
- import { snippets as snippets$23 } from "./snippets/Heading.mjs";
25
- import { snippets as snippets$24 } from "./snippets/Inline.mjs";
26
- import { snippets as snippets$25 } from "./snippets/List.mjs";
27
- import { snippets as snippets$26 } from "./snippets/Loader.mjs";
28
- import { snippets as snippets$27 } from "./snippets/MenuRenderer.mjs";
29
- import { snippets as snippets$28 } from "./snippets/MonthPicker.mjs";
30
- import { snippets as snippets$29 } from "./snippets/Notice.mjs";
31
- import { snippets as snippets$30 } from "./snippets/OverflowMenu.mjs";
32
- import { snippets as snippets$31 } from "./snippets/Page.mjs";
33
- import { snippets as snippets$32 } from "./snippets/PageBlock.mjs";
34
- import { snippets as snippets$33 } from "./snippets/Pagination.mjs";
35
- import { snippets as snippets$34 } from "./snippets/PasswordField.mjs";
36
- import { snippets as snippets$35 } from "./snippets/RadioGroup.mjs";
37
- import { snippets as snippets$36 } from "./snippets/Rating.mjs";
38
- import { snippets as snippets$37 } from "./snippets/Secondary.mjs";
39
- import { snippets as snippets$38 } from "./snippets/SpaciousPage.mjs";
40
- import { snippets as snippets$39 } from "./snippets/Spread.mjs";
41
- import { snippets as snippets$40 } from "./snippets/Stack.mjs";
42
- import { snippets as snippets$41 } from "./snippets/StandardPage.mjs";
43
- import { snippets as snippets$42 } from "./snippets/StandardSection.mjs";
44
- import { snippets as snippets$43 } from "./snippets/Stepper.mjs";
45
- import { snippets as snippets$44 } from "./snippets/Strong.mjs";
46
- import { snippets as snippets$45 } from "./snippets/Table.mjs";
47
- import { snippets as snippets$46 } from "./snippets/Tabs.mjs";
48
- import { snippets as snippets$47 } from "./snippets/Tag.mjs";
49
- import { snippets as snippets$48 } from "./snippets/Text.mjs";
50
- import { snippets as snippets$49 } from "./snippets/TextDropdown.mjs";
51
- import { snippets as snippets$50 } from "./snippets/TextField.mjs";
52
- import { snippets as snippets$51 } from "./snippets/TextLink.mjs";
53
- import { snippets as snippets$52 } from "./snippets/Textarea.mjs";
54
- import { snippets as snippets$53 } from "./snippets/Tiles.mjs";
55
- import { snippets as snippets$54 } from "./snippets/Toggle.mjs";
56
- import { snippets as snippets$55 } from "./snippets/TooltipRenderer.mjs";
9
+ import { snippets as snippets$8 } from "./snippets/BulkActions.mjs";
10
+ import { snippets as snippets$9 } from "./snippets/Button.mjs";
11
+ import { snippets as snippets$10 } from "./snippets/ButtonIcon.mjs";
12
+ import { snippets as snippets$11 } from "./snippets/Card.mjs";
13
+ import { snippets as snippets$12 } from "./snippets/CardList.mjs";
14
+ import { snippets as snippets$13 } from "./snippets/Checkbox.mjs";
15
+ import { snippets as snippets$14 } from "./snippets/Columns.mjs";
16
+ import { snippets as snippets$15 } from "./snippets/CompactPage.mjs";
17
+ import { snippets as snippets$16 } from "./snippets/ContentBlock.mjs";
18
+ import { snippets as snippets$17 } from "./snippets/Dialog.mjs";
19
+ import { snippets as snippets$18 } from "./snippets/Disclosure.mjs";
20
+ import { snippets as snippets$19 } from "./snippets/DividedLists.mjs";
21
+ import { snippets as snippets$20 } from "./snippets/Divider.mjs";
22
+ import { snippets as snippets$21 } from "./snippets/Drawer.mjs";
23
+ import { snippets as snippets$22 } from "./snippets/Dropdown.mjs";
24
+ import { snippets as snippets$23 } from "./snippets/EmptyState.mjs";
25
+ import { snippets as snippets$24 } from "./snippets/ErrorState.mjs";
26
+ import { snippets as snippets$25 } from "./snippets/FieldLabel.mjs";
27
+ import { snippets as snippets$26 } from "./snippets/FieldMessage.mjs";
28
+ import { snippets as snippets$27 } from "./snippets/Forms.mjs";
29
+ import { snippets as snippets$28 } from "./snippets/Heading.mjs";
30
+ import { snippets as snippets$29 } from "./snippets/Inline.mjs";
31
+ import { snippets as snippets$30 } from "./snippets/List.mjs";
32
+ import { snippets as snippets$31 } from "./snippets/Loader.mjs";
33
+ import { snippets as snippets$32 } from "./snippets/MenuRenderer.mjs";
34
+ import { snippets as snippets$33 } from "./snippets/MonthPicker.mjs";
35
+ import { snippets as snippets$34 } from "./snippets/Notice.mjs";
36
+ import { snippets as snippets$35 } from "./snippets/Nudge.mjs";
37
+ import { snippets as snippets$36 } from "./snippets/OverflowMenu.mjs";
38
+ import { snippets as snippets$37 } from "./snippets/Page.mjs";
39
+ import { snippets as snippets$38 } from "./snippets/PageBlock.mjs";
40
+ import { snippets as snippets$39 } from "./snippets/Pagination.mjs";
41
+ import { snippets as snippets$40 } from "./snippets/PasswordField.mjs";
42
+ import { snippets as snippets$41 } from "./snippets/RadioGroup.mjs";
43
+ import { snippets as snippets$42 } from "./snippets/Rating.mjs";
44
+ import { snippets as snippets$43 } from "./snippets/Secondary.mjs";
45
+ import { snippets as snippets$44 } from "./snippets/ServiceOutageBanner.mjs";
46
+ import { snippets as snippets$45 } from "./snippets/SkeletonLoader.mjs";
47
+ import { snippets as snippets$46 } from "./snippets/SocialShare.mjs";
48
+ import { snippets as snippets$47 } from "./snippets/SpaciousPage.mjs";
49
+ import { snippets as snippets$48 } from "./snippets/Spread.mjs";
50
+ import { snippets as snippets$49 } from "./snippets/Stack.mjs";
51
+ import { snippets as snippets$50 } from "./snippets/StandardPage.mjs";
52
+ import { snippets as snippets$51 } from "./snippets/StandardSection.mjs";
53
+ import { snippets as snippets$52 } from "./snippets/Stepper.mjs";
54
+ import { snippets as snippets$53 } from "./snippets/Strong.mjs";
55
+ import { snippets as snippets$54 } from "./snippets/Table.mjs";
56
+ import { snippets as snippets$55 } from "./snippets/Tabs.mjs";
57
+ import { snippets as snippets$56 } from "./snippets/Tag.mjs";
58
+ import { snippets as snippets$57 } from "./snippets/Text.mjs";
59
+ import { snippets as snippets$58 } from "./snippets/TextDropdown.mjs";
60
+ import { snippets as snippets$59 } from "./snippets/TextField.mjs";
61
+ import { snippets as snippets$60 } from "./snippets/TextLink.mjs";
62
+ import { snippets as snippets$61 } from "./snippets/Textarea.mjs";
63
+ import { snippets as snippets$62 } from "./snippets/Tiles.mjs";
64
+ import { snippets as snippets$63 } from "./snippets/Toggle.mjs";
65
+ import { snippets as snippets$64 } from "./snippets/TooltipRenderer.mjs";
57
66
  //#region src/lib/playroom/snippets.ts
58
67
  const groupOrder = [
59
68
  "Layouts",
60
69
  "Sections",
70
+ "Patterns",
61
71
  "Components"
62
72
  ];
63
73
  const allSnippets = [];
64
74
  const snippetsMap = {
65
75
  BrandedContainer: snippets$7,
66
- CardList: snippets$11,
67
- CompactPage: snippets$14,
68
- SpaciousPage: snippets$38,
69
- StandardPage: snippets$41,
70
- StandardSection: snippets$42,
76
+ CardList: snippets$12,
77
+ CompactPage: snippets$15,
78
+ SpaciousPage: snippets$47,
79
+ StandardPage: snippets$50,
80
+ StandardSection: snippets$51,
81
+ BulkActions: snippets$8,
82
+ DividedLists: snippets$19,
83
+ EmptyState: snippets$23,
84
+ ErrorState: snippets$24,
85
+ Forms: snippets$27,
86
+ Nudge: snippets$35,
87
+ ServiceOutageBanner: snippets$44,
88
+ SkeletonLoader: snippets$45,
89
+ SocialShare: snippets$46,
71
90
  Accordion: snippets,
72
91
  Actions: snippets$1,
73
92
  Alert: snippets$2,
@@ -75,49 +94,49 @@ const snippetsMap = {
75
94
  Avatar: snippets$4,
76
95
  Badge: snippets$5,
77
96
  Bleed: snippets$6,
78
- Button: snippets$8,
79
- ButtonIcon: snippets$9,
80
- Card: snippets$10,
81
- Checkbox: snippets$12,
82
- Columns: snippets$13,
83
- ContentBlock: snippets$15,
84
- Dialog: snippets$16,
85
- Disclosure: snippets$17,
86
- Divider: snippets$18,
87
- Drawer: snippets$19,
88
- Dropdown: snippets$20,
89
- FieldLabel: snippets$21,
90
- FieldMessage: snippets$22,
91
- Heading: snippets$23,
92
- Inline: snippets$24,
93
- List: snippets$25,
94
- Loader: snippets$26,
95
- MenuRenderer: snippets$27,
96
- MonthPicker: snippets$28,
97
- Notice: snippets$29,
98
- OverflowMenu: snippets$30,
99
- Page: snippets$31,
100
- PageBlock: snippets$32,
101
- Pagination: snippets$33,
102
- PasswordField: snippets$34,
103
- RadioGroup: snippets$35,
104
- Rating: snippets$36,
105
- Secondary: snippets$37,
106
- Spread: snippets$39,
107
- Stack: snippets$40,
108
- Stepper: snippets$43,
109
- Strong: snippets$44,
110
- Table: snippets$45,
111
- Tabs: snippets$46,
112
- Tag: snippets$47,
113
- Text: snippets$48,
114
- TextDropdown: snippets$49,
115
- TextField: snippets$50,
116
- TextLink: snippets$51,
117
- Textarea: snippets$52,
118
- Tiles: snippets$53,
119
- Toggle: snippets$54,
120
- TooltipRenderer: snippets$55
97
+ Button: snippets$9,
98
+ ButtonIcon: snippets$10,
99
+ Card: snippets$11,
100
+ Checkbox: snippets$13,
101
+ Columns: snippets$14,
102
+ ContentBlock: snippets$16,
103
+ Dialog: snippets$17,
104
+ Disclosure: snippets$18,
105
+ Divider: snippets$20,
106
+ Drawer: snippets$21,
107
+ Dropdown: snippets$22,
108
+ FieldLabel: snippets$25,
109
+ FieldMessage: snippets$26,
110
+ Heading: snippets$28,
111
+ Inline: snippets$29,
112
+ List: snippets$30,
113
+ Loader: snippets$31,
114
+ MenuRenderer: snippets$32,
115
+ MonthPicker: snippets$33,
116
+ Notice: snippets$34,
117
+ OverflowMenu: snippets$36,
118
+ Page: snippets$37,
119
+ PageBlock: snippets$38,
120
+ Pagination: snippets$39,
121
+ PasswordField: snippets$40,
122
+ RadioGroup: snippets$41,
123
+ Rating: snippets$42,
124
+ Secondary: snippets$43,
125
+ Spread: snippets$48,
126
+ Stack: snippets$49,
127
+ Stepper: snippets$52,
128
+ Strong: snippets$53,
129
+ Table: snippets$54,
130
+ Tabs: snippets$55,
131
+ Tag: snippets$56,
132
+ Text: snippets$57,
133
+ TextDropdown: snippets$58,
134
+ TextField: snippets$59,
135
+ TextLink: snippets$60,
136
+ Textarea: snippets$61,
137
+ Tiles: snippets$62,
138
+ Toggle: snippets$63,
139
+ TooltipRenderer: snippets$64
121
140
  };
122
141
  for (const [name, snippets] of Object.entries(snippetsMap)) for (const snippet of snippets) allSnippets.push({
123
142
  ...snippet,
@@ -127,7 +146,7 @@ for (const [name, snippets] of Object.entries(snippetsMap)) for (const snippet o
127
146
  allSnippets.sort((a, b) => {
128
147
  const aIndex = groupOrder.indexOf(a.group);
129
148
  const bIndex = groupOrder.indexOf(b.group);
130
- return (aIndex === -1 ? 3 : aIndex) - (bIndex === -1 ? 3 : bIndex);
149
+ return (aIndex === -1 ? 4 : aIndex) - (bIndex === -1 ? 4 : bIndex);
131
150
  });
132
151
  //#endregion
133
152
  export { allSnippets as default };
@@ -198,4 +198,9 @@ import { PlaceholderHeader } from "../lib/playroom/components/PlaceholderHeader/
198
198
  import { PlaceholderFooter } from "../lib/playroom/components/PlaceholderFooter/PlaceholderFooter.cjs";
199
199
  import { Placeholder } from "../lib/playroom/components/Placeholder/Placeholder.cjs";
200
200
  import { BraidPortal, BraidProvider, makeLinkComponent } from "../lib/playroom/components.cjs";
201
+ //#region src/playroom/components.d.ts
202
+ declare global {
203
+ var __IS_PLAYROOM_ENVIRONMENT__: string;
204
+ }
205
+ //#endregion
201
206
  export { Accordion, AccordionItem, Actions, Alert, Autosuggest, Avatar, Badge, Bleed, Box, BoxRenderer, BraidPortal, BraidProvider, Button, ButtonIcon, ButtonLink, Card, Checkbox, CheckboxStandalone, Column, Columns, ContentBlock, Dialog, Disclosure, Divider, Drawer, Dropdown, FieldLabel, FieldMessage, Heading, Hidden, HiddenVisually, IconAI, IconAdd, IconArrow, IconAttachment, IconBluetooth, IconBold, IconBookmark, IconBulletList, IconCareer, IconCategory, IconCaution, IconChecklist, IconChevron, IconClear, IconCompany, IconCompanyVerified, IconCompose, IconCopy, IconCoverLetter, IconCreditCard, IconCritical, IconDate, IconDelete, IconDesktop, IconDisallow, IconDocument, IconDocumentBroken, IconDownload, IconEdit, IconEducation, IconEnlarge, IconExperience, IconFilter, IconFlag, IconGift, IconGlobe, IconGrid, IconHash, IconHeart, IconHelp, IconHistory, IconHome, IconImage, IconImageBroken, IconInfo, IconInvoice, IconItalic, IconLanguage, IconLicence, IconLink, IconLinkBroken, IconLocation, IconMail, IconMessage, IconMicrophone, IconMinus, IconMobile, IconMoney, IconNewWindow, IconNote, IconNotification, IconNumberedList, IconOverflow, IconPeople, IconPersonAdd, IconPersonVerified, IconPhone, IconPhotoAdd, IconPlatformAndroid, IconPlatformApple, IconPositive, IconPrint, IconProfile, IconPromote, IconQR, IconRecommended, IconRedo, IconRefresh, IconRenderer, IconResume, IconRocket, IconSearch, IconSecurity, IconSend, IconSent, IconSentiment, IconSettings, IconShare, IconSkills, IconSocialFacebook, IconSocialGitHub, IconSocialInstagram, IconSocialLinkedIn, IconSocialMedium, IconSocialTiktok, IconSocialX, IconSocialYouTube, IconSort, IconStar, IconStatistics, IconSubCategory, IconTag, IconThumb, IconTick, IconTime, IconTip, IconTitle, IconUndo, IconUpload, IconVideo, IconVisibility, IconWorkExperience, IconZoomIn, IconZoomOut, Inline, Link, LinkComponent, List, Loader, MenuItem, MenuItemCheckbox, MenuItemDivider, MenuItemLink, MenuRenderer, MonthPicker, Notice, OverflowMenu, Page, PageBlock, Pagination, PasswordField, Placeholder, PlaceholderFooter, PlaceholderHeader, RadioGroup, RadioItem, Rating, Secondary, Spread, Stack, Step, Stepper, Strong, Tab, TabPanel, TabPanels, Table, TableBody, TableCell, TableFooter, TableHeader, TableHeaderCell, TableRow, Tabs, TabsProvider, Tag, Text, TextDropdown, TextField, TextLink, TextLinkButton, Textarea, ThemeNameConsumer, Tiles, ToastProvider, Toggle, TooltipRenderer, filterSuggestions, makeLinkComponent, useColor, useResponsiveValue, useSpace, useThemeName, useToast };
@@ -198,4 +198,9 @@ import { PlaceholderHeader } from "../lib/playroom/components/PlaceholderHeader/
198
198
  import { PlaceholderFooter } from "../lib/playroom/components/PlaceholderFooter/PlaceholderFooter.mjs";
199
199
  import { Placeholder } from "../lib/playroom/components/Placeholder/Placeholder.mjs";
200
200
  import { BraidPortal, BraidProvider, makeLinkComponent } from "../lib/playroom/components.mjs";
201
+ //#region src/playroom/components.d.ts
202
+ declare global {
203
+ var __IS_PLAYROOM_ENVIRONMENT__: string;
204
+ }
205
+ //#endregion
201
206
  export { Accordion, AccordionItem, Actions, Alert, Autosuggest, Avatar, Badge, Bleed, Box, BoxRenderer, BraidPortal, BraidProvider, Button, ButtonIcon, ButtonLink, Card, Checkbox, CheckboxStandalone, Column, Columns, ContentBlock, Dialog, Disclosure, Divider, Drawer, Dropdown, FieldLabel, FieldMessage, Heading, Hidden, HiddenVisually, IconAI, IconAdd, IconArrow, IconAttachment, IconBluetooth, IconBold, IconBookmark, IconBulletList, IconCareer, IconCategory, IconCaution, IconChecklist, IconChevron, IconClear, IconCompany, IconCompanyVerified, IconCompose, IconCopy, IconCoverLetter, IconCreditCard, IconCritical, IconDate, IconDelete, IconDesktop, IconDisallow, IconDocument, IconDocumentBroken, IconDownload, IconEdit, IconEducation, IconEnlarge, IconExperience, IconFilter, IconFlag, IconGift, IconGlobe, IconGrid, IconHash, IconHeart, IconHelp, IconHistory, IconHome, IconImage, IconImageBroken, IconInfo, IconInvoice, IconItalic, IconLanguage, IconLicence, IconLink, IconLinkBroken, IconLocation, IconMail, IconMessage, IconMicrophone, IconMinus, IconMobile, IconMoney, IconNewWindow, IconNote, IconNotification, IconNumberedList, IconOverflow, IconPeople, IconPersonAdd, IconPersonVerified, IconPhone, IconPhotoAdd, IconPlatformAndroid, IconPlatformApple, IconPositive, IconPrint, IconProfile, IconPromote, IconQR, IconRecommended, IconRedo, IconRefresh, IconRenderer, IconResume, IconRocket, IconSearch, IconSecurity, IconSend, IconSent, IconSentiment, IconSettings, IconShare, IconSkills, IconSocialFacebook, IconSocialGitHub, IconSocialInstagram, IconSocialLinkedIn, IconSocialMedium, IconSocialTiktok, IconSocialX, IconSocialYouTube, IconSort, IconStar, IconStatistics, IconSubCategory, IconTag, IconThumb, IconTick, IconTime, IconTip, IconTitle, IconUndo, IconUpload, IconVideo, IconVisibility, IconWorkExperience, IconZoomIn, IconZoomOut, Inline, Link, LinkComponent, List, Loader, MenuItem, MenuItemCheckbox, MenuItemDivider, MenuItemLink, MenuRenderer, MonthPicker, Notice, OverflowMenu, Page, PageBlock, Pagination, PasswordField, Placeholder, PlaceholderFooter, PlaceholderHeader, RadioGroup, RadioItem, Rating, Secondary, Spread, Stack, Step, Stepper, Strong, Tab, TabPanel, TabPanels, Table, TableBody, TableCell, TableFooter, TableHeader, TableHeaderCell, TableRow, Tabs, TabsProvider, Tag, Text, TextDropdown, TextField, TextLink, TextLinkButton, Textarea, ThemeNameConsumer, Tiles, ToastProvider, Toggle, TooltipRenderer, filterSuggestions, makeLinkComponent, useColor, useResponsiveValue, useSpace, useThemeName, useToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-design-system",
3
- "version": "34.9.0",
3
+ "version": "34.9.1",
4
4
  "description": "Themeable design system for the SEEK Group",
5
5
  "homepage": "https://seek-oss.github.io/braid-design-system/",
6
6
  "bugs": {
@@ -143,7 +143,7 @@
143
143
  "@types/autosuggest-highlight": "^3.1.1",
144
144
  "@types/babel__core": "^7.20.1",
145
145
  "@types/lodash.curry": "^4.1.9",
146
- "@types/node": "^22.16.0",
146
+ "@types/node": "^24.13.3",
147
147
  "@types/react": "^19.1.8",
148
148
  "@types/react-dom": "^19.1.6",
149
149
  "@types/sanitize-html": "^2.13.0",
@@ -164,7 +164,8 @@
164
164
  "sanitize-html": "^2.12.1",
165
165
  "skott": "^0.32.1",
166
166
  "storybook": "^10.2.7",
167
- "title-case": "^3.0.3"
167
+ "title-case": "^3.0.3",
168
+ "tsx": "^4.19.2"
168
169
  },
169
170
  "peerDependencies": {
170
171
  "react": "^18 || ^19",