diff --git a/apps/prs/angular/src/app/app.component.html b/apps/prs/angular/src/app/app.component.html
index 780a3016ff..280b854410 100644
--- a/apps/prs/angular/src/app/app.component.html
+++ b/apps/prs/angular/src/app/app.component.html
@@ -15,9 +15,23 @@
[open]="true"
(onNavigate)="handleNavigate($event)"
[primaryContent]="primaryTemplate"
+ [secondaryContent]="secondaryTemplate"
>
+
+
+
+
+
so cascade resolves V2 over V1 unambiguously. Remove any existing
+ // node first, then append so the fresh node lands last.
+ document.getElementById(LINK_ID)?.remove();
+
+ if (mode === "v2") {
+ const link = document.createElement("link");
+ link.id = LINK_ID;
+ link.rel = "stylesheet";
+ link.href = V2_TOKENS_URL;
+ document.head.appendChild(link);
+ }
+
+ sessionStorage.setItem(STORAGE_KEY, mode);
+
+ // Only sync URL param if already present; don't add clutter on first toggle.
+ const url = new URL(window.location.href);
+ if (url.searchParams.has(URL_PARAM)) {
+ url.searchParams.set(URL_PARAM, mode);
+ window.history.replaceState({}, "", url);
+ }
+}
+
+// Eager side effect: resolve and apply at module load so V2 is in
+// before Angular bootstraps. Import this module once from main.ts.
+applyTokenVersion(resolveTokenVersion());
diff --git a/apps/prs/angular/src/main.ts b/apps/prs/angular/src/main.ts
index c8de31031e..91e46900ae 100644
--- a/apps/prs/angular/src/main.ts
+++ b/apps/prs/angular/src/main.ts
@@ -1,6 +1,19 @@
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";
+// This import has a side effect: token-version.ts calls applyTokenVersion at
+// module load, which puts the V2 stylesheet link in before Angular
+// bootstraps. Without this, the page would flash V1 on first paint.
+import {
+ applyTokenVersion,
+ resolveTokenVersion,
+} from "./app/token-version/token-version";
platformBrowserDynamic()
.bootstrapModule(AppModule)
+ .then(() => {
+ // Re-apply after Angular's bundled styles.css is in , so the V2
+ // link lands last in the cascade. Without this, the bundled V1 @import
+ // overrides V2 and the toggle appears to do nothing.
+ applyTokenVersion(resolveTokenVersion());
+ })
.catch((err) => console.error(err));
diff --git a/apps/prs/angular/src/routes/bugs/3602/bug3602.component.html b/apps/prs/angular/src/routes/bugs/3602/bug3602.component.html
new file mode 100644
index 0000000000..ebf54acc57
--- /dev/null
+++ b/apps/prs/angular/src/routes/bugs/3602/bug3602.component.html
@@ -0,0 +1,39 @@
+
3602 FileUploadInput and FileUploadCard Improvements
+ Issue 3605
+
+ Use :focus-visible across interactive components
+
+
+
+
+
+ View on GitHub
+
+
+
+
+
+ For every section: Tab should show the focus ring with the correct gap/offset.
+ Click should not leave a lingering ring. Mouse-down (:active)
+ on buttons should still show the pressed/focused look.
+
+
+
+
+
+
+ MicrositeHeader
+ Tab through the links inside the header. Click any link.
+
+
+
+
+
+
+
+ Chip and FilterChip
+ Chip (deprecated)
+
+
+
+
+
+
+ FilterChip
+
+
+
+
+
+
+
+
+
+
+
+ Plain link reset
+ Unstyled anchors pick up the global reset from assets/css/reset.css.
+
+
+
+
+
+
+
+ Checkbox
+ Tab to each. Click each. No ring on mouse click.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 7. Link — outer-container ring gated by JS modality check
+
+
+ Ring sits on the outer container so it wraps icon + text together. The component
+ listens for focusin on the slotted anchor and checks
+ .matches(':focus-visible') to keep keyboard-only semantics across the
+ slot boundary.
+
+
+ Plain links
+
+ First link
+ Second link
+ Third link
+
+
+ Links with leading icons
+
+ Download file
+ Learn more
+ Open in new tab
+
+
+ Links with trailing icons
+
+ Continue
+ See more
+ External resource
+
+
+ Links with both icons
+
+ Download and continue
+
+
+
+
+
+
+
+ Notification
+
+ Slotted anchors in notifications now use focus-visible. Keyboard only.
+
+
+
+ Info notification with a link inside.
+
+
+
+ Important notification with a link inside.
+
+
+
+
+ Emergency notification with a link inside.
+
+
+
+
+
+
+
+
+
+ 9. Tooltip — .tooltip:focus .tooltip-text → :focus-visible
+
+
+ Previously mouse-clicking the tooltip trigger revealed the tooltip. Now hover for mouse,
+ keyboard focus for keyboard.
+
+
+
+ Hover or Tab me
+
+
+
+
+
+
+
+
+
+ 10. Details — summary:focus → :focus-visible
+
+
+ Previously clicking the summary left a hover-ish style. Now click just toggles open;
+ keyboard focus shows the focused look.
+
+
+ Content inside the details component.
+
+
+
+
+
+
+
+
+ 11. DataGrid — realistic table usage
+
+
+ Typical pattern: goab-data-grid wrapping a goab-table. Focus styling
+ is JS-driven, now guarded with a keyboard-input tracker so mouse click doesn't show the ring.
+
+
+
+
+
+
Name
+
Role
+
Status
+
Actions
+
+
+
+
+
Alice Johnson
+
Developer
+
+
View
+
+
+
Bob Smith
+
Designer
+
+
View
+
+
+
Carol White
+
Manager
+
+
View
+
+
+
David Brown
+
Analyst
+
+
View
+
+
+
+
+
+ DataGrid around a table with row checkboxes
+
+ Adds a select-all checkbox to the header row and per-row checkboxes. When focus
+ lands on a cell whose only focusable child is the checkbox, focus delegates to
+ the checkbox itself. The corner cells should still show the rounded focus
+ treatment.
+
+
+
+
+
+
+
Name
+
Role
+
Status
+
Actions
+
+
+
+
+
+
Alice Johnson
+
Developer
+
+
View
+
+
+
+
Bob Smith
+
Designer
+
+
View
+
+
+
+
Carol White
+
Manager
+
+
View
+
+
+
+
David Brown
+
Analyst
+
+
View
+
+
+
+
+
+ DataGrid around a sortable table
+
+ goab-table with onSort handler and goab-table-sort-header on each column. Age
+ column starts ascending. Tab into a sort header, press Enter or Space to
+ toggle. Click a sort header with mouse should sort but not leave a lingering
+ ring. Arrow keys still navigate cells.
+
+
+
+
+
+ }
+
+
+
+
+ DataGrid around cards (layout mode)
+
+ keyboardNav="layout". Each card is a row, cells include the checkbox, name,
+ badge, stat blocks, and menu button.
+
+
+
+
+
+
+
+ Mike Zwei
+
+
+
+
+
+
+ Updated
+ Jun 30, 2022 at 2:30 PM
+
+
+ Email
+ mike.zwei@gmail.com
+
+
+ Program
+ Wee Wild Ones Curry
+
+
+
+
+ Program ID
+ 74528567
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emma Stroman
+
+
+
+
+
+
+ Updated
+ Nov 28, 2021 at 1:30 PM
+
+
+ Email
+ emma.stroman@gmail.com
+
+
+ Program
+ Fort McMurray
+
+
+
+
+ Program ID
+ 74522643
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+ Bug #3668: Temporary notification refinements
+
+
+
+
+ View on GitHub
+
+
+
+
+
+ 1. Indeterminate and progress variants should not have a dark grey border, and
+ should have a raised-heavy shadow. 2. Action button should be a tertiary
+ button, not a text button. 3. Below 360px, message and action button stack
+ vertically with button right-aligned.
+
+
+
+
+
+
+ Test Cases
+
+
+ Test 1: Indeterminate and progress variants (border + shadow)
+
+
+ Click each to trigger. Inspect the notification surface. Indeterminate and
+ progress should NOT have a dark grey border and SHOULD have a raised-heavy shadow
+ (matching basic/success/failure).
+
+
+
+ Basic (reference)
+
+
+ Success (reference)
+
+
+ Failure (reference)
+
+ Indeterminate
+ Progress
+
+
+
+
+ Test 2: Action button style
+
+ The action button should render as a tertiary button, not a text button. Inspect
+ the button element.
+
+ Show with action button
+
+
+
+ Test 3: Stacking below 360px
+
+ Resize your browser below 360px width and trigger a notification with an action.
+ Message and action button should stack vertically with button right-aligned.
+
+
+
+ Show with action (then resize to 360px)
+
+
+ Show with long content + action
+
+
+
+
+
+
+ Test 4: Centered controller overlay blocks underlying UI
+
+
+ Click the button below to show a centered notification, then try clicking the
+ fixed Underlying target button at the bottom-right while the notification is
+ visible. If the count does not increase until the notification disappears, the
+ full-width controller overlay is blocking pointer events outside the snackbar.
+
+
+
+ Show centered notification
+
+
+ Reset target count
+
+
+
+ Underlying target clicks: {{ underlyingTargetClicks }}
+
- You will need to provide proof of identity, proof of address,
- and any relevant supporting documentation.
+ You will need to provide proof of identity, proof of address, and any relevant
+ supporting documentation.
Open by default
@@ -82,7 +82,8 @@
Hide and show many sections of information
heading="How do I create an account?"
headingSize="medium"
[open]="expandedList[0]"
- (onChange)="toggleAccordion(0, $event)">
+ (onChange)="toggleAccordion(0, $event)"
+>
To create an account you will need to contact your office admin.
@@ -90,22 +91,50 @@
Hide and show many sections of information
heading="What verification is needed to sign documents digitally?"
headingSize="medium"
[open]="expandedList[1]"
- (onChange)="toggleAccordion(1, $event)">
- You will need to verify your identity through our two factor authentication in addition to the digital signature.
+ (onChange)="toggleAccordion(1, $event)"
+>
+ You will need to verify your identity through our two factor authentication in addition
+ to the digital signature.
- Yes, you can see the status of your application on the main service dashboard when you login. You will receive updates and notifications in your email as your request progresses.
+ (onChange)="toggleAccordion(2, $event)"
+>
+ Yes, you can see the status of your application on the main service dashboard when you
+ login. You will receive updates and notifications in your email as your request
+ progresses.
- Yes, our digital service is designed with accessibility in mind. More information on accessibility.
+ (onChange)="toggleAccordion(3, $event)"
+>
+ Yes, our digital service is designed with accessibility in mind.
+ More information on accessibility.
+
+
+ You will need to provide proof of identity, proof of address, and any relevant
+ supporting documentation.
+
+
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+
+ View all
+
+
diff --git a/apps/prs/angular/src/routes/docs/work-side-notification-panel/work-side-notification-panel.component.html b/apps/prs/angular/src/routes/docs/work-side-notification-panel/work-side-notification-panel.component.html
new file mode 100644
index 0000000000..f95b4c8ad4
--- /dev/null
+++ b/apps/prs/angular/src/routes/docs/work-side-notification-panel/work-side-notification-panel.component.html
@@ -0,0 +1,132 @@
+
+ Feature 3636: Accordion actions slot and list view variant
+
+ The GoAAccordion component now includes an optional slot for action buttons in the
+ header, as well as a new "list view" variant that features a filled header background
+ and hover state.
+
+
+
+ Actions slot examples
+
+
+
+ This example places a button in the actions slot while keeping heading text and
+ content as standard body copy.
+
+
+
+
+ Edit
+
+
+
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+
+
+ View all
+
+
+
+
+
+ Heading content examples
+
+
+
+ The heading content slot can display status indicators such as badges.
+
+
+
+
+
+
+
+
+ Preview
+
+
+
+
+ Multiple indicators can be grouped in heading content when more context is needed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Manage
+
+
+
+
+
+ Icon position and fixed width examples
+
+
+
+
+ A narrow fixed-width accordion using the default icon position.
+
+
+
+
+ Open
+
+
+
+
+ A wider fixed-width accordion with the icon moved to the right side.
+
+
+
+
+
+
+ Details
+
+
+
+
+
+
+ Filled/List View Style
+
+
+ stuff goes in here
+
+
+
+
+
+
+
+
+ Feature 3814: Work Side Menu trailingContent slot
+
+
+ This page demonstrates the new trailingContent slot on Work Side Menu Item.
+ The first item shows a keyboard shortcut hint and the second item shows a badge.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ctrl K
+
+
+
+
+
diff --git a/apps/prs/angular/src/routes/features/feat3814/feat3814.component.ts b/apps/prs/angular/src/routes/features/feat3814/feat3814.component.ts
new file mode 100644
index 0000000000..c18880f93a
--- /dev/null
+++ b/apps/prs/angular/src/routes/features/feat3814/feat3814.component.ts
@@ -0,0 +1,17 @@
+import { Component } from "@angular/core";
+import {
+ GoabBadge,
+ GoabContainer,
+ GoabText,
+ GoabWorkSideMenu,
+ GoabWorkSideMenuItem,
+} from "@abgov/angular-components";
+
+@Component({
+ standalone: true,
+ selector: "abgov-feat3814",
+ templateUrl: "./feat3814.component.html",
+ styleUrls: ["./feat3814.component.css"],
+ imports: [GoabBadge, GoabContainer, GoabText, GoabWorkSideMenu, GoabWorkSideMenuItem],
+})
+export class Feat3814Component {}
diff --git a/apps/prs/angular/src/routes/features/feat3814/feat3814.route.json b/apps/prs/angular/src/routes/features/feat3814/feat3814.route.json
new file mode 100644
index 0000000000..5395c36c0c
--- /dev/null
+++ b/apps/prs/angular/src/routes/features/feat3814/feat3814.route.json
@@ -0,0 +1,6 @@
+{
+ "title": "Work Side Menu Trailing Slot",
+ "path": "features/3814",
+ "id": "3814",
+ "type": "feature"
+}
diff --git a/apps/prs/angular/src/styles.css b/apps/prs/angular/src/styles.css
index 33cd2fa85e..8078d0e064 100644
--- a/apps/prs/angular/src/styles.css
+++ b/apps/prs/angular/src/styles.css
@@ -1,6 +1,7 @@
/* You can add global styles to this file, and also import other style files */
@import "../../../../dist/libs/web-components/index.css";
@import "@abgov/design-tokens-v2/dist/tokens.css";
+@import "@abgov/design-tokens-v2/dist/dark-theme.css";
:root {
--goa-space-fill: 32ch;
diff --git a/apps/prs/react/src/app/app.tsx b/apps/prs/react/src/app/app.tsx
index af954286b6..04a769a9bf 100644
--- a/apps/prs/react/src/app/app.tsx
+++ b/apps/prs/react/src/app/app.tsx
@@ -1,4 +1,4 @@
-import type { CSSProperties } from "react";
+import { useState, type CSSProperties } from "react";
import { Outlet, useNavigate } from "react-router-dom";
import {
GoabAppFooter,
@@ -8,13 +8,27 @@ import {
GoabWorkSideMenu,
GoabWorkSideMenuGroup,
GoabWorkSideMenuItem,
+ useTheme,
} from "@abgov/react-components";
import {
bugRouteDefinitions,
docsRouteDefinitions,
featureRouteDefinitions,
} from "./route-manifest";
-import "@abgov/design-tokens-v2/dist/tokens.css"; // Production tokens. Comment out to test with legacy V1 token values.
+
+import "@abgov/style";
+// Runtime V1/V2 token switching. Importing this module applies the currently
+// selected token set (default V2) to before the app renders. The
+// playground's work-side-menu exposes a secondary item that flips between
+// V1 and V2 at runtime without editing source or restarting the dev server.
+import {
+ applyTokenVersion,
+ resolveTokenVersion,
+ type TokenVersion,
+} from "./tokenVersion";
+
+// Sentinel URL handled by onNavigate below to toggle tokens instead of routing.
+const TOKEN_TOGGLE_URL = "#tokens";
const appContentStyle: CSSProperties = {
display: "flex",
@@ -24,9 +38,22 @@ const appContentStyle: CSSProperties = {
export function App() {
const navigate = useNavigate();
+ const { mode, toggle } = useTheme();
+ const isDark = mode === "dark";
const baseUrl = import.meta.env.BASE_URL;
+ const [tokenMode, setTokenMode] = useState(() => resolveTokenVersion());
- const handleNavigate = (path: string) => {
+ const handleSideMenuNavigate = (path: string) => {
+ if (path === TOKEN_TOGGLE_URL) {
+ const next: TokenVersion = tokenMode === "v1" ? "v2" : "v1";
+ setTokenMode(next);
+ applyTokenVersion(next);
+ return;
+ }
+ if (path === "#toggle-theme") {
+ toggle();
+ return;
+ }
const internal = path.startsWith(baseUrl) ? "/" + path.slice(baseUrl.length) : path;
navigate(internal);
};
@@ -42,7 +69,21 @@ export function App() {
heading="Testing Playground"
url={baseUrl}
open={true}
- onNavigate={handleNavigate}
+ onNavigate={handleSideMenuNavigate}
+ secondaryContent={
+ <>
+
+
+ >
+ }
primaryContent={
<>
@@ -73,7 +114,11 @@ export function App() {
/>
))}
-
+
>
}
/>
diff --git a/apps/prs/react/src/app/routes/bugs/bug3602.route.ts b/apps/prs/react/src/app/routes/bugs/bug3602.route.ts
new file mode 100644
index 0000000000..4909c43e38
--- /dev/null
+++ b/apps/prs/react/src/app/routes/bugs/bug3602.route.ts
@@ -0,0 +1,9 @@
+import { Bug3602Route } from "../../../routes/bugs/bug3602";
+import type { PrRouteDefinition } from "../../route-manifest";
+export default {
+ type: "bug",
+ id: "3602",
+ path: "bugs/3602",
+ title: "FileUploadInput and FileUploadCard Improvements",
+ component: Bug3602Route,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/routes/bugs/bug3605.route.ts b/apps/prs/react/src/app/routes/bugs/bug3605.route.ts
new file mode 100644
index 0000000000..bc0695cbe3
--- /dev/null
+++ b/apps/prs/react/src/app/routes/bugs/bug3605.route.ts
@@ -0,0 +1,9 @@
+import { Bug3605Route } from "../../../routes/bugs/bug3605";
+import type { PrRouteDefinition } from "../../route-manifest";
+export default {
+ type: "bug",
+ id: "3605",
+ path: "bugs/3605",
+ title: "Focus visible across interactive components",
+ component: Bug3605Route,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/routes/bugs/bug3668.route.ts b/apps/prs/react/src/app/routes/bugs/bug3668.route.ts
new file mode 100644
index 0000000000..c66d06d625
--- /dev/null
+++ b/apps/prs/react/src/app/routes/bugs/bug3668.route.ts
@@ -0,0 +1,10 @@
+import { Bug3668Route } from "../../../routes/bugs/bug3668";
+import type { PrRouteDefinition } from "../../route-manifest";
+
+export default {
+ type: "bug",
+ id: "3668",
+ path: "bugs/3668",
+ title: "Temporary Notification Refinements",
+ component: Bug3668Route,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/routes/bugs/bug3892.route.ts b/apps/prs/react/src/app/routes/bugs/bug3892.route.ts
new file mode 100644
index 0000000000..58f65a1412
--- /dev/null
+++ b/apps/prs/react/src/app/routes/bugs/bug3892.route.ts
@@ -0,0 +1,10 @@
+import { Bug3892Route } from "../../../routes/bugs/bug3892";
+import type { PrRouteDefinition } from "../../route-manifest";
+
+export default {
+ type: "bug",
+ id: "3892",
+ path: "bugs/3892",
+ title: "Nested close propagation",
+ component: Bug3892Route,
+} satisfies PrRouteDefinition;
\ No newline at end of file
diff --git a/apps/prs/react/src/app/routes/docs/work-side-notification-panel.route.ts b/apps/prs/react/src/app/routes/docs/work-side-notification-panel.route.ts
new file mode 100644
index 0000000000..909d1dfce3
--- /dev/null
+++ b/apps/prs/react/src/app/routes/docs/work-side-notification-panel.route.ts
@@ -0,0 +1,10 @@
+import { DocsWorkSideNotificationPanelRoute } from "../../../routes/docs/work-side-notification-panel/work-side-notification-panel";
+import type { PrRouteDefinition } from "../../route-manifest";
+
+export default {
+ type: "docs",
+ id: "work-side-notification-panel",
+ path: "docs/work-side-notification-panel",
+ title: "Notification Panel",
+ component: DocsWorkSideNotificationPanelRoute,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/routes/features/feat3636.route.ts b/apps/prs/react/src/app/routes/features/feat3636.route.ts
new file mode 100644
index 0000000000..62c0c29351
--- /dev/null
+++ b/apps/prs/react/src/app/routes/features/feat3636.route.ts
@@ -0,0 +1,9 @@
+import { Feat3636Route } from "../../../routes/features/feat3636";
+import type { PrRouteDefinition } from "../../route-manifest";
+export default {
+ type: "feature",
+ id: "3636",
+ path: "features/3636",
+ title: "Accordion actions slot and list view variant",
+ component: Feat3636Route,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/routes/features/feat3814.route.ts b/apps/prs/react/src/app/routes/features/feat3814.route.ts
new file mode 100644
index 0000000000..57753d145b
--- /dev/null
+++ b/apps/prs/react/src/app/routes/features/feat3814.route.ts
@@ -0,0 +1,10 @@
+import { Feat3814Route } from "../../../routes/features/feat3814";
+import type { PrRouteDefinition } from "../../route-manifest";
+
+export default {
+ type: "feature",
+ id: "3814",
+ path: "features/3814",
+ title: "Work Side Menu Trailing Slot",
+ component: Feat3814Route,
+} satisfies PrRouteDefinition;
diff --git a/apps/prs/react/src/app/tokenVersion.ts b/apps/prs/react/src/app/tokenVersion.ts
new file mode 100644
index 0000000000..942685c6af
--- /dev/null
+++ b/apps/prs/react/src/app/tokenVersion.ts
@@ -0,0 +1,47 @@
+// ?url tells Vite to resolve the asset path without injecting the CSS.
+import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url";
+
+export type TokenVersion = "v1" | "v2";
+
+const STORAGE_KEY = "goa-token-version";
+const LINK_ID = "goa-tokens-v2";
+const URL_PARAM = "tokens";
+
+export function resolveTokenVersion(): TokenVersion {
+ const params = new URLSearchParams(window.location.search);
+ const fromUrl = params.get(URL_PARAM);
+ if (fromUrl === "v1" || fromUrl === "v2") return fromUrl;
+
+ const fromSession = sessionStorage.getItem(STORAGE_KEY);
+ if (fromSession === "v1" || fromSession === "v2") return fromSession;
+
+ return "v2";
+}
+
+export function applyTokenVersion(mode: TokenVersion): void {
+ // Link-ordering invariant: V2 stylesheet must be the LAST stylesheet in
+ // so cascade resolves V2 over V1 unambiguously. Remove any existing
+ // node first, then append so the fresh node lands last.
+ document.getElementById(LINK_ID)?.remove();
+
+ if (mode === "v2") {
+ const link = document.createElement("link");
+ link.id = LINK_ID;
+ link.rel = "stylesheet";
+ link.href = v2TokensUrl;
+ document.head.appendChild(link);
+ }
+
+ sessionStorage.setItem(STORAGE_KEY, mode);
+
+ // Only sync URL param if it's already in the URL; don't add clutter on first toggle.
+ const url = new URL(window.location.href);
+ if (url.searchParams.has(URL_PARAM)) {
+ url.searchParams.set(URL_PARAM, mode);
+ window.history.replaceState({}, "", url);
+ }
+}
+
+// Eager side effect: resolve and apply at module load so V2 is in
+// before React's first paint. Importing this module once from app.tsx runs this.
+applyTokenVersion(resolveTokenVersion());
diff --git a/apps/prs/react/src/main.tsx b/apps/prs/react/src/main.tsx
index 83464a9fb6..7cc14365be 100644
--- a/apps/prs/react/src/main.tsx
+++ b/apps/prs/react/src/main.tsx
@@ -2,6 +2,7 @@ import { StrictMode } from "react";
import * as ReactDOM from "react-dom/client";
import { BrowserRouter, Route, Routes } from "react-router-dom";
+import { GoabThemeProvider } from "@abgov/react-components";
import "@abgov/web-components";
import App from "./app/app";
import { EverythingRoute } from "./routes/everything";
@@ -12,17 +13,19 @@ const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement)
root.render(
-
- } />
- }>
- } />
- {prRouteDefinitions.map((route) => {
- const Component = route.component;
+
+
+ } />
+ }>
+ } />
+ {prRouteDefinitions.map((route) => {
+ const Component = route.component;
- return } />;
- })}
-
-
+ return } />;
+ })}
+
+
+
,
);
diff --git a/apps/prs/react/src/routes/bugs/bug3548.tsx b/apps/prs/react/src/routes/bugs/bug3548.tsx
index 810d6e15b9..25ff92ab80 100644
--- a/apps/prs/react/src/routes/bugs/bug3548.tsx
+++ b/apps/prs/react/src/routes/bugs/bug3548.tsx
@@ -1,4 +1,4 @@
-import { useState, useEffect } from "react";
+import { useState } from "react";
import {
GoabBlock,
GoabText,
@@ -10,21 +10,9 @@ import {
GoabWorkSideMenuItem,
} from "@abgov/react-components";
-import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url";
-
export function Bug3548Route() {
const [open, setOpen] = useState(true);
- useEffect(() => {
- const link = document.createElement("link");
- link.rel = "stylesheet";
- link.href = v2TokensUrl;
- document.head.appendChild(link);
- return () => {
- document.head.removeChild(link);
- };
- }, []);
-
function onToggle() {
setOpen((prev) => !prev);
}
diff --git a/apps/prs/react/src/routes/bugs/bug3602.tsx b/apps/prs/react/src/routes/bugs/bug3602.tsx
new file mode 100644
index 0000000000..1b38632f71
--- /dev/null
+++ b/apps/prs/react/src/routes/bugs/bug3602.tsx
@@ -0,0 +1,81 @@
+import { useState, type Dispatch, type SetStateAction } from "react";
+import { GoabFileUploadInputOnSelectFileDetail } from "@abgov/ui-components-common";
+import {
+ GoabFileUploadCard,
+ GoabFileUploadInput,
+ GoabFormItem,
+} from "@abgov/react-components";
+
+type UploadedFile = {
+ id: string;
+ filename: string;
+ size: number;
+ type?: string;
+ progress: number;
+};
+
+export function Bug3602Route() {
+ const [smallFiles, setSmallFiles] = useState([]);
+ const [largeFiles, setLargeFiles] = useState([]);
+
+ function handleFileChange(
+ detail: GoabFileUploadInputOnSelectFileDetail,
+ setFiles: Dispatch>,
+ ) {
+ const file = detail.file;
+ setFiles((prev) => [
+ ...prev,
+ {
+ id: `${file.name}-${Date.now()}`,
+ filename: file.name,
+ size: file.size,
+ type: file.type,
+ progress: -1,
+ },
+ ]);
+ }
+
+ return (
+ <>
+
3602 FileUploadInput and FileUploadCard Improvements
+
+ Issue 3605
+
+
+ Use focus-visible across interactive components
+
+
+
+
+
+ View on GitHub
+
+
+
+
+
+ For every section: Tab should show the focus ring with the correct gap and offset.
+ Click should not leave a lingering ring. Mouse-down on buttons should still show the
+ pressed state.
+
+
+
+
+ {/* MicrositeHeader */}
+
+ MicrositeHeader
+ Tab through the links inside the header. Click any link.
+
+
+
+
+
+ {/* Chip + FilterChip */}
+
+ Chip and FilterChip
+ Chip (deprecated)
+
+
+
+
+
+
+ FilterChip
+
+
+
+
+
+
+
+
+
+ {/* Plain link reset */}
+
+ Plain link reset
+ Unstyled anchors pick up the global reset from assets/css/reset.css.
+
+
+
+
+
+ {/* Checkbox */}
+
+ Checkbox
+ Tab to each. Click each. No ring on mouse click.
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Link */}
+
+ Link
+
+ Ring sits on the outer container so it wraps icon + text together. The component
+ listens for focusin on the slotted anchor and checks{" "}
+ .matches(':focus-visible') to keep keyboard-only semantics across the
+ slot boundary.
+
+
+ Plain links
+
+ First link
+ Second link
+ Third link
+
+
+ Links with leading icons
+
+ Download file
+ Learn more
+ Open in new tab
+
+
+ Links with trailing icons
+
+ Continue
+ See more
+ External resource
+
+
+
+
+
+ {/* Notification */}
+
+ Notification
+
+ Slotted anchors in notifications now use focus-visible. Keyboard only.
+
+
+
+ Info notification with a link inside.
+
+
+
+ Important notification with a link inside.
+
+
+
+
+ Emergency notification with a link inside.
+
+
+
+
+
+
+ {/* Tooltip */}
+
+ Tooltip
+
+ Hover for mouse, keyboard focus for keyboard. Mouse click on the trigger does
+ not reveal the tooltip.
+
+
+
+ Hover or Tab me
+
+
+
+
+
+
+ {/* Details */}
+
+ Details
+
+ Click just toggles open. Keyboard focus shows the focused look.
+
+
+ Content inside the details component.
+
+
+
+
+
+ {/* DataGrid */}
+
+ DataGrid around a table
+
+ Typical pattern: GoabDataGrid wrapping a GoabTable. Focus styling is JS-driven,
+ now guarded with a keyboard-input tracker so mouse click does not show the ring.
+ Arrow keys navigate cells.
+
+
+
+
+
+
Name
+
Role
+
Status
+
Actions
+
+
+
+
+
Alice Johnson
+
Developer
+
+
View
+
+
+
Bob Smith
+
Designer
+
+
View
+
+
+
Carol White
+
Manager
+
+
View
+
+
+
David Brown
+
Analyst
+
+
View
+
+
+
+
+
+ DataGrid around a table with row checkboxes
+
+ Adds a select-all checkbox to the header row and per-row checkboxes.
+ When focus lands on a cell whose only focusable child is the checkbox,
+ focus delegates to the checkbox itself. The corner cells should still
+ show the rounded focus treatment.
+
+
+
+
+
+
+
Name
+
Role
+
Status
+
Actions
+
+
+
+
+
+
Alice Johnson
+
Developer
+
+
View
+
+
+
+
Bob Smith
+
Designer
+
+
View
+
+
+
+
Carol White
+
Manager
+
+
View
+
+
+
+
David Brown
+
Analyst
+
+
View
+
+
+
+
+
+ DataGrid around a sortable table
+
+ GoabTable with onSort handler and GoabTableSortHeader on each column. Age
+ column starts ascending. Tab into a sort header, press Enter or Space to
+ toggle. Click a sort header with mouse should sort but not leave a
+ lingering ring. Arrow keys still navigate cells.
+
+
+ {
+ const by = e.sortBy as "name" | "role" | "age";
+ const dir = e.sortDir;
+ setSortablePeople([...sortablePeople].sort((a, b) => {
+ if (a[by] < b[by]) return dir === 1 ? -1 : 1;
+ if (a[by] > b[by]) return dir === 1 ? 1 : -1;
+ return 0;
+ }));
+ }}
+ >
+
+
+
+ Name
+
+
+ Role
+
+
+ Age
+
+
+
+
+ {sortablePeople.map((p) => (
+
+
{p.name}
+
{p.role}
+
{p.age}
+
+ ))}
+
+
+
+
+ DataGrid around cards (layout mode)
+
+ keyboardNav="layout". Each card is a row, cells include the checkbox,
+ name, badge, stat blocks, and menu button.
+
+
+
+
+
+
+
+ Mike Zwei
+
+
+
+
+
+
+ Updated
+ Jun 30, 2022 at 2:30 PM
+
+
+ Email
+ mike.zwei@gmail.com
+
+
+ Program
+ Wee Wild Ones Curry
+
+
+
+
+ Program ID
+ 74528567
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emma Stroman
+
+
+
+
+
+
+ Updated
+ Nov 28, 2021 at 1:30 PM
+
+
+ Email
+ emma.stroman@gmail.com
+
+
+ Program
+ Fort McMurray
+
+
+
+
+ Program ID
+ 74522643
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+
+ Bug #3668: Temporary notification refinements
+
+
+
+
+
+ View on GitHub
+
+
+
+
+
+ 1. Indeterminate and progress variants should not have a dark grey border, and
+ should have a raised-heavy shadow. 2. Action button should be a tertiary
+ button, not a text button. 3. Below 360px, message and action button stack
+ vertically with button right-aligned.
+
+
+
+
+
+
+ Test Cases
+
+
+ Test 1: Indeterminate and progress variants (border + shadow)
+
+
+ Click each to trigger. Inspect the notification surface. Indeterminate and
+ progress should NOT have a dark grey border and SHOULD have a raised-heavy shadow
+ (matching basic/success/failure).
+
+
+
+ Basic (reference)
+
+
+ Success (reference)
+
+
+ Failure (reference)
+
+ Indeterminate
+ Progress
+
+
+
+
+ Test 2: Action button style
+
+ The action button should render as a tertiary button, not a text button. Inspect
+ the button element.
+
+ Show with action button
+
+
+
+ Test 3: Stacking below 360px
+
+ Resize your browser below 360px width and trigger a notification with an action.
+ Message and action button should stack vertically with button right-aligned.
+
+
+
+ Show with action (then resize to 360px)
+
+ {
+ TemporaryNotification.show(
+ "Your application for the Alberta Works program has been successfully submitted and is now being reviewed by our team. You will receive a confirmation email shortly.",
+ { type: "basic", duration: 15000, actionText: "View details" },
+ );
+ }}
+ >
+ Show with long content + action
+
+
+
+
+
+
+ Test 4: Centered controller overlay blocks underlying UI
+
+
+ Click the button below to show a centered notification, then try clicking the
+ fixed Underlying target button at the bottom-right while the notification is
+ visible. If the count does not increase until the notification disappears, the
+ full-width controller overlay is blocking pointer events outside the snackbar.
+
+
+
+ Show centered notification
+
+ {
+ setUnderlyingTargetClicks(0);
+ }}
+ >
+ Reset target count
+
+
+
+ Underlying target clicks: {underlyingTargetClicks}
+
+
+
+ 3892 - Nested close propagation
+
+ This page tests the issue where popover close events are propegating to parent
+ drawers and modals.
+
+
+
+
+
+
+ Popover
+
+ Open the popover and interact with all controls.
+
+
+ Open popover}>
+
+
+ Expected: using the date picker, dropdown, and menu button updates values
+ and leaves the popover open.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Drawer
+
+ Open the drawer and interact with all controls.
+
+
+ setDrawerOpen(true)}>Open drawer
+
+
+
+
+ Expected: using the date picker, dropdown, and menu button updates values
+ and leaves the drawer open.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Push drawer
+
+ Open the push drawer and interact with all controls.
+
+
+ setPushDrawerOpen(true)}>
+ Open push drawer
+
+
+
+
+
+ Expected: using the date picker, dropdown, and menu button updates values
+ and leaves the push drawer open.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Modal
+
+ Open the modal and interact with all controls.
+
+
+ setModalOpen(true)}>Open modal
+
+
+
+
+ Expected: using the date picker, dropdown, and menu button updates values
+ and leaves the modal open.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/apps/prs/react/src/routes/docs/accordion/accordion.tsx b/apps/prs/react/src/routes/docs/accordion/accordion.tsx
index 72ba82a9f7..cd3ad438c0 100644
--- a/apps/prs/react/src/routes/docs/accordion/accordion.tsx
+++ b/apps/prs/react/src/routes/docs/accordion/accordion.tsx
@@ -33,8 +33,8 @@ export function DocsAccordionRoute() {
Basic
- You will need to provide proof of identity, proof of address,
- and any relevant supporting documentation.
+ You will need to provide proof of identity, proof of address, and any relevant
+ supporting documentation.
Open by default
@@ -77,11 +77,14 @@ export function DocsAccordionRoute() {
Examples
Expand or collapse part of a form
- Review your application
+
+ Review your application
+ }>
+ headingContent={}
+ >
Date of referral
January 27, 2021
@@ -104,7 +107,12 @@ export function DocsAccordionRoute() {
Hide and show many sections of information
- expandOrCollapseAll()}>
+ expandOrCollapseAll()}
+ >
{expandedAll ? "Hide all sections" : "Show all sections"}
@@ -123,8 +131,8 @@ export function DocsAccordionRoute() {
headingSize="medium"
onChange={(open) => updateAccordion(2, open)}
>
- You will need to verify your identity through our two factor
- authentication in addition to the digital signature.
+ You will need to verify your identity through our two factor authentication in
+ addition to the digital signature.
updateAccordion(3, open)}
>
- Yes, you can see the status of your application on the main service
- dashboard when you login. You will receive updates and notifications in
- your email as your request progresses.
+ Yes, you can see the status of your application on the main service dashboard when
+ you login. You will receive updates and notifications in your email as your
+ request progresses.
More information on accessibility.
+
+
+ You will need to provide proof of identity, proof of address, and any relevant
+ supporting documentation.
+
+
+
+
+
+ View all
+
+
+ }
+ >
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+
Benji
+ }
+ actions={
+
+
+ 1 Comment(s)
+
+
+ View
+
+
+ }
+ >
+
+
Date of referral
+
January 27, 2021
+
Work safety concerns
+
None
+
Type of referral
+
Word of mouth, internet search
+
Intake received from another site
+
Yes
+
+
+
);
}
diff --git a/apps/prs/react/src/routes/docs/work-side-notification-panel/work-side-notification-panel.tsx b/apps/prs/react/src/routes/docs/work-side-notification-panel/work-side-notification-panel.tsx
new file mode 100644
index 0000000000..610e067253
--- /dev/null
+++ b/apps/prs/react/src/routes/docs/work-side-notification-panel/work-side-notification-panel.tsx
@@ -0,0 +1,299 @@
+import { useState } from "react";
+import {
+ GoabWorkSideMenu,
+ GoabWorkSideMenuItem,
+ GoabWorkSideNotificationItem,
+ GoabWorkSideNotificationPanel,
+ type GoabWorkSideNotificationItemProps,
+} from "@abgov/react-components";
+
+type NotificationItem = GoabWorkSideNotificationItemProps & { id: string };
+
+const initialBasicItems: NotificationItem[] = [
+ {
+ id: "1",
+ title: "New case assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T10:30:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Document uploaded",
+ description: "A new document was uploaded to Case #12340.",
+ timestamp: "2025-03-15T09:15:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-14T16:00:00Z",
+ type: "success",
+ readStatus: "read",
+ priority: "normal",
+ },
+];
+
+const initialUrgentItems: NotificationItem[] = [
+ {
+ id: "1",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T14:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "2",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T12:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "3",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T11:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+];
+
+const initialAllTypeItems: NotificationItem[] = [
+ {
+ id: "1",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T10:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Case #12345 assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T09:00:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-15T08:00:00Z",
+ type: "success",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "4",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T07:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "5",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T06:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "normal",
+ },
+];
+
+export function DocsWorkSideNotificationPanelRoute() {
+ const [basicItems, setBasicItems] = useState(initialBasicItems);
+ const [urgentItems, setUrgentItems] = useState(initialUrgentItems);
+ const [allTypeItems, setAllTypeItems] = useState(initialAllTypeItems);
+
+ function navigate(path: string) {
+ console.log("navigate", path);
+ }
+
+ // --- Basic notification panel handlers ---
+ function handleMarkAllBasicNotificationsRead() {
+ setBasicItems((items) =>
+ items.map((item) => ({ ...item, readStatus: "read" })),
+ );
+ }
+
+ function handleViewAllBasicNotifications() {
+ console.log("view all basic notifications");
+ }
+
+ function handleClickBasicNotification(id: string) {
+ setBasicItems((items) =>
+ items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ ),
+ );
+ }
+
+ // --- Urgent notification panel handlers ---
+ function handleMarkAllUrgentNotificationsRead() {
+ setUrgentItems((items) =>
+ items.map((item) => ({ ...item, readStatus: "read" })),
+ );
+ }
+
+ function handleViewAllUrgentNotifications() {
+ console.log("view all urgent notifications");
+ }
+
+ function handleClickUrgentNotification(id: string) {
+ setUrgentItems((items) =>
+ items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ ),
+ );
+ }
+
+ // --- Notification type badges panel handlers ---
+ function handleMarkAllNotificationTypesRead() {
+ setAllTypeItems((items) =>
+ items.map((item) => ({ ...item, readStatus: "read" })),
+ );
+ }
+
+ function handleViewAllNotificationTypes() {
+ console.log("view all notification types");
+ }
+
+ function handleClickNotificationType(id: string) {
+ setAllTypeItems((items) =>
+ items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ ),
+ );
+ }
+
+ return (
+
+
+ Feature 3636: Accordion actions slot and list view variant
+
+
+ The GoAAccordion component now includes an optional slot for action buttons in the
+ header, as well as a new "list view" variant that features a filled header
+ background and hover state.
+
+
+
+ Actions slot examples
+
+
+ Edit
+
+ }
+ >
+
+ This example places a button in the actions slot while keeping heading text
+ and content as standard body copy.
+
+
+
+
+
+
+ View all
+
+
+ }
+ >
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+
+ Heading content examples
+
+ }
+ actions={
+
+ Preview
+
+ }
+ open
+ >
+
+ The heading content slot can display status indicators such as badges.
+
+
+
+
+
+
+
+ }
+ actions={
+
+
+
+ Manage
+
+
+ }
+ >
+
+ Multiple indicators can be grouped in heading content when more context is
+ needed.
+
+
+
+
+
+ Icon position and fixed width examples
+
+
+
+ Open
+
+ }
+ open
+ >
+
+ A narrow fixed-width accordion using the default icon position.
+
+
+
+
+
+
+ Details
+
+
+ }
+ open
+ >
+
+ A wider fixed-width accordion with the icon moved to the right side.
+
+
+
+ }
+ secondaryText="Secondary text that is long enough to wrap onto multiple lines and push the heading content and actions down"
+ >
+
+
+ 👀
+
+ The chevron should be centered here
+
+
+ }
+ headingType="filled"
+ actions={
+
+
+ 1 Comment(s)
+
+
+ View
+
+
+ }
+ secondaryText="Secondary text that is long enough to wrap onto multiple lines and push the heading content and actions down"
+ iconPosition="right"
+ >
+
+
+ Feature 3814: Work Side Menu trailingContent slot
+
+
+
+ This page demonstrates the new trailingContent slot on Work Side Menu Item. The
+ first item shows a keyboard shortcut hint and the second item shows a badge.
+
+
+
+
+
+
+ Ctrl K
+
+ }
+ />
+ }
+ />
+
+ >
+ }
+ />
+
+
+
+ );
+}
+
+export default Feat3814Route;
diff --git a/apps/prs/react/src/styles.css b/apps/prs/react/src/styles.css
index 90d4ee0072..4b7fecca73 100644
--- a/apps/prs/react/src/styles.css
+++ b/apps/prs/react/src/styles.css
@@ -1 +1,4 @@
/* You can add global styles to this file, and also import other style files */
+@import "../../../../dist/libs/web-components/index.css";
+@import "@abgov/design-tokens-v2/dist/tokens.css";
+@import "@abgov/design-tokens-v2/dist/dark-theme.css";
diff --git a/apps/prs/web/src/app/App.svelte b/apps/prs/web/src/app/App.svelte
index d26edda9d7..d7be253032 100644
--- a/apps/prs/web/src/app/App.svelte
+++ b/apps/prs/web/src/app/App.svelte
@@ -1,8 +1,10 @@
@@ -13,5 +15,6 @@
+
diff --git a/apps/prs/web/src/routes/3605.svelte b/apps/prs/web/src/routes/3605.svelte
new file mode 100644
index 0000000000..566ce8062c
--- /dev/null
+++ b/apps/prs/web/src/routes/3605.svelte
@@ -0,0 +1,481 @@
+
+
+
+ Issue 3605
+
+
+
+ Issue 3605
+ Use :focus-visible across interactive components
+
+ For every section: Tab should show the focus ring with the correct gap/offset.
+ Click should not leave a lingering ring. Mouse-down (:active)
+ on buttons should still show the pressed/focused look.
+
+
+
+
+
+
+ 1. MicrositeHeader — a:focus → a:focus-visible
+ Tab through the links inside the header. Click any link.
+
+ Report a problem
+
+
+ Report a problem
+
+
+
+
+
+
+
+ 2. Chip — .chip:focus → .chip:focus-visible
+ V1 Chip (deprecated, still in scope per brief).
+
+
+
+
+
+
+ FilterChip V2 (production)
+
+ Chip div is role="presentation"; the close goa-icon-button is
+ the focusable element. goa-icon-button already uses :focus-visible
+ (no change needed here).
+
+
+
+
+
+
+
+ FilterChip V1 (fixed in this PR)
+
+ Whole chip is tabindex="0" role="button". Removed class:focused
+ binding; outline now on .chip:focus-visible .delete-icon.
+
+
+
+
+
+
+
+
+
+
+
+
+ 3. Plain link reset — use :focus-visible only
+
+ Unstyled anchors pick up the global reset from assets/css/reset.css.
+ Dropped both :focus and :focus-within — on plain
+ <a> they both match on mouse click (HTML doesn't allow focusable
+ children inside <a>, so :focus-within has no real use
+ here).
+
+
+
+
+
+
+
+
+ 6. Checkbox — drop :has(:focus) duplicates from V1
+
+ V1 had 10 rules pairing :has(:focus-visible) with :has(:focus).
+ The :focus duplicate fired on mouse click. V2 already correct.
+
+
+ V1 — normal
+
+
+
+
+
+
+ V1 — error
+
+
+
+
+ V2 — normal
+
+
+
+
+
+
+ V2 — error
+
+
+
+
+
+
+
+
+
+ 7. Link — outer-container ring gated by JS modality check
+
+ Ring sits on the outer container so it wraps icon + text together, matching pre-#3605
+ visuals. Pure CSS couldn't carry keyboard-only semantics across the slot boundary
+ (:focus-within matches on click; :has(::slotted(a:focus-visible))
+ isn't reliable), so the component listens for focusin on the slotted
+ anchor and checks .matches(':focus-visible') before flipping a class.
+
+
+ Plain links
+
+
+
+
+
+
+
+ 8. Notification — ::slotted(a:focus) → :focus-visible
+
+ 8 rules (V1 + V2 variants) styled slotted anchors on :focus. Now keyboard only.
+
+
+ V1 Notifications
+
+ Info notification with a link inside.
+
+
+ Important notification with a link inside.
+
+
+ V2 Notifications
+
+ Information high with a link inside.
+
+
+ Important high with a link inside.
+
+
+ Emergency high with a link inside.
+
+
+
+
+
+
+
+ 9. Tooltip — .tooltip:focus .tooltip-text → :focus-visible
+
+ Previously mouse-clicking the tooltip trigger revealed the tooltip. Now hover for mouse,
+ keyboard focus for keyboard (standard tooltip behavior).
+
+
+
+ Hover or Tab me
+
+
+
+
+
+
+
+
+ 10. Details — summary:focus → :focus-visible
+
+ Previously clicking the summary left a hover-ish style. Now click just toggles open;
+ keyboard focus shows the focused look.
+
+
+ Content inside the details component.
+
+
+
+
+
+
+
+ 11. DataGrid — realistic table usage
+
+ Typical pattern: goa-data-grid wrapping a goa-table. Cells contain
+ badges, buttons, and text. Focus styling is JS-driven via
+ setFocusedStyle. Describe what looks wrong (mouse click leaving an outline?
+ UA default ring on a cell? ring jumping?).
+
+
+
+
+
+
Name
+
Role
+
Status
+
Actions
+
+
+
+
+
Alice Johnson
+
Developer
+
+
View
+
+
+
Bob Smith
+
Designer
+
+
View
+
+
+
Carol White
+
Manager
+
+
View
+
+
+
David Brown
+
Analyst
+
+
View
+
+
+
+
+
+ DataGrid around cards (layout mode)
+
+ keyboardNav="layout". Each card is a row, cells include the checkbox, name,
+ badge, stat blocks, and menu button.
+
+
+
+
+
+
+
+ Mike Zwei
+
+
+
+
+ Updated
+ Jun 30, 2022 at 2:30 PM
+
+
+ Email
+ mike.zwei@gmail.com
+
+
+ Program
+ Wee Wild Ones Curry
+
+
+
+
+ Program ID
+ 74528567
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emma Stroman
+
+
+
+
+ Updated
+ Nov 28, 2021 at 1:30 PM
+
+
+ Email
+ emma.stroman@gmail.com
+
+
+ Program
+ Fort McMurray
+
+
+
+
+ Program ID
+ 74522643
+
+
+ Service access
+ Claims Adjustments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index 6599ce45c9..57d9c920d4 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -88,10 +88,6 @@ category: inputs-and-actions # determines nav section
tags: [action, submit]
relatedComponents: [button-group, icon-button]
figmaUrl: https://www.figma.com/...
-githubUrl: https://github.com/...
-webComponentTag: goa-button
-reactClassName: GoabButton
-angularSelector: goab-button
hidden: true # optional — hide from nav (used for subcomponents, deprecated, internal)
subcomponent: true # optional — show API on parent component page
---
@@ -219,6 +215,13 @@ export const buttonConfigurations: ComponentConfigurations = {
This is a common source of errors when writing configuration code since all three are in the same file.
+**Preview customization:** Two optional fields on `ComponentConfigurations` let you customize the sandbox preview without affecting the code snippet users see:
+
+- `previewStyle` — CSS applied to the preview container (e.g. background color, flex layout). Example: workspace components use a grey background with a content card to simulate the app layout.
+- `previewWrapper` — HTML template that wraps the component code in the preview only. Use `{{slot}}` as the placeholder for the component code. The code snippet shown to users contains just the component code, not the wrapper.
+
+See `work-side-notification-panel.ts` or `work-side-menu.ts` for examples.
+
---
## How to: common changes
@@ -261,7 +264,6 @@ status: stable
category: structure-and-navigation
relatedComponents:
- tab # <-- this is how the parent discovers the subcomponent
-webComponentTag: goa-tabs
---
```
@@ -277,7 +279,6 @@ hidden: true # not shown in nav
subcomponent: true # API appears on parent page
relatedComponents:
- tabs
-webComponentTag: goa-tab
---
```
@@ -289,19 +290,11 @@ Result: the Tabs page shows "Tab Props", "Tab Slots" (and "Tab Events" if any ex
2. Add its slug to the parent's `relatedComponents` array
3. Ensure API data exists. If the Svelte component has its own directory (`libs/web-components/src/components/my-sub/`), the extraction script handles it automatically. If it's a nested file inside the parent's directory (like `WorkSideMenuGroup.svelte` inside `work-side-menu/`), you need to manually create the API JSON in `generated/component-apis/my-sub.json`
-**Current subcomponent mappings:**
-
-| Parent | Subcomponents |
-| -------------- | ----------------------------------------- |
-| Header | App Header Menu |
-| File uploader | File Upload Card |
-| Footer | Footer Meta Section, Footer Nav Section |
-| Form stepper | Form Step |
-| Menu button | Menu Action |
-| Radio | Radio Item |
-| Side menu | Side Menu Group, Side Menu Heading |
-| Tabs | Tab |
-| Work Side Menu | Work Side Menu Group, Work Side Menu Item |
+To see all current subcomponent mappings, search for `subcomponent: true` in the MDX files:
+
+```bash
+grep -rl "subcomponent: true" docs/src/content/components/
+```
### Hide a component from navigation
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 6523a7cc5a..9a7aa8fe73 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -5,6 +5,8 @@ import path from "node:path";
import react from "@astrojs/react";
import mdx from "@astrojs/mdx";
+import { buildAliasRedirects } from "./src/scripts/aliases-to-redirects.mjs";
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const workspaceRoot = path.resolve(__dirname, "..");
@@ -29,10 +31,25 @@ export default defineConfig({
"/examples/show-multiple-actions-in-a-compact-table",
"/examples/communicate-a-future-service-outage":
"/examples/notify-the-user-of-a-future-service-outage",
+ // workspace-product / public-form-product were stub entries that existed
+ // only to populate the size:product card on /examples/. The grid now
+ // synthesizes those cards directly from the productTypes collection, so
+ // these slugs no longer resolve. Redirect to the real overviews in case
+ // anything cached or bookmarked the old URLs from the PR preview.
+ "/examples/workspace-product": "/examples/workspace",
+ "/examples/public-form-product": "/examples/public-form",
+ // Old "give-{background,context}-..." slugs once redirected to the
+ // give-more-information-...-{a,b} variants. Those variants have since
+ // been folded into question-page, so route directly there to avoid
+ // a two-hop chain through the alias-derived redirects below.
"/examples/give-background-information-before-asking-a-question":
- "/examples/give-more-information-before-asking-a-question-a",
+ "/examples/question-page",
"/examples/give-context-before-asking-a-long-answer-question":
- "/examples/give-more-information-before-asking-a-question-b",
+ "/examples/question-page",
+ // Auto-derived redirects from `aliases` frontmatter on examples and
+ // productTypes entries. Single source of truth lives in MDX; adding
+ // an alias to an entry creates the redirect on the next build.
+ ...buildAliasRedirects(),
},
build: {
chunkSizeWarningLimit: 1000,
diff --git a/docs/generated/component-apis/accordion.json b/docs/generated/component-apis/accordion.json
index 132e50b852..913aae44d2 100644
--- a/docs/generated/component-apis/accordion.json
+++ b/docs/generated/component-apis/accordion.json
@@ -1,131 +1,366 @@
{
"componentSlug": "accordion",
"extractedFrom": "libs/web-components/src/components/accordion/Accordion.svelte",
- "props": [
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the state of the accordion container open or closed."
- },
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": "",
- "description": "Sets the heading text."
- },
- {
- "name": "secondarytext",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets secondary text."
- },
- {
- "name": "headingSize",
- "type": "\"small\" | \"medium\"",
- "typeLabel": "GoabAccordionHeadingSize",
- "values": [
- "small",
- "medium"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the heading text."
+ },
+ {
+ "name": "headingSize",
+ "type": "GoabAccordionHeadingSize",
+ "required": false,
+ "default": "small",
+ "description": "Sets the heading size of the accordion container heading."
+ },
+ {
+ "name": "headingType",
+ "type": "GoabAccordionHeadingType",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the accordion style variant."
+ },
+ {
+ "name": "iconPosition",
+ "type": "GoabAccordionIconPosition",
+ "required": false,
+ "default": "left",
+ "description": "Sets the position of the expand/collapse icon."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the accordion."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the state of the accordion container open or closed."
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets secondary text displayed alongside the heading."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "small",
- "description": "Sets the heading size of the accordion container heading."
- },
- {
- "name": "id",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Unique identifier for the accordion."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the accordion."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "xs",
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "iconposition",
- "type": "\"left\" | \"right\"",
- "values": [
- "left",
- "right"
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(open: boolean) => void",
+ "description": "Callback fired when the accordion is opened or closed. Receives the new open state as a boolean.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "left",
- "description": "Sets the position of the expand/collapse icon."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Sets content rendered in the accordion heading, right-aligned before the expand/collapse icon.",
+ "required": false
+ },
+ {
+ "name": "headingContent",
+ "type": "ReactNode",
+ "description": "Sets content rendered within the accordion heading, alongside the heading text.",
+ "required": false
+ }
]
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the heading text."
+ },
+ {
+ "name": "headingSize",
+ "type": "GoabAccordionHeadingSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the heading size of the accordion container heading."
+ },
+ {
+ "name": "headingType",
+ "type": "GoabAccordionHeadingType",
+ "required": false,
+ "default": null,
+ "description": "Sets the accordion style variant."
+ },
+ {
+ "name": "iconPosition",
+ "type": "GoabAccordionIconPosition",
+ "required": false,
+ "default": null,
+ "description": "Sets the position of the expand/collapse icon."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the accordion."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the state of the accordion container open or closed."
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets secondary text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: boolean) => void",
+ "description": "Emits when the accordion opens or closes. Emits the new open state as a boolean.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Sets content rendered in the accordion heading, right-aligned before the expand/collapse icon.",
+ "required": false
+ },
+ {
+ "name": "headingContent",
+ "type": "TemplateRef",
+ "description": "Sets content rendered within the accordion heading, alongside the heading text.",
+ "required": false
+ }
]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
},
- {
- "name": "headingcontent",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": "",
+ "description": "Sets the heading text."
+ },
+ {
+ "name": "heading-type",
+ "type": "\"normal\" | \"filled\"",
+ "typeLabel": "GoabAccordionHeadingType",
+ "values": [
+ "normal",
+ "filled"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Sets the accordion style variant. @default \"normal\""
+ },
+ {
+ "name": "headingsize",
+ "type": "\"small\" | \"medium\"",
+ "typeLabel": "GoabAccordionHeadingSize",
+ "values": [
+ "small",
+ "medium"
+ ],
+ "required": false,
+ "default": "small",
+ "description": "Sets the heading size of the accordion container heading."
+ },
+ {
+ "name": "iconposition",
+ "type": "\"left\" | \"right\"",
+ "typeLabel": "GoabAccordionIconPosition",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Sets the position of the expand/collapse icon."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Unique identifier for the accordion."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the accordion."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "xs",
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the state of the accordion container open or closed."
+ },
+ {
+ "name": "secondarytext",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets secondary text."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ open: boolean }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Sets content rendered in the accordion heading, right-aligned before the expand/collapse icon.",
+ "required": false
+ },
+ {
+ "name": "headingcontent",
+ "description": "Sets content rendered within the accordion heading, alongside the heading text.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/app-header-menu.json b/docs/generated/component-apis/app-header-menu.json
index 1e8fca8a88..def03aea4c 100644
--- a/docs/generated/component-apis/app-header-menu.json
+++ b/docs/generated/component-apis/app-header-menu.json
@@ -1,57 +1,124 @@
{
"componentSlug": "app-header-menu",
"extractedFrom": "libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The menu heading text displayed as the dropdown trigger."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": true,
- "default": null,
- "description": "Icon displayed before the heading text."
- },
- {
- "name": "type",
- "type": "\"primary\" | \"secondary\"",
- "values": [
- "primary",
- "secondary"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The menu heading text displayed as the dropdown trigger."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "slotName",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Slot name used to place this menu in the correct slot of the parent component."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "primary",
- "description": "The menu style variant. Primary uses bold text, secondary uses regular weight."
+ "events": [],
+ "slots": []
},
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The menu heading text displayed as the dropdown trigger."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "slotName",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the slot name for the component."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "1",
- "description": "The header version this menu is used with."
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "rootEl",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The menu heading text displayed as the dropdown trigger."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": true,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "rootEl",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"primary\" | \"secondary\"",
+ "values": [
+ "primary",
+ "secondary"
+ ],
+ "required": false,
+ "default": "primary",
+ "description": "The menu style variant. Primary uses bold text, secondary uses regular weight."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/app-header-navigation.json b/docs/generated/component-apis/app-header-navigation.json
deleted file mode 100644
index 8d8a1251fc..0000000000
--- a/docs/generated/component-apis/app-header-navigation.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "componentSlug": "app-header-navigation",
- "extractedFrom": "libs/web-components/src/components/app-header-navigation/AppHeaderNavigation.svelte",
- "props": [
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
- ],
- "required": false,
- "default": "1",
- "description": ""
- },
- {
- "name": "windowWidth",
- "type": "number",
- "required": true,
- "default": null,
- "description": ""
- },
- {
- "name": "mobile",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": ""
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/app-header.json b/docs/generated/component-apis/app-header.json
index 164f93138c..77e42d64f3 100644
--- a/docs/generated/component-apis/app-header.json
+++ b/docs/generated/component-apis/app-header.json
@@ -1,106 +1,258 @@
{
"componentSlug": "app-header",
"extractedFrom": "libs/web-components/src/components/app-header/AppHeader.svelte",
- "props": [
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "fullMenuBreakpoint",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the breakpoint in px for the full menu to display."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Set the service name to display in the app header."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "V2 only: Secondary text displayed under the service name."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Set the URL to link from the alberta.ca logo. A full url is required."
+ }
],
- "required": false,
- "default": "1",
- "description": ""
- },
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Set the service name to display in the app header."
- },
- {
- "name": "secondarytext",
- "type": "string",
- "required": false,
- "default": "",
- "description": "V2 only: Secondary text displayed under the service name."
- },
- {
- "name": "url",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Set the URL to link from the alberta.ca logo. A full url is required."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "maxcontentwidth",
- "type": "any",
- "required": false,
- "default": "",
- "description": "Maximum width of the content area."
- },
- {
- "name": "fullmenubreakpoint",
- "type": "number",
- "required": false,
- "default": "TABLET_BP",
- "description": "Sets the breakpoint in px for the full menu to display."
- },
- {
- "name": "hasmenuclickhandler",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, clicking the menu button dispatches _menuClick event instead of toggling the menu. Use for custom menu handling."
- }
- ],
- "events": [
- {
- "name": "onMenuClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "events": [
+ {
+ "name": "onMenuClick",
+ "type": "() => void",
+ "description": "Callback fired when the menu button is clicked. When provided, clicking the menu button dispatches a custom event instead of toggling the menu.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "banner",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "navigation",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "phase",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "utilities",
+ "description": "",
+ "required": false
+ }
]
},
- {
- "name": "_menuClick",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "fullMenuBreakpoint",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the breakpoint in px for the full menu to display."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the service name to display in the app header."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "V2 only: Secondary text displayed under the service name."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the URL to link from the alberta.ca logo. A full url is required."
+ }
+ ],
+ "events": [
+ {
+ "name": "onMenuClick",
+ "type": "() => void",
+ "description": "Emits when the menu button is clicked. Used for custom menu handling.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "banner",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "navigation",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "phase",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "utilities",
+ "description": "",
+ "required": false
+ }
]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "banner",
- "description": ""
- },
- {
- "name": "phase",
- "description": ""
},
- {
- "name": "utilities",
- "description": ""
- },
- {
- "name": "navigation",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "fullmenubreakpoint",
+ "type": "number",
+ "required": false,
+ "default": "TABLET_BP",
+ "description": "Sets the breakpoint in px for the full menu to display."
+ },
+ {
+ "name": "hasmenuclickhandler",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, clicking the menu button dispatches _menuClick event instead of toggling the menu. Use for custom menu handling."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Set the service name to display in the app header."
+ },
+ {
+ "name": "maxcontentwidth",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "secondarytext",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "V2 only: Secondary text displayed under the service name."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Set the URL to link from the alberta.ca logo. A full url is required."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_menuClick",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "banner",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "navigation",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "phase",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "utilities",
+ "description": "",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/badge.json b/docs/generated/component-apis/badge.json
index cc16d9e39b..ca313bc451 100644
--- a/docs/generated/component-apis/badge.json
+++ b/docs/generated/component-apis/badge.json
@@ -1,140 +1,334 @@
{
"componentSlug": "badge",
"extractedFrom": "libs/web-components/src/components/badge/Badge.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"information\" | \"important\" | \"emergency\" | \"success\" | \"dark\" | \"midtone\" | \"light\" | \"archived\" | \"aqua\" | \"black\" | \"blue\" | \"green\" | \"orange\" | \"pink\" | \"red\" | \"violet\" | \"white\" | \"yellow\" | \"aqua-light\" | \"black-light\" | \"blue-light\" | \"green-light\" | \"orange-light\" | \"pink-light\" | \"red-light\" | \"violet-light\" | \"yellow-light\" | \"sky\" | \"prairie\" | \"lilac\" | \"pasture\" | \"sunset\" | \"dawn\" | \"default\"",
- "typeLabel": "GoabBadgeType",
- "values": [
- "information",
- "important",
- "emergency",
- "success",
- "dark",
- "midtone",
- "light",
- "archived",
- "aqua",
- "black",
- "blue",
- "green",
- "orange",
- "pink",
- "red",
- "violet",
- "white",
- "yellow",
- "aqua-light",
- "black-light",
- "blue-light",
- "green-light",
- "orange-light",
- "pink-light",
- "red-light",
- "violet-light",
- "yellow-light",
- "sky",
- "prairie",
- "lilac",
- "pasture",
- "sunset",
- "dawn",
- "default"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accessible label for screen readers."
+ },
+ {
+ "name": "content",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text label of the badge."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabBadgeEmphasis",
+ "required": false,
+ "default": "strong",
+ "description": "Sets the visual emphasis. 'subtle' for less prominent, 'strong' for more emphasis."
+ },
+ {
+ "name": "iconType",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon type to display in the badge."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabBadgeSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the badge."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabBadgeType",
+ "required": true,
+ "default": null,
+ "description": "Sets the context and colour of the badge."
+ }
],
- "required": true,
- "default": null,
- "description": "Defines the context and colour of the badge."
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "content",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text label of the badge."
- },
- {
- "name": "icon",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use icontype instead. Includes an icon in the badge.",
- "deprecated": true
- },
- {
- "name": "icontype",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon type to display in the badge."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Accessible label for screen readers."
- },
- {
- "name": "size",
- "type": "\"medium\" | \"large\"",
- "typeLabel": "GoabBadgeSize",
- "values": [
- "medium",
- "large"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the accessible label for screen readers."
+ },
+ {
+ "name": "content",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the text label of the badge."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabBadgeEmphasis",
+ "required": false,
+ "default": "strong",
+ "description": "Sets the visual emphasis. 'subtle' for less prominent, 'strong' for more emphasis."
+ },
+ {
+ "name": "iconType",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon type to display in the badge."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "size",
+ "type": "GoabBadgeSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the badge."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabBadgeType",
+ "required": false,
+ "default": null,
+ "description": "Sets the context and colour of the badge."
+ }
],
- "required": false,
- "default": "medium",
- "description": "Sets the size of the badge."
+ "events": [],
+ "slots": []
},
- {
- "name": "emphasis",
- "type": "",
- "required": false,
- "default": "strong",
- "description": "Sets the visual emphasis. 'subtle' for less prominent, 'strong' for more emphasis."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Accessible label for screen readers."
+ },
+ {
+ "name": "content",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text label of the badge."
+ },
+ {
+ "name": "emphasis",
+ "type": "",
+ "required": false,
+ "default": "strong",
+ "description": "Sets the visual emphasis. 'subtle' for less prominent, 'strong' for more emphasis."
+ },
+ {
+ "name": "icontype",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon type to display in the badge."
+ },
+ {
+ "name": "justify-content",
+ "type": "\"center\" | \"flex-start\" | \"flex-end\" | \"space-between\" | \"\"",
+ "values": [
+ "center",
+ "flex-start",
+ "flex-end",
+ "space-between"
+ ],
+ "required": false,
+ "default": "",
+ "description": "justify-content value for the badge container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "min-width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "min-width value for the badge container (e.g. \"20px\", \"var(--goa-space-m)\")."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "\"medium\" | \"large\"",
+ "typeLabel": "GoabBadgeSize",
+ "values": [
+ "medium",
+ "large"
+ ],
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the badge."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"information\" | \"important\" | \"emergency\" | \"success\" | \"dark\" | \"midtone\" | \"light\" | \"archived\" | \"aqua\" | \"black\" | \"blue\" | \"green\" | \"orange\" | \"pink\" | \"red\" | \"violet\" | \"white\" | \"yellow\" | \"aqua-light\" | \"black-light\" | \"blue-light\" | \"green-light\" | \"orange-light\" | \"pink-light\" | \"red-light\" | \"violet-light\" | \"yellow-light\" | \"sky\" | \"prairie\" | \"lilac\" | \"pasture\" | \"sunset\" | \"dawn\" | \"default\"",
+ "typeLabel": "GoabBadgeType",
+ "values": [
+ "information",
+ "important",
+ "emergency",
+ "success",
+ "dark",
+ "midtone",
+ "light",
+ "archived",
+ "aqua",
+ "black",
+ "blue",
+ "green",
+ "orange",
+ "pink",
+ "red",
+ "violet",
+ "white",
+ "yellow",
+ "aqua-light",
+ "black-light",
+ "blue-light",
+ "green-light",
+ "orange-light",
+ "pink-light",
+ "red-light",
+ "violet-light",
+ "yellow-light",
+ "sky",
+ "prairie",
+ "lilac",
+ "pasture",
+ "sunset",
+ "dawn",
+ "default"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Defines the context and colour of the badge."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabBadgeVersion",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/block.json b/docs/generated/component-apis/block.json
index 499c8e80e5..7de90b6ce5 100644
--- a/docs/generated/component-apis/block.json
+++ b/docs/generated/component-apis/block.json
@@ -1,105 +1,270 @@
{
"componentSlug": "block",
"extractedFrom": "libs/web-components/src/components/block/Block.svelte",
- "props": [
- {
- "name": "gap",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "m",
- "description": "Spacing between items. Uses design system spacing tokens."
- },
- {
- "name": "direction",
- "type": "\"row\" | \"column\"",
- "values": [
- "row",
- "column"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "GoabBlockAlignment",
+ "required": false,
+ "default": "normal",
+ "description": "Primary axis alignment of child components."
+ },
+ {
+ "name": "direction",
+ "type": "GoabBlockDirection",
+ "required": false,
+ "default": "row",
+ "description": "Stacking direction of child components."
+ },
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Spacing between items. Uses design system spacing tokens."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the block container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "minWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum width of the block container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the block container."
+ }
],
- "required": false,
- "default": "row",
- "description": "Stacking direction of child components."
+ "events": [],
+ "slots": []
},
- {
- "name": "alignment",
- "type": "\"center\" | \"start\" | \"end\" | \"normal\"",
- "values": [
- "center",
- "start",
- "end",
- "normal"
+ "angular": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "GoabBlockAlignment",
+ "required": false,
+ "default": null,
+ "description": "Sets the primary axis alignment of child components."
+ },
+ {
+ "name": "direction",
+ "type": "GoabBlockDirection",
+ "required": false,
+ "default": null,
+ "description": "Sets the stacking direction of child components."
+ },
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the spacing between items. Uses design system spacing tokens."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the block container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "minWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum width of the block container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the block container. Defaults to max-content."
+ }
],
- "required": false,
- "default": "normal",
- "description": "Primary axis alignment of child components."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "minWidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the minimum width of the block container."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the maximum width of the block container."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the width of the block container. Defaults to max-content."
+ "events": [],
+ "slots": []
},
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "\"center\" | \"start\" | \"end\" | \"normal\"",
+ "values": [
+ "center",
+ "start",
+ "end",
+ "normal"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Primary axis alignment of child components."
+ },
+ {
+ "name": "direction",
+ "type": "\"row\" | \"column\"",
+ "values": [
+ "row",
+ "column"
+ ],
+ "required": false,
+ "default": "row",
+ "description": "Stacking direction of child components."
+ },
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Spacing between items. Uses design system spacing tokens."
+ },
+ {
+ "name": "max-width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the maximum width of the block container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "min-width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the minimum width of the block container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the width of the block container. Defaults to max-content."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/button-group.json b/docs/generated/component-apis/button-group.json
index 8014882d01..948bb7f955 100644
--- a/docs/generated/component-apis/button-group.json
+++ b/docs/generated/component-apis/button-group.json
@@ -1,77 +1,186 @@
{
"componentSlug": "button-group",
"extractedFrom": "libs/web-components/src/components/button-group/ButtonGroup.svelte",
- "props": [
- {
- "name": "alignment",
- "type": "\"start\" | \"end\" | \"center\"",
- "typeLabel": "GoabButtonGroupButtonAlignment",
- "values": [
- "start",
- "end",
- "center"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "GoabButtonGroupAlignment",
+ "required": true,
+ "default": null,
+ "description": "Positions the button group in the page layout."
+ },
+ {
+ "name": "gap",
+ "type": "GoabButtonGroupGap",
+ "required": false,
+ "default": "relaxed",
+ "description": "Sets the spacing between buttons in the button group."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "start",
- "description": "Positions the button group in the page layout."
+ "events": [],
+ "slots": []
},
- {
- "name": "gap",
- "type": "\"relaxed\" | \"compact\"",
- "typeLabel": "GoabButtonGroupGap",
- "values": [
- "relaxed",
- "compact"
+ "angular": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "GoabButtonGroupAlignment",
+ "required": false,
+ "default": null,
+ "description": "Positions the button group in the page layout."
+ },
+ {
+ "name": "gap",
+ "type": "GoabButtonGroupGap",
+ "required": false,
+ "default": null,
+ "description": "Sets the spacing between buttons in the button group."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "relaxed",
- "description": "Sets the spacing between buttons in the button group."
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "alignment",
+ "type": "\"start\" | \"end\" | \"center\"",
+ "typeLabel": "GoabButtonGroupButtonAlignment",
+ "values": [
+ "start",
+ "end",
+ "center"
+ ],
+ "required": false,
+ "default": "start",
+ "description": "Positions the button group in the page layout."
+ },
+ {
+ "name": "gap",
+ "type": "\"relaxed\" | \"compact\"",
+ "typeLabel": "GoabButtonGroupGap",
+ "values": [
+ "relaxed",
+ "compact"
+ ],
+ "required": false,
+ "default": "relaxed",
+ "description": "Sets the spacing between buttons in the button group."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/button.json b/docs/generated/component-apis/button.json
index 3ccbd384e7..3ee01667b2 100644
--- a/docs/generated/component-apis/button.json
+++ b/docs/generated/component-apis/button.json
@@ -1,141 +1,405 @@
{
"componentSlug": "button",
"extractedFrom": "libs/web-components/src/components/button/Button.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"primary\" | \"submit\" | \"secondary\" | \"tertiary\" | \"start\" | \"text\"",
- "typeLabel": "GoabButtonType",
- "values": [
- "primary",
- "submit",
- "secondary",
- "tertiary",
- "start",
- "text"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, prevents user interaction and applies disabled styling."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the button text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabButtonSize",
+ "required": false,
+ "default": "normal",
+ "description": "Controls the size of the button. Use \"compact\" for inline actions or space-constrained layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the button text."
+ },
+ {
+ "name": "type",
+ "type": "GoabButtonType",
+ "required": false,
+ "default": "primary",
+ "description": "Sets the visual style of the button. Use \"primary\" for main actions, \"secondary\" for alternative actions, \"tertiary\" for low-emphasis actions, \"start\" for prominent call-to-action buttons, and \"text\" for text-only buttons."
+ },
+ {
+ "name": "variant",
+ "type": "GoabButtonVariant",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the color variant for semantic meaning. Use \"destructive\" for delete or irreversible actions, \"inverse\" for light-colored text on dark backgrounds, and \"dark\" for dark text color on text buttons only. Note: \"dark\" has no effect on non-text button types."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a custom width for the button (e.g., \"200px\" or \"100%\")."
+ }
],
- "required": false,
- "default": "primary",
- "description": "Sets the visual style of the button. Use \"primary\" for main actions, \"secondary\" for alternative actions, \"tertiary\" for low-emphasis actions, \"start\" for prominent call-to-action buttons, and \"text\" for text-only buttons."
- },
- {
- "name": "size",
- "type": "\"normal\" | \"compact\"",
- "typeLabel": "GoabButtonSize",
- "values": [
- "normal",
- "compact"
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Callback fired when the button is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "normal",
- "description": "Controls the size of the button. Use \"compact\" for inline actions or space-constrained layouts."
+ "slots": []
},
- {
- "name": "variant",
- "type": "\"normal\" | \"destructive\" | \"inverse\" | \"dark\"",
- "typeLabel": "GoabButtonVariant",
- "values": [
- "normal",
- "destructive",
- "inverse",
- "dark"
+ "angular": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state. When true, prevents user interaction and applies disabled styling."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon displayed before the button text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "size",
+ "type": "GoabButtonSize",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the size of the button. Use \"compact\" for inline actions or space-constrained layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the button text."
+ },
+ {
+ "name": "type",
+ "type": "GoabButtonType",
+ "required": false,
+ "default": "primary",
+ "description": "Sets the visual style of the button. Use \"primary\" for main actions, \"secondary\" for alternative actions, \"tertiary\" for low-emphasis actions, \"start\" for prominent call-to-action buttons, and \"text\" for text-only buttons."
+ },
+ {
+ "name": "variant",
+ "type": "GoabButtonVariant",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the color variant for semantic meaning. Use \"destructive\" for delete or irreversible actions, \"inverse\" for light-colored text on dark backgrounds, and \"dark\" for dark text color on text buttons only. Note: \"dark\" has no effect on non-text button types."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a custom width for the button (e.g., \"200px\" or \"100%\")."
+ }
],
- "required": false,
- "default": "normal",
- "description": "Sets the color variant for semantic meaning. Use \"destructive\" for delete or irreversible actions, \"inverse\" for light-colored text on dark backgrounds, and \"dark\" for dark text color on text buttons only. Note: \"dark\" has no effect on non-text button types."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, prevents user interaction and applies disabled styling."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the button text."
- },
- {
- "name": "trailingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed after the button text."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a custom width for the button (e.g., \"200px\" or \"100%\")."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Sets the top margin using design system spacing tokens."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Sets the right margin using design system spacing tokens."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Sets the bottom margin using design system spacing tokens."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Sets the left margin using design system spacing tokens."
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Emits when the button is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "action-arg",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "action-args",
+ "type": "Record",
+ "required": false,
+ "default": "{}",
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, prevents user interaction and applies disabled styling."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the button text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin using design system spacing tokens."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin using design system spacing tokens."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin using design system spacing tokens."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin using design system spacing tokens."
+ },
+ {
+ "name": "size",
+ "type": "\"normal\" | \"compact\"",
+ "typeLabel": "GoabButtonSize",
+ "values": [
+ "normal",
+ "compact"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Controls the size of the button. Use \"compact\" for inline actions or space-constrained layouts."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the button text."
+ },
+ {
+ "name": "type",
+ "type": "\"primary\" | \"submit\" | \"secondary\" | \"tertiary\" | \"start\" | \"text\"",
+ "typeLabel": "GoabButtonType",
+ "values": [
+ "primary",
+ "submit",
+ "secondary",
+ "tertiary",
+ "start",
+ "text"
+ ],
+ "required": false,
+ "default": "primary",
+ "description": "Sets the visual style of the button. Use \"primary\" for main actions, \"secondary\" for alternative actions, \"tertiary\" for low-emphasis actions, \"start\" for prominent call-to-action buttons, and \"text\" for text-only buttons."
+ },
+ {
+ "name": "variant",
+ "type": "\"normal\" | \"destructive\" | \"inverse\" | \"dark\"",
+ "typeLabel": "GoabButtonVariant",
+ "values": [
+ "normal",
+ "destructive",
+ "inverse",
+ "dark"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Sets the color variant for semantic meaning. Use \"destructive\" for delete or irreversible actions, \"inverse\" for light-colored text on dark backgrounds, and \"dark\" for dark text color on text buttons only. Note: \"dark\" has no effect on non-text button types."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabButtonVersion",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a custom width for the button (e.g., \"200px\" or \"100%\")."
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/calendar.json b/docs/generated/component-apis/calendar.json
index 5a6285f88b..f19a0558bf 100644
--- a/docs/generated/component-apis/calendar.json
+++ b/docs/generated/component-apis/calendar.json
@@ -1,99 +1,274 @@
{
"componentSlug": "calendar",
"extractedFrom": "libs/web-components/src/components/calendar/Calendar.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Name identifier for the calendar, included in change events."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "max",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The maximum selectable date in YYYY-MM-DD format. Defaults to 5 years in the future."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "min",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The minimum selectable date in YYYY-MM-DD format. Defaults to 5 years in the past."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Name identifier for the calendar, included in change events."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The currently selected date value in YYYY-MM-DD format."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(details: GoabCalendarOnChangeDetail) => void",
+ "description": "Callback fired when the selected date changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The currently selected date value in YYYY-MM-DD format."
+ "angular": {
+ "props": [
+ {
+ "name": "max",
+ "type": "Date | string | undefined",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The maximum selectable date in YYYY-MM-DD format. Defaults to 5 years in the future."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "min",
+ "type": "Date | string | undefined",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The minimum selectable date in YYYY-MM-DD format. Defaults to 5 years in the past."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Name identifier for the calendar, included in change events."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "Date | string",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The currently selected date value in YYYY-MM-DD format."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabCalendarOnChangeDetail) => void",
+ "description": "Emits when the selected date changes. Emits the selected date details as GoabCalendarOnChangeDetail.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "min",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The minimum selectable date in YYYY-MM-DD format. Defaults to 5 years in the past."
- },
- {
- "name": "max",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The maximum selectable date in YYYY-MM-DD format. Defaults to 5 years in the future."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "bordered",
- "type": "boolean",
- "required": false,
- "default": "true",
- "description": "Shows a border around the calendar. Set to false when embedding within another component."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "bordered",
+ "type": "boolean",
+ "required": false,
+ "default": "true",
+ "description": "Shows a border around the calendar. Set to false when embedding within another component."
+ },
+ {
+ "name": "max",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The maximum selectable date in YYYY-MM-DD format. Defaults to 5 years in the future."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "min",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The minimum selectable date in YYYY-MM-DD format. Defaults to 5 years in the past."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Name identifier for the calendar, included in change events."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The currently selected date value in YYYY-MM-DD format."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ type: string; name: string; value: unknown }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/callout.json b/docs/generated/component-apis/callout.json
index bbb0415aca..9783888d0a 100644
--- a/docs/generated/component-apis/callout.json
+++ b/docs/generated/component-apis/callout.json
@@ -1,126 +1,317 @@
{
"componentSlug": "callout",
"extractedFrom": "libs/web-components/src/components/callout/Callout.svelte",
- "props": [
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "l",
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "size",
- "type": "\"medium\" | \"large\"",
- "typeLabel": "GoabCalloutSize",
- "values": [
- "medium",
- "large"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLive",
+ "type": "GoabCalloutAriaLive",
+ "required": false,
+ "default": "off",
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabCalloutEmphasis",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the visual prominence. 'high' for full background, 'medium' for subtle, 'low' for minimal."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Callout heading text."
+ },
+ {
+ "name": "iconTheme",
+ "type": "GoabCalloutIconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the callout."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabCalloutSize",
+ "required": false,
+ "default": "large",
+ "description": "Sets the size of the callout. 'medium' has reduced padding and type size for compact areas."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabCalloutType",
+ "required": false,
+ "default": "information",
+ "description": "Sets the context and colour of the callout."
+ }
],
- "required": false,
- "default": "large",
- "description": "Sets the size of the callout. 'medium' has reduced padding and type size for compact areas."
+ "events": [],
+ "slots": []
},
- {
- "name": "type",
- "type": "\"emergency\" | \"important\" | \"information\" | \"event\" | \"success\"",
- "typeLabel": "GoabCalloutType",
- "values": [
- "emergency",
- "important",
- "information",
- "event",
- "success"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLive",
+ "type": "GoabCalloutAriaLive",
+ "required": false,
+ "default": "off",
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabCalloutEmphasis",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the visual prominence. 'high' for full background, 'medium' for subtle, 'low' for minimal."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Callout heading text."
+ },
+ {
+ "name": "iconTheme",
+ "type": "GoabCalloutIconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the callout."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "size",
+ "type": "GoabCalloutSize",
+ "required": false,
+ "default": "large",
+ "description": "Sets the size of the callout. 'medium' has reduced padding and type size for compact areas."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabCalloutType",
+ "required": false,
+ "default": "information",
+ "description": "Define the context and colour of the callout."
+ }
],
- "required": true,
- "default": null,
- "description": "Define the context and colour of the callout."
+ "events": [],
+ "slots": []
},
- {
- "name": "emphasis",
- "type": "\"high\" | \"medium\" | \"low\"",
- "typeLabel": "GoabCalloutEmphasisType",
- "values": [
- "high",
- "medium",
- "low"
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialive",
+ "type": "\"off\" | \"assertive\" | \"polite\"",
+ "typeLabel": "GoabCalloutAriaLiveType",
+ "values": [
+ "off",
+ "assertive",
+ "polite"
+ ],
+ "required": false,
+ "default": "off",
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "emphasis",
+ "type": "\"high\" | \"medium\" | \"low\"",
+ "typeLabel": "GoabCalloutEmphasisType",
+ "values": [
+ "high",
+ "medium",
+ "low"
+ ],
+ "required": false,
+ "default": "medium",
+ "description": "Sets the visual prominence. 'high' for full background, 'medium' for subtle, 'low' for minimal."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Callout heading text."
+ },
+ {
+ "name": "icontheme",
+ "type": "IconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the callout."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "l",
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "\"medium\" | \"large\"",
+ "typeLabel": "GoabCalloutSize",
+ "values": [
+ "medium",
+ "large"
+ ],
+ "required": false,
+ "default": "large",
+ "description": "Sets the size of the callout. 'medium' has reduced padding and type size for compact areas."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"emergency\" | \"important\" | \"information\" | \"event\" | \"success\"",
+ "typeLabel": "GoabCalloutType",
+ "values": [
+ "emergency",
+ "important",
+ "information",
+ "event",
+ "success"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Define the context and colour of the callout."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabCalloutVersionType",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
],
- "required": false,
- "default": "medium",
- "description": "Sets the visual prominence. 'high' for full background, 'medium' for subtle, 'low' for minimal."
- },
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Callout heading text."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the callout."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "arialive",
- "type": "\"off\" | \"assertive\" | \"polite\"",
- "typeLabel": "GoabCalloutAriaLiveType",
- "values": [
- "off",
- "assertive",
- "polite"
- ],
- "required": false,
- "default": "off",
- "description": "Indicates how assistive technology should handle updates to the live region."
- },
- {
- "name": "icontheme",
- "type": "IconTheme",
- "required": false,
- "default": "outline",
- "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/card-actions.json b/docs/generated/component-apis/card-actions.json
deleted file mode 100644
index 9efe3cc159..0000000000
--- a/docs/generated/component-apis/card-actions.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "componentSlug": "card-actions",
- "extractedFrom": "libs/web-components/src/components/card-actions/CardActions.svelte",
- "props": [],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/card-content.json b/docs/generated/component-apis/card-content.json
deleted file mode 100644
index e757b05dbe..0000000000
--- a/docs/generated/component-apis/card-content.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "componentSlug": "card-content",
- "extractedFrom": "libs/web-components/src/components/card-content/CardContent.svelte",
- "props": [],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/card-group.json b/docs/generated/component-apis/card-group.json
deleted file mode 100644
index 5ca2073983..0000000000
--- a/docs/generated/component-apis/card-group.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "componentSlug": "card-group",
- "extractedFrom": "libs/web-components/src/components/card-group/CardGroup.svelte",
- "props": [],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/card-image.json b/docs/generated/component-apis/card-image.json
deleted file mode 100644
index 6569d15281..0000000000
--- a/docs/generated/component-apis/card-image.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "componentSlug": "card-image",
- "extractedFrom": "libs/web-components/src/components/card-image/CardImage.svelte",
- "props": [
- {
- "name": "src",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The URL of the image to display."
- },
- {
- "name": "height",
- "type": "string",
- "required": false,
- "default": "100%",
- "description": "Height of the image container. Accepts CSS values like \"200px\" or \"100%\"."
- }
- ],
- "events": [],
- "slots": []
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/card.json b/docs/generated/component-apis/card.json
deleted file mode 100644
index bff87bf697..0000000000
--- a/docs/generated/component-apis/card.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "componentSlug": "card",
- "extractedFrom": "libs/web-components/src/components/card/Card.svelte",
- "props": [
- {
- "name": "elevation",
- "type": "number",
- "required": false,
- "default": "0",
- "description": "Adds a shadow to the card. 0 shows a border, 1-3 increase shadow intensity."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "100%",
- "description": "Sets the width of the card."
- },
- {
- "name": "height",
- "type": "\"auto\" | \"max\"",
- "values": [
- "auto",
- "max"
- ],
- "required": false,
- "default": "auto",
- "description": "Sets the height behavior. 'auto' fits content, 'max' fills available height."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/checkbox-list.json b/docs/generated/component-apis/checkbox-list.json
index 921345b50f..d8c7ea68a7 100644
--- a/docs/generated/component-apis/checkbox-list.json
+++ b/docs/generated/component-apis/checkbox-list.json
@@ -1,115 +1,312 @@
{
"componentSlug": "checkbox-list",
"extractedFrom": "libs/web-components/src/components/checkbox-list/CheckboxList.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The name for the checkbox list group. Used as group identifier in change events."
- },
- {
- "name": "value",
- "type": "string[]",
- "required": false,
- "default": "[]",
- "description": "Array of currently selected checkbox values."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables all checkboxes in the list."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows an error state on all checkboxes in the list."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the checkbox list container."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables all checkboxes in the list."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state on all checkboxes in the list."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the checkbox list container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name for the checkbox list group. Used as group identifier in change events."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox list. 'compact' reduces spacing between items."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string[]",
+ "required": false,
+ "default": null,
+ "description": "Array of currently selected checkbox values."
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of the checkbox list. 'compact' reduces spacing between items."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabCheckboxListOnChangeDetail) => void",
+ "description": "Callback fired when the selected values change.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the checkbox list container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The name for the checkbox list group. Used as group identifier in change events."
+ },
+ {
+ "name": "size",
+ "type": "GoabCheckboxSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox list. 'compact' reduces spacing between items."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string[]",
+ "required": false,
+ "default": null,
+ "description": "Array of currently selected checkbox values."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabCheckboxListOnChangeDetail) => void",
+ "description": "Emits when a checkbox selection changes. Emits the change detail including name, value array, and event.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables all checkboxes in the list."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows an error state on all checkboxes in the list."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the checkbox list container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name for the checkbox list group. Used as group identifier in change events."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox list. 'compact' reduces spacing between items."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string[]",
+ "required": false,
+ "default": "[]",
+ "description": "Array of currently selected checkbox values."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; value: string[]; labels: string[] }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/checkbox.json b/docs/generated/component-apis/checkbox.json
index 5e2809db8e..a91f7e1967 100644
--- a/docs/generated/component-apis/checkbox.json
+++ b/docs/generated/component-apis/checkbox.json
@@ -1,181 +1,496 @@
{
"componentSlug": "checkbox",
"extractedFrom": "libs/web-components/src/components/checkbox/Checkbox.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Unique name to identify the checkbox."
- },
- {
- "name": "checked",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Marks the checkbox item as selected."
- },
- {
- "name": "indeterminate",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows a mixed/partial selection state. Used for 'Select All' checkboxes when some items are selected."
- },
- {
- "name": "text",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Label shown beside the checkbox."
- },
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The value binding."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disable this control. It will not receive focus or events."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows an error on the checkbox item."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Additional description text displayed below the checkbox label."
- },
- {
- "name": "revealarialabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text announced by screen readers when the reveal slot content is displayed."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the checkbox."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "checked",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Marks the checkbox item as selected."
+ },
+ {
+ "name": "description",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Additional description text displayed below the checkbox label."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disable this control. It will not receive focus or events."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error on the checkbox item."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a unique id for the checkbox element."
+ },
+ {
+ "name": "indeterminate",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows a mixed/partial selection state. Used for 'Select All' checkboxes when some items are selected."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the checkbox."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Unique name to identify the checkbox."
+ },
+ {
+ "name": "revealAriaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text announced by screen readers when the reveal slot content is displayed."
+ },
+ {
+ "name": "size",
+ "type": "GoabCheckboxSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox. 'compact' reduces spacing for dense layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Label shown beside the checkbox."
+ },
+ {
+ "name": "value",
+ "type": "string | number | boolean",
+ "values": [
+ "string",
+ "number",
+ "boolean"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The value binding."
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of the checkbox. 'compact' reduces spacing for dense layouts."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabCheckboxOnChangeDetail) => void",
+ "description": "Callback fired when the checkbox selection changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "description",
+ "type": "ReactNode",
+ "description": "Additional description text displayed below the checkbox label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "type": "ReactNode",
+ "description": "Content revealed when the checkbox is checked.",
+ "required": false
+ }
]
},
- {
- "name": "onRevealChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "checked",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Marks the checkbox item as selected."
+ },
+ {
+ "name": "description",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets additional description content displayed below the checkbox label. Accepts plain text or a template."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "indeterminate",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows a mixed/partial selection state. Used for 'Select All' checkboxes when some items are selected."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the checkbox."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the name of the checkbox input for form submission."
+ },
+ {
+ "name": "revealArialLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text announced by screen readers when the reveal slot content is displayed."
+ },
+ {
+ "name": "size",
+ "type": "GoabCheckboxSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox. 'compact' reduces spacing for dense layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Label shown beside the checkbox."
+ },
+ {
+ "name": "value",
+ "type": "string | number | boolean | null",
+ "values": [
+ "string",
+ "number",
+ "boolean"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The value binding."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabCheckboxOnChangeDetail) => void",
+ "description": "Emits when the checkbox value changes. Emits the new checkbox state as a GoabCheckboxOnChangeDetail object.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "description",
+ "type": "TemplateRef",
+ "description": "Additional description text displayed below the checkbox label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "type": "TemplateRef",
+ "description": "Content revealed when the checkbox is checked.",
+ "required": false
+ }
]
},
- {
- "name": "_revealChange",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "checked",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Marks the checkbox item as selected."
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Additional description text displayed below the checkbox label."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disable this control. It will not receive focus or events."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows an error on the checkbox item."
+ },
+ {
+ "name": "indeterminate",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows a mixed/partial selection state. Used for 'Select All' checkboxes when some items are selected."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the checkbox."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Unique name to identify the checkbox."
+ },
+ {
+ "name": "revealarialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text announced by screen readers when the reveal slot content is displayed."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the checkbox. 'compact' reduces spacing for dense layouts."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Label shown beside the checkbox."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The value binding."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; checked: boolean; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "description",
+ "description": "Additional description text displayed below the checkbox label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "description": "Content revealed when the checkbox is checked.",
+ "required": false
+ }
]
}
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "description",
- "description": ""
- },
- {
- "name": "reveal",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/chip.json b/docs/generated/component-apis/chip.json
index ed45fe3d41..0ed5102ea7 100644
--- a/docs/generated/component-apis/chip.json
+++ b/docs/generated/component-apis/chip.json
@@ -1,114 +1,146 @@
{
"componentSlug": "chip",
"extractedFrom": "libs/web-components/src/components/chip/Chip.svelte",
- "props": [
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Callback fired when the chip is clicked or deleted.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
+ "angular": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Emits when the chip is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "@deprecated Use GoAFilterChip instead. Icon displayed at the start of the chip.",
- "deprecated": true
- },
- {
- "name": "icontheme",
- "type": "IconTheme",
- "required": false,
- "default": "outline",
- "description": "@deprecated Use GoAFilterChip instead. The icon theme - outline or filled.",
- "deprecated": true
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "@deprecated Use GoAFilterChip instead. Shows an error state on the chip.",
- "deprecated": true
- },
- {
- "name": "deletable",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "@deprecated Use GoAFilterChip instead. When true, shows a delete icon and makes chip clickable.",
- "deprecated": true
- },
- {
- "name": "content",
- "type": "string",
- "required": true,
- "default": null,
- "description": "@deprecated Use GoAFilterChip instead. The text content displayed in the chip.",
- "deprecated": true
- },
- {
- "name": "variant",
- "type": "\"filter\"",
- "required": true,
- "default": null,
- "description": "@deprecated Use GoAFilterChip instead. The chip variant style.",
- "deprecated": true
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use GoAFilterChip instead. Sets a data-testid attribute for automated testing.",
- "deprecated": true
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/circular-progress.json b/docs/generated/component-apis/circular-progress.json
index 15cdda806d..9e1626e5fe 100644
--- a/docs/generated/component-apis/circular-progress.json
+++ b/docs/generated/component-apis/circular-progress.json
@@ -1,60 +1,160 @@
{
"componentSlug": "circular-progress",
"extractedFrom": "libs/web-components/src/components/circular-progress/CircularProgress.svelte",
- "props": [
- {
- "name": "variant",
- "type": "\"fullscreen\" | \"inline\"",
- "typeLabel": "GoabCircularProgressVariant",
- "values": [
- "fullscreen",
- "inline"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "message",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Loading message displayed below the progress indicator."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the progress value (0–100). When omitted, an infinite spinner is shown."
+ },
+ {
+ "name": "size",
+ "type": "GoabCircularProgressSize",
+ "required": false,
+ "default": "large",
+ "description": "Sets the size of the progress indicator."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabCircularProgressVariant",
+ "required": false,
+ "default": "inline",
+ "description": "Controls the display mode. 'fullscreen' stretches across the full screen; 'inline' is used within content."
+ },
+ {
+ "name": "visible",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls visibility of the progress indicator, allowing a fade transition to be applied."
+ }
],
- "required": false,
- "default": "inline",
- "description": "Stretch across the full screen or use it inline"
+ "events": [],
+ "slots": []
},
- {
- "name": "size",
- "type": "\"small\" | \"large\"",
- "typeLabel": "GoabCircularProgressSize",
- "values": [
- "small",
- "large"
+ "angular": {
+ "props": [
+ {
+ "name": "message",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Loading message displayed under the progress indicator."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Set the progress value. Setting this value will change the type from infinite to progress."
+ },
+ {
+ "name": "size",
+ "type": "GoabCircularProgressSize",
+ "required": false,
+ "default": null,
+ "description": "Size of the progress indicator."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabCircularProgressVariant",
+ "required": false,
+ "default": null,
+ "description": "Stretch across the full screen or use it inline."
+ },
+ {
+ "name": "visible",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Show/hide the page loader. This allows for fade transition to be applied in each transition."
+ }
],
- "required": false,
- "default": "large",
- "description": "Size of the progress indicator"
+ "events": [],
+ "slots": []
},
- {
- "name": "message",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Loading message displayed under the progress indicator"
- },
- {
- "name": "progress",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "Set the progress value. Setting this value will change the type from infinite to progress"
- },
- {
- "name": "visible",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Show/hide the page loader. This allows for fade transition to be applied in each transition."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "webComponents": {
+ "props": [
+ {
+ "name": "message",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Loading message displayed under the progress indicator"
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Set the progress value. Setting this value will change the type from infinite to progress"
+ },
+ {
+ "name": "size",
+ "type": "\"small\" | \"large\"",
+ "typeLabel": "GoabCircularProgressSize",
+ "values": [
+ "small",
+ "large"
+ ],
+ "required": false,
+ "default": "large",
+ "description": "Size of the progress indicator"
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"fullscreen\" | \"inline\"",
+ "typeLabel": "GoabCircularProgressVariant",
+ "values": [
+ "fullscreen",
+ "inline"
+ ],
+ "required": false,
+ "default": "inline",
+ "description": "Stretch across the full screen or use it inline"
+ },
+ {
+ "name": "visible",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Show/hide the page loader. This allows for fade transition to be applied in each transition."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/container.json b/docs/generated/component-apis/container.json
index 6b8be6c90d..528dc0cf68 100644
--- a/docs/generated/component-apis/container.json
+++ b/docs/generated/component-apis/container.json
@@ -1,130 +1,342 @@
{
"componentSlug": "container",
"extractedFrom": "libs/web-components/src/components/container/Container.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"interactive\" | \"info\" | \"error\" | \"success\" | \"important\" | \"non-interactive\"",
- "typeLabel": "GoabContainerType",
- "values": [
- "interactive",
- "info",
- "error",
- "success",
- "important",
- "non-interactive"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "accent",
+ "type": "GoabContainerAccent",
+ "required": false,
+ "default": "filled",
+ "description": "Sets the style of accent on the container."
+ },
+ {
+ "name": "maxHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum height of the container."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "minHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum height of the container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "padding",
+ "type": "GoabContainerPadding",
+ "required": false,
+ "default": "relaxed",
+ "description": "Sets the amount of white space in the container."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabContainerType",
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the container and accent bar styling."
+ },
+ {
+ "name": "width",
+ "type": "GoabContainerWidth",
+ "required": false,
+ "default": "full",
+ "description": "Sets the width of the container."
+ }
],
- "required": false,
- "default": "interactive",
- "description": "Sets the container and accent bar styling."
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Content rendered in the container's actions area, typically buttons or controls.",
+ "required": false
+ },
+ {
+ "name": "title",
+ "type": "ReactNode",
+ "description": "Content rendered in the container's title/heading area.",
+ "required": false
+ }
+ ]
},
- {
- "name": "accent",
- "type": "\"thick\" | \"thin\" | \"filled\"",
- "typeLabel": "GoabContainerAccent",
- "values": [
- "thick",
- "thin",
- "filled"
+ "angular": {
+ "props": [
+ {
+ "name": "accent",
+ "type": "GoabContainerAccent",
+ "required": false,
+ "default": "filled",
+ "description": "Sets the style of accent on the container."
+ },
+ {
+ "name": "maxHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum height of the container."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "minHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum height of the container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "padding",
+ "type": "GoabContainerPadding",
+ "required": false,
+ "default": "relaxed",
+ "description": "Sets the amount of white space in the container."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabContainerType",
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the container and accent bar styling."
+ },
+ {
+ "name": "width",
+ "type": "GoabContainerWidth",
+ "required": false,
+ "default": "full",
+ "description": "Sets the width of the container."
+ }
],
- "required": false,
- "default": "filled",
- "description": "Sets the style of accent on the container."
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Content rendered in the container's actions area, typically buttons or controls.",
+ "required": false
+ },
+ {
+ "name": "title",
+ "type": "TemplateRef",
+ "description": "Content rendered in the container's title/heading area.",
+ "required": false
+ }
+ ]
},
- {
- "name": "padding",
- "type": "\"relaxed\" | \"compact\"",
- "typeLabel": "GoabContainerPadding",
- "values": [
- "relaxed",
- "compact"
+ "webComponents": {
+ "props": [
+ {
+ "name": "accent",
+ "type": "\"thick\" | \"thin\" | \"filled\"",
+ "typeLabel": "GoabContainerAccent",
+ "values": [
+ "thick",
+ "thin",
+ "filled"
+ ],
+ "required": false,
+ "default": "filled",
+ "description": "Sets the style of accent on the container."
+ },
+ {
+ "name": "maxheight",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the maximum height of the container."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Bottom margin."
+ },
+ {
+ "name": "minheight",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the minimum height of the container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "padding",
+ "type": "\"relaxed\" | \"compact\"",
+ "typeLabel": "GoabContainerPadding",
+ "values": [
+ "relaxed",
+ "compact"
+ ],
+ "required": false,
+ "default": "relaxed",
+ "description": "Sets the amount of white space in the container."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"interactive\" | \"info\" | \"error\" | \"success\" | \"important\" | \"non-interactive\"",
+ "typeLabel": "GoabContainerType",
+ "values": [
+ "interactive",
+ "info",
+ "error",
+ "success",
+ "important",
+ "non-interactive"
+ ],
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the container and accent bar styling."
+ },
+ {
+ "name": "width",
+ "type": "\"full\" | \"content\"",
+ "typeLabel": "GoabContainerWidth",
+ "values": [
+ "full",
+ "content"
+ ],
+ "required": false,
+ "default": "full",
+ "description": "Sets the width of the container."
+ }
],
- "required": false,
- "default": "relaxed",
- "description": "Sets the amount of white space in the container."
- },
- {
- "name": "width",
- "type": "\"full\" | \"content\"",
- "typeLabel": "GoabContainerWidth",
- "values": [
- "full",
- "content"
- ],
- "required": false,
- "default": "full",
- "description": "Sets the width of the container."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the container."
- },
- {
- "name": "minHeight",
- "type": "any",
- "required": false,
- "default": "",
- "description": "Sets the minimum height of the container."
- },
- {
- "name": "maxHeight",
- "type": "any",
- "required": false,
- "default": "",
- "description": "Sets the maximum height of the container."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "m",
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "title",
- "description": ""
- },
- {
- "name": "actions",
- "description": ""
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Content rendered in the container's actions area, typically buttons or controls.",
+ "required": false
+ },
+ {
+ "name": "title",
+ "description": "Content rendered in the container's title/heading area.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/data-grid.json b/docs/generated/component-apis/data-grid.json
index bf52986bea..cf8730225b 100644
--- a/docs/generated/component-apis/data-grid.json
+++ b/docs/generated/component-apis/data-grid.json
@@ -1,46 +1,123 @@
{
"componentSlug": "data-grid",
"extractedFrom": "libs/web-components/src/components/data-grid/DataGrid.svelte",
- "props": [
- {
- "name": "keyboardIconVisibility",
- "type": "\"visible\" | \"hidden\"",
- "values": [
- "visible",
- "hidden"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "keyboardIconPosition",
+ "type": "\"left\" | \"right\"",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Position of the keyboard navigation indicator icon."
+ },
+ {
+ "name": "keyboardIconVisibility",
+ "type": "\"visible\" | \"hidden\"",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the keyboard navigation indicator icon."
+ },
+ {
+ "name": "keyboardNav",
+ "type": "\"layout\" | \"table\"",
+ "values": [
+ "layout",
+ "table"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Navigation mode. 'table' navigates like a table (up/down between rows), 'layout' allows wrapping between rows with left/right arrows."
+ }
],
- "required": false,
- "default": "visible",
- "description": "Controls visibility of the keyboard navigation indicator icon. Use \"visible\" to show or \"hidden\" to hide."
+ "events": [],
+ "slots": []
},
- {
- "name": "keyboardNav",
- "type": "\"layout\" | \"table\"",
- "values": [
- "layout",
- "table"
+ "angular": {
+ "props": [
+ {
+ "name": "keyboardIconPosition",
+ "type": "\"left\" | \"right\"",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Position of the keyboard navigation indicator icon."
+ },
+ {
+ "name": "keyboardIconVisibility",
+ "type": "\"visible\" | \"hidden\"",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the keyboard navigation indicator icon. Use \"visible\" to show or \"hidden\" to hide."
+ },
+ {
+ "name": "keyboardNav",
+ "type": "\"layout\" | \"table\"",
+ "values": [
+ "layout",
+ "table"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Navigation mode. \"table\" navigates like a table (up/down between rows), \"layout\" allows wrapping between rows with left/right arrows."
+ }
],
- "required": false,
- "default": "table",
- "description": "Navigation mode. \"table\" navigates like a table (up/down between rows), \"layout\" allows wrapping between rows with left/right arrows."
+ "events": [],
+ "slots": []
},
- {
- "name": "keyboardIconPosition",
- "type": "\"left\" | \"right\"",
- "values": [
- "left",
- "right"
+ "webComponents": {
+ "props": [
+ {
+ "name": "keyboard-icon-position",
+ "type": "\"left\" | \"right\"",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Position of the keyboard navigation indicator icon."
+ },
+ {
+ "name": "keyboard-icon-visibility",
+ "type": "\"visible\" | \"hidden\"",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the keyboard navigation indicator icon. Use \"visible\" to show or \"hidden\" to hide."
+ },
+ {
+ "name": "keyboard-nav",
+ "type": "\"layout\" | \"table\"",
+ "values": [
+ "layout",
+ "table"
+ ],
+ "required": false,
+ "default": "table",
+ "description": "Navigation mode. \"table\" navigates like a table (up/down between rows), \"layout\" allows wrapping between rows with left/right arrows."
+ }
],
- "required": false,
- "default": "left",
- "description": "Position of the keyboard navigation indicator icon."
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/date-picker.json b/docs/generated/component-apis/date-picker.json
index 536705b8ef..c11466d696 100644
--- a/docs/generated/component-apis/date-picker.json
+++ b/docs/generated/component-apis/date-picker.json
@@ -1,143 +1,385 @@
{
"componentSlug": "date-picker",
"extractedFrom": "libs/web-components/src/components/date-picker/DatePicker.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"calendar\" | \"input\"",
- "values": [
- "calendar",
- "input"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables the date picker."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input to an error state."
+ },
+ {
+ "name": "max",
+ "type": "Date | string",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Maximum date value allowed."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "min",
+ "type": "Date | string",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Minimum date value allowed."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Name of the date field."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabDatePickerInputType",
+ "required": false,
+ "default": "calendar",
+ "description": "Sets the date picker type. 'calendar' shows a calendar popup, 'input' shows just a date input."
+ },
+ {
+ "name": "value",
+ "type": "Date | string | undefined",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Value of the calendar date, as a Date object or an ISO date string (yyyy-mm-dd)."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the date picker input."
+ }
],
- "required": false,
- "default": "calendar",
- "description": "Sets the date picker type. 'calendar' shows a calendar popup, 'input' shows just a date input."
- },
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Name of the date field."
- },
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Value of the calendar date."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the input to an error state."
- },
- {
- "name": "min",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Minimum date value allowed."
- },
- {
- "name": "max",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Maximum date value allowed."
- },
- {
- "name": "relative",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated This property has no effect and will be removed in a future version.",
- "deprecated": true
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables the date picker."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the width of the date picker input."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabDatePickerOnChangeDetail) => void",
+ "description": "Callback fired when the selected date changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of the date picker. 'compact' reduces height for dense layouts."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
+ "slots": []
},
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "max",
+ "type": "Date | string",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum date value allowed."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "min",
+ "type": "Date | string",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum date value allowed."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the name of the date field."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabDatePickerInputType",
+ "required": false,
+ "default": "calendar",
+ "description": "Sets the date picker type. 'calendar' shows a calendar popup, 'input' shows just a date input."
+ },
+ {
+ "name": "value",
+ "type": "Date | string | null | undefined",
+ "values": [
+ "Date",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the value of the calendar date."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the date picker input."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabDatePickerOnChangeDetail) => void",
+ "description": "Emits when the selected date changes. Emits the date picker change detail including name and value.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables the date picker."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the input to an error state."
+ },
+ {
+ "name": "max",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Maximum date value allowed."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "min",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Minimum date value allowed."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Name of the date field."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the date picker. 'compact' reduces height for dense layouts."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"calendar\" | \"input\"",
+ "values": [
+ "calendar",
+ "input"
+ ],
+ "required": false,
+ "default": "calendar",
+ "description": "Sets the date picker type. 'calendar' shows a calendar popup, 'input' shows just a date input."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Value of the calendar date."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the width of the date picker input."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; value: Date | string | null; valueStr: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/details.json b/docs/generated/component-apis/details.json
index 0a698e46db..5407c0ffca 100644
--- a/docs/generated/component-apis/details.json
+++ b/docs/generated/component-apis/details.json
@@ -1,73 +1,196 @@
{
"componentSlug": "details",
"extractedFrom": "libs/web-components/src/components/details/Details.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The title heading."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The title heading."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "75ch",
+ "description": "Sets the maximum width of the details."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls if details is expanded or not."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "75ch",
- "description": "Sets the maximum width of the details."
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The title heading."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the details."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls if details is expanded or not."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Controls if details is expanded or not."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The title heading."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "75ch",
+ "description": "Sets the maximum width of the details."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Controls if details is expanded or not."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/divider.json b/docs/generated/component-apis/divider.json
index 4982fd0656..0b23bdda4c 100644
--- a/docs/generated/component-apis/divider.json
+++ b/docs/generated/component-apis/divider.json
@@ -1,47 +1,133 @@
{
"componentSlug": "divider",
"extractedFrom": "libs/web-components/src/components/divider/Divider.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "angular": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
+ "webComponents": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/drawer.json b/docs/generated/component-apis/drawer.json
index c77e1dc2dd..7220a68442 100644
--- a/docs/generated/component-apis/drawer.json
+++ b/docs/generated/component-apis/drawer.json
@@ -1,84 +1,223 @@
{
"componentSlug": "drawer",
"extractedFrom": "libs/web-components/src/components/drawer/Drawer.svelte",
- "props": [
- {
- "name": "open",
- "type": "any",
- "required": false,
- "default": "false",
- "description": "Whether the drawer is open."
- },
- {
- "name": "position",
- "type": "DrawerPosition",
- "required": false,
- "default": null,
- "description": "The position of the drawer."
- },
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The heading text displayed at the top of the drawer."
- },
- {
- "name": "maxsize",
- "type": "DrawerSize",
- "required": false,
- "default": null,
- "description": "Sets max height on bottom position, sets width on left and right position."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "drawer",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string | ReactNode",
+ "values": [
+ "string",
+ "ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The heading text displayed at the top of the drawer. Accepts a string or a ReactNode for custom heading content."
+ },
+ {
+ "name": "maxSize",
+ "type": "GoabDrawerSize",
+ "required": false,
+ "default": null,
+ "description": "Sets max height on bottom position, sets width on left and right position."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Whether the drawer is open."
+ },
+ {
+ "name": "position",
+ "type": "GoabDrawerPosition",
+ "required": true,
+ "default": null,
+ "description": "The position of the drawer."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "1",
- "description": ""
- }
- ],
- "events": [
- {
- "name": "onClose",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Callback fired when the drawer requests to be closed.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Action elements rendered in the drawer footer slot.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "type": "ReactNode",
+ "description": "The heading text displayed at the top of the drawer. Accepts a string or a ReactNode for custom heading content.",
+ "required": false
+ }
]
},
- {
- "name": "_close",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The heading text displayed at the top of the drawer."
+ },
+ {
+ "name": "maxSize",
+ "type": "GoabDrawerSize",
+ "required": false,
+ "default": null,
+ "description": "Sets max height on bottom position, sets width on left and right position."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": true,
+ "default": null,
+ "description": "Whether the drawer is open."
+ },
+ {
+ "name": "position",
+ "type": "GoabDrawerPosition",
+ "required": true,
+ "default": null,
+ "description": "The position of the drawer."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Emits when the drawer is closed.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Action elements rendered in the drawer footer slot.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "type": "TemplateRef",
+ "description": "The heading text displayed at the top of the drawer. Accepts a string or a ngTemplate for custom heading content.",
+ "required": false
+ }
]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "heading",
- "description": ""
},
- {
- "name": "actions",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "close-button-visibility",
+ "type": "\"visible\" | \"hidden\"",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the close button and header."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The heading text displayed at the top of the drawer."
+ },
+ {
+ "name": "maxsize",
+ "type": "DrawerSize",
+ "required": false,
+ "default": null,
+ "description": "Sets max height on bottom position, sets width on left and right position."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Whether the drawer is open."
+ },
+ {
+ "name": "position",
+ "type": "DrawerPosition",
+ "required": false,
+ "default": null,
+ "description": "The position of the drawer."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "drawer",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_close",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Action elements rendered in the drawer footer slot.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "description": "The heading text displayed at the top of the drawer. Accepts a string or a ReactNode for custom heading content.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/dropdown-item.json b/docs/generated/component-apis/dropdown-item.json
new file mode 100644
index 0000000000..29836a712a
--- /dev/null
+++ b/docs/generated/component-apis/dropdown-item.json
@@ -0,0 +1,127 @@
+{
+ "componentSlug": "dropdown-item",
+ "extractedFrom": "libs/web-components/src/components/dropdown/DropdownItem.svelte",
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "filter",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text used to filter and match this item in typeahead search."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Display label for the dropdown item."
+ },
+ {
+ "name": "mountType",
+ "type": "GoabDropdownItemMountType",
+ "required": false,
+ "default": null,
+ "description": "Controls how the item is registered with the parent dropdown."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The value submitted when this item is selected."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "angular": {
+ "props": [
+ {
+ "name": "filter",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text used to filter and match this item in typeahead search."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Display label for the dropdown item."
+ },
+ {
+ "name": "mountType",
+ "type": "GoabDropdownItemMountType",
+ "required": false,
+ "default": null,
+ "description": "Controls how the item is registered with the parent dropdown."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the name attribute of the dropdown item."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The value submitted when this item is selected."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "filter",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text used to filter and match this item in typeahead search."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Display label for the dropdown item."
+ },
+ {
+ "name": "mount",
+ "type": "\"append\" | \"prepend\" | \"reset\"",
+ "values": [
+ "append",
+ "prepend",
+ "reset"
+ ],
+ "required": false,
+ "default": "reset",
+ "description": "Controls how the item is registered with the parent dropdown."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The value submitted when this item is selected."
+ }
+ ],
+ "events": [],
+ "slots": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/dropdown.json b/docs/generated/component-apis/dropdown.json
index 76012d4799..54c109c55b 100644
--- a/docs/generated/component-apis/dropdown.json
+++ b/docs/generated/component-apis/dropdown.json
@@ -1,194 +1,513 @@
{
"componentSlug": "dropdown",
"extractedFrom": "libs/web-components/src/components/dropdown/Dropdown.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Identifier for the dropdown. Should be unique."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the selected value will be translated for the screen reader. If not specified it will fall back to the name."
- },
- {
- "name": "ariaLabelledBy",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The aria-labelledby attribute identifies the element(or elements) that labels the dropdown it is applied to. Normally it is the id of the label."
- },
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Stores the value of the item selected from the dropdown."
- },
- {
- "name": "filterable",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true the dropdown will have the ability to filter options by typing into the input field."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon shown to the left of the dropdown input."
- },
- {
- "name": "maxHeight",
- "type": "string",
- "required": false,
- "default": "276px",
- "description": "Maximum height of the dropdown menu. Non-native only."
- },
- {
- "name": "placeholder",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The text displayed for the dropdown before a selection is made. Non-native only."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Overrides the autosized menu width. Non-native only."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the maximum width of the dropdown. Use a CSS unit (px, %, ch, rem, em)."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disable this control."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Show an error state."
- },
- {
- "name": "native",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true will render the native select HTML element."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the selected value will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "ariaLabelledBy",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The aria-labelledby attribute identifies the element that labels the dropdown. Normally it is the id of the label."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Specifies the autocomplete attribute for the dropdown input. Native only."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables the dropdown control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state on the dropdown."
+ },
+ {
+ "name": "filterable",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, allows filtering options by typing into the input field."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The id attribute for the dropdown element."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the left of the dropdown input."
+ },
+ {
+ "name": "maxHeight",
+ "type": "string",
+ "required": false,
+ "default": "276px",
+ "description": "Maximum height of the dropdown menu. Non-native only."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the dropdown. Use a CSS unit (px, %, ch, rem, em)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Identifier for the dropdown. Should be unique."
+ },
+ {
+ "name": "native",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, renders the native select HTML element."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The text displayed in the dropdown before a selection is made. Non-native only."
+ },
+ {
+ "name": "size",
+ "type": "GoabDropdownSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the size of the dropdown. Compact reduces height for dense layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string[] | string",
+ "values": [
+ "string[]",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The currently selected value(s) of the dropdown."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Overrides the autosized menu width. Non-native only."
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of the dropdown. Compact reduces height for dense layouts."
- },
- {
- "name": "relative",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated This property has no effect and will be removed in a future version.",
- "deprecated": true
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "autoComplete",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Specifies the autocomplete attribute for the dropdown input. Native only."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabDropdownOnChangeDetail) => void",
+ "description": "Callback fired when the selected value changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "disableGlobalClosePopover",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Prevents the popover from closing when clicking outside. Used for nested dropdowns or complex interactions."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the selected value will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "ariaLabelledBy",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The aria-labelledby attribute identifies the element(or elements) that labels the dropdown it is applied to. Normally it is the id of the label."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Specifies the autocomplete attribute for the dropdown input. Native only."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "filterable",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true the dropdown will have the ability to filter options by typing into the input field."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the left of the dropdown input."
+ },
+ {
+ "name": "maxHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum height of the dropdown menu. Non-native only."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the dropdown. Use a CSS unit (px, %, ch, rem, em)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Identifier for the dropdown. Should be unique."
+ },
+ {
+ "name": "native",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true will render the native select HTML element."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The text displayed for the dropdown before a selection is made. Non-native only."
+ },
+ {
+ "name": "size",
+ "type": "GoabDropdownSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the dropdown. Compact reduces height for dense layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string[] | string",
+ "values": [
+ "string[]",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the control value used by Angular forms and one-way binding."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Overrides the autosized menu width. Non-native only."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabDropdownOnChangeDetail) => void",
+ "description": "Emits when the user selects a value from the dropdown. Emits a GoabDropdownOnChangeDetail object with the new value.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the selected value will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "arialabelledby",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The aria-labelledby attribute identifies the element(or elements) that labels the dropdown it is applied to. Normally it is the id of the label."
+ },
+ {
+ "name": "autocomplete",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Specifies the autocomplete attribute for the dropdown input. Native only."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disable this control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Show an error state."
+ },
+ {
+ "name": "filterable",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true the dropdown will have the ability to filter options by typing into the input field."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the left of the dropdown input."
+ },
+ {
+ "name": "maxheight",
+ "type": "string",
+ "required": false,
+ "default": "276px",
+ "description": "Maximum height of the dropdown menu. Non-native only."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the maximum width of the dropdown. Use a CSS unit (px, %, ch, rem, em)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Identifier for the dropdown. Should be unique."
+ },
+ {
+ "name": "native",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true will render the native select HTML element."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The text displayed for the dropdown before a selection is made. Non-native only."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the dropdown. Compact reduces height for dense layouts."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Stores the value of the item selected from the dropdown."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Overrides the autosized menu width. Non-native only."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name?: string; value?: string; event: Event }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/file-upload-card.json b/docs/generated/component-apis/file-upload-card.json
index eef41bd76c..d6ae178059 100644
--- a/docs/generated/component-apis/file-upload-card.json
+++ b/docs/generated/component-apis/file-upload-card.json
@@ -1,61 +1,212 @@
{
"componentSlug": "file-upload-card",
"extractedFrom": "libs/web-components/src/components/file-upload-card/FileUploadCard.svelte",
- "props": [
- {
- "name": "filename",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The name of the uploaded file to display."
- },
- {
- "name": "size",
- "type": "number",
- "required": true,
- "default": null,
- "description": "The file size in bytes. Displayed in a human-readable format (KB, MB)."
- },
- {
- "name": "type",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The MIME type of the file. Used to determine the file type icon."
- },
- {
- "name": "progress",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "Upload progress percentage from 0-100. Use -1 to indicate upload is complete."
- },
- {
- "name": "error",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Error message to display. When set, the card shows an error state with a cancel button."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Error message to display. When set, the card shows an error state with a cancel button."
+ },
+ {
+ "name": "filename",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name of the uploaded file to display."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Upload progress percentage from 0-100. Use -1 to indicate upload is complete."
+ },
+ {
+ "name": "size",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The file size in bytes. Displayed in a human-readable format (KB, MB)."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The MIME type of the file. Used to determine the file type icon."
+ }
+ ],
+ "events": [
+ {
+ "name": "onCancel",
+ "type": "(detail: GoabFileUploadOnCancelDetail) => void",
+ "description": "Callback fired when the user clicks the cancel button during file upload.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onDelete",
+ "type": "(detail: GoabFileUploadOnDeleteDetail) => void",
+ "description": "Callback fired when the user clicks the remove button on an uploaded file.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "angular": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Error message to display. When set, the card shows an error state with a cancel button."
+ },
+ {
+ "name": "filename",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name of the uploaded file to display."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Upload progress percentage from 0-100. Use -1 to indicate upload is complete."
+ },
+ {
+ "name": "size",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The file size in bytes. Displayed in a human-readable format (KB, MB)."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The MIME type of the file. Used to determine the file type icon."
+ }
+ ],
+ "events": [
+ {
+ "name": "onCancel",
+ "type": "(event: GoabFileUploadOnCancelDetail) => void",
+ "description": "Emits when the user cancels a file upload. Emits a GoabFileUploadOnCancelDetail object with the filename.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onDelete",
+ "type": "(event: GoabFileUploadOnDeleteDetail) => void",
+ "description": "Emits when the user removes an uploaded file. Emits a GoabFileUploadOnDeleteDetail object with the filename.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "webComponents": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Error message to display. When set, the card shows an error state with a cancel button."
+ },
+ {
+ "name": "filename",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name of the uploaded file to display."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Upload progress percentage from 0-100. Use -1 to indicate upload is complete."
+ },
+ {
+ "name": "size",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The file size in bytes. Displayed in a human-readable format (KB, MB)."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The MIME type of the file. Used to determine the file type icon."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_cancel",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_delete",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
],
- "required": false,
- "default": "1",
- "description": ""
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/file-upload-input.json b/docs/generated/component-apis/file-upload-input.json
index 360834b1bb..d8cba4923d 100644
--- a/docs/generated/component-apis/file-upload-input.json
+++ b/docs/generated/component-apis/file-upload-input.json
@@ -1,68 +1,185 @@
{
"componentSlug": "file-upload-input",
"extractedFrom": "libs/web-components/src/components/file-upload-input/FileUploadInput.svelte",
- "props": [
- {
- "name": "variant",
- "type": "\"dragdrop\" | \"button\"",
- "values": [
- "dragdrop",
- "button"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "accept",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accepted file types as a comma-separated list of MIME types or file extensions (e.g., \"image/*,.pdf\")."
+ },
+ {
+ "name": "maxFileSize",
+ "type": "string",
+ "required": false,
+ "default": "5MB",
+ "description": "Maximum file size with unit (e.g., \"5MB\", \"100KB\", \"1GB\"). Files exceeding this will be rejected."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabFileUploadInputVariant",
+ "required": false,
+ "default": "dragdrop",
+ "description": "The input display variant. \"dragdrop\" shows a drag-and-drop area, \"button\" shows a simple button."
+ }
],
- "required": false,
- "default": "dragdrop",
- "description": "The input display variant. \"dragdrop\" shows a drag-and-drop area, \"button\" shows a simple button."
- },
- {
- "name": "accept",
- "type": "string",
- "required": false,
- "default": "*",
- "description": "Accepted file types as a comma-separated list of MIME types or file extensions (e.g., \"image/*,.pdf\")."
- },
- {
- "name": "maxfilesize",
- "type": "string",
- "required": false,
- "default": "5MB",
- "description": "Maximum file size with unit (e.g., \"5MB\", \"100KB\", \"1GB\"). Defaults to 5MB. Files exceeding this will be rejected."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "events": [
+ {
+ "name": "onSelectFile",
+ "type": "(detail: GoabFileUploadInputOnSelectFileDetail) => void",
+ "description": "Callback fired when a valid file is selected or dropped.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "angular": {
+ "props": [
+ {
+ "name": "accept",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accepted file types as a comma-separated list of MIME types or file extensions (e.g., \"image/*,.pdf\")."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the id attribute on the file upload input element."
+ },
+ {
+ "name": "maxFileSize",
+ "type": "string",
+ "required": false,
+ "default": "5MB",
+ "description": "Maximum file size with unit (e.g., \"5MB\", \"100KB\", \"1GB\"). Files exceeding this will be rejected."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabFileUploadInputVariant",
+ "required": false,
+ "default": "dragdrop",
+ "description": "The input display variant. \"dragdrop\" shows a drag-and-drop area, \"button\" shows a simple button."
+ }
],
- "required": false,
- "default": "1",
- "description": ""
- }
- ],
- "events": [
- {
- "name": "onSelectFile",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onSelectFile",
+ "type": "(event: GoabFileUploadInputOnSelectFileDetail) => void",
+ "description": "Emits when a file is selected. Emits the selected file details.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_selectFile",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "accept",
+ "type": "string",
+ "required": false,
+ "default": "*",
+ "description": "Accepted file types as a comma-separated list of MIME types or file extensions (e.g., \"image/*,.pdf\")."
+ },
+ {
+ "name": "maxfilesize",
+ "type": "string",
+ "required": false,
+ "default": "5MB",
+ "description": "Maximum file size with unit (e.g., \"5MB\", \"100KB\", \"1GB\"). Defaults to 5MB. Files exceeding this will be rejected."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"dragdrop\" | \"button\"",
+ "values": [
+ "dragdrop",
+ "button"
+ ],
+ "required": false,
+ "default": "dragdrop",
+ "description": "The input display variant. \"dragdrop\" shows a drag-and-drop area, \"button\" shows a simple button."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_selectFile",
+ "type": "CustomEvent<{ file: File; event: Event }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/filter-chip.json b/docs/generated/component-apis/filter-chip.json
index ebe6047613..b95a2e16a6 100644
--- a/docs/generated/component-apis/filter-chip.json
+++ b/docs/generated/component-apis/filter-chip.json
@@ -1,100 +1,287 @@
{
"componentSlug": "filter-chip",
"extractedFrom": "libs/web-components/src/components/filter-chip/FilterChip.svelte",
- "props": [
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "content",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Text label of the chip."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state."
+ },
+ {
+ "name": "iconTheme",
+ "type": "GoabFilterChipTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Theme style of the leading icon."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed at the start of the chip."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Secondary text displayed in a smaller size before the main content."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Callback fired when the filter chip is clicked to remove it.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
+ "angular": {
+ "props": [
+ {
+ "name": "content",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text label of the chip."
+ },
+ {
+ "name": "deletable",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Marks the chip as deletable."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state."
+ },
+ {
+ "name": "iconTheme",
+ "type": "GoabChipTheme",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon theme style for the filter chip."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType | null",
+ "values": [
+ "GoabIconType"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Icon displayed at the start of the chip."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "secondaryText",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Secondary text displayed in a smaller size before the main content."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Emits when the filter chip delete button is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows an error state."
- },
- {
- "name": "content",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Text label of the chip."
- },
- {
- "name": "secondarytext",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Secondary text displayed in a smaller size before the main content."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed at the start of the chip."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Accessible label for the filter chip. Defaults to content with 'removable' suffix."
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Accessible label for the filter chip. Defaults to content with 'removable' suffix."
+ },
+ {
+ "name": "content",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Text label of the chip."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows an error state."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed at the start of the chip."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "secondarytext",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Secondary text displayed in a smaller size before the main content."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/focus-trap.json b/docs/generated/component-apis/focus-trap.json
deleted file mode 100644
index fdbda8a84b..0000000000
--- a/docs/generated/component-apis/focus-trap.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "componentSlug": "focus-trap",
- "extractedFrom": "libs/web-components/src/components/focus-trap/FocusTrap.svelte",
- "props": [
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Controls whether the focus trap is active. When true, focuses the first focusable element."
- },
- {
- "name": "preventScrollIntoView",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, prevents automatically scrolling focused elements into view."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/footer-meta-section.json b/docs/generated/component-apis/footer-meta-section.json
index 2fbe01ebb2..194f0037cd 100644
--- a/docs/generated/component-apis/footer-meta-section.json
+++ b/docs/generated/component-apis/footer-meta-section.json
@@ -1,20 +1,52 @@
{
"componentSlug": "footer-meta-section",
"extractedFrom": "libs/web-components/src/components/footer-meta-section/FooterMetaSection.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "angular": {
+ "props": [
+ {
+ "name": "slot",
+ "type": "\"meta\"",
+ "required": true,
+ "default": null,
+ "description": "Sets the slot to \"meta\" to render the section in the correct footer position."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/footer-nav-section.json b/docs/generated/component-apis/footer-nav-section.json
index c4016d9b34..d15b5aee3c 100644
--- a/docs/generated/component-apis/footer-nav-section.json
+++ b/docs/generated/component-apis/footer-nav-section.json
@@ -1,34 +1,94 @@
{
"componentSlug": "footer-nav-section",
"extractedFrom": "libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The section heading displayed above the navigation links."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The section heading displayed above the navigation links."
+ },
+ {
+ "name": "maxColumnCount",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "Maximum number of columns to display links in on larger screens."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "maxcolumncount",
- "type": "number",
- "required": false,
- "default": "1",
- "description": "Maximum number of columns to display links in on larger screens."
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The section heading displayed above the navigation links."
+ },
+ {
+ "name": "maxColumnCount",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "Maximum number of columns to display links in on larger screens."
+ },
+ {
+ "name": "slot",
+ "type": "\"nav\"",
+ "required": true,
+ "default": null,
+ "description": "Sets the slot to \"nav\" to render the section in the correct footer position."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The section heading displayed above the navigation links."
+ },
+ {
+ "name": "maxcolumncount",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "Maximum number of columns to display links in on larger screens."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/footer.json b/docs/generated/component-apis/footer.json
index fc3313b76e..a5ff3389be 100644
--- a/docs/generated/component-apis/footer.json
+++ b/docs/generated/component-apis/footer.json
@@ -1,49 +1,137 @@
{
"componentSlug": "footer",
"extractedFrom": "libs/web-components/src/components/footer/Footer.svelte",
- "props": [
- {
- "name": "maxcontentwidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The maximum width of the main content area"
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "url",
- "type": "string",
- "required": false,
- "default": "https://alberta.ca",
- "description": "URL for the Government of Alberta logo link. Set to empty string to disable the link."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The maximum width of the main content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "https://alberta.ca",
+ "description": "URL for the Government of Alberta logo link. Set to empty string to disable the link."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "type": "GoabAppFooterMetaSection",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "nav",
+ "type": "GoabAppFooterNavSection",
+ "description": "",
+ "required": false
+ }
+ ]
},
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "angular": {
+ "props": [
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The maximum width of the main content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "URL for the Government of Alberta logo link. Set to empty string to disable the link."
+ }
],
- "required": false,
- "default": "1",
- "description": ""
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "nav",
- "description": ""
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "type": "GoabAppFooterMetaSection",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "nav",
+ "type": "GoabAppFooterNavSection",
+ "description": "",
+ "required": false
+ }
+ ]
},
- {
- "name": "meta",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "maxcontentwidth",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The maximum width of the main content area"
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "https://alberta.ca",
+ "description": "URL for the Government of Alberta logo link. Set to empty string to disable the link."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "type": "goa-app-footer-meta-section",
+ "description": "",
+ "required": false
+ },
+ {
+ "name": "nav",
+ "type": "goa-app-footer-nav-section",
+ "description": "",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/form-item.json b/docs/generated/component-apis/form-item.json
index 2785c75759..ae44734fc8 100644
--- a/docs/generated/component-apis/form-item.json
+++ b/docs/generated/component-apis/form-item.json
@@ -1,134 +1,398 @@
{
"componentSlug": "form-item",
"extractedFrom": "libs/web-components/src/components/form-item/FormItem.svelte",
- "props": [
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "label",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Creates a label for the form item."
- },
- {
- "name": "labelSize",
- "type": "\"compact\" | \"regular\" | \"large\"",
- "typeLabel": "GoabFormItemLabelSizeType",
- "values": [
- "compact",
- "regular",
- "large"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field. Accepts a string or ReactNode for custom error content."
+ },
+ {
+ "name": "helpText",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Help text displayed under the form field to provide additional explanation. Accepts a string or ReactNode for custom help content."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute on the form item element."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Creates a label for the form item."
+ },
+ {
+ "name": "labelSize",
+ "type": "GoabFormItemLabelSize",
+ "required": false,
+ "default": "regular",
+ "description": "Sets the label size. 'regular' for standard, 'large' for emphasis."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the form item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Overrides the label value within the form-summary to provide a shorter description. For public-form use only."
+ },
+ {
+ "name": "requirement",
+ "type": "GoabFormItemRequirement",
+ "required": false,
+ "default": null,
+ "description": "Marks the field with an optional or required label indicator."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabFormItemType",
+ "required": false,
+ "default": null,
+ "description": "Specifies the input type for appropriate message spacing. Used with checkbox-list or radio-group."
+ }
],
- "required": false,
- "default": "regular",
- "description": "Sets the label size. 'compact' for dense layouts, 'regular' for standard, 'large' for emphasis."
- },
- {
- "name": "helpText",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Help text displayed under the form field to provide additional explanation."
+ "events": [],
+ "slots": [
+ {
+ "name": "error",
+ "type": "ReactNode",
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field. Accepts a string or ReactNode for custom error content.",
+ "required": false
+ },
+ {
+ "name": "helpText",
+ "type": "ReactNode",
+ "description": "Help text displayed under the form field to provide additional explanation. Accepts a string or ReactNode for custom help content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "error",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Error text displayed under the form field. Leave blank to indicate a valid field."
- },
- {
- "name": "requirement",
- "type": "\"optional\" | \"required\"",
- "typeLabel": "GoabFormItemRequirementType",
- "values": [
- "optional",
- "required"
+ "angular": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field."
+ },
+ {
+ "name": "helpText",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Help text displayed under the form field to provide additional explanation."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute on the form item element."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Creates a label for the form item."
+ },
+ {
+ "name": "labelSize",
+ "type": "GoabFormItemLabelSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the label size. 'regular' for standard, 'large' for emphasis."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the form item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Overrides the label value within the form-summary to provide a shorter description. For public-form use only."
+ },
+ {
+ "name": "requirement",
+ "type": "GoabFormItemRequirement",
+ "required": false,
+ "default": null,
+ "description": "Marks the field with an optional or required label indicator."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabFormItemType",
+ "required": false,
+ "default": "",
+ "description": "Specifies the input type for appropriate message spacing. Used with checkbox-list or radio-group."
+ }
],
- "required": false,
- "default": "",
- "description": "Marks the field with an optional or required label indicator."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of the form item."
+ "events": [],
+ "slots": [
+ {
+ "name": "error",
+ "type": "TemplateRef",
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field. Accepts a string or ngTemplate for custom error content.",
+ "required": false
+ },
+ {
+ "name": "helpText",
+ "type": "TemplateRef",
+ "description": "Help text displayed under the form field to provide additional explanation. Accepts a string or ngTemplate for custom help content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "type",
- "type": "\"text-input\" | \"textarea\" | \"checkbox-list\" | \"radio-group\"",
- "typeLabel": "GoabFormItemInputType",
- "values": [
- "text-input",
- "textarea",
- "checkbox-list",
- "radio-group"
+ "webComponents": {
+ "props": [
+ {
+ "name": "error",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field."
+ },
+ {
+ "name": "helptext",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Help text displayed under the form field to provide additional explanation."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Creates a label for the form item."
+ },
+ {
+ "name": "labelsize",
+ "type": "\"compact\" | \"regular\" | \"large\"",
+ "typeLabel": "GoabFormItemLabelSizeType",
+ "values": [
+ "compact",
+ "regular",
+ "large"
+ ],
+ "required": false,
+ "default": "regular",
+ "description": "Sets the label size. 'compact' for dense layouts, 'regular' for standard, 'large' for emphasis."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of the form item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "blank",
+ "description": "Overrides the label value within the form-summary. For public-form use only."
+ },
+ {
+ "name": "requirement",
+ "type": "\"optional\" | \"required\"",
+ "typeLabel": "GoabFormItemRequirementType",
+ "values": [
+ "optional",
+ "required"
+ ],
+ "required": false,
+ "default": "",
+ "description": "Marks the field with an optional or required label indicator."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"text-input\" | \"textarea\" | \"checkbox-list\" | \"radio-group\"",
+ "typeLabel": "GoabFormItemInputType",
+ "values": [
+ "text-input",
+ "textarea",
+ "checkbox-list",
+ "radio-group"
+ ],
+ "required": false,
+ "default": "",
+ "description": "Specifies the input type for appropriate message spacing. Used with checkbox-list or radio-group."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabFormItemVersionType",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
],
- "required": false,
- "default": "",
- "description": "Specifies the input type for appropriate message spacing. Used with checkbox-list or radio-group."
- },
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "blank",
- "description": "Overrides the label value within the form-summary. For public-form use only."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "error",
- "description": ""
- },
- {
- "name": "helptext",
- "description": ""
+ "events": [],
+ "slots": [
+ {
+ "name": "error",
+ "description": "Error text displayed under the form field. Leave blank to indicate a valid field. Accepts a string or ReactNode for custom error content.",
+ "required": false
+ },
+ {
+ "name": "helptext",
+ "description": "Help text displayed under the form field to provide additional explanation. Accepts a string or ReactNode for custom help content.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/form-step.json b/docs/generated/component-apis/form-step.json
index d8bfb22ee0..1302d29704 100644
--- a/docs/generated/component-apis/form-step.json
+++ b/docs/generated/component-apis/form-step.json
@@ -1,51 +1,87 @@
{
"componentSlug": "form-step",
"extractedFrom": "libs/web-components/src/components/form-step/FormStep.svelte",
- "props": [
- {
- "name": "text",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The step label text displayed to users."
- },
- {
- "name": "status",
- "type": "\"complete\" | \"incomplete\" | \"not-started\"",
- "values": [
- "complete",
- "incomplete",
- "not-started"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "status",
+ "type": "GoabFormStepStatus",
+ "required": false,
+ "default": null,
+ "description": "The completion status of the step. Affects visual styling and icons."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The step label text displayed to users."
+ }
],
- "required": false,
- "default": null,
- "description": "The completion status of the step. Affects visual styling and icons."
+ "events": [],
+ "slots": []
},
- {
- "name": "last",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Whether this is the last step in the form stepper. Affects styling when complete."
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "status",
+ "type": "GoabFormStepStatus",
+ "required": false,
+ "default": null,
+ "description": "The completion status of the step. Affects visual styling and icons."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The step label text displayed to users."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "last",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Whether this is the last step in the form stepper. Affects styling when complete."
+ },
+ {
+ "name": "status",
+ "type": "\"complete\" | \"incomplete\" | \"not-started\"",
+ "values": [
+ "complete",
+ "incomplete",
+ "not-started"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The completion status of the step. Affects visual styling and icons."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The step label text displayed to users."
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent<{ step: unknown }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/form-stepper.json b/docs/generated/component-apis/form-stepper.json
deleted file mode 100644
index 78f1db04e2..0000000000
--- a/docs/generated/component-apis/form-stepper.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "componentSlug": "form-stepper",
- "extractedFrom": "libs/web-components/src/components/form-stepper/FormStepper.svelte",
- "props": [
- {
- "name": "step",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "The current step state value (1-based index). Leaving it blank (-1) will allow any step to be accessed."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/form.json b/docs/generated/component-apis/form.json
index f60c7e3fb6..ce55e721d5 100644
--- a/docs/generated/component-apis/form.json
+++ b/docs/generated/component-apis/form.json
@@ -1,48 +1,129 @@
{
"componentSlug": "form",
"extractedFrom": "libs/web-components/src/components/form/Form.svelte",
- "props": [
- {
- "name": "status",
- "type": "\"initializing\" | \"complete\"",
- "values": [
- "initializing",
- "complete"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "A name identifier for the form. Useful for debugging complex forms with multiple nested forms."
+ },
+ {
+ "name": "status",
+ "type": "GoabPublicFormStatus",
+ "required": false,
+ "default": "complete",
+ "description": "The initialization status of the form. Set to \"initializing\" while loading external state, then \"complete\" when ready."
+ }
],
- "required": false,
- "default": "complete",
- "description": "The initialization status of the form. Set to \"initializing\" while loading external state, then \"complete\" when ready."
+ "events": [
+ {
+ "name": "onComplete",
+ "type": "(event: GoabFormState) => void",
+ "description": "Callback fired when the form is completed.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onInit",
+ "type": "(event: Event) => void",
+ "description": "Callback fired when the form is initialized.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onStateChange",
+ "type": "(event: GoabFormState) => void",
+ "description": "Callback fired when the form state changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "[name] not set",
- "description": "A name identifier for the form. Useful for debugging complex forms with multiple nested forms."
- }
- ],
- "events": [
- {
- "name": "onInit",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "A name identifier for the form. Useful for debugging complex forms with multiple nested forms."
+ },
+ {
+ "name": "status",
+ "type": "GoabPublicFormStatus",
+ "required": false,
+ "default": "complete",
+ "description": "The initialization status of the form. Set to \"initializing\" while loading external state, then \"complete\" when ready."
+ }
+ ],
+ "events": [
+ {
+ "name": "onComplete",
+ "type": "(event: GoabFormState) => void",
+ "description": "Emits when the form is complete. Emits the form state.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onInit",
+ "type": "(event: Event) => void",
+ "description": "Emits when the form is initialized.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onStateChange",
+ "type": "(event: GoabFormState) => void",
+ "description": "Emits when the form state changes. Emits the updated form state.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_init",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "[name] not set",
+ "description": "A name identifier for the form. Useful for debugging complex forms with multiple nested forms."
+ },
+ {
+ "name": "status",
+ "type": "\"initializing\" | \"complete\"",
+ "values": [
+ "initializing",
+ "complete"
+ ],
+ "required": false,
+ "default": "complete",
+ "description": "The initialization status of the form. Set to \"initializing\" while loading external state, then \"complete\" when ready."
+ }
+ ],
+ "events": [
+ {
+ "name": "_init",
+ "type": "CustomEvent<{ el: unknown }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/grid.json b/docs/generated/component-apis/grid.json
index 3bad56dd41..fa0c8be0db 100644
--- a/docs/generated/component-apis/grid.json
+++ b/docs/generated/component-apis/grid.json
@@ -1,67 +1,176 @@
{
"componentSlug": "grid",
"extractedFrom": "libs/web-components/src/components/grid/Grid.svelte",
- "props": [
- {
- "name": "gap",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "m",
- "description": "Gap between child items."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Gap between child items."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "minChildWidth",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Minimum width of the child elements."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "minchildwidth",
- "type": "string",
- "required": true,
- "default": "",
- "description": "Minimum width of the child elements"
+ "angular": {
+ "props": [
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Gap between child items."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "minChildWidth",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Minimum width of the child elements."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "gap",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Gap between child items."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "minchildwidth",
+ "type": "string",
+ "required": true,
+ "default": "",
+ "description": "Minimum width of the child elements"
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/hero-banner.json b/docs/generated/component-apis/hero-banner.json
index c5185159b6..15d199bf8c 100644
--- a/docs/generated/component-apis/hero-banner.json
+++ b/docs/generated/component-apis/hero-banner.json
@@ -1,66 +1,191 @@
{
"componentSlug": "hero-banner",
"extractedFrom": "libs/web-components/src/components/hero-banner/HeroBanner.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Main heading text"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "backgroundColor",
+ "type": "string",
+ "required": false,
+ "default": "#f8f8f8",
+ "description": "Hero Banner background color when no background image is provided."
+ },
+ {
+ "name": "backgroundUrl",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Background image url."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Main heading text."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "minHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Minimum height of the hero banner. Defaults to 600px when a background image is provided."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "textColor",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text color within the hero banner."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Content rendered in the actions slot.",
+ "required": false
+ }
+ ]
},
- {
- "name": "backgroundurl",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Background image url"
+ "angular": {
+ "props": [
+ {
+ "name": "backgroundColor",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Hero Banner background color when no background image is provided."
+ },
+ {
+ "name": "backgroundUrl",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Background image url."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Main heading text."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "minHeight",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Minimum height of the hero banner. Defaults to 600px when a background image is provided."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "textColor",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text color within the hero banner."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Content rendered in the actions slot.",
+ "required": false
+ }
+ ]
},
- {
- "name": "minheight",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Minimum height of the hero banner. Defaults to 600px when a background image is provided."
- },
- {
- "name": "maxcontentwidth",
- "type": "any",
- "required": false,
- "default": "100%",
- "description": "Maximum width of the content area"
- },
- {
- "name": "backgroundcolor",
- "type": "string",
- "required": false,
- "default": "#f8f8f8",
- "description": "Hero Banner background color when no background image is provided"
- },
- {
- "name": "textcolor",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text color within the hero banner."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "background",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "actions",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "backgroundcolor",
+ "type": "string",
+ "required": false,
+ "default": "#f8f8f8",
+ "description": "Hero Banner background color when no background image is provided"
+ },
+ {
+ "name": "backgroundurl",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Background image url"
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Main heading text"
+ },
+ {
+ "name": "maxcontentwidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area"
+ },
+ {
+ "name": "minheight",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Minimum height of the hero banner. Defaults to 600px when a background image is provided."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "background",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "textcolor",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text color within the hero banner."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Content rendered in the actions slot.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/icon-button.json b/docs/generated/component-apis/icon-button.json
index 9b3ca9c4e2..cbabf3ce2f 100644
--- a/docs/generated/component-apis/icon-button.json
+++ b/docs/generated/component-apis/icon-button.json
@@ -1,129 +1,386 @@
{
"componentSlug": "icon-button",
"extractedFrom": "libs/web-components/src/components/icon-button/IconButton.svelte",
- "props": [
- {
- "name": "icon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": true,
- "default": null,
- "description": "Sets the icon."
- },
- {
- "name": "size",
- "type": "IconSize",
- "required": false,
- "default": "medium",
- "description": "Sets the size of button."
- },
- {
- "name": "theme",
- "type": "IconTheme",
- "required": false,
- "default": "outline",
- "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
- },
- {
- "name": "variant",
- "type": "\"color\" | \"nocolor\" | \"light\" | \"dark\" | \"destructive\"",
- "typeLabel": "GoabIconButtonVariant",
- "values": [
- "color",
- "nocolor",
- "light",
- "dark",
- "destructive"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the aria-label of the button."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables the button."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": true,
+ "default": null,
+ "description": "Sets the icon."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabIconSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of button."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "GoabIconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the theme of the icon inside the button. \"outline\" for stroked icons, \"filled\" for solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the title of the button."
+ },
+ {
+ "name": "variant",
+ "type": "GoabIconButtonVariant",
+ "required": false,
+ "default": "color",
+ "description": "Styles the button to show color, light, dark or destructive action."
+ }
],
- "required": false,
- "default": "color",
- "description": "Styles the button to show color, light, dark or destructive action."
- },
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the title of the button."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables the button."
- },
- {
- "name": "inverted",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, inverts the icon colors for use on dark backgrounds."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the aria-label of the button."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Callback fired when the icon button is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the aria-label of the button."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables the button."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": true,
+ "default": null,
+ "description": "Sets the icon."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "size",
+ "type": "GoabIconSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of button."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "GoabIconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. \"outline\" for stroked icons, \"filled\" for solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the title of the button."
+ },
+ {
+ "name": "variant",
+ "type": "GoabIconButtonVariant",
+ "required": false,
+ "default": null,
+ "description": "Styles the button to show color, light, dark or destructive action."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Emits when the icon button is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Action identifier passed in click events for event delegation patterns."
+ },
+ {
+ "name": "action-arg",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Single argument value passed with the action in click events."
+ },
+ {
+ "name": "action-args",
+ "type": "Record",
+ "required": false,
+ "default": "{}",
+ "description": "Multiple argument values passed with the action in click events."
+ },
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the aria-label of the button."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables the button."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": true,
+ "default": null,
+ "description": "Sets the icon."
+ },
+ {
+ "name": "inverted",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, inverts the icon colors for use on dark backgrounds."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "IconSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of button."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "IconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' for stroked icons, 'filled' for solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the title of the button."
+ },
+ {
+ "name": "variant",
+ "type": "\"color\" | \"nocolor\" | \"light\" | \"dark\" | \"destructive\"",
+ "typeLabel": "GoabIconButtonVariant",
+ "values": [
+ "color",
+ "nocolor",
+ "light",
+ "dark",
+ "destructive"
+ ],
+ "required": false,
+ "default": "color",
+ "description": "Styles the button to show color, light, dark or destructive action."
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent<{ event: Event }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/icon.json b/docs/generated/component-apis/icon.json
index d69598cc20..4f0c4f802f 100644
--- a/docs/generated/component-apis/icon.json
+++ b/docs/generated/component-apis/icon.json
@@ -1,649 +1,367 @@
{
"componentSlug": "icon",
"extractedFrom": "libs/web-components/src/components/icon/Icon.svelte",
- "props": [
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "type",
- "type": "\"accessibility\" | \"add-circle\" | \"add\" | \"airplane\" | \"alarm\" | \"albums\" | \"alert-circle\" | \"alert\" | \"american-football\" | \"analytics\" | \"aperture\" | \"apps\" | \"archive\" | \"arrow-back-circle\" | \"arrow-back\" | \"arrow-down-circle\" | \"arrow-down\" | \"arrow-forward-circle\" | \"arrow-forward\" | \"arrow-redo-circle\" | \"arrow-redo\" | \"arrow-undo-circle\" | \"arrow-undo\" | \"arrow-up-circle\" | \"arrow-up\" | \"at-circle\" | \"at\" | \"attach\" | \"backspace\" | \"bag-add\" | \"bag-check\" | \"bag-handle\" | \"bag\" | \"bag-remove\" | \"balloon\" | \"ban\" | \"bandage\" | \"bar-chart\" | \"barbell\" | \"barcode\" | \"baseball\" | \"basket\" | \"basketball\" | \"battery-charging\" | \"battery-dead\" | \"battery-full\" | \"battery-half\" | \"beaker\" | \"bed\" | \"beer\" | \"bicycle\" | \"bluetooth\" | \"boat\" | \"body\" | \"bonfire\" | \"book\" | \"bookmark\" | \"bookmarks\" | \"bowling-ball\" | \"briefcase\" | \"browsers\" | \"brush\" | \"bug\" | \"build\" | \"bulb\" | \"bus\" | \"business\" | \"cafe\" | \"calculator\" | \"calendar-clear\" | \"calendar-number\" | \"calendar\" | \"call\" | \"camera\" | \"camera-reverse\" | \"car\" | \"car-sport\" | \"card\" | \"caret-back-circle\" | \"caret-back\" | \"caret-down-circle\" | \"caret-down\" | \"caret-forward-circle\" | \"caret-forward\" | \"caret-up-circle\" | \"caret-up\" | \"cart\" | \"cash\" | \"cellular\" | \"chatbox-ellipses\" | \"chatbox\" | \"chatbubble-ellipses\" | \"chatbubble\" | \"chatbubbles\" | \"checkbox\" | \"checkmark-circle\" | \"checkmark-done-circle\" | \"checkmark-done\" | \"chevron-back-circle\" | \"chevron-back\" | \"chevron-down-circle\" | \"chevron-down\" | \"chevron-expand\" | \"chevron-forward-circle\" | \"chevron-forward\" | \"chevron-up-circle\" | \"chevron-up\" | \"clipboard\" | \"close-circle\" | \"close\" | \"cloud-circle\" | \"cloud-done\" | \"cloud-download\" | \"cloud-offline\" | \"cloud\" | \"cloud-upload\" | \"cloudy-night\" | \"cloudy\" | \"code-download\" | \"code\" | \"code-slash\" | \"code-working\" | \"cog\" | \"color-fill\" | \"color-filter\" | \"color-palette\" | \"color-wand\" | \"compass\" | \"construct\" | \"contract\" | \"contrast\" | \"copy\" | \"create\" | \"crop\" | \"cube\" | \"cut\" | \"desktop\" | \"diamond\" | \"dice\" | \"disc\" | \"document-attach\" | \"document-lock\" | \"document\" | \"document-text\" | \"documents\" | \"download\" | \"duplicate\" | \"ear\" | \"earth\" | \"easel\" | \"egg\" | \"ellipse\" | \"ellipsis-horizontal-circle\" | \"ellipsis-horizontal\" | \"ellipsis-vertical-circle\" | \"ellipsis-vertical\" | \"enter\" | \"exit\" | \"expand\" | \"extension-puzzle\" | \"eye-off\" | \"eye\" | \"eyedrop\" | \"fast-food\" | \"female\" | \"file-tray-full\" | \"file-tray\" | \"file-tray-stacked\" | \"filenames.ps1\" | \"film\" | \"filter-circle\" | \"filter-lines\" | \"filter\" | \"finger-print\" | \"fish\" | \"fitness\" | \"flag\" | \"flame\" | \"flash-off\" | \"flash\" | \"flashlight\" | \"flask\" | \"flower\" | \"folder-open\" | \"folder\" | \"football\" | \"footsteps\" | \"funnel\" | \"game-controller\" | \"gift\" | \"git-branch\" | \"git-commit\" | \"git-compare\" | \"git-merge\" | \"git-network\" | \"git-pull-request\" | \"glasses\" | \"globe\" | \"golf\" | \"grid\" | \"hammer\" | \"hand-left\" | \"hand-right\" | \"happy\" | \"hardware-chip\" | \"headset\" | \"heart-circle\" | \"heart-dislike-circle\" | \"heart-dislike\" | \"heart-half\" | \"heart\" | \"help-buoy\" | \"help-circle\" | \"help\" | \"home\" | \"hourglass\" | \"ice-cream\" | \"id-card\" | \"image\" | \"images\" | \"infinite\" | \"information-circle\" | \"information\" | \"invert-mode\" | \"journal\" | \"key\" | \"keypad\" | \"language\" | \"laptop\" | \"layers\" | \"leaf\" | \"library\" | \"link\" | \"list-circle\" | \"list\" | \"locate\" | \"location\" | \"lock-closed\" | \"lock-open\" | \"log-in\" | \"log-out\" | \"magnet\" | \"mail-open\" | \"mail\" | \"mail-unread\" | \"male-female\" | \"male\" | \"man\" | \"map\" | \"medal\" | \"medical\" | \"medkit\" | \"megaphone\" | \"menu\" | \"mic-circle\" | \"mic-off-circle\" | \"mic-off\" | \"mic\" | \"moon\" | \"move\" | \"musical-note\" | \"musical-notes\" | \"navigate-circle\" | \"navigate\" | \"newspaper\" | \"notifications-circle\" | \"notifications-off-circle\" | \"notifications-off\" | \"notifications\" | \"nuclear\" | \"nutrition\" | \"open\" | \"options\" | \"paper-plane\" | \"partly-sunny\" | \"pause-circle\" | \"pause\" | \"paw\" | \"people-circle\" | \"people\" | \"person-add\" | \"person-circle\" | \"person\" | \"person-remove\" | \"phone-landscape\" | \"phone-portrait\" | \"pie-chart\" | \"pin\" | \"pint\" | \"pizza\" | \"planet\" | \"play-back-circle\" | \"play-back\" | \"play-circle\" | \"play-forward-circle\" | \"play-forward\" | \"play\" | \"play-skip-back-circle\" | \"play-skip-back\" | \"play-skip-forward-circle\" | \"play-skip-forward\" | \"podium\" | \"power\" | \"pricetag\" | \"pricetags\" | \"print\" | \"prism\" | \"pulse\" | \"push\" | \"qr-code\" | \"radio-button-off\" | \"radio-button-on\" | \"radio\" | \"rainy\" | \"reader\" | \"receipt\" | \"recording\" | \"refresh-circle\" | \"refresh\" | \"reload-circle\" | \"reload\" | \"remove-circle\" | \"reorder-four\" | \"reorder-three\" | \"reorder-two\" | \"repeat\" | \"resize\" | \"restaurant\" | \"return-down-back\" | \"return-down-forward\" | \"return-up-back\" | \"return-up-forward\" | \"ribbon\" | \"rocket\" | \"rose\" | \"sad\" | \"save\" | \"scale\" | \"scan-circle\" | \"scan\" | \"school\" | \"search-circle\" | \"search\" | \"send\" | \"server\" | \"settings\" | \"shapes\" | \"share\" | \"share-social\" | \"shield-checkmark\" | \"shield-half\" | \"shield\" | \"shirt\" | \"shuffle\" | \"skull\" | \"snow\" | \"sparkles\" | \"speedometer\" | \"square\" | \"star-half\" | \"star\" | \"stats-chart\" | \"stop-circle\" | \"stop\" | \"stopwatch\" | \"storefront\" | \"subway\" | \"sunny\" | \"swap-horizontal\" | \"swap-vertical\" | \"sync-circle\" | \"sync\" | \"tablet-landscape\" | \"tablet-portrait\" | \"telescope\" | \"tennisball\" | \"terminal\" | \"text\" | \"thermometer\" | \"thumbs-down\" | \"thumbs-up\" | \"thunderstorm\" | \"ticket\" | \"time\" | \"timer\" | \"today\" | \"toggle\" | \"trail-sign\" | \"train\" | \"transgender\" | \"trash-bin\" | \"trash\" | \"trending-down\" | \"trending-up\" | \"triangle\" | \"trophy\" | \"tv\" | \"umbrella\" | \"unlink\" | \"videocam-off\" | \"videocam\" | \"volume-high\" | \"volume-low\" | \"volume-medium\" | \"volume-mute\" | \"volume-off\" | \"walk\" | \"wallet\" | \"warning\" | \"watch\" | \"water\" | \"wifi\" | \"wine\" | \"woman\" | \"logo-alipay\" | \"logo-amazon\" | \"logo-amplify\" | \"logo-android\" | \"logo-angular\" | \"logo-apple\" | \"logo-apple-appstore\" | \"logo-apple-ar\" | \"logo-behance\" | \"logo-bitbucket\" | \"logo-bitcoin\" | \"logo-buffer\" | \"logo-capacitor\" | \"logo-chrome\" | \"logo-closed-captioning\" | \"logo-codepen\" | \"logo-css3\" | \"logo-designernews\" | \"logo-deviantart\" | \"logo-discord\" | \"logo-docker\" | \"logo-dribbble\" | \"logo-dropbox\" | \"logo-edge\" | \"logo-electron\" | \"logo-euro\" | \"logo-facebook\" | \"logo-figma\" | \"logo-firebase\" | \"logo-firefox\" | \"logo-flickr\" | \"logo-foursquare\" | \"logo-github\" | \"logo-gitlab\" | \"logo-google\" | \"logo-google-playstore\" | \"logo-hackernews\" | \"logo-html5\" | \"logo-instagram\" | \"logo-ionic\" | \"logo-ionitron\" | \"logo-javascript\" | \"logo-laravel\" | \"logo-linkedin\" | \"logo-markdown\" | \"logo-mastodon\" | \"logo-medium\" | \"logo-microsoft\" | \"logo-no-smoking\" | \"logo-nodejs\" | \"logo-npm\" | \"logo-octocat\" | \"logo-paypal\" | \"logo-pinterest\" | \"logo-playstation\" | \"logo-pwa\" | \"logo-python\" | \"logo-react\" | \"logo-reddit\" | \"logo-rss\" | \"logo-sass\" | \"logo-skype\" | \"logo-slack\" | \"logo-snapchat\" | \"logo-soundcloud\" | \"logo-stackoverflow\" | \"logo-steam\" | \"logo-stencil\" | \"logo-tableau\" | \"logo-tiktok\" | \"logo-tumblr\" | \"logo-tux\" | \"logo-twitch\" | \"logo-twitter\" | \"logo-usd\" | \"logo-venmo\" | \"logo-vercel\" | \"logo-vimeo\" | \"logo-vk\" | \"logo-vue\" | \"logo-web-component\" | \"logo-wechat\" | \"logo-whatsapp\" | \"logo-windows\" | \"logo-wordpress\" | \"logo-xbox\" | \"logo-xing\" | \"logo-yahoo\" | \"logo-yen\" | \"logo-youtube\"",
- "typeLabel": "GoAIconType",
- "values": [
- "accessibility",
- "add-circle",
- "add",
- "airplane",
- "alarm",
- "albums",
- "alert-circle",
- "alert",
- "american-football",
- "analytics",
- "aperture",
- "apps",
- "archive",
- "arrow-back-circle",
- "arrow-back",
- "arrow-down-circle",
- "arrow-down",
- "arrow-forward-circle",
- "arrow-forward",
- "arrow-redo-circle",
- "arrow-redo",
- "arrow-undo-circle",
- "arrow-undo",
- "arrow-up-circle",
- "arrow-up",
- "at-circle",
- "at",
- "attach",
- "backspace",
- "bag-add",
- "bag-check",
- "bag-handle",
- "bag",
- "bag-remove",
- "balloon",
- "ban",
- "bandage",
- "bar-chart",
- "barbell",
- "barcode",
- "baseball",
- "basket",
- "basketball",
- "battery-charging",
- "battery-dead",
- "battery-full",
- "battery-half",
- "beaker",
- "bed",
- "beer",
- "bicycle",
- "bluetooth",
- "boat",
- "body",
- "bonfire",
- "book",
- "bookmark",
- "bookmarks",
- "bowling-ball",
- "briefcase",
- "browsers",
- "brush",
- "bug",
- "build",
- "bulb",
- "bus",
- "business",
- "cafe",
- "calculator",
- "calendar-clear",
- "calendar-number",
- "calendar",
- "call",
- "camera",
- "camera-reverse",
- "car",
- "car-sport",
- "card",
- "caret-back-circle",
- "caret-back",
- "caret-down-circle",
- "caret-down",
- "caret-forward-circle",
- "caret-forward",
- "caret-up-circle",
- "caret-up",
- "cart",
- "cash",
- "cellular",
- "chatbox-ellipses",
- "chatbox",
- "chatbubble-ellipses",
- "chatbubble",
- "chatbubbles",
- "checkbox",
- "checkmark-circle",
- "checkmark-done-circle",
- "checkmark-done",
- "chevron-back-circle",
- "chevron-back",
- "chevron-down-circle",
- "chevron-down",
- "chevron-expand",
- "chevron-forward-circle",
- "chevron-forward",
- "chevron-up-circle",
- "chevron-up",
- "clipboard",
- "close-circle",
- "close",
- "cloud-circle",
- "cloud-done",
- "cloud-download",
- "cloud-offline",
- "cloud",
- "cloud-upload",
- "cloudy-night",
- "cloudy",
- "code-download",
- "code",
- "code-slash",
- "code-working",
- "cog",
- "color-fill",
- "color-filter",
- "color-palette",
- "color-wand",
- "compass",
- "construct",
- "contract",
- "contrast",
- "copy",
- "create",
- "crop",
- "cube",
- "cut",
- "desktop",
- "diamond",
- "dice",
- "disc",
- "document-attach",
- "document-lock",
- "document",
- "document-text",
- "documents",
- "download",
- "duplicate",
- "ear",
- "earth",
- "easel",
- "egg",
- "ellipse",
- "ellipsis-horizontal-circle",
- "ellipsis-horizontal",
- "ellipsis-vertical-circle",
- "ellipsis-vertical",
- "enter",
- "exit",
- "expand",
- "extension-puzzle",
- "eye-off",
- "eye",
- "eyedrop",
- "fast-food",
- "female",
- "file-tray-full",
- "file-tray",
- "file-tray-stacked",
- "filenames.ps1",
- "film",
- "filter-circle",
- "filter-lines",
- "filter",
- "finger-print",
- "fish",
- "fitness",
- "flag",
- "flame",
- "flash-off",
- "flash",
- "flashlight",
- "flask",
- "flower",
- "folder-open",
- "folder",
- "football",
- "footsteps",
- "funnel",
- "game-controller",
- "gift",
- "git-branch",
- "git-commit",
- "git-compare",
- "git-merge",
- "git-network",
- "git-pull-request",
- "glasses",
- "globe",
- "golf",
- "grid",
- "hammer",
- "hand-left",
- "hand-right",
- "happy",
- "hardware-chip",
- "headset",
- "heart-circle",
- "heart-dislike-circle",
- "heart-dislike",
- "heart-half",
- "heart",
- "help-buoy",
- "help-circle",
- "help",
- "home",
- "hourglass",
- "ice-cream",
- "id-card",
- "image",
- "images",
- "infinite",
- "information-circle",
- "information",
- "invert-mode",
- "journal",
- "key",
- "keypad",
- "language",
- "laptop",
- "layers",
- "leaf",
- "library",
- "link",
- "list-circle",
- "list",
- "locate",
- "location",
- "lock-closed",
- "lock-open",
- "log-in",
- "log-out",
- "magnet",
- "mail-open",
- "mail",
- "mail-unread",
- "male-female",
- "male",
- "man",
- "map",
- "medal",
- "medical",
- "medkit",
- "megaphone",
- "menu",
- "mic-circle",
- "mic-off-circle",
- "mic-off",
- "mic",
- "moon",
- "move",
- "musical-note",
- "musical-notes",
- "navigate-circle",
- "navigate",
- "newspaper",
- "notifications-circle",
- "notifications-off-circle",
- "notifications-off",
- "notifications",
- "nuclear",
- "nutrition",
- "open",
- "options",
- "paper-plane",
- "partly-sunny",
- "pause-circle",
- "pause",
- "paw",
- "people-circle",
- "people",
- "person-add",
- "person-circle",
- "person",
- "person-remove",
- "phone-landscape",
- "phone-portrait",
- "pie-chart",
- "pin",
- "pint",
- "pizza",
- "planet",
- "play-back-circle",
- "play-back",
- "play-circle",
- "play-forward-circle",
- "play-forward",
- "play",
- "play-skip-back-circle",
- "play-skip-back",
- "play-skip-forward-circle",
- "play-skip-forward",
- "podium",
- "power",
- "pricetag",
- "pricetags",
- "print",
- "prism",
- "pulse",
- "push",
- "qr-code",
- "radio-button-off",
- "radio-button-on",
- "radio",
- "rainy",
- "reader",
- "receipt",
- "recording",
- "refresh-circle",
- "refresh",
- "reload-circle",
- "reload",
- "remove-circle",
- "reorder-four",
- "reorder-three",
- "reorder-two",
- "repeat",
- "resize",
- "restaurant",
- "return-down-back",
- "return-down-forward",
- "return-up-back",
- "return-up-forward",
- "ribbon",
- "rocket",
- "rose",
- "sad",
- "save",
- "scale",
- "scan-circle",
- "scan",
- "school",
- "search-circle",
- "search",
- "send",
- "server",
- "settings",
- "shapes",
- "share",
- "share-social",
- "shield-checkmark",
- "shield-half",
- "shield",
- "shirt",
- "shuffle",
- "skull",
- "snow",
- "sparkles",
- "speedometer",
- "square",
- "star-half",
- "star",
- "stats-chart",
- "stop-circle",
- "stop",
- "stopwatch",
- "storefront",
- "subway",
- "sunny",
- "swap-horizontal",
- "swap-vertical",
- "sync-circle",
- "sync",
- "tablet-landscape",
- "tablet-portrait",
- "telescope",
- "tennisball",
- "terminal",
- "text",
- "thermometer",
- "thumbs-down",
- "thumbs-up",
- "thunderstorm",
- "ticket",
- "time",
- "timer",
- "today",
- "toggle",
- "trail-sign",
- "train",
- "transgender",
- "trash-bin",
- "trash",
- "trending-down",
- "trending-up",
- "triangle",
- "trophy",
- "tv",
- "umbrella",
- "unlink",
- "videocam-off",
- "videocam",
- "volume-high",
- "volume-low",
- "volume-medium",
- "volume-mute",
- "volume-off",
- "walk",
- "wallet",
- "warning",
- "watch",
- "water",
- "wifi",
- "wine",
- "woman",
- "logo-alipay",
- "logo-amazon",
- "logo-amplify",
- "logo-android",
- "logo-angular",
- "logo-apple",
- "logo-apple-appstore",
- "logo-apple-ar",
- "logo-behance",
- "logo-bitbucket",
- "logo-bitcoin",
- "logo-buffer",
- "logo-capacitor",
- "logo-chrome",
- "logo-closed-captioning",
- "logo-codepen",
- "logo-css3",
- "logo-designernews",
- "logo-deviantart",
- "logo-discord",
- "logo-docker",
- "logo-dribbble",
- "logo-dropbox",
- "logo-edge",
- "logo-electron",
- "logo-euro",
- "logo-facebook",
- "logo-figma",
- "logo-firebase",
- "logo-firefox",
- "logo-flickr",
- "logo-foursquare",
- "logo-github",
- "logo-gitlab",
- "logo-google",
- "logo-google-playstore",
- "logo-hackernews",
- "logo-html5",
- "logo-instagram",
- "logo-ionic",
- "logo-ionitron",
- "logo-javascript",
- "logo-laravel",
- "logo-linkedin",
- "logo-markdown",
- "logo-mastodon",
- "logo-medium",
- "logo-microsoft",
- "logo-no-smoking",
- "logo-nodejs",
- "logo-npm",
- "logo-octocat",
- "logo-paypal",
- "logo-pinterest",
- "logo-playstation",
- "logo-pwa",
- "logo-python",
- "logo-react",
- "logo-reddit",
- "logo-rss",
- "logo-sass",
- "logo-skype",
- "logo-slack",
- "logo-snapchat",
- "logo-soundcloud",
- "logo-stackoverflow",
- "logo-steam",
- "logo-stencil",
- "logo-tableau",
- "logo-tiktok",
- "logo-tumblr",
- "logo-tux",
- "logo-twitch",
- "logo-twitter",
- "logo-usd",
- "logo-venmo",
- "logo-vercel",
- "logo-vimeo",
- "logo-vk",
- "logo-vue",
- "logo-web-component",
- "logo-wechat",
- "logo-whatsapp",
- "logo-windows",
- "logo-wordpress",
- "logo-xbox",
- "logo-xing",
- "logo-yahoo",
- "logo-yen",
- "logo-youtube"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the icon will be announced by screen readers."
+ },
+ {
+ "name": "fillColor",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a custom fill color for the icon. Accepts any valid CSS color value."
+ },
+ {
+ "name": "inverted",
+ "type": "string | boolean",
+ "values": [
+ "string",
+ "boolean"
+ ],
+ "required": false,
+ "default": null,
+ "description": "When true, inverts the icon colors for use on dark backgrounds."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "opacity",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "Sets the opacity of the icon from 0 (transparent) to 1 (opaque)."
+ },
+ {
+ "name": "role",
+ "type": "string",
+ "required": false,
+ "default": "img",
+ "description": "Sets the ARIA role for the icon. Use 'presentation' for decorative icons."
+ },
+ {
+ "name": "size",
+ "type": "GoabIconSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the icon. Accepts numeric (1-6) or named sizes."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "GoabIconTheme",
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' shows stroked icons, 'filled' shows solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Adds an accessible title to the icon SVG. Used by screen readers."
+ },
+ {
+ "name": "type",
+ "type": "GoabIconType | GoabIconOverridesType",
+ "values": [
+ "GoabIconType",
+ "GoabIconOverridesType"
+ ],
+ "required": true,
+ "default": null,
+ "description": "The icon type to display. See GoabIconType for available icons."
+ }
],
- "required": true,
- "default": null,
- "description": "The icon type to display. See GoAIconType for available icons."
+ "events": [],
+ "slots": []
},
- {
- "name": "size",
- "type": "\"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"2xsmall\" | \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"xlarge\"",
- "values": [
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "2xsmall",
- "xsmall",
- "small",
- "medium",
- "large",
- "xlarge"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the icon will be announced by screen readers."
+ },
+ {
+ "name": "fillColor",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a custom fill color for the icon. Accepts any valid CSS color value."
+ },
+ {
+ "name": "inverted",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, inverts the icon colors for use on dark backgrounds."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "opacity",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the opacity of the icon from 0 (transparent) to 1 (opaque)."
+ },
+ {
+ "name": "role",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the ARIA role for the icon. Use 'presentation' for decorative icons."
+ },
+ {
+ "name": "size",
+ "type": "GoabIconSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the icon. Accepts numeric (1-6) or named sizes."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "GoabIconTheme",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon theme. 'outline' shows stroked icons, 'filled' shows solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Adds an accessible title to the icon SVG. Used by screen readers."
+ },
+ {
+ "name": "type",
+ "type": "GoabIconType | GoabIconOverridesType",
+ "values": [
+ "GoabIconType",
+ "GoabIconOverridesType"
+ ],
+ "required": true,
+ "default": null,
+ "description": "The icon type to display. See GoabIconType for available icons."
+ }
],
- "required": false,
- "default": "medium",
- "description": "Sets the size of the icon. Accepts numeric (1-6) or named sizes."
+ "events": [],
+ "slots": []
},
- {
- "name": "theme",
- "type": "\"outline\" | \"filled\"",
- "values": [
- "outline",
- "filled"
+ "webComponents": {
+ "props": [
+ {
+ "name": "ariacontrols",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Identifies the element(s) whose contents or presence are controlled by this icon."
+ },
+ {
+ "name": "ariaexpanded",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Indicates whether the element controlled by this icon is expanded or collapsed."
+ },
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the icon will be announced by screen readers."
+ },
+ {
+ "name": "fillcolor",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a custom fill color for the icon. Accepts any valid CSS color value."
+ },
+ {
+ "name": "inverted",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, inverts the icon colors for use on dark backgrounds."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "opacity",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "Sets the opacity of the icon from 0 (transparent) to 1 (opaque)."
+ },
+ {
+ "name": "role",
+ "type": "string",
+ "required": false,
+ "default": "img",
+ "description": "Sets the ARIA role for the icon. Defaults to 'img'. Use 'presentation' for decorative icons."
+ },
+ {
+ "name": "size",
+ "type": "\"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"2xsmall\" | \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"xlarge\"",
+ "values": [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "2xsmall",
+ "xsmall",
+ "small",
+ "medium",
+ "large",
+ "xlarge"
+ ],
+ "required": false,
+ "default": "medium",
+ "description": "Sets the size of the icon. Accepts numeric (1-6) or named sizes."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "theme",
+ "type": "\"outline\" | \"filled\"",
+ "values": [
+ "outline",
+ "filled"
+ ],
+ "required": false,
+ "default": "outline",
+ "description": "Sets the icon theme. 'outline' shows stroked icons, 'filled' shows solid icons."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Adds an accessible title to the icon SVG. Used by screen readers."
+ },
+ {
+ "name": "type",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": true,
+ "default": null,
+ "description": "The icon type to display. See GoAIconType for available icons."
+ }
],
- "required": false,
- "default": "outline",
- "description": "Sets the icon theme. 'outline' shows stroked icons, 'filled' shows solid icons."
- },
- {
- "name": "inverted",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, inverts the icon colors for use on dark backgrounds."
- },
- {
- "name": "fillcolor",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a custom fill color for the icon. Accepts any valid CSS color value."
- },
- {
- "name": "opacity",
- "type": "number",
- "required": false,
- "default": "1",
- "description": "Sets the opacity of the icon from 0 (transparent) to 1 (opaque)."
- },
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Adds an accessible title to the icon SVG. Used by screen readers."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the icon will be announced by screen readers."
- },
- {
- "name": "ariacontrols",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Identifies the element(s) whose contents or presence are controlled by this icon."
- },
- {
- "name": "ariaexpanded",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Indicates whether the element controlled by this icon is expanded or collapsed."
- },
- {
- "name": "role",
- "type": "string",
- "required": false,
- "default": "img",
- "description": "Sets the ARIA role for the icon. Defaults to 'img'. Use 'presentation' for decorative icons."
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/input.json b/docs/generated/component-apis/input.json
index 9faee7dc10..cd970d6efc 100644
--- a/docs/generated/component-apis/input.json
+++ b/docs/generated/component-apis/input.json
@@ -1,375 +1,919 @@
{
"componentSlug": "input",
"extractedFrom": "libs/web-components/src/components/input/Input.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"text\" | \"number\" | \"password\" | \"email\" | \"date\" | \"datetime-local\" | \"month\" | \"range\" | \"search\" | \"tel\" | \"time\" | \"url\" | \"week\"",
- "typeLabel": "GoabInputType",
- "values": [
- "text",
- "number",
- "password",
- "email",
- "date",
- "datetime-local",
- "month",
- "range",
- "search",
- "tel",
- "time",
- "url",
- "week"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the aria-label used by assistive technologies."
+ },
+ {
+ "name": "autoCapitalize",
+ "type": "GoabAutoCapitalize",
+ "required": false,
+ "default": null,
+ "description": "Controls automatic capitalization behavior on supported mobile browsers."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the autocomplete attribute for the input element."
+ },
+ {
+ "name": "debounce",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Debounce delay in milliseconds before firing the change event. 0 means no debounce."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input disabled state."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state styling."
+ },
+ {
+ "name": "focused",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets focus on initial render or controlled updates."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the input element."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon shown before the value."
+ },
+ {
+ "name": "max",
+ "type": "number | string",
+ "values": [
+ "number",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Maximum value. Supports any number, or ISO 8601 format for date/datetime types."
+ },
+ {
+ "name": "maxLength",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum number of characters."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "min",
+ "type": "number | string",
+ "values": [
+ "number",
+ "string"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Minimum value. Supports any number, or ISO 8601 format for date/datetime types."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Name of input value that is received in event detail payloads."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets placeholder text when the input is empty."
+ },
+ {
+ "name": "readonly",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the readonly state."
+ },
+ {
+ "name": "size",
+ "type": "GoabInputSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the input size."
+ },
+ {
+ "name": "step",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "How much a number or date value should change by."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "textAlign",
+ "type": "\"left\" | \"right\"",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Sets text alignment."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Sets the icon shown after the value."
+ },
+ {
+ "name": "trailingIconAriaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the aria-label for an interactive trailing icon."
+ },
+ {
+ "name": "type",
+ "type": "GoabInputType",
+ "required": false,
+ "default": "text",
+ "description": "Sets the type of the input field."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Bound to the current value of the input field."
+ },
+ {
+ "name": "variant",
+ "type": "\"goa\" | \"bare\"",
+ "values": [
+ "goa",
+ "bare"
+ ],
+ "required": false,
+ "default": "goa",
+ "description": "Sets the visual style variant."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the input field."
+ }
],
- "required": false,
- "default": "text",
- "description": "Sets the type of the input field."
- },
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Name of input value that is received in the onChange event."
- },
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Bound to value."
- },
- {
- "name": "autoCapitalize",
- "type": "\"on\" | \"off\" | \"none\" | \"sentences\" | \"words\" | \"characters\"",
- "typeLabel": "GoabInputAutoCapitalize",
- "values": [
- "on",
- "off",
- "none",
- "sentences",
- "words",
- "characters"
- ],
- "required": false,
- "default": "off",
- "description": "Controls whether and how text input is automatically capitalized as it is entered/edited by the user. This only works on mobile devices."
- },
- {
- "name": "autoComplete",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Specifies the autocomplete attribute for the input field."
- },
- {
- "name": "placeholder",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text displayed within the input when no value is set."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon shown to the left of the text."
- },
- {
- "name": "trailingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon shown to the right of the text."
- },
- {
- "name": "variant",
- "type": "\"goa\" | \"bare\"",
- "values": [
- "goa",
- "bare"
+ "events": [
+ {
+ "name": "onBlur",
+ "type": "(detail: GoabInputOnBlurDetail) => void",
+ "description": "Callback fired when the input loses focus. Receives GoabInputOnBlurDetail.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onChange",
+ "type": "(detail: GoabInputOnChangeDetail) => void",
+ "description": "Callback fired when the input value changes. Receives GoabInputOnChangeDetail.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onFocus",
+ "type": "(detail: GoabInputOnFocusDetail) => void",
+ "description": "Callback fired when the input receives focus. Receives GoabInputOnFocusDetail.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onKeyPress",
+ "type": "(detail: GoabInputOnKeyPressDetail) => void",
+ "description": "Callback fired when a key is pressed in the input. Receives GoabInputOnKeyPressDetail.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onTrailingIconClick",
+ "type": "() => void",
+ "description": "Callback fired when the trailing icon is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "goa",
- "description": "Sets the visual style variant. 'goa' for standard GoA styling, 'bare' for minimal styling."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables this input. The input will not receive focus or events. Use [attr.disabled] with [formControl]."
- },
- {
- "name": "handleTrailingIconClick",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Flag that will result in an icon button component being rendered instead of an icon."
- },
- {
- "name": "focused",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the cursor focus to the input."
- },
- {
- "name": "readOnly",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Makes the input readonly."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the input to an error state."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "30ch",
- "description": "Sets the width of the text input area."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the input will be translated for the screen reader. If not specified it will fall back to the name."
- },
- {
- "name": "ariaLabelledBy",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The aria-labelledby attribute identifies the element (or elements) that labels the input."
- },
- {
- "name": "min",
- "type": "string",
- "required": false,
- "default": "",
- "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
- },
- {
- "name": "max",
- "type": "string",
- "required": false,
- "default": "",
- "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
- },
- {
- "name": "step",
- "type": "number",
- "required": false,
- "default": "1",
- "description": "How much a number or date should change by."
- },
- {
- "name": "prefix",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use leadingContent slot instead.",
- "deprecated": true
- },
- {
- "name": "suffix",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use trailingContent slot instead.",
- "deprecated": true
- },
- {
- "name": "debounce",
- "type": "number",
- "required": false,
- "default": "0",
- "description": "Debounce delay in milliseconds before firing the change event. 0 means no debounce."
- },
- {
- "name": "maxLength",
- "type": "number",
- "required": false,
- "default": null,
- "description": "Defines the maximum number of characters (as UTF-16 code units) the user can enter into the input."
- },
- {
- "name": "id",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Unique identifier for the input element. Used for label associations and accessibility."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "trailingIconAriaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Aria label for the trailing icon. Use only when the trailing icon is interactive."
+ "slots": [
+ {
+ "name": "leadingContent",
+ "type": "ReactNode",
+ "description": "Sets content in the leading slot.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "type": "ReactNode",
+ "description": "Sets content in the trailing slot.",
+ "required": false
+ }
+ ]
},
- {
- "name": "textAlign",
- "type": "\"left\" | \"right\"",
- "typeLabel": "GoabInputTextAlign",
- "values": [
- "left",
- "right"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the input will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "ariaLabelledBy",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The aria-labelledby attribute identifies the element (or elements) that labels the input."
+ },
+ {
+ "name": "autoCapitalize",
+ "type": "GoabInputAutoCapitalize",
+ "required": false,
+ "default": null,
+ "description": "Controls whether and how text input is automatically capitalized as it is entered/edited by the user. This only works on mobile devices."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Specifies the autocomplete attribute for the input field."
+ },
+ {
+ "name": "debounce",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Debounce delay in milliseconds before firing the change event. 0 means no debounce."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "focused",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the cursor focus to the input."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "leadingContent",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the leading content slot, accepting a string or template reference."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the left of the text."
+ },
+ {
+ "name": "max",
+ "type": "string | number",
+ "values": [
+ "string",
+ "number"
+ ],
+ "required": false,
+ "default": null,
+ "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
+ },
+ {
+ "name": "maxLength",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum number of characters (as UTF-16 code units) the user can enter into the input."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "min",
+ "type": "string | number",
+ "values": [
+ "string",
+ "number"
+ ],
+ "required": false,
+ "default": null,
+ "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Name of input value that is received in the onChange event."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text displayed within the input when no value is set."
+ },
+ {
+ "name": "readonly",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Makes the input readonly."
+ },
+ {
+ "name": "size",
+ "type": "GoabInputSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the input. 'compact' reduces height for dense layouts."
+ },
+ {
+ "name": "step",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "How much a number or date should change by."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "textAlign",
+ "type": "\"left\" | \"right\"",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Sets the text alignment within the input field."
+ },
+ {
+ "name": "trailingContent",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the trailing content slot, accepting a string or template reference."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the right of the text."
+ },
+ {
+ "name": "trailingIconAriaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Aria label for the trailing icon. Use only when the trailing icon is interactive."
+ },
+ {
+ "name": "type",
+ "type": "GoabInputType",
+ "required": false,
+ "default": "text",
+ "description": "Sets the type of the input field."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the control value used by Angular forms and one-way binding."
+ },
+ {
+ "name": "variant",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the visual style variant. 'goa' for standard GoA styling, 'bare' for minimal styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the text input area."
+ }
],
- "required": false,
- "default": "left",
- "description": "Sets the text alignment within the input field."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "events": [
+ {
+ "name": "onBlur",
+ "type": "(event: GoabInputOnBlurDetail) => void",
+ "description": "Emits when the input loses focus. Emits blur detail including the current value.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onChange",
+ "type": "(event: GoabInputOnChangeDetail) => void",
+ "description": "Emits when the input value changes. Emits change detail including the new value.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onFocus",
+ "type": "(event: GoabInputOnFocusDetail) => void",
+ "description": "Emits when the input receives focus. Emits focus detail including the current value.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onKeyPress",
+ "type": "(event: GoabInputOnKeyPressDetail) => void",
+ "description": "Emits when a key is pressed in the input. Emits key press detail including the value and key pressed.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onTrailingIconClick",
+ "type": "() => void",
+ "description": "Emits when the trailing icon is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of the input. 'compact' reduces height for dense layouts."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "slots": [
+ {
+ "name": "leadingContent",
+ "type": "TemplateRef",
+ "description": "Sets content in the leading slot.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "type": "TemplateRef",
+ "description": "Sets content in the trailing slot.",
+ "required": false
+ }
]
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onKeyPress",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_keyPress",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onFocus",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_focus",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onBlur",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_blur",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onTrailingIconClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_trailingIconClick",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the input will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "arialabelledby",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The aria-labelledby attribute identifies the element (or elements) that labels the input."
+ },
+ {
+ "name": "autocapitalize",
+ "type": "\"on\" | \"off\" | \"none\" | \"sentences\" | \"words\" | \"characters\"",
+ "typeLabel": "GoabInputAutoCapitalize",
+ "values": [
+ "on",
+ "off",
+ "none",
+ "sentences",
+ "words",
+ "characters"
+ ],
+ "required": false,
+ "default": "off",
+ "description": "Controls whether and how text input is automatically capitalized as it is entered/edited by the user. This only works on mobile devices."
+ },
+ {
+ "name": "autocomplete",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Specifies the autocomplete attribute for the input field."
+ },
+ {
+ "name": "debounce",
+ "type": "number",
+ "required": false,
+ "default": "0",
+ "description": "Debounce delay in milliseconds before firing the change event. 0 means no debounce."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables this input. The input will not receive focus or events. Use [attr.disabled] with [formControl]."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the input to an error state."
+ },
+ {
+ "name": "focused",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the cursor focus to the input."
+ },
+ {
+ "name": "handletrailingiconclick",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Flag that will result in an icon button component being rendered instead of an icon."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Unique identifier for the input element. Used for label associations and accessibility."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the left of the text."
+ },
+ {
+ "name": "max",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
+ },
+ {
+ "name": "maxlength",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Defines the maximum number of characters (as UTF-16 code units) the user can enter into the input."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "min",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "A string value that supports any number, or an ISO 8601 format if using the date or datetime type."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Name of input value that is received in the onChange event."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text displayed within the input when no value is set."
+ },
+ {
+ "name": "readonly",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Makes the input readonly."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of the input. 'compact' reduces height for dense layouts."
+ },
+ {
+ "name": "step",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "How much a number or date should change by."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "textalign",
+ "type": "\"left\" | \"right\"",
+ "typeLabel": "GoabInputTextAlign",
+ "values": [
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "left",
+ "description": "Sets the text alignment within the input field."
+ },
+ {
+ "name": "trailingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon shown to the right of the text."
+ },
+ {
+ "name": "trailingiconarialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Aria label for the trailing icon. Use only when the trailing icon is interactive."
+ },
+ {
+ "name": "type",
+ "type": "\"text\" | \"number\" | \"password\" | \"email\" | \"date\" | \"datetime-local\" | \"month\" | \"range\" | \"search\" | \"tel\" | \"time\" | \"url\" | \"week\"",
+ "typeLabel": "GoabInputType",
+ "values": [
+ "text",
+ "number",
+ "password",
+ "email",
+ "date",
+ "datetime-local",
+ "month",
+ "range",
+ "search",
+ "tel",
+ "time",
+ "url",
+ "week"
+ ],
+ "required": false,
+ "default": "text",
+ "description": "Sets the type of the input field."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Bound to value."
+ },
+ {
+ "name": "variant",
+ "type": "\"goa\" | \"bare\"",
+ "values": [
+ "goa",
+ "bare"
+ ],
+ "required": false,
+ "default": "goa",
+ "description": "Sets the visual style variant. 'goa' for standard GoA styling, 'bare' for minimal styling."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "30ch",
+ "description": "Sets the width of the text input area."
+ }
+ ],
+ "events": [
+ {
+ "name": "_blur",
+ "type": "CustomEvent<{ name: string; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_focus",
+ "type": "CustomEvent<{ name: string; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_keyPress",
+ "type": "CustomEvent<{ name: string; value: string; key: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_trailingIconClick",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "leadingContent",
+ "description": "Sets content in the leading slot.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "description": "Sets content in the trailing slot.",
+ "required": false
+ }
]
}
- ],
- "slots": [
- {
- "name": "leadingContent",
- "description": ""
- },
- {
- "name": "trailingContent",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/linear-progress.json b/docs/generated/component-apis/linear-progress.json
index 22c95b034e..cde8d504ae 100644
--- a/docs/generated/component-apis/linear-progress.json
+++ b/docs/generated/component-apis/linear-progress.json
@@ -1,47 +1,147 @@
{
"componentSlug": "linear-progress",
"extractedFrom": "libs/web-components/src/components/linear-progress/LinearProgress.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": null,
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "progress",
- "type": "number",
- "required": false,
- "default": null,
- "description": "Progress value (0-100). When undefined, shows an indeterminate loading animation."
- },
- {
- "name": "percentVisibility",
- "type": "\"visible\" | \"hidden\"",
- "values": [
- "visible",
- "hidden"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accessible label for the progress bar."
+ },
+ {
+ "name": "ariaLabelledBy",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "ID of the element that labels this progress bar."
+ },
+ {
+ "name": "percentVisibility",
+ "type": "\"visible\" | \"hidden\" | undefined",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the percentage text."
+ },
+ {
+ "name": "progress",
+ "type": "number | null",
+ "values": [
+ "number"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Progress value (0-100). When undefined, shows an indeterminate loading animation."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "visible",
- "description": "Controls visibility of the percentage text."
+ "events": [],
+ "slots": []
},
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": null,
- "description": "Accessible label for the progress bar."
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accessible label for the progress bar."
+ },
+ {
+ "name": "ariaLabelledBy",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "ID of the element that labels this progress bar."
+ },
+ {
+ "name": "percentVisibility",
+ "type": "\"visible\" | \"hidden\" | undefined",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Controls visibility of the percentage text."
+ },
+ {
+ "name": "progress",
+ "type": "number | null | undefined",
+ "values": [
+ "number"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Progress value (0-100). When undefined, shows an indeterminate loading animation."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "ariaLabelledBy",
- "type": "string",
- "required": false,
- "default": null,
- "description": "ID of the element that labels this progress bar."
+ "webComponents": {
+ "props": [
+ {
+ "name": "aria-label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Accessible label for the progress bar."
+ },
+ {
+ "name": "aria-labelledby",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "ID of the element that labels this progress bar."
+ },
+ {
+ "name": "percent-visibility",
+ "type": "\"visible\" | \"hidden\"",
+ "values": [
+ "visible",
+ "hidden"
+ ],
+ "required": false,
+ "default": "visible",
+ "description": "Controls visibility of the percentage text."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Progress value (0-100). When undefined, shows an indeterminate loading animation."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/link-button.json b/docs/generated/component-apis/link-button.json
index 29e3670db3..0662149eaa 100644
--- a/docs/generated/component-apis/link-button.json
+++ b/docs/generated/component-apis/link-button.json
@@ -1,112 +1,59 @@
{
"componentSlug": "link-button",
"extractedFrom": "libs/web-components/src/components/link-button/LinkButton.svelte",
- "props": [
- {
- "name": "color",
- "type": "\"interactive\" | \"light\"",
- "values": [
- "interactive",
- "light"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ }
],
- "required": false,
- "default": "interactive",
- "description": "@deprecated Use GoabButton instead. Sets the color theme. 'interactive' for blue, 'light' for white on dark backgrounds.",
- "deprecated": true
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": true,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Icon displayed before the button text.",
- "deprecated": true
- },
- {
- "name": "trailingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": true,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Icon displayed after the button text.",
- "deprecated": true
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "@deprecated Use GoabButton instead. When true, prevents user interaction and applies disabled styling.",
- "deprecated": true
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use GoabButton instead. Sets a data-testid attribute for automated testing.",
- "deprecated": true
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Top margin.",
- "deprecated": true
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Right margin.",
- "deprecated": true
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Bottom margin.",
- "deprecated": true
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "@deprecated Use GoabButton instead. Left margin.",
- "deprecated": true
- }
- ],
- "events": [
- {
- "name": "onClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_click",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "events": [],
+ "slots": []
+ },
+ "angular": {
+ "props": [],
+ "events": [],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/link.json b/docs/generated/component-apis/link.json
index fbd438df74..6081a67e95 100644
--- a/docs/generated/component-apis/link.json
+++ b/docs/generated/component-apis/link.json
@@ -1,93 +1,293 @@
{
"componentSlug": "link",
"extractedFrom": "libs/web-components/src/components/link/Link.svelte",
- "props": [
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the link text."
- },
- {
- "name": "trailingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed after the link text."
- },
- {
- "name": "color",
- "type": "\"interactive\" | \"dark\" | \"light\"",
- "values": [
- "interactive",
- "dark",
- "light"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Custom action event name to dispatch when the link is clicked."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument to pass with the action event. Deprecated, use actionArgs instead."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Object of arguments to pass with the action event."
+ },
+ {
+ "name": "color",
+ "type": "GoabLinkColor",
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the color theme. 'interactive' for blue, 'dark' for black, 'light' for white text."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the link text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabLinkSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the text size and corresponding icon size."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the link text."
+ }
],
- "required": false,
- "default": "interactive",
- "description": "Sets the color theme. 'interactive' for blue, 'dark' for black, 'light' for white text."
+ "events": [],
+ "slots": []
},
- {
- "name": "size",
- "type": "\"xsmall\" | \"small\" | \"medium\" | \"large\"",
- "values": [
- "xsmall",
- "small",
- "medium",
- "large"
+ "angular": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Custom action event name to dispatch when the link is clicked."
+ },
+ {
+ "name": "actionArg",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Single argument to pass with the action event (deprecated, use actionArgs)."
+ },
+ {
+ "name": "actionArgs",
+ "type": "Record",
+ "required": false,
+ "default": null,
+ "description": "Object of arguments to pass with the action event."
+ },
+ {
+ "name": "color",
+ "type": "GoabLinkColor",
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the color theme. 'interactive' for blue, 'dark' for black, 'light' for white text."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the link text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "GoabLinkSize",
+ "required": false,
+ "default": "medium",
+ "description": "Sets the text size and corresponding icon size."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the link text."
+ }
],
- "required": false,
- "default": "medium",
- "description": "Sets the text size and corresponding icon size."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "events": [],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Custom action event name to dispatch when the link is clicked."
+ },
+ {
+ "name": "action-arg",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Single argument to pass with the action event (deprecated, use actionArgs)."
+ },
+ {
+ "name": "action-args",
+ "type": "Record",
+ "required": false,
+ "default": "{}",
+ "description": "Object of arguments to pass with the action event."
+ },
+ {
+ "name": "color",
+ "type": "\"interactive\" | \"dark\" | \"light\"",
+ "values": [
+ "interactive",
+ "dark",
+ "light"
+ ],
+ "required": false,
+ "default": "interactive",
+ "description": "Sets the color theme. 'interactive' for blue, 'dark' for black, 'light' for white text."
+ },
+ {
+ "name": "leadingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the link text."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "\"xsmall\" | \"small\" | \"medium\" | \"large\"",
+ "values": [
+ "xsmall",
+ "small",
+ "medium",
+ "large"
+ ],
+ "required": false,
+ "default": "medium",
+ "description": "Sets the text size and corresponding icon size."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "trailingicon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed after the link text."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/menu-action.json b/docs/generated/component-apis/menu-action.json
index be59c631e3..db60330145 100644
--- a/docs/generated/component-apis/menu-action.json
+++ b/docs/generated/component-apis/menu-action.json
@@ -1,37 +1,109 @@
{
"componentSlug": "menu-action",
"extractedFrom": "libs/web-components/src/components/menu-button/MenuAction.svelte",
- "props": [
- {
- "name": "text",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Display text for the menu action."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Action identifier included in the click event."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Display text for the menu action."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "action",
- "type": "string",
- "required": false,
- "default": "default",
- "description": "Action identifier included in the click event."
+ "angular": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Action identifier included in the click event."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Display text for the menu action."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "icon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the text."
+ "webComponents": {
+ "props": [
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "default",
+ "description": "Action identifier included in the click event."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the text."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Display text for the menu action."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
-}
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/menu-button.json b/docs/generated/component-apis/menu-button.json
index ac9450c0d9..19afcb6b89 100644
--- a/docs/generated/component-apis/menu-button.json
+++ b/docs/generated/component-apis/menu-button.json
@@ -1,100 +1,244 @@
{
"componentSlug": "menu-button",
"extractedFrom": "libs/web-components/src/components/menu-button/MenuButton.svelte",
- "props": [
- {
- "name": "text",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The button label text. When provided, displays as a text button with a dropdown icon."
- },
- {
- "name": "type",
- "type": "\"primary\" | \"secondary\" | \"tertiary\"",
- "values": [
- "primary",
- "secondary",
- "tertiary"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": "Open menu",
+ "description": "Sets the aria-label for the icon button in icon-only mode."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the button text. When no text is provided, displays as an icon button."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the dropdown menu."
+ },
+ {
+ "name": "size",
+ "type": "GoabButtonSize",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the size of the button."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The button label text. When provided, displays as a text button with a dropdown icon."
+ },
+ {
+ "name": "type",
+ "type": "GoabButtonType",
+ "required": false,
+ "default": "primary",
+ "description": "The button style variant."
+ },
+ {
+ "name": "variant",
+ "type": "GoabButtonVariant",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the color variant for semantic meaning."
+ }
],
- "required": false,
- "default": "primary",
- "description": "The button style variant."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "leadingIcon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the button text. When no text is provided, displays as an icon button."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Maximum width of the dropdown menu."
- },
- {
- "name": "size",
- "type": "\"normal\" | \"compact\"",
- "values": [
- "normal",
- "compact"
+ "events": [
+ {
+ "name": "onAction",
+ "type": "(detail: GoabMenuButtonOnActionDetail) => void",
+ "description": "Callback fired when a menu action is selected.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "normal",
- "description": "Sets the size of the button."
+ "slots": []
},
- {
- "name": "variant",
- "type": "\"normal\" | \"destructive\"",
- "values": [
- "normal",
- "destructive"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the aria-label for the icon button in icon-only mode."
+ },
+ {
+ "name": "leadingIcon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the button text. When no text is provided, displays as an icon button."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the dropdown menu."
+ },
+ {
+ "name": "size",
+ "type": "GoabButtonSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the size of the button."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The button label text. When provided, displays as a text button with a dropdown icon."
+ },
+ {
+ "name": "type",
+ "type": "GoabButtonType",
+ "required": false,
+ "default": null,
+ "description": "The button style variant."
+ },
+ {
+ "name": "variant",
+ "type": "GoabButtonVariant",
+ "required": false,
+ "default": null,
+ "description": "Sets the color variant for semantic meaning."
+ }
],
- "required": false,
- "default": "normal",
- "description": "Sets the color variant for semantic meaning."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "Open menu",
- "description": "Sets the aria-label for the icon button in icon-only mode."
- }
- ],
- "events": [
- {
- "name": "onAction",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onAction",
+ "type": "(event: GoabMenuButtonOnActionDetail) => void",
+ "description": "Emits when a menu action is clicked. Emits the action detail.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_action",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "aria-label",
+ "type": "string",
+ "required": false,
+ "default": "Open menu",
+ "description": "Sets the aria-label for the icon button in icon-only mode."
+ },
+ {
+ "name": "leading-icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the button text. When no text is provided, displays as an icon button."
+ },
+ {
+ "name": "max-width",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Maximum width of the dropdown menu."
+ },
+ {
+ "name": "size",
+ "type": "\"normal\" | \"compact\"",
+ "values": [
+ "normal",
+ "compact"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Sets the size of the button."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The button label text. When provided, displays as a text button with a dropdown icon."
+ },
+ {
+ "name": "type",
+ "type": "\"primary\" | \"secondary\" | \"tertiary\"",
+ "values": [
+ "primary",
+ "secondary",
+ "tertiary"
+ ],
+ "required": false,
+ "default": "primary",
+ "description": "The button style variant."
+ },
+ {
+ "name": "variant",
+ "type": "\"normal\" | \"destructive\"",
+ "values": [
+ "normal",
+ "destructive"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "Sets the color variant for semantic meaning."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_action",
+ "type": "CustomEvent<{ action?: string; size?: \"normal\" | \"compact\" }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/microsite-header.json b/docs/generated/component-apis/microsite-header.json
index fa93c3147f..344a340926 100644
--- a/docs/generated/component-apis/microsite-header.json
+++ b/docs/generated/component-apis/microsite-header.json
@@ -1,102 +1,229 @@
{
"componentSlug": "microsite-header",
"extractedFrom": "libs/web-components/src/components/microsite-header/MicrositeHeader.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"live\" | \"alpha\" | \"beta\"",
- "typeLabel": "GoabMicrositeHeaderType",
- "values": [
- "live",
- "alpha",
- "beta"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "feedbackUrl",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "URL to a feedback page displayed when provided."
+ },
+ {
+ "name": "feedbackUrlTarget",
+ "type": "GoabLinkTarget",
+ "required": false,
+ "default": "blank",
+ "description": "Sets the target attribute for the feedback URL link."
+ },
+ {
+ "name": "headerUrlTarget",
+ "type": "GoabLinkTarget",
+ "required": false,
+ "default": "blank",
+ "description": "Sets the target attribute for the header link."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabServiceLevel",
+ "required": true,
+ "default": null,
+ "description": "The service type which determines the badge style. \"live\" shows official government site text, \"alpha\" and \"beta\" show development stage badges."
+ },
+ {
+ "name": "version",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "App or service version displayed on the right side of the header."
+ }
],
- "required": true,
- "default": null,
- "description": "The service type which determines the badge style. \"live\" shows official government site text, \"alpha\" and \"beta\" show development stage badges."
- },
- {
- "name": "version",
- "type": "string",
- "required": false,
- "default": "",
- "description": "App or service version displayed on the right side of the header."
- },
- {
- "name": "feedbackurl",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Url to feedback page that will be displayed when provided."
- },
- {
- "name": "maxcontentwidth",
- "type": "any",
- "required": false,
- "default": "100%",
- "description": "Maximum width of the content area"
- },
- {
- "name": "headerurltarget",
- "type": "\"self\" | \"blank\"",
- "typeLabel": "GoabMicrositeHeaderUrlTargetType",
- "values": [
- "self",
- "blank"
+ "events": [
+ {
+ "name": "onFeedbackClick",
+ "type": "() => void",
+ "description": "Callback fired when the feedback link is clicked, enables custom feedback handling.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "blank",
- "description": "Sets the target attribute for the header link."
+ "slots": []
},
- {
- "name": "feedbackurltarget",
- "type": "\"self\" | \"blank\"",
- "typeLabel": "GoabMicrositeHeaderUrlTargetType",
- "values": [
- "self",
- "blank"
+ "angular": {
+ "props": [
+ {
+ "name": "feedbackUrl",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Url to feedback page that will be displayed when provided."
+ },
+ {
+ "name": "feedbackUrlTarget",
+ "type": "GoabLinkTarget",
+ "required": false,
+ "default": null,
+ "description": "For internal feedback urls sets target."
+ },
+ {
+ "name": "headerUrlTarget",
+ "type": "GoabLinkTarget",
+ "required": false,
+ "default": null,
+ "description": "Sets the target attribute for the header link."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabServiceLevel",
+ "required": true,
+ "default": null,
+ "description": "The service type which determines the badge style. \"live\" shows official government site text, \"alpha\" and \"beta\" show development stage badges."
+ },
+ {
+ "name": "version",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "App or service version displayed on the right side of the header."
+ }
],
- "required": false,
- "default": "blank",
- "description": "For internal feedback urls sets target="
- },
- {
- "name": "hasfeedbackhandler",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, enables a custom feedback click handler via the _feedbackClick event instead of navigating to feedbackurl."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [
- {
- "name": "onFeedbackClick",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onFeedbackClick",
+ "type": "() => void",
+ "description": "Emits when the feedback link is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_feedbackClick",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "version",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "feedbackurl",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Url to feedback page that will be displayed when provided."
+ },
+ {
+ "name": "feedbackurltarget",
+ "type": "\"self\" | \"blank\"",
+ "typeLabel": "GoabMicrositeHeaderUrlTargetType",
+ "values": [
+ "self",
+ "blank"
+ ],
+ "required": false,
+ "default": "blank",
+ "description": "For internal feedback urls sets target="
+ },
+ {
+ "name": "hasfeedbackhandler",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, enables a custom feedback click handler via the _feedbackClick event instead of navigating to feedbackurl."
+ },
+ {
+ "name": "headerurltarget",
+ "type": "\"self\" | \"blank\"",
+ "typeLabel": "GoabMicrositeHeaderUrlTargetType",
+ "values": [
+ "self",
+ "blank"
+ ],
+ "required": false,
+ "default": "blank",
+ "description": "Sets the target attribute for the header link."
+ },
+ {
+ "name": "maxcontentwidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area"
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"live\" | \"alpha\" | \"beta\"",
+ "typeLabel": "GoabMicrositeHeaderType",
+ "values": [
+ "live",
+ "alpha",
+ "beta"
+ ],
+ "required": true,
+ "default": null,
+ "description": "The service type which determines the badge style. \"live\" shows official government site text, \"alpha\" and \"beta\" show development stage badges."
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "App or service version displayed on the right side of the header."
+ }
+ ],
+ "events": [
+ {
+ "name": "_feedbackClick",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/modal.json b/docs/generated/component-apis/modal.json
index 592278d64c..3cf62ec18b 100644
--- a/docs/generated/component-apis/modal.json
+++ b/docs/generated/component-apis/modal.json
@@ -1,105 +1,243 @@
{
"componentSlug": "modal",
"extractedFrom": "libs/web-components/src/components/modal/Modal.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The heading text displayed at the top of the modal."
- },
- {
- "name": "closable",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Show close icon and allow clicking the background to close the modal."
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Controls if modal is visible or not."
- },
- {
- "name": "transition",
- "type": "\"fast\" | \"slow\" | \"none\"",
- "typeLabel": "GoabModalTransition",
- "values": [
- "fast",
- "slow",
- "none"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "calloutVariant",
+ "type": "GoabModalCalloutVariant",
+ "required": false,
+ "default": null,
+ "description": "Sets the context and colour of the callout modal. Required when used as a callout type."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "60ch",
+ "description": "Set the max allowed width of the modal."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls if the modal is visible or not."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "transition",
+ "type": "GoabModalTransition",
+ "required": false,
+ "default": null,
+ "description": "Sets the animation transition when opening/closing. 'fast' or 'slow' for animated, 'none' for instant."
+ }
],
- "required": false,
- "default": "none",
- "description": "Sets the animation transition when opening/closing. 'fast' or 'slow' for animated, 'none' for instant."
- },
- {
- "name": "calloutVariant",
- "type": "\"\"",
- "required": false,
- "default": null,
- "description": "Define the context and colour of the callout modal. It is required when type is set to callout."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "60ch",
- "description": "Set the max allowed width of the modal."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "modal",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated Use maxwidth instead.",
- "deprecated": true
- }
- ],
- "events": [
- {
- "name": "onClose",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Callback fired when the modal is closed. When provided, enables the close button and backdrop click-to-close behavior.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Content rendered in the modal's actions slot, typically action buttons.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "type": "ReactNode",
+ "description": "The heading text displayed at the top of the modal.",
+ "required": false
+ }
]
},
- {
- "name": "_close",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "calloutVariant",
+ "type": "GoabModalCalloutVariant",
+ "required": false,
+ "default": null,
+ "description": "Define the context and colour of the callout modal. It is required when type is set to callout."
+ },
+ {
+ "name": "closable",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Show close icon and allow clicking the background to close the modal."
+ },
+ {
+ "name": "heading",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The heading text displayed at the top of the modal."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Set the max allowed width of the modal."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls if modal is visible or not."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "transition",
+ "type": "GoabModalTransition",
+ "required": false,
+ "default": null,
+ "description": "Sets the animation transition when opening/closing. 'fast' or 'slow' for animated, 'none' for instant."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Emits when the modal is closed.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Content rendered in the modal's actions slot, typically action buttons.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "type": "TemplateRef",
+ "description": "The heading text displayed at the top of the modal.",
+ "required": false
+ }
]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "heading",
- "description": ""
},
- {
- "name": "content",
- "description": ""
- },
- {
- "name": "actions",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "calloutvariant",
+ "type": "\"\"",
+ "required": false,
+ "default": null,
+ "description": "Define the context and colour of the callout modal. It is required when type is set to callout."
+ },
+ {
+ "name": "closable",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Show close icon and allow clicking the background to close the modal."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The heading text displayed at the top of the modal."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "60ch",
+ "description": "Set the max allowed width of the modal."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Controls if modal is visible or not."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "modal",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "transition",
+ "type": "\"fast\" | \"slow\" | \"none\"",
+ "typeLabel": "GoabModalTransition",
+ "values": [
+ "fast",
+ "slow",
+ "none"
+ ],
+ "required": false,
+ "default": "none",
+ "description": "Sets the animation transition when opening/closing. 'fast' or 'slow' for animated, 'none' for instant."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabModalVersionType",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_close",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Content rendered in the modal's actions slot, typically action buttons.",
+ "required": false
+ },
+ {
+ "name": "heading",
+ "description": "The heading text displayed at the top of the modal.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/notification.json b/docs/generated/component-apis/notification.json
index 8f6ac51b2a..2a16d6fd14 100644
--- a/docs/generated/component-apis/notification.json
+++ b/docs/generated/component-apis/notification.json
@@ -1,90 +1,206 @@
{
"componentSlug": "notification",
"extractedFrom": "libs/web-components/src/components/notification/Notification.svelte",
- "props": [
- {
- "name": "type",
- "type": "\"emergency\" | \"important\" | \"information\" | \"event\"",
- "typeLabel": "GoabNotificationType",
- "values": [
- "emergency",
- "important",
- "information",
- "event"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLive",
+ "type": "GoabAriaLiveType",
+ "required": false,
+ "default": "polite",
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, reduces padding for a more compact notification."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabNotificationEmphasis",
+ "required": false,
+ "default": "high",
+ "description": "Sets the visual prominence. 'high' for full background, 'low' for a bordered style."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabNotificationType",
+ "required": false,
+ "default": null,
+ "description": "Define the context and colour of the notification."
+ }
],
- "required": false,
- "default": "",
- "description": "Define the context and colour of the notification."
- },
- {
- "name": "maxcontentwidth",
- "type": "any",
- "required": false,
- "default": "100%",
- "description": "Maximum width of the content area."
- },
- {
- "name": "arialive",
- "type": "\"assertive\" | \"off\" | \"polite\"",
- "typeLabel": "GoabNotificationAriaLiveType",
- "values": [
- "assertive",
- "off",
- "polite"
+ "events": [
+ {
+ "name": "onDismiss",
+ "type": "() => void",
+ "description": "Callback fired when the notification is dismissed.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "polite",
- "description": "Indicates how assistive technology should handle updates to the live region."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "slots": []
},
- {
- "name": "emphasis",
- "type": "\"high\" | \"low\"",
- "typeLabel": "GoabNotificationEmphasisType",
- "values": [
- "high",
- "low"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLive",
+ "type": "GoabAriaLiveType",
+ "required": false,
+ "default": null,
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, reduces padding for a more compact notification."
+ },
+ {
+ "name": "emphasis",
+ "type": "GoabNotificationEmphasis",
+ "required": false,
+ "default": "high",
+ "description": "Sets the visual prominence. 'high' for full background, 'low' for medium."
+ },
+ {
+ "name": "maxContentWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabNotificationType",
+ "required": false,
+ "default": "information",
+ "description": "Define the context and colour of the notification."
+ }
],
- "required": false,
- "default": "high",
- "description": "Sets the visual prominence. 'high' for full background, 'filled' for medium."
- },
- {
- "name": "compact",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, reduces padding for a more compact notification."
- }
- ],
- "events": [
- {
- "name": "onDismiss",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onDismiss",
+ "type": "() => void",
+ "description": "Emits when the notification is dismissed.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_dismiss",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialive",
+ "type": "\"assertive\" | \"off\" | \"polite\"",
+ "typeLabel": "GoabNotificationAriaLiveType",
+ "values": [
+ "assertive",
+ "off",
+ "polite"
+ ],
+ "required": false,
+ "default": "polite",
+ "description": "Indicates how assistive technology should handle updates to the live region."
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, reduces padding for a more compact notification."
+ },
+ {
+ "name": "emphasis",
+ "type": "\"high\" | \"low\"",
+ "typeLabel": "GoabNotificationEmphasisType",
+ "values": [
+ "high",
+ "low"
+ ],
+ "required": false,
+ "default": "high",
+ "description": "Sets the visual prominence. 'high' for full background, 'filled' for medium."
+ },
+ {
+ "name": "maxcontentwidth",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Maximum width of the content area."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"emergency\" | \"important\" | \"information\" | \"event\"",
+ "typeLabel": "GoabNotificationType",
+ "values": [
+ "emergency",
+ "important",
+ "information",
+ "event"
+ ],
+ "required": false,
+ "default": "",
+ "description": "Define the context and colour of the notification."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_dismiss",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/page-block.json b/docs/generated/component-apis/page-block.json
index a38dd13162..f1e3f2c7cc 100644
--- a/docs/generated/component-apis/page-block.json
+++ b/docs/generated/component-apis/page-block.json
@@ -1,31 +1,70 @@
{
"componentSlug": "page-block",
"extractedFrom": "libs/web-components/src/components/page-block/PageBlock.svelte",
- "props": [
- {
- "name": "width",
- "type": "\"full\" | string",
- "values": [
- "full",
- "string"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "GoabPageBlockSize",
+ "required": false,
+ "default": "full",
+ "description": "Maximum width of the content area. Use \"full\" for 100% width or a CSS dimension like \"1200px\"."
+ }
],
- "required": false,
- "default": "full",
- "description": "Maximum width of the content area. Use \"full\" for 100% width or a CSS dimension like \"1200px\"."
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "angular": {
+ "props": [
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "GoabPageBlockSize",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the content area. Use \"full\" for 100% width or a CSS dimension like \"1200px\"."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "\"full\" | string",
+ "values": [
+ "full",
+ "string"
+ ],
+ "required": false,
+ "default": "full",
+ "description": "Maximum width of the content area. Use \"full\" for 100% width or a CSS dimension like \"1200px\"."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/pages.json b/docs/generated/component-apis/pages.json
index 11a1560d9a..b70b21aa75 100644
--- a/docs/generated/component-apis/pages.json
+++ b/docs/generated/component-apis/pages.json
@@ -1,52 +1,140 @@
{
"componentSlug": "pages",
"extractedFrom": "libs/web-components/src/components/pages/Pages.svelte",
- "props": [
- {
- "name": "current",
- "type": "number",
- "required": false,
- "default": "1",
- "description": "The currently visible page (1-based index)."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "current",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "The currently visible page (1-based index)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "angular": {
+ "props": [
+ {
+ "name": "current",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "The currently visible page (1-based index)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "current",
+ "type": "number",
+ "required": false,
+ "default": "1",
+ "description": "The currently visible page (1-based index)."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/pagination.json b/docs/generated/component-apis/pagination.json
index fd65d9187c..ea374f7ce4 100644
--- a/docs/generated/component-apis/pagination.json
+++ b/docs/generated/component-apis/pagination.json
@@ -1,97 +1,264 @@
{
"componentSlug": "pagination",
"extractedFrom": "libs/web-components/src/components/pagination/Pagination.svelte",
- "props": [
- {
- "name": "pagenumber",
- "type": "number",
- "required": true,
- "default": null,
- "description": "The current page being viewed (non-zero based)."
- },
- {
- "name": "itemcount",
- "type": "number",
- "required": true,
- "default": null,
- "description": "Total number of data items within all pages."
- },
- {
- "name": "perpagecount",
- "type": "number",
- "required": false,
- "default": "10",
- "description": "Number of data items shown per page."
- },
- {
- "name": "variant",
- "type": "\"all\" | \"links-only\"",
- "typeLabel": "GoabPaginationVariant",
- "values": [
- "all",
- "links-only"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "itemCount",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "Total number of data items within all pages."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "pageNumber",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The current page being viewed (non-zero based)."
+ },
+ {
+ "name": "perPageCount",
+ "type": "number",
+ "required": false,
+ "default": "10",
+ "description": "Number of data items shown per page."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"all\" | \"links-only\"",
+ "values": [
+ "all",
+ "links-only"
+ ],
+ "required": false,
+ "default": "all",
+ "description": "Controls which nav controls are visible."
+ }
],
- "required": false,
- "default": "all",
- "description": "Controls which nav controls are visible."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "none",
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "none",
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "m",
- "description": "Bottom margin."
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabPaginationOnChangeDetail) => void",
+ "description": "Callback fired when the user navigates to a different page.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "none",
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "itemCount",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "Total number of data items within all pages."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "pageNumber",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The current page being viewed (non-zero based)."
+ },
+ {
+ "name": "perPageCount",
+ "type": "number",
+ "required": false,
+ "default": "10",
+ "description": "Number of data items shown per page."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabPaginationVariant",
+ "required": false,
+ "default": "all",
+ "description": "Controls which nav controls are visible."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabPaginationOnChangeDetail) => void",
+ "description": "Emits when the page changes. Emits the new page number as part of the change detail.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "itemcount",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "Total number of data items within all pages."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "m",
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "none",
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "none",
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "none",
+ "description": "Top margin."
+ },
+ {
+ "name": "pagenumber",
+ "type": "number",
+ "required": true,
+ "default": null,
+ "description": "The current page being viewed (non-zero based)."
+ },
+ {
+ "name": "perpagecount",
+ "type": "number",
+ "required": false,
+ "default": "10",
+ "description": "Number of data items shown per page."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"all\" | \"links-only\"",
+ "typeLabel": "GoabPaginationVariant",
+ "values": [
+ "all",
+ "links-only"
+ ],
+ "required": false,
+ "default": "all",
+ "description": "Controls which nav controls are visible."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ page: number }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/popover.json b/docs/generated/component-apis/popover.json
index ee57a4dfb6..40fa1637f0 100644
--- a/docs/generated/component-apis/popover.json
+++ b/docs/generated/component-apis/popover.json
@@ -1,215 +1,331 @@
{
"componentSlug": "popover",
"extractedFrom": "libs/web-components/src/components/popover/Popover.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "popover",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "position",
- "type": "\"above\" | \"below\" | \"auto\"",
- "values": [
- "above",
- "below",
- "auto"
- ],
- "required": false,
- "default": "auto",
- "description": "Provides control to where the popover content is positioned."
- },
- {
- "name": "maxWidth",
- "type": "string | \"none\"",
- "values": [
- "string",
- "none"
- ],
- "required": false,
- "default": "320px",
- "description": "Sets the maximum width of the popover container."
- },
- {
- "name": "minwidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the minimum width of the popover container."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a fixed width for the popover container."
- },
- {
- "name": "height",
- "type": "\"full\" | \"wrap-content\"",
- "values": [
- "full",
- "wrap-content"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "320px",
+ "description": "Sets the maximum width of the popover container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "minWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum width of the popover container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "padded",
+ "type": "boolean",
+ "required": false,
+ "default": "true",
+ "description": "Sets if the popover has padding. Use false when content needs to be flush with boundaries."
+ },
+ {
+ "name": "position",
+ "type": "GoabPopoverPosition",
+ "required": false,
+ "default": "auto",
+ "description": "Provides control to where the popover content is positioned."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "wrap-content",
- "description": "Controls the height behavior. 'full' stretches to parent height, 'wrap-content' fits content."
- },
- {
- "name": "preventScrollIntoView",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Prevents scrolling into view when focus trap is activated. Passed to FocusTrap."
- },
- {
- "name": "padded",
- "type": "boolean",
- "required": false,
- "default": "true",
- "description": "Sets if the popover has padding. Use false when content needs to be flush with boundaries."
- },
- {
- "name": "tabIndex",
- "type": "number",
- "required": false,
- "default": "0",
- "description": "Sets the tabindex. Use -1 to skip tabbing when a parent handles keyboard events."
- },
- {
- "name": "relative",
- "type": "string",
- "required": false,
- "default": "",
- "description": "@deprecated This property has no effect and will be removed in a future version.",
- "deprecated": true
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Controls whether the popover is open or closed. Used by parent components like AppHeaderMenu."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables the popover interaction. Used by parent components like Dropdown."
- },
- {
- "name": "voffset",
- "type": "any",
- "required": false,
- "default": "",
- "description": "Additional vertical offset added to the popover's position."
- },
- {
- "name": "hoffset",
- "type": "any",
- "required": false,
- "default": "",
- "description": "Additional horizontal offset added to the popover's position."
- },
- {
- "name": "focusborderwidth",
- "type": "any",
- "required": false,
- "default": "var(--goa-border-width-l)",
- "description": "Width of the focus outline border."
- },
- {
- "name": "borderradius",
- "type": "any",
- "required": false,
- "default": "var(--goa-border-radius-m)",
- "description": "Border radius of the popover window."
- },
- {
- "name": "filterablecontext",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Indicates the popover is used within a filterable context like a combobox."
- }
- ],
- "events": [
- {
- "name": "onOpen",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "events": [],
+ "slots": [
+ {
+ "name": "target",
+ "type": "ReactNode",
+ "description": "Sets the element used as the popover trigger.",
+ "required": true
+ }
]
},
- {
- "name": "_open",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onClose",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "angular": {
+ "props": [
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "320px",
+ "description": "Sets the maximum width of the popover container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "minWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the minimum width of the popover container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "padded",
+ "type": "boolean",
+ "required": false,
+ "default": "true",
+ "description": "Sets if the popover has padding. Use false when content needs to be flush with boundaries."
+ },
+ {
+ "name": "position",
+ "type": "GoabPopoverPosition",
+ "required": false,
+ "default": null,
+ "description": "Provides control to where the popover content is positioned."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "target",
+ "type": "TemplateRef",
+ "description": "Sets the element used as the popover trigger.",
+ "required": true
+ }
]
},
- {
- "name": "_close",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "webComponents": {
+ "props": [
+ {
+ "name": "borderradius",
+ "type": "string",
+ "required": false,
+ "default": "var(--goa-border-radius-m)",
+ "description": "Border radius of the popover window."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables the popover interaction. Used by parent components like Dropdown."
+ },
+ {
+ "name": "focusborderwidth",
+ "type": "string",
+ "required": false,
+ "default": "var(--goa-border-width-l)",
+ "description": "Width of the focus outline border."
+ },
+ {
+ "name": "height",
+ "type": "\"full\" | \"wrap-content\"",
+ "values": [
+ "full",
+ "wrap-content"
+ ],
+ "required": false,
+ "default": "wrap-content",
+ "description": "Controls the height behavior. 'full' stretches to parent height, 'wrap-content' fits content."
+ },
+ {
+ "name": "hoffset",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Additional horizontal offset added to the popover's position."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string | \"none\"",
+ "values": [
+ "string",
+ "none"
+ ],
+ "required": false,
+ "default": "320px",
+ "description": "Sets the maximum width of the popover container."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "minwidth",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the minimum width of the popover container."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Controls the open state of the popover programmatically. Used by Dropdown, AppHeaderMenu."
+ },
+ {
+ "name": "padded",
+ "type": "boolean",
+ "required": false,
+ "default": "true",
+ "description": "Sets if the popover has padding. Use false when content needs to be flush with boundaries."
+ },
+ {
+ "name": "position",
+ "type": "\"above\" | \"below\" | \"right\" | \"auto\"",
+ "values": [
+ "above",
+ "below",
+ "right",
+ "auto"
+ ],
+ "required": false,
+ "default": "auto",
+ "description": "Provides control to where the popover content is positioned."
+ },
+ {
+ "name": "tabindex",
+ "type": "number",
+ "required": false,
+ "default": "0",
+ "description": "Sets the tabindex. Use -1 to skip tabbing when a parent handles keyboard events."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "popover",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "voffset",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Additional vertical offset added to the popover's position."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a fixed width for the popover container."
+ }
+ ],
+ "events": [
+ {
+ "name": "_close",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_open",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "target",
+ "description": "Sets the element used as the popover trigger.",
+ "required": true
+ }
]
}
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "target",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/push-drawer.json b/docs/generated/component-apis/push-drawer.json
index 41d1a3e8bd..184d4a51f7 100644
--- a/docs/generated/component-apis/push-drawer.json
+++ b/docs/generated/component-apis/push-drawer.json
@@ -1,45 +1,170 @@
{
"componentSlug": "push-drawer",
"extractedFrom": "libs/web-components/src/components/push-drawer/PushDrawer.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": null,
- "description": ""
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string | ReactNode",
+ "values": [
+ "string",
+ "ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the heading text or custom heading content."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls the open/closed state of the push drawer."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "492px",
+ "description": "Sets the width of the push drawer panel."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Callback fired when the push drawer is closed.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "ReactNode",
+ "description": "Content rendered in the actions slot, typically action buttons.",
+ "required": false
+ }
+ ]
},
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": ""
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Sets the heading text or template for the push drawer."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the open state of the push drawer."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the width of the push drawer panel."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClose",
+ "type": "() => void",
+ "description": "Emits when the push drawer closes.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "type": "TemplateRef",
+ "description": "Content rendered in the actions slot, typically action buttons.",
+ "required": false
+ }
+ ]
},
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": ""
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "492px",
- "description": ""
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "actions",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": ""
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "492px",
+ "description": ""
+ }
+ ],
+ "events": [
+ {
+ "name": "_close",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "actions",
+ "description": "Content rendered in the actions slot, typically action buttons.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/radio-group.json b/docs/generated/component-apis/radio-group.json
index 7c04d97a54..024b1ebf0c 100644
--- a/docs/generated/component-apis/radio-group.json
+++ b/docs/generated/component-apis/radio-group.json
@@ -1,128 +1,343 @@
{
"componentSlug": "radio-group",
"extractedFrom": "libs/web-components/src/components/radio-group/RadioGroup.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The name for the radio group. Used for accessibility and change events."
- },
- {
- "name": "value",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The currently selected value in the radio group."
- },
- {
- "name": "orientation",
- "type": "\"vertical\" | \"horizontal\"",
- "typeLabel": "GoabRadioGroupOrientation",
- "values": [
- "vertical",
- "horizontal"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the radio group will be announced by screen readers."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables all radio items in the group."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state on all radio items in the group."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The identifier for the radio group element."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name for the radio group. Used for accessibility and change events."
+ },
+ {
+ "name": "orientation",
+ "type": "GoabRadioGroupOrientation",
+ "required": false,
+ "default": "vertical",
+ "description": "Sets the layout direction. 'vertical' stacks items, 'horizontal' places them in a row."
+ },
+ {
+ "name": "size",
+ "type": "GoabRadioGroupSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of all radio items. 'compact' reduces spacing for dense layouts."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The currently selected value in the radio group."
+ }
],
- "required": false,
- "default": "vertical",
- "description": "Sets the layout direction. 'vertical' stacks items, 'horizontal' places them in a row."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables all radio items in the group."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows an error state on all radio items in the group."
- },
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "typeLabel": "GoabRadioGroupSizeType",
- "values": [
- "default",
- "compact"
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabRadioGroupOnChangeDetail) => void",
+ "description": "Callback fired when the selected radio item changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "default",
- "description": "Sets the size of all radio items. 'compact' reduces spacing for dense layouts (V2 only)."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the radio group will be announced by screen readers."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the radio group will be announced by screen readers."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The name for the radio group. Used for accessibility and change events."
+ },
+ {
+ "name": "orientation",
+ "type": "GoabRadioGroupOrientation",
+ "required": false,
+ "default": null,
+ "description": "Sets the layout direction. 'vertical' stacks items, 'horizontal' places them in a row."
+ },
+ {
+ "name": "size",
+ "type": "GoabRadioGroupSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of all radio items. 'compact' reduces spacing for dense layouts (V2 only)."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The currently selected value in the radio group."
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabRadioGroupOnChangeDetail) => void",
+ "description": "Emits when the selected radio item changes. Emits the name, value, and event of the selected item.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the radio group will be announced by screen readers."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables all radio items in the group."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows an error state on all radio items in the group."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The name for the radio group. Used for accessibility and change events."
+ },
+ {
+ "name": "orientation",
+ "type": "\"vertical\" | \"horizontal\"",
+ "typeLabel": "GoabRadioGroupOrientation",
+ "values": [
+ "vertical",
+ "horizontal"
+ ],
+ "required": false,
+ "default": "vertical",
+ "description": "Sets the layout direction. 'vertical' stacks items, 'horizontal' places them in a row."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "typeLabel": "GoabRadioGroupSizeType",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Sets the size of all radio items. 'compact' reduces spacing for dense layouts (V2 only)."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The currently selected value in the radio group."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabRadioGroupVersionType",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; value: string; label: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/radio-item.json b/docs/generated/component-apis/radio-item.json
index 13e6d1b66c..a308213638 100644
--- a/docs/generated/component-apis/radio-item.json
+++ b/docs/generated/component-apis/radio-item.json
@@ -1,152 +1,376 @@
{
"componentSlug": "radio-item",
"extractedFrom": "libs/web-components/src/components/radio-item/RadioItem.svelte",
- "props": [
- {
- "name": "value",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The value of this radio option. Will be emitted when selected."
- },
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The name of the radio group. Inherited from the parent RadioGroup if not set."
- },
- {
- "name": "label",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The display label for this radio option. Falls back to value if not provided."
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Additional description text displayed below the label."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Disables this radio option. Also disabled if the parent RadioGroup is disabled."
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Shows an error state on this radio option."
- },
- {
- "name": "checked",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets this radio option as checked/selected."
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how this option will be announced by screen readers."
- },
- {
- "name": "revealarialabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text announced by screen readers when the reveal slot content is displayed."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "none",
- "description": "Sets the maximum width of this radio item."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onRevealChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how this option will be announced by screen readers."
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Reduces spacing for dense layouts."
+ },
+ {
+ "name": "description",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Additional description text displayed below the label."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables this radio option. Also disabled if the parent RadioGroup is disabled."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state on this radio option."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The display label for this radio option. Falls back to value if not provided."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of this radio item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The name of the radio group. Inherited from the parent RadioGroup if not set."
+ },
+ {
+ "name": "revealAriaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text announced by screen readers when the reveal content is displayed."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The value of this radio option. Will be emitted when selected."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "description",
+ "type": "ReactNode",
+ "description": "Additional description text displayed below the label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "type": "ReactNode",
+ "description": "Content revealed below the radio option when it is selected.",
+ "required": false
+ }
]
},
- {
- "name": "_revealChange",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how this option will be announced by screen readers."
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Enables compact layout for the radio item, reducing spacing for dense layouts."
+ },
+ {
+ "name": "description",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Additional description text displayed below the label."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Disables this radio option. Also disabled if the parent RadioGroup is disabled."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Shows an error state on this radio option."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The display label for this radio option. Falls back to value if not provided."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of this radio item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The name of the radio group. Inherited from the parent RadioGroup if not set."
+ },
+ {
+ "name": "revealAriaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text announced by screen readers when the reveal slot content is displayed."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The value of this radio option. Will be emitted when selected."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "description",
+ "type": "TemplateRef",
+ "description": "Additional description text displayed below the label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "type": "TemplateRef",
+ "description": "Content revealed below the radio option when it is selected.",
+ "required": false
+ }
]
},
- {
- "name": "onRadioItemChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how this option will be announced by screen readers."
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Additional description text displayed below the label."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Disables this radio option. Also disabled if the parent RadioGroup is disabled."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Shows an error state on this radio option."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The display label for this radio option. Falls back to value if not provided."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "none",
+ "description": "Sets the maximum width of this radio item."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The name of the radio group. Inherited from the parent RadioGroup if not set."
+ },
+ {
+ "name": "revealarialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text announced by screen readers when the reveal slot content is displayed."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The value of this radio option. Will be emitted when selected."
+ }
+ ],
+ "events": [
+ {
+ "name": "_radioItemChange",
+ "type": "CustomEvent<{ value: string; label: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "description",
+ "description": "Additional description text displayed below the label.",
+ "required": false
+ },
+ {
+ "name": "reveal",
+ "description": "Content revealed below the radio option when it is selected.",
+ "required": false
+ }
]
- },
- {
- "name": "_radioItemChange",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "description",
- "description": ""
- },
- {
- "name": "reveal",
- "description": ""
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/scrollable.json b/docs/generated/component-apis/scrollable.json
deleted file mode 100644
index 4c2302a60a..0000000000
--- a/docs/generated/component-apis/scrollable.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "componentSlug": "scrollable",
- "extractedFrom": "libs/web-components/src/components/scrollable/Scrollable.svelte",
- "props": [
- {
- "name": "direction",
- "type": "\"vertical\" | \"horizontal\"",
- "values": [
- "vertical",
- "horizontal"
- ],
- "required": false,
- "default": "vertical",
- "description": "The scroll direction."
- },
- {
- "name": "hpadding",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Horizontal padding applied to the scrollable content."
- },
- {
- "name": "vpadding",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Vertical padding applied to the scrollable content."
- },
- {
- "name": "maxHeight",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Maximum height of the scrollable container. Defaults to 50vh if not specified."
- },
- {
- "name": "offsetHeight",
- "type": "number",
- "required": true,
- "default": null,
- "description": "The visible height of the scrollable area. Read-only, set by the component."
- },
- {
- "name": "scrollHeight",
- "type": "number",
- "required": true,
- "default": null,
- "description": "The total scrollable height including overflow. Read-only, set by the component."
- }
- ],
- "events": [
- {
- "name": "onScroll",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_scroll",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/generated/component-apis/side-menu-group.json b/docs/generated/component-apis/side-menu-group.json
index ff25664e78..62c22fe5a7 100644
--- a/docs/generated/component-apis/side-menu-group.json
+++ b/docs/generated/component-apis/side-menu-group.json
@@ -1,84 +1,187 @@
{
"componentSlug": "side-menu-group",
"extractedFrom": "libs/web-components/src/components/side-menu-group/SideMenuGroup.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The heading text for the menu group."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The heading text for the menu group."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed alongside the heading."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "icon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed alongside the heading."
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The heading text for the menu group."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed alongside the heading."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onOpen",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_open",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The heading text for the menu group."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed alongside the heading."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/side-menu-heading.json b/docs/generated/component-apis/side-menu-heading.json
index b68372cac7..4b704adcaf 100644
--- a/docs/generated/component-apis/side-menu-heading.json
+++ b/docs/generated/component-apis/side-menu-heading.json
@@ -1,32 +1,98 @@
{
"componentSlug": "side-menu-heading",
"extractedFrom": "libs/web-components/src/components/side-menu-heading/SideMenuHeading.svelte",
- "props": [
- {
- "name": "icon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the heading text."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "type": "ReactNode",
+ "description": "Content rendered in the meta slot, displayed alongside the heading.",
+ "required": false
+ }
+ ]
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "section-heading",
- "description": "Sets a data-testid attribute for automated testing."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "angular": {
+ "props": [
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "type": "TemplateRef",
+ "description": "Content rendered in the meta slot, displayed alongside the heading.",
+ "required": false
+ }
+ ]
},
- {
- "name": "meta",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the heading text."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "section-heading",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "meta",
+ "description": "Content rendered in the meta slot, displayed alongside the heading.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/side-menu.json b/docs/generated/component-apis/side-menu.json
index c1abe89ed3..873b802c8c 100644
--- a/docs/generated/component-apis/side-menu.json
+++ b/docs/generated/component-apis/side-menu.json
@@ -1,20 +1,56 @@
{
"componentSlug": "side-menu",
"extractedFrom": "libs/web-components/src/components/side-menu/SideMenu.svelte",
- "props": [
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "angular": {
+ "props": [
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- }
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/skeleton.json b/docs/generated/component-apis/skeleton.json
index c65fc48a86..34cf431346 100644
--- a/docs/generated/component-apis/skeleton.json
+++ b/docs/generated/component-apis/skeleton.json
@@ -1,97 +1,239 @@
{
"componentSlug": "skeleton",
"extractedFrom": "libs/web-components/src/components/skeleton/Skeleton.svelte",
- "props": [
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "300px",
- "description": "Sets the maximum width. Currently only used in card skeleton type."
- },
- {
- "name": "size",
- "type": "\"1\" | \"2\" | \"3\" | \"4\"",
- "typeLabel": "GoabSkeletonSize",
- "values": [
- "1",
- "2",
- "3",
- "4"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "lineCount",
+ "type": "number",
+ "required": false,
+ "default": "3",
+ "description": "Used within components that contain multiple lines. Currently only used in card skeleton type."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "300px",
+ "description": "Sets the maximum width. Currently only used in card skeleton type."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabSkeletonSize",
+ "required": false,
+ "default": "1",
+ "description": "Size can affect either the height, width or both for different skeleton types."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabSkeletonType",
+ "required": true,
+ "default": null,
+ "description": "Sets the skeleton shape to represent your content."
+ }
],
- "required": false,
- "default": "1",
- "description": "Size can affect either the height, width or both for different skeleton types."
- },
- {
- "name": "linecount",
- "type": "number",
- "required": false,
- "default": "3",
- "description": "Used within components that contain multiple lines. Currently only used in card skeleton type"
+ "events": [],
+ "slots": []
},
- {
- "name": "type",
- "type": "\"image\" | \"text\" | \"title\" | \"text-small\" | \"avatar\" | \"header\" | \"paragraph\" | \"thumbnail\" | \"card\" | \"lines\" | \"profile\" | \"article\"",
- "typeLabel": "GoabSkeletonType",
- "values": [
- "image",
- "text",
- "title",
- "text-small",
- "avatar",
- "header",
- "paragraph",
- "thumbnail",
- "card",
- "lines",
- "profile",
- "article"
+ "angular": {
+ "props": [
+ {
+ "name": "lineCount",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Used within components that contain multiple lines. Currently only used in card skeleton type."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "300px",
+ "description": "Sets the maximum width. Currently only used in card skeleton type."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "size",
+ "type": "GoabSkeletonSize",
+ "required": false,
+ "default": null,
+ "description": "Size can affect either the height, width or both for different skeleton types."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabSkeletonType",
+ "required": true,
+ "default": null,
+ "description": "Sets the skeleton shape to represent your content."
+ }
],
- "required": true,
- "default": null,
- "description": "Sets the skeleton shape to represent your content."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
+ "events": [],
+ "slots": []
},
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
+ "webComponents": {
+ "props": [
+ {
+ "name": "linecount",
+ "type": "number",
+ "required": false,
+ "default": "3",
+ "description": "Used within components that contain multiple lines. Currently only used in card skeleton type"
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "300px",
+ "description": "Sets the maximum width. Currently only used in card skeleton type."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "\"1\" | \"2\" | \"3\" | \"4\"",
+ "typeLabel": "GoabSkeletonSize",
+ "values": [
+ "1",
+ "2",
+ "3",
+ "4"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Size can affect either the height, width or both for different skeleton types."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"image\" | \"text\" | \"title\" | \"text-small\" | \"avatar\" | \"header\" | \"paragraph\" | \"thumbnail\" | \"card\" | \"lines\" | \"profile\" | \"article\"",
+ "typeLabel": "GoabSkeletonType",
+ "values": [
+ "image",
+ "text",
+ "title",
+ "text-small",
+ "avatar",
+ "header",
+ "paragraph",
+ "thumbnail",
+ "card",
+ "lines",
+ "profile",
+ "article"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Sets the skeleton shape to represent your content."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/spacer.json b/docs/generated/component-apis/spacer.json
index 7c3620b442..50a3cecd05 100644
--- a/docs/generated/component-apis/spacer.json
+++ b/docs/generated/component-apis/spacer.json
@@ -1,31 +1,89 @@
{
"componentSlug": "spacer",
"extractedFrom": "libs/web-components/src/components/spacer/Spacer.svelte",
- "props": [
- {
- "name": "hspacing",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "none",
- "description": "Horizontal spacing."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "hSpacing",
+ "type": "GoabSpacerHorizontalSpacing",
+ "required": false,
+ "default": "none",
+ "description": "Horizontal spacing."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "vSpacing",
+ "type": "GoabSpacerVerticalSpacing",
+ "required": false,
+ "default": "none",
+ "description": "Vertical spacing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "vspacing",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": "none",
- "description": "Vertical spacing"
+ "angular": {
+ "props": [
+ {
+ "name": "hSpacing",
+ "type": "GoabSpacerHorizontalSpacing",
+ "required": false,
+ "default": null,
+ "description": "Horizontal spacing."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "vSpacing",
+ "type": "GoabSpacerVerticalSpacing",
+ "required": false,
+ "default": null,
+ "description": "Vertical spacing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "webComponents": {
+ "props": [
+ {
+ "name": "hspacing",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "none",
+ "description": "Horizontal spacing."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "vspacing",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": "none",
+ "description": "Vertical spacing"
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/spinner.json b/docs/generated/component-apis/spinner.json
index 61580a2564..57d58ec65e 100644
--- a/docs/generated/component-apis/spinner.json
+++ b/docs/generated/component-apis/spinner.json
@@ -1,42 +1,128 @@
{
"componentSlug": "spinner",
"extractedFrom": "libs/web-components/src/components/spinner/Spinner.svelte",
- "props": [
- {
- "name": "size",
- "type": "\"small\" | \"medium\" | \"large\" | \"xlarge\"",
- "values": [
- "small",
- "medium",
- "large",
- "xlarge"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "invert",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, inverts colors for use on dark backgrounds."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Progress value (0-100). When set to 0 or greater, shows a progress spinner instead of infinite."
+ },
+ {
+ "name": "size",
+ "type": "GoabSpinnerSize",
+ "required": true,
+ "default": null,
+ "description": "Sets the size of the spinner."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabSpinnerType",
+ "required": true,
+ "default": null,
+ "description": "Sets the spinner animation type."
+ }
],
- "required": true,
- "default": null,
- "description": "Sets the size of the spinner."
+ "events": [],
+ "slots": []
},
- {
- "name": "invert",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, inverts colors for use on dark backgrounds."
- },
- {
- "name": "progress",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "Progress value (0-100). When >= 0, shows a progress spinner instead of infinite."
+ "angular": {
+ "props": [
+ {
+ "name": "invert",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, inverts colors for use on dark backgrounds."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Progress value (0-100). When >= 0, shows a progress spinner instead of infinite."
+ },
+ {
+ "name": "size",
+ "type": "GoabSpinnerSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the size of the spinner."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "GoabSpinnerType",
+ "required": false,
+ "default": null,
+ "description": "Sets the spinner type."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "webComponents": {
+ "props": [
+ {
+ "name": "invert",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, inverts colors for use on dark backgrounds."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Progress value (0-100). When >= 0, shows a progress spinner instead of infinite."
+ },
+ {
+ "name": "size",
+ "type": "\"small\" | \"medium\" | \"large\" | \"xlarge\"",
+ "values": [
+ "small",
+ "medium",
+ "large",
+ "xlarge"
+ ],
+ "required": true,
+ "default": null,
+ "description": "Sets the size of the spinner."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/tab.json b/docs/generated/component-apis/tab.json
index e65c70fae6..cd6d2fe6ff 100644
--- a/docs/generated/component-apis/tab.json
+++ b/docs/generated/component-apis/tab.json
@@ -1,45 +1,122 @@
{
"componentSlug": "tab",
"extractedFrom": "libs/web-components/src/components/tab/Tab.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The text label for this tab. Can also use the heading slot for custom content."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, disables the tab so it cannot be selected."
+ },
+ {
+ "name": "heading",
+ "type": "string | React.ReactNode",
+ "values": [
+ "string",
+ "React.ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The text label for this tab. Can also pass React nodes for custom heading content."
+ },
+ {
+ "name": "slug",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "URL-friendly identifier for the tab, used for hash-based navigation."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "heading",
+ "type": "ReactNode",
+ "description": "The text label for this tab. Can also pass React nodes for custom heading content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Whether this tab is currently selected/active."
+ "angular": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, disables the tab."
+ },
+ {
+ "name": "heading",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The text label for this tab. Can also use the heading slot for custom content."
+ },
+ {
+ "name": "slug",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the URL slug for the tab."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "heading",
+ "type": "TemplateRef",
+ "description": "The text label for this tab. Can also pass React nodes for custom heading content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": ""
- },
- {
- "name": "slug",
- "type": "string",
- "required": false,
- "default": "",
- "description": ""
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "heading",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": ""
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The text label for this tab. Can also use the heading slot for custom content."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Whether this tab is currently selected/active."
+ },
+ {
+ "name": "slug",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "heading",
+ "description": "The text label for this tab. Can also pass React nodes for custom heading content.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/table-sort-header.json b/docs/generated/component-apis/table-sort-header.json
index dce0360354..3f7e75debe 100644
--- a/docs/generated/component-apis/table-sort-header.json
+++ b/docs/generated/component-apis/table-sort-header.json
@@ -1,41 +1,108 @@
{
"componentSlug": "table-sort-header",
"extractedFrom": "libs/web-components/src/components/table/TableSortHeader.svelte",
- "extractedAt": "2026-02-26T00:00:00.000Z",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Column name identifier for sorting."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "direction",
+ "type": "GoabTableSortDirection",
+ "required": false,
+ "default": "none",
+ "description": "Sets the sort direction indicator."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Column name identifier for sorting."
+ },
+ {
+ "name": "sortOrder",
+ "type": "GoabTableSortOrder",
+ "required": false,
+ "default": null,
+ "description": "Sort order number for multi-column sort display. Used for displaying priority numbers when multiple columns are sorted."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "direction",
- "type": "\"asc\" | \"desc\" | \"none\"",
- "typeLabel": "GoabTableSortDirection",
- "values": [
- "asc",
- "desc",
- "none"
+ "angular": {
+ "props": [
+ {
+ "name": "direction",
+ "type": "GoabTableSortDirection",
+ "required": false,
+ "default": "none",
+ "description": "Sets the sort direction indicator."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Column name identifier for sorting."
+ },
+ {
+ "name": "sortOrder",
+ "type": "GoabTableSortOrder",
+ "required": false,
+ "default": null,
+ "description": "Sort order number for multi-column sort display (\"1\", \"2\", etc)."
+ }
],
- "required": false,
- "default": "none",
- "description": "Sets the sort direction indicator."
+ "events": [],
+ "slots": []
},
- {
- "name": "sortOrder",
- "type": "number",
- "required": false,
- "default": 0,
- "description": "Sort order number for multi-column sort display (1, 2, etc)."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "direction",
+ "type": "\"asc\" | \"desc\" | \"none\"",
+ "values": [
+ "asc",
+ "desc",
+ "none"
+ ],
+ "required": false,
+ "default": "none",
+ "description": "Sets the sort direction indicator."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Column name identifier for sorting."
+ },
+ {
+ "name": "sort-order",
+ "type": "\"0\" | \"1\" | \"2\"",
+ "values": [
+ "0",
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "0",
+ "description": "Sort order number for multi-column sort display (\"1\", \"2\", etc)."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
-}
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/table.json b/docs/generated/component-apis/table.json
index 8b86d28407..f8e6aa3915 100644
--- a/docs/generated/component-apis/table.json
+++ b/docs/generated/component-apis/table.json
@@ -1,130 +1,290 @@
{
"componentSlug": "table",
"extractedFrom": "libs/web-components/src/components/table/Table.svelte",
- "props": [
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Width of the table. By default it will fit the enclosed content."
- },
- {
- "name": "stickyheader",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, the table header sticks to the top when scrolling."
- },
- {
- "name": "striped",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, alternates row background colors for improved readability."
- },
- {
- "name": "variant",
- "type": "\"normal\" | \"relaxed\"",
- "typeLabel": "GoabTableVariant",
- "values": [
- "normal",
- "relaxed"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "sortMode",
+ "type": "GoabTableSortMode",
+ "required": false,
+ "default": "single",
+ "description": "Sort mode: \"single\" allows one column, \"multi\" allows up to 2 columns."
+ },
+ {
+ "name": "striped",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, alternates row background colors for improved readability."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabTableVariant",
+ "required": false,
+ "default": "normal",
+ "description": "A relaxed variant of the table with more vertical padding for the cells."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Width of the table. By default it will fit the enclosed content."
+ }
],
- "required": false,
- "default": "normal",
- "description": "A relaxed variant of the table with more vertical padding for the cells."
- },
- {
- "name": "sortMode",
- "type": "\"single\" | \"multi\"",
- "typeLabel": "GoabTableSortMode",
- "values": [
- "single",
- "multi"
+ "events": [
+ {
+ "name": "onMultiSort",
+ "type": "(detail: GoabTableOnMultiSortDetail) => void",
+ "description": "Callback fired when multi-column sorting changes.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onSort",
+ "type": "(detail: GoabTableOnSortDetail) => void",
+ "description": "Callback fired when a single-column sort header is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "single",
- "description": "Sort mode: \"single\" allows one column, \"multi\" allows up to 2 columns."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
+ "slots": []
},
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onSort",
- "type": "(detail: GoabTableOnSortDetail) => void",
- "description": "Called when sort state changes in single-sort mode. Receives { sortBy, sortDir }.",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_sort",
- "type": "CustomEvent",
- "description": "Dispatched when sort state changes in single-sort mode. Detail contains { sortBy, sortDir }.",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onMultiSort",
- "type": "(detail: GoabTableOnMultiSortDetail) => void",
- "description": "Called when sort state changes in multi-sort mode. Receives { sorts: GoabTableSortEntry[] }.",
- "frameworks": [
- "react"
- ]
+ "angular": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "sortMode",
+ "type": "GoabTableSortMode",
+ "required": false,
+ "default": null,
+ "description": "Sets sort mode: \"single\" allows one column, \"multi\" allows up to 2 columns."
+ },
+ {
+ "name": "striped",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, alternates row background colors for improved readability."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabTableVariant",
+ "required": false,
+ "default": null,
+ "description": "Sets a relaxed variant of the table with more vertical padding for the cells."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Width of the table. By default it will fit the enclosed content."
+ }
+ ],
+ "events": [
+ {
+ "name": "onMultiSort",
+ "type": "(event: GoabTableOnMultiSortDetail) => void",
+ "description": "Emits when multi-column sorting changes. Emits an array of sort entries as GoabTableOnMultiSortDetail.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onSort",
+ "type": "(event: GoabTableOnSortDetail) => void",
+ "description": "Emits when a table column is sorted. Emits the sort column and direction as GoabTableOnSortDetail.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_multisort",
- "type": "CustomEvent",
- "description": "Dispatched when sort state changes in multi-sort mode. Detail contains { sorts: GoabTableSortEntry[] }.",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "sort-mode",
+ "type": "\"single\" | \"multi\"",
+ "typeLabel": "GoabTableSortMode",
+ "values": [
+ "single",
+ "multi"
+ ],
+ "required": false,
+ "default": "single",
+ "description": "Sort mode: \"single\" allows one column, \"multi\" allows up to 2 columns."
+ },
+ {
+ "name": "striped",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, alternates row background colors for improved readability."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"normal\" | \"relaxed\"",
+ "typeLabel": "GoabTableVariant",
+ "values": [
+ "normal",
+ "relaxed"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": "A relaxed variant of the table with more vertical padding for the cells."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "typeLabel": "GoabTableVersionType",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Width of the table. By default it will fit the enclosed content."
+ }
+ ],
+ "events": [
+ {
+ "name": "_multisort",
+ "type": "CustomEvent<{ sorts: { column: string; direction: \"asc\" | \"desc\" }[] }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_sort",
+ "type": "CustomEvent<{ sortBy: string; sortDir: number }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/tabs.json b/docs/generated/component-apis/tabs.json
index 41eecf4ab2..2d48620626 100644
--- a/docs/generated/component-apis/tabs.json
+++ b/docs/generated/component-apis/tabs.json
@@ -1,66 +1,179 @@
{
"componentSlug": "tabs",
"extractedFrom": "libs/web-components/src/components/tabs/Tabs.svelte",
- "props": [
- {
- "name": "initialtab",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "The initially active tab (1-based index). If not set, the first tab is active."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "variant",
- "type": "\"default\" | \"segmented\"",
- "values": [
- "default",
- "segmented"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "initialTab",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "The initially active tab (1-based index). If not set, the first tab is active."
+ },
+ {
+ "name": "navigation",
+ "type": "GoabTabsNavigation",
+ "required": false,
+ "default": "hash",
+ "description": "Controls URL navigation mode on tab change."
+ },
+ {
+ "name": "orientation",
+ "type": "GoabTabsOrientation",
+ "required": false,
+ "default": "auto",
+ "description": "Tab layout orientation. \"auto\" stacks vertically on mobile, \"horizontal\" keeps horizontal on all screen sizes."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabTabsVariant",
+ "required": false,
+ "default": "default",
+ "description": "Visual style variant. \"segmented\" shows pill-style tabs with animation."
+ }
],
- "required": false,
- "default": "default",
- "description": "Visual style variant. \"segmented\" shows pill-style tabs with animation."
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(detail: GoabTabsOnChangeDetail) => void",
+ "description": "Callback fired when the active tab changes.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "orientation",
- "type": "\"auto\" | \"horizontal\"",
- "values": [
- "auto",
- "horizontal"
+ "angular": {
+ "props": [
+ {
+ "name": "initialTab",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "The initially active tab (1-based index). If not set, the first tab is active."
+ },
+ {
+ "name": "navigation",
+ "type": "GoabTabsNavigation",
+ "required": false,
+ "default": null,
+ "description": "Sets the navigation mode for tab switching. \"hash\" updates the URL hash when switching tabs."
+ },
+ {
+ "name": "orientation",
+ "type": "GoabTabsOrientation",
+ "required": false,
+ "default": null,
+ "description": "Tab layout orientation. \"auto\" stacks vertically on mobile (default), \"horizontal\" keeps horizontal on all screen sizes."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "GoabTabsVariant",
+ "required": false,
+ "default": null,
+ "description": "Visual style variant. \"segmented\" shows pill-style tabs with animation."
+ }
],
- "required": false,
- "default": "auto",
- "description": "Tab layout orientation. \"auto\" stacks vertically on mobile, \"horizontal\" keeps horizontal on all screen sizes."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onChange",
+ "type": "(event: GoabTabsOnChangeDetail) => void",
+ "description": "Emits when the active tab changes. Emits the new tab index as GoabTabsOnChangeDetail.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "initialtab",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "The initially active tab (1-based index). If not set, the first tab is active."
+ },
+ {
+ "name": "navigation",
+ "type": "\"hash\" | \"none\"",
+ "values": [
+ "hash",
+ "none"
+ ],
+ "required": false,
+ "default": "hash",
+ "description": ""
+ },
+ {
+ "name": "orientation",
+ "type": "\"auto\" | \"horizontal\"",
+ "values": [
+ "auto",
+ "horizontal"
+ ],
+ "required": false,
+ "default": "auto",
+ "description": "Tab layout orientation. \"auto\" stacks vertically on mobile, \"horizontal\" keeps horizontal on all screen sizes."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "variant",
+ "type": "\"default\" | \"segmented\"",
+ "values": [
+ "default",
+ "segmented"
+ ],
+ "required": false,
+ "default": "default",
+ "description": "Visual style variant. \"segmented\" shows pill-style tabs with animation."
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ }
+ ],
+ "events": [
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ tab: number }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/temporary-notification.json b/docs/generated/component-apis/temporary-notification.json
index 0b8b15252d..c186f7fa79 100644
--- a/docs/generated/component-apis/temporary-notification.json
+++ b/docs/generated/component-apis/temporary-notification.json
@@ -1,68 +1,126 @@
{
"componentSlug": "temporary-notification",
"extractedFrom": "libs/web-components/src/components/temporary-notification/TemporaryNotification.svelte",
- "props": [
- {
- "name": "message",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The notification message text to display."
- },
- {
- "name": "type",
- "type": "\"basic\" | \"success\" | \"failure\" | \"indeterminate\" | \"progress\"",
- "values": [
- "basic",
- "success",
- "failure",
- "indeterminate",
- "progress"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "horizontalPosition",
+ "type": "SnackbarHorizontalPosition",
+ "required": false,
+ "default": "center",
+ "description": "Horizontal position of the notification container."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "verticalPosition",
+ "type": "SnackbarVerticalPosition",
+ "required": false,
+ "default": "bottom",
+ "description": "Vertical position of the notification container."
+ }
],
- "required": false,
- "default": "basic",
- "description": "The notification type which determines the visual style and icon."
- },
- {
- "name": "progress",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "Progress value from 0-100. Use -1 to hide the progress bar. Only applies when type is \"progress\"."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
+ "events": [],
+ "slots": []
},
- {
- "name": "actionText",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text for the optional action button. When provided, displays a clickable link button."
- },
- {
- "name": "visible",
- "type": "boolean",
- "required": false,
- "default": "true",
- "description": "Controls whether the notification is visible."
+ "angular": {
+ "props": [
+ {
+ "name": "horizontalPosition",
+ "type": "SnackbarHorizontalPosition",
+ "required": false,
+ "default": "center",
+ "description": "Horizontal position of the notification container."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "verticalPosition",
+ "type": "SnackbarVerticalPosition",
+ "required": false,
+ "default": "bottom",
+ "description": "Vertical position of the notification container."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "animationDirection",
- "type": "\"up\" | \"down\"",
- "values": [
- "up",
- "down"
+ "webComponents": {
+ "props": [
+ {
+ "name": "action-text",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text for the optional action button. When provided, displays a clickable link button."
+ },
+ {
+ "name": "animation-direction",
+ "type": "\"up\" | \"down\"",
+ "values": [
+ "up",
+ "down"
+ ],
+ "required": false,
+ "default": "down",
+ "description": "Direction the notification animates from when appearing or disappearing."
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The notification message text to display."
+ },
+ {
+ "name": "progress",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Progress value from 0-100. Use -1 to hide the progress bar. Only applies when type is \"progress\"."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "type",
+ "type": "\"basic\" | \"success\" | \"failure\" | \"indeterminate\" | \"progress\"",
+ "values": [
+ "basic",
+ "success",
+ "failure",
+ "indeterminate",
+ "progress"
+ ],
+ "required": false,
+ "default": "basic",
+ "description": "The notification type which determines the visual style and icon."
+ },
+ {
+ "name": "visible",
+ "type": "boolean",
+ "required": false,
+ "default": "true",
+ "description": "Controls whether the notification is visible."
+ }
],
- "required": false,
- "default": "down",
- "description": "Direction the notification animates from when appearing or disappearing."
+ "events": [],
+ "slots": []
}
- ],
- "events": [],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/text-area.json b/docs/generated/component-apis/text-area.json
index d3c636bb97..6951478989 100644
--- a/docs/generated/component-apis/text-area.json
+++ b/docs/generated/component-apis/text-area.json
@@ -1,213 +1,535 @@
{
"componentSlug": "text-area",
"extractedFrom": "libs/web-components/src/components/text-area/TextArea.svelte",
- "props": [
- {
- "name": "name",
- "type": "string",
- "required": true,
- "default": null,
- "description": "Name of the input value that is received in the _change event."
- },
- {
- "name": "value",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Bound to value"
- },
- {
- "name": "placeholder",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Text displayed within the input when no value is set."
- },
- {
- "name": "rows",
- "type": "number",
- "required": false,
- "default": "3",
- "description": "Set the number of rows."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "width",
- "type": "string",
- "required": false,
- "default": "100%",
- "description": "Width of the text area."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "60ch",
- "description": "Maximum width of the text area"
- },
- {
- "name": "error",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the input to an error state"
- },
- {
- "name": "readOnly",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the input to a read only state."
- },
- {
- "name": "disabled",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Sets the input to a disabled state. Use [attr.disabled] with [formControl]"
- },
- {
- "name": "ariaLabel",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
- },
- {
- "name": "countby",
- "type": "\"character\" | \"word\" | \"\"",
- "values": [
- "character",
- "word"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Specifies the autocomplete attribute for the textarea input."
+ },
+ {
+ "name": "countBy",
+ "type": "GoabTextAreaCountBy",
+ "required": false,
+ "default": null,
+ "description": "Counting interval for characters or words, specifying whether to count every character or word."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input to a disabled state."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input to an error state."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute on the textarea element."
+ },
+ {
+ "name": "maxCount",
+ "type": "number",
+ "required": false,
+ "default": null,
+ "description": "Maximum number of characters or words allowed."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": "60ch",
+ "description": "Sets the maximum width of the text area."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Name of the input value that is received in the change event."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text displayed within the textarea when no value is set."
+ },
+ {
+ "name": "readOnly",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input to a read only state."
+ },
+ {
+ "name": "rows",
+ "type": "number",
+ "required": false,
+ "default": "3",
+ "description": "Sets the number of visible text rows."
+ },
+ {
+ "name": "size",
+ "type": "GoabTextAreaSize",
+ "required": false,
+ "default": null,
+ "description": "Sets the visual size variant of the text area."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Bound to the current value of the textarea."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Sets the width of the text area."
+ }
],
- "required": false,
- "default": "",
- "description": "Counting interval for characters or words, specifying whether to count every character or word."
- },
- {
- "name": "maxCount",
- "type": "number",
- "required": false,
- "default": "-1",
- "description": "Maximum number of characters or words allowed"
- },
- {
- "name": "autoComplete",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Specifies the autocomplete attribute for the textarea input."
- },
- {
- "name": "version",
- "type": "\"1\" | \"2\"",
- "values": [
- "1",
- "2"
+ "events": [
+ {
+ "name": "onBlur",
+ "type": "(event: GoabTextAreaOnBlurDetail) => void",
+ "description": "Callback fired when the textarea loses focus.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onChange",
+ "type": "(event: GoabTextAreaOnChangeDetail) => void",
+ "description": "Callback fired when the value of the textarea changes.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onKeyPress",
+ "type": "(event: GoabTextAreaOnKeyPressDetail) => void",
+ "description": "Callback fired when a key is pressed within the textarea.",
+ "frameworks": [
+ "react"
+ ]
+ }
],
- "required": false,
- "default": "1",
- "description": ""
+ "slots": []
},
- {
- "name": "size",
- "type": "\"default\" | \"compact\"",
- "values": [
- "default",
- "compact"
+ "angular": {
+ "props": [
+ {
+ "name": "ariaLabel",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "autoComplete",
+ "type": "string",
+ "required": false,
+ "default": "on",
+ "description": "Specifies the autocomplete attribute for the textarea input."
+ },
+ {
+ "name": "countBy",
+ "type": "GoabTextAreaCountBy",
+ "required": false,
+ "default": "",
+ "description": "Counting interval for characters or words, specifying whether to count every character or word."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the disabled state for the control."
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the error state for the control."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute of the underlying web component."
+ },
+ {
+ "name": "maxCount",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Maximum number of characters or words allowed."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Maximum width of the text area."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Name of the input value that is received in the _change event."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Text displayed within the input when no value is set."
+ },
+ {
+ "name": "readOnly",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Sets the input to a read only state."
+ },
+ {
+ "name": "rows",
+ "type": "number",
+ "required": false,
+ "default": "3",
+ "description": "Set the number of rows."
+ },
+ {
+ "name": "size",
+ "type": "GoabTextAreaSize",
+ "required": false,
+ "default": "default",
+ "description": "Sets the size variant of the textarea."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the control value used by Angular forms and one-way binding."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Width of the text area."
+ }
],
- "required": false,
- "default": "default",
- "description": ""
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [
- {
- "name": "onChange",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_change",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onBlur",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
- },
- {
- "name": "_blur",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- },
- {
- "name": "onKeyPress",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
- ]
+ "events": [
+ {
+ "name": "onBlur",
+ "type": "(event: GoabTextAreaOnBlurDetail) => void",
+ "description": "Emits when the textarea loses focus. Emits the name and current value.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onChange",
+ "type": "(event: GoabTextAreaOnChangeDetail) => void",
+ "description": "Emits when the textarea value changes. Emits the name and new value.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onKeyPress",
+ "type": "(event: GoabTextAreaOnKeyPressDetail) => void",
+ "description": "Emits when a key is pressed in the textarea. Emits the name, value, and key.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
},
- {
- "name": "_keyPress",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
+ "webComponents": {
+ "props": [
+ {
+ "name": "arialabel",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Defines how the text will be translated for the screen reader. If not specified it will fall back to the name."
+ },
+ {
+ "name": "autocomplete",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Specifies the autocomplete attribute for the textarea input."
+ },
+ {
+ "name": "countby",
+ "type": "\"character\" | \"word\" | \"\"",
+ "values": [
+ "character",
+ "word"
+ ],
+ "required": false,
+ "default": "",
+ "description": "Counting interval for characters or words, specifying whether to count every character or word."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the input to a disabled state. Use [attr.disabled] with [formControl]"
+ },
+ {
+ "name": "error",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the input to an error state"
+ },
+ {
+ "name": "maxcount",
+ "type": "number",
+ "required": false,
+ "default": "-1",
+ "description": "Maximum number of characters or words allowed"
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "60ch",
+ "description": "Maximum width of the text area"
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "Name of the input value that is received in the _change event."
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Text displayed within the input when no value is set."
+ },
+ {
+ "name": "readonly",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Sets the input to a read only state."
+ },
+ {
+ "name": "rows",
+ "type": "number",
+ "required": false,
+ "default": "3",
+ "description": "Set the number of rows."
+ },
+ {
+ "name": "size",
+ "type": "\"default\" | \"compact\"",
+ "values": [
+ "default",
+ "compact"
+ ],
+ "required": false,
+ "default": "default",
+ "description": ""
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "value",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Bound to value"
+ },
+ {
+ "name": "version",
+ "type": "\"1\" | \"2\"",
+ "values": [
+ "1",
+ "2"
+ ],
+ "required": false,
+ "default": "1",
+ "description": "Design system version for styling."
+ },
+ {
+ "name": "width",
+ "type": "string",
+ "required": false,
+ "default": "100%",
+ "description": "Width of the text area."
+ }
+ ],
+ "events": [
+ {
+ "name": "_blur",
+ "type": "CustomEvent<{ name: string; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_change",
+ "type": "CustomEvent<{ name: string; value: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_keyPress",
+ "type": "CustomEvent<{ name: string; value: string; key: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
}
- ],
- "slots": []
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/text.json b/docs/generated/component-apis/text.json
index 91b7c66f12..7437d8aff7 100644
--- a/docs/generated/component-apis/text.json
+++ b/docs/generated/component-apis/text.json
@@ -1,103 +1,248 @@
{
"componentSlug": "text",
"extractedFrom": "libs/web-components/src/components/text/Text.svelte",
- "props": [
- {
- "name": "as",
- "type": "\"span\" | \"div\" | \"p\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\"",
- "values": [
- "span",
- "div",
- "p",
- "h1",
- "h2",
- "h3",
- "h4",
- "h5"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "color",
+ "type": "GoabTextColor",
+ "required": false,
+ "default": "primary",
+ "description": "Sets the text colour."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute on the element."
+ },
+ {
+ "name": "maxWidth",
+ "type": "GoabTextMaxWidth",
+ "required": false,
+ "default": "65ch",
+ "description": "Sets the max width."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "size",
+ "type": "GoabTextSize",
+ "required": false,
+ "default": null,
+ "description": "Overrides the text size."
+ },
+ {
+ "name": "tag",
+ "type": "GoabTextTextElement | GoabTextHeadingElement",
+ "values": [
+ "GoabTextTextElement",
+ "GoabTextHeadingElement"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The HTML element to render. Use semantic elements like 'h1'-'h6' for headings."
+ }
],
- "required": false,
- "default": "div",
- "description": "The HTML element to render. Use semantic elements like 'h1'-'h6' for headings."
+ "events": [],
+ "slots": []
},
- {
- "name": "maxWidth",
- "type": "string | \"none\"",
- "values": [
- "string",
- "none"
+ "angular": {
+ "props": [
+ {
+ "name": "color",
+ "type": "GoabTextColor",
+ "required": false,
+ "default": null,
+ "description": "Sets the text colour."
+ },
+ {
+ "name": "id",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the id attribute on the host element."
+ },
+ {
+ "name": "maxWidth",
+ "type": "GoabTextMaxWidth",
+ "required": false,
+ "default": null,
+ "description": "Sets the max width."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "GoabTextSize",
+ "required": false,
+ "default": null,
+ "description": "Overrides the text size."
+ },
+ {
+ "name": "tag",
+ "type": "GoabTextTextElement | GoabTextHeadingElement",
+ "values": [
+ "GoabTextTextElement",
+ "GoabTextHeadingElement"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The HTML element to render. Use semantic elements like 'h1'-'h6' for headings."
+ }
],
- "required": false,
- "default": "65ch",
- "description": "Sets the max width."
+ "events": [],
+ "slots": []
},
- {
- "name": "size",
- "type": "\"heading-xl\" | \"heading-l\" | \"heading-m\" | \"heading-s\" | \"heading-xs\" | \"heading-2xs\" | \"body-l\" | \"body-m\" | \"body-s\" | \"body-xs\"",
- "values": [
- "heading-xl",
- "heading-l",
- "heading-m",
- "heading-s",
- "heading-xs",
- "heading-2xs",
- "body-l",
- "body-m",
- "body-s",
- "body-xs"
+ "webComponents": {
+ "props": [
+ {
+ "name": "as",
+ "type": "\"span\" | \"div\" | \"p\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\"",
+ "values": [
+ "span",
+ "div",
+ "p",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5"
+ ],
+ "required": false,
+ "default": "div",
+ "description": "The HTML element to render. Use semantic elements like 'h1'-'h6' for headings."
+ },
+ {
+ "name": "color",
+ "type": "\"primary\" | \"secondary\"",
+ "values": [
+ "primary",
+ "secondary"
+ ],
+ "required": false,
+ "default": "primary",
+ "description": "Sets the text colour."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string | \"none\"",
+ "values": [
+ "string",
+ "none"
+ ],
+ "required": false,
+ "default": "65ch",
+ "description": "Sets the max width."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "size",
+ "type": "\"heading-xl\" | \"heading-l\" | \"heading-m\" | \"heading-s\" | \"heading-xs\" | \"heading-2xs\" | \"body-l\" | \"body-m\" | \"body-s\" | \"body-xs\"",
+ "values": [
+ "heading-xl",
+ "heading-l",
+ "heading-m",
+ "heading-s",
+ "heading-xs",
+ "heading-2xs",
+ "body-l",
+ "body-m",
+ "body-s",
+ "body-xs"
+ ],
+ "required": false,
+ "default": null,
+ "description": "Overrides the text size."
+ }
],
- "required": false,
- "default": null,
- "description": "Overrides the text size."
- },
- {
- "name": "color",
- "type": "\"primary\" | \"secondary\"",
- "values": [
- "primary",
- "secondary"
- ],
- "required": false,
- "default": "primary",
- "description": "Sets the text colour."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
- },
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "events": [],
+ "slots": []
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/tooltip.json b/docs/generated/component-apis/tooltip.json
index 9464d6c3d7..2cded97112 100644
--- a/docs/generated/component-apis/tooltip.json
+++ b/docs/generated/component-apis/tooltip.json
@@ -1,97 +1,258 @@
{
"componentSlug": "tooltip",
"extractedFrom": "libs/web-components/src/components/tooltip/Tooltip.svelte",
- "props": [
- {
- "name": "content",
- "type": "any",
- "required": false,
- "default": "",
- "description": "The content of the tooltip."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "position",
- "type": "\"top\" | \"bottom\" | \"left\" | \"right\"",
- "typeLabel": "GoabTooltipPosition",
- "values": [
- "top",
- "bottom",
- "left",
- "right"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "content",
+ "type": "string | ReactNode",
+ "values": [
+ "string",
+ "ReactNode"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The content of the tooltip. Accepts plain text or rich content."
+ },
+ {
+ "name": "hAlign",
+ "type": "GoabTooltipHorizontalAlignment",
+ "required": false,
+ "default": "center",
+ "description": "Horizontal alignment of the tooltip relative to the child element."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the tooltip. Must use 'px' unit."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": ""
+ },
+ {
+ "name": "position",
+ "type": "GoabTooltipPosition",
+ "required": false,
+ "default": "top",
+ "description": "Position of the tooltip with respect to the child element."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "top",
- "description": "Position with respect to the child element."
+ "events": [],
+ "slots": [
+ {
+ "name": "content",
+ "type": "ReactNode",
+ "description": "The content of the tooltip. Accepts plain text or rich content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "halign",
- "type": "\"left\" | \"right\" | \"center\"",
- "typeLabel": "GoabTooltipAlignment",
- "values": [
- "left",
- "right",
- "center"
+ "angular": {
+ "props": [
+ {
+ "name": "content",
+ "type": "string | TemplateRef",
+ "values": [
+ "string",
+ "TemplateRef"
+ ],
+ "required": false,
+ "default": null,
+ "description": "The content of the tooltip."
+ },
+ {
+ "name": "hAlign",
+ "type": "GoabTooltipHorizontalAlignment",
+ "required": false,
+ "default": "center",
+ "description": "Horizontal alignment to the child element."
+ },
+ {
+ "name": "maxWidth",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the maximum width of the tooltip. Must use 'px' unit."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the bottom margin spacing token."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the left margin spacing token."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the right margin spacing token."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Sets the top margin spacing token."
+ },
+ {
+ "name": "position",
+ "type": "GoabTooltipPosition",
+ "required": false,
+ "default": "top",
+ "description": "Position with respect to the child element."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets the data-testid attribute for automated testing."
+ }
],
- "required": false,
- "default": "center",
- "description": "Horizontal alignment to the child element."
- },
- {
- "name": "maxWidth",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets the maximum width of the tooltip. Must use 'px' unit."
- },
- {
- "name": "mt",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Top margin."
- },
- {
- "name": "mr",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Right margin."
+ "events": [],
+ "slots": [
+ {
+ "name": "content",
+ "type": "TemplateRef",
+ "description": "The content of the tooltip. Accepts plain text or rich content.",
+ "required": false
+ }
+ ]
},
- {
- "name": "mb",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Bottom margin."
- },
- {
- "name": "ml",
- "type": "Spacing",
- "typeLabel": "Spacing",
- "required": false,
- "default": null,
- "description": "Left margin."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
- },
- {
- "name": "content",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "content",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The content of the tooltip."
+ },
+ {
+ "name": "halign",
+ "type": "\"left\" | \"right\" | \"center\"",
+ "typeLabel": "GoabTooltipAlignment",
+ "values": [
+ "left",
+ "right",
+ "center"
+ ],
+ "required": false,
+ "default": "center",
+ "description": "Horizontal alignment to the child element."
+ },
+ {
+ "name": "maxwidth",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets the maximum width of the tooltip. Must use 'px' unit."
+ },
+ {
+ "name": "mb",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Bottom margin."
+ },
+ {
+ "name": "ml",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Left margin."
+ },
+ {
+ "name": "mr",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Right margin."
+ },
+ {
+ "name": "mt",
+ "type": "Spacing",
+ "typeLabel": "Spacing",
+ "required": false,
+ "default": null,
+ "description": "Top margin."
+ },
+ {
+ "name": "position",
+ "type": "\"top\" | \"bottom\" | \"left\" | \"right\"",
+ "typeLabel": "GoabTooltipPosition",
+ "values": [
+ "top",
+ "bottom",
+ "left",
+ "right"
+ ],
+ "required": false,
+ "default": "top",
+ "description": "Position with respect to the child element."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "content",
+ "description": "The content of the tooltip. Accepts plain text or rich content.",
+ "required": false
+ }
+ ]
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/work-side-menu-group.json b/docs/generated/component-apis/work-side-menu-group.json
index 3ee4a0cea6..84d7de7aea 100644
--- a/docs/generated/component-apis/work-side-menu-group.json
+++ b/docs/generated/component-apis/work-side-menu-group.json
@@ -1,42 +1,109 @@
{
"componentSlug": "work-side-menu-group",
"extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenuGroup.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The text displayed in the group heading."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text displayed in the group heading."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the group label. When omitted, no icon is rendered and no space is reserved."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Whether the group is open."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "icon",
- "type": "GoAIconType",
- "typeLabel": "GoAIconType",
- "required": false,
- "default": null,
- "description": "Icon displayed before the group label. When omitted, no icon is rendered and no space is reserved."
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text displayed in the group heading."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the group label. When omitted, no icon is rendered and no space is reserved."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Whether the group is open."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
},
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "Whether the group is open."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "default",
- "description": ""
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text displayed in the group heading."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the group label. When omitted, no icon is rendered and no space is reserved."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Whether the group is open."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [],
+ "slots": []
}
- ]
-}
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/work-side-menu-item.json b/docs/generated/component-apis/work-side-menu-item.json
index 302ecd2f0e..c133921506 100644
--- a/docs/generated/component-apis/work-side-menu-item.json
+++ b/docs/generated/component-apis/work-side-menu-item.json
@@ -1,70 +1,188 @@
{
"componentSlug": "work-side-menu-item",
"extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenuItem.svelte",
- "props": [
- {
- "name": "label",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The text label displayed for the menu item."
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "current",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, indicates this is the currently active menu item."
+ },
+ {
+ "name": "divider",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, displays a divider line above this menu item."
+ },
+ {
+ "name": "icon",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the menu item label."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text label displayed for the menu item."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The URL the menu item links to. When absent, renders as a button instead of a link."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "popoverContent",
+ "type": "ReactNode",
+ "description": "Content rendered inside the popover panel attached to this menu item.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "type": "ReactNode",
+ "description": "Content rendered after the label in the trailing area of the menu item.",
+ "required": false
+ }
+ ]
},
- {
- "name": "url",
- "type": "string",
- "required": false,
- "default": "",
- "description": "The URL the menu item links to. Optional — when absent, renders as a button instead of a link."
+ "angular": {
+ "props": [
+ {
+ "name": "current",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, indicates this is the currently active menu item."
+ },
+ {
+ "name": "divider",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "When true, displays a divider line above this menu item."
+ },
+ {
+ "name": "icon",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the menu item label."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text label displayed for the menu item."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The URL the menu item links to. Optional — when absent, renders as a button instead of a link."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "popoverContent",
+ "type": "TemplateRef",
+ "description": "Content rendered inside the popover panel attached to this menu item.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "type": "TemplateRef",
+ "description": "Content rendered after the label in the trailing area of the menu item.",
+ "required": false
+ }
+ ]
},
- {
- "name": "badge",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Badge text displayed alongside the menu item (e.g., notification count)."
- },
- {
- "name": "current",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, indicates this is the currently active menu item."
- },
- {
- "name": "divider",
- "type": "boolean",
- "required": false,
- "default": "false",
- "description": "When true, displays a divider line above this menu item."
- },
- {
- "name": "icon",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Icon displayed before the menu item label."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "type",
- "type": "\"normal\" | \"emergency\" | \"success\"",
- "values": ["normal", "emergency", "success"],
- "required": false,
- "default": "normal",
- "description": "Sets the visual style of the badge. Use \"emergency\" for urgent items, \"success\" for positive status."
- }
- ],
- "events": [],
- "slots": [
- {
- "name": "popoverContent",
- "description": "Content displayed in a popover panel beside the menu item."
+ "webComponents": {
+ "props": [
+ {
+ "name": "current",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, indicates this is the currently active menu item."
+ },
+ {
+ "name": "divider",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "When true, displays a divider line above this menu item."
+ },
+ {
+ "name": "icon",
+ "type": "GoabIconType",
+ "typeLabel": "GoabIconType",
+ "required": false,
+ "default": null,
+ "description": "Icon displayed before the menu item label."
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The text label displayed for the menu item."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "The URL the menu item links to. Optional — when absent, renders as a button instead of a link."
+ }
+ ],
+ "events": [],
+ "slots": [
+ {
+ "name": "popoverContent",
+ "description": "Content rendered inside the popover panel attached to this menu item.",
+ "required": false
+ },
+ {
+ "name": "trailingContent",
+ "description": "Content rendered after the label in the trailing area of the menu item.",
+ "required": false
+ }
+ ]
}
- ]
-}
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/work-side-menu.json b/docs/generated/component-apis/work-side-menu.json
index 1c2c51e232..23236db287 100644
--- a/docs/generated/component-apis/work-side-menu.json
+++ b/docs/generated/component-apis/work-side-menu.json
@@ -1,96 +1,255 @@
{
"componentSlug": "work-side-menu",
"extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenu.svelte",
- "props": [
- {
- "name": "heading",
- "type": "string",
- "required": true,
- "default": null,
- "description": "The application name displayed in the header."
- },
- {
- "name": "url",
- "type": "string",
- "required": true,
- "default": null,
- "description": "URL for the header link. Clicking the logo/heading navigates to this URL."
- },
- {
- "name": "open",
- "type": "any",
- "required": false,
- "default": "false",
- "description": "Controls whether the side menu is expanded or collapsed."
- },
- {
- "name": "testId",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Sets a data-testid attribute for automated testing."
- },
- {
- "name": "userName",
- "type": "string",
- "required": false,
- "default": "",
- "description": "User's name displayed in the profile section."
- },
- {
- "name": "userSecondaryText",
- "type": "string",
- "required": false,
- "default": "",
- "description": "Secondary text displayed below the user's name, such as role or email."
- }
- ],
- "events": [
- {
- "name": "onUpdate",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The application name displayed in the header."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls whether the side menu is expanded or collapsed."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "URL for the header link. Clicking the logo/heading navigates to this URL."
+ },
+ {
+ "name": "userName",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "User's name displayed in the profile section."
+ },
+ {
+ "name": "userSecondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Secondary text displayed below the user's name, such as role or email."
+ }
+ ],
+ "events": [
+ {
+ "name": "onNavigate",
+ "type": "(path: string) => void",
+ "description": "Callback fired when a menu item is navigated, providing the target URL path.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onToggle",
+ "type": "() => void",
+ "description": "Callback fired when the side menu is toggled open or closed.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "accountContent",
+ "type": "ReactNode",
+ "description": "Content rendered in the account/profile slot.",
+ "required": false
+ },
+ {
+ "name": "primaryContent",
+ "type": "ReactNode",
+ "description": "Content rendered in the primary navigation slot.",
+ "required": false
+ },
+ {
+ "name": "secondaryContent",
+ "type": "ReactNode",
+ "description": "Content rendered in the secondary navigation slot.",
+ "required": false
+ }
]
},
- {
- "name": "_update",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
+ "angular": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The application name displayed in the header."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": null,
+ "description": "Controls whether the side menu is expanded or collapsed."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "URL for the header link. Clicking the logo/heading navigates to this URL."
+ },
+ {
+ "name": "userName",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "User's name displayed in the profile section."
+ },
+ {
+ "name": "userSecondaryText",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Secondary text displayed below the user's name, such as role or email."
+ }
+ ],
+ "events": [
+ {
+ "name": "onNavigate",
+ "type": "(event: string) => void",
+ "description": "Emits when a navigation link is clicked. Emits the URL as a string.",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onToggle",
+ "type": "() => void",
+ "description": "Emits when the side menu is toggled open or closed.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "accountContent",
+ "type": "TemplateRef",
+ "description": "Content rendered in the account/profile slot.",
+ "required": false
+ },
+ {
+ "name": "primaryContent",
+ "type": "TemplateRef",
+ "description": "Content rendered in the primary navigation slot.",
+ "required": false
+ },
+ {
+ "name": "secondaryContent",
+ "type": "TemplateRef",
+ "description": "Content rendered in the secondary navigation slot.",
+ "required": false
+ }
]
},
- {
- "name": "onToggle",
- "type": "(event: Event) => void",
- "description": "",
- "frameworks": [
- "react"
+ "webComponents": {
+ "props": [
+ {
+ "name": "heading",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The application name displayed in the header."
+ },
+ {
+ "name": "open",
+ "type": "boolean",
+ "required": false,
+ "default": "false",
+ "description": "Controls whether the side menu is expanded or collapsed."
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "URL for the header link. Clicking the logo/heading navigates to this URL."
+ },
+ {
+ "name": "user-name",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "User's name displayed in the profile section."
+ },
+ {
+ "name": "user-secondary-text",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": "Secondary text displayed below the user's name, such as role or email."
+ }
+ ],
+ "events": [
+ {
+ "name": "_navigate",
+ "type": "CustomEvent<{ url: string }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_toggle",
+ "type": "CustomEvent<{ open: boolean }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": [
+ {
+ "name": "account",
+ "description": "Content rendered in the account/profile slot.",
+ "required": false
+ },
+ {
+ "name": "primary",
+ "description": "Content rendered in the primary navigation slot.",
+ "required": false
+ },
+ {
+ "name": "secondary",
+ "description": "Content rendered in the secondary navigation slot.",
+ "required": false
+ }
]
- },
- {
- "name": "_toggle",
- "type": "CustomEvent",
- "description": "",
- "frameworks": [
- "angular"
- ]
- }
- ],
- "slots": [
- {
- "name": "primary",
- "description": ""
- },
- {
- "name": "secondary",
- "description": ""
- },
- {
- "name": "account",
- "description": ""
}
- ]
+ }
}
\ No newline at end of file
diff --git a/docs/generated/component-apis/work-side-notification-item.json b/docs/generated/component-apis/work-side-notification-item.json
new file mode 100644
index 0000000000..55f9b58184
--- /dev/null
+++ b/docs/generated/component-apis/work-side-notification-item.json
@@ -0,0 +1,224 @@
+{
+ "componentSlug": "work-side-notification-item",
+ "extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideNotificationItem.svelte",
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "description",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The body text content of the notification card."
+ },
+ {
+ "name": "priority",
+ "type": "GoabWorkSideNotificationPriority",
+ "required": false,
+ "default": "normal",
+ "description": "Sets the urgency level of the notification."
+ },
+ {
+ "name": "readStatus",
+ "type": "GoabWorkSideNotificationReadStatus",
+ "required": false,
+ "default": "unread",
+ "description": "Indicates whether the notification has been read or is unread."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "timestamp",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "ISO timestamp string representing when the notification occurred."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Title text displayed in the notification card header."
+ },
+ {
+ "name": "type",
+ "type": "GoabWorkSideNotificationItemType",
+ "required": false,
+ "default": "default",
+ "description": "Sets the visual type/style of the notification item."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Callback fired when the notification item is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
+ },
+ "angular": {
+ "props": [
+ {
+ "name": "description",
+ "type": "string",
+ "required": true,
+ "default": null,
+ "description": "The description text of the notification item."
+ },
+ {
+ "name": "priority",
+ "type": "GoabWorkSideNotificationPriority",
+ "required": false,
+ "default": null,
+ "description": "Sets the priority level of the notification."
+ },
+ {
+ "name": "readStatus",
+ "type": "GoabWorkSideNotificationReadStatus",
+ "required": false,
+ "default": null,
+ "description": "Indicates whether the notification is read or unread."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ },
+ {
+ "name": "timestamp",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The timestamp for when the notification was created."
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The title text of the notification item."
+ },
+ {
+ "name": "type",
+ "type": "GoabWorkSideNotificationItemType",
+ "required": false,
+ "default": null,
+ "description": "Sets the visual style of the notification item."
+ }
+ ],
+ "events": [
+ {
+ "name": "onClick",
+ "type": "() => void",
+ "description": "Emits when the notification item is clicked.",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ },
+ {
+ "name": "priority",
+ "type": "\"normal\" | \"urgent\"",
+ "typeLabel": "GoabWorkSideNotificationItemPriority",
+ "values": [
+ "normal",
+ "urgent"
+ ],
+ "required": false,
+ "default": "normal",
+ "description": ""
+ },
+ {
+ "name": "read-status",
+ "type": "\"read\" | \"unread\"",
+ "typeLabel": "GoabWorkSideNotificationItemReadStatu",
+ "values": [
+ "read",
+ "unread"
+ ],
+ "required": false,
+ "default": "unread",
+ "description": ""
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ },
+ {
+ "name": "timestamp",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ },
+ {
+ "name": "type",
+ "type": "\"default\" | \"success\" | \"critical\" | \"warning\" | \"info\"",
+ "typeLabel": "GoabWorkSideNotificationItemType",
+ "values": [
+ "default",
+ "success",
+ "critical",
+ "warning",
+ "info"
+ ],
+ "required": false,
+ "default": "default",
+ "description": ""
+ }
+ ],
+ "events": [
+ {
+ "name": "_click",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_notificationItemRead",
+ "type": "CustomEvent<{ el: unknown; readStatus: unknown }>",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/generated/component-apis/work-side-notification-panel.json b/docs/generated/component-apis/work-side-notification-panel.json
new file mode 100644
index 0000000000..679f4a58e7
--- /dev/null
+++ b/docs/generated/component-apis/work-side-notification-panel.json
@@ -0,0 +1,144 @@
+{
+ "componentSlug": "work-side-notification-panel",
+ "extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.svelte",
+ "frameworks": {
+ "react": {
+ "props": [
+ {
+ "name": "activeTab",
+ "type": "GoabWorkSideNotificationActiveTabType",
+ "required": false,
+ "default": "unread",
+ "description": "Sets the initially active tab."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "Notifications",
+ "description": "Sets the panel heading text."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onMarkAllRead",
+ "type": "() => void",
+ "description": "Callback fired when the \"Mark all as read\" button is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ },
+ {
+ "name": "onViewAll",
+ "type": "() => void",
+ "description": "Callback fired when the \"View all\" button is clicked.",
+ "frameworks": [
+ "react"
+ ]
+ }
+ ],
+ "slots": []
+ },
+ "angular": {
+ "props": [
+ {
+ "name": "activeTab",
+ "type": "GoabWorkSideNotificationActiveTabType",
+ "required": false,
+ "default": null,
+ "description": "Sets the initially active tab in the notification panel."
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "The heading text displayed at the top of the notification panel."
+ },
+ {
+ "name": "testId",
+ "type": "string",
+ "required": false,
+ "default": null,
+ "description": "Sets a data-testid attribute for automated testing."
+ }
+ ],
+ "events": [
+ {
+ "name": "onMarkAllRead",
+ "type": "() => void",
+ "description": "Emits when the user clicks \"Mark all as read\".",
+ "frameworks": [
+ "angular"
+ ]
+ },
+ {
+ "name": "onViewAll",
+ "type": "() => void",
+ "description": "Emits when the user clicks \"View all\".",
+ "frameworks": [
+ "angular"
+ ]
+ }
+ ],
+ "slots": []
+ },
+ "webComponents": {
+ "props": [
+ {
+ "name": "active-tab",
+ "type": "\"unread\" | \"urgent\" | \"all\"",
+ "typeLabel": "GoabWorkSideNotificationPanelTabType",
+ "values": [
+ "unread",
+ "urgent",
+ "all"
+ ],
+ "required": false,
+ "default": "unread",
+ "description": ""
+ },
+ {
+ "name": "heading",
+ "type": "string",
+ "required": false,
+ "default": "Notifications",
+ "description": ""
+ },
+ {
+ "name": "testid",
+ "type": "string",
+ "required": false,
+ "default": "",
+ "description": ""
+ }
+ ],
+ "events": [
+ {
+ "name": "_markAllRead",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ },
+ {
+ "name": "_viewAll",
+ "type": "CustomEvent",
+ "description": "",
+ "frameworks": [
+ "webComponents"
+ ]
+ }
+ ],
+ "slots": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/package-lock.json b/docs/package-lock.json
index cd512e4c6c..194823a78d 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -8,7 +8,7 @@
"name": "docs",
"version": "0.0.1",
"dependencies": {
- "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.1.1",
+ "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.8.0",
"@abgov/react-components": "*",
"@abgov/ui-components-common": "*",
"@abgov/web-components": "*",
@@ -20,9 +20,9 @@
},
"node_modules/@abgov/design-tokens-v2": {
"name": "@abgov/design-tokens",
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.1.1.tgz",
- "integrity": "sha512-JpNFdkgFIkrIQTmQ8h/A91EF4qoaXDK9sL/gN5QE54xCr8LxUCpEtdHpUVDwVhk8cugLrp6klhQMw8yqWLrBoA=="
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.8.0.tgz",
+ "integrity": "sha512-roDjWROKgJkrPuqsWLAapYefIyFI8BwNSTMt3IAX6dwmpZOGfbNrAhaAhF1F8toESXgBUA1SyWMA2VKuKcgSjw=="
},
"node_modules/@abgov/react-components": {
"version": "6.9.3",
@@ -489,23 +489,6 @@
"node": ">=18"
}
},
- "node_modules/@types/react": {
- "version": "19.2.7",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
- "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "csstype": "^3.2.2"
- }
- },
- "node_modules/csstype": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "license": "MIT",
- "peer": true
- },
"node_modules/esbuild": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
@@ -582,29 +565,6 @@
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/react": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
- "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
- "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "scheduler": "^0.27.0"
- },
- "peerDependencies": {
- "react": "^19.2.3"
- }
- },
"node_modules/resolve-pkg-maps": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
@@ -615,13 +575,6 @@
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
- "node_modules/scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
- "license": "MIT",
- "peer": true
- },
"node_modules/tsx": {
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
diff --git a/docs/package.json b/docs/package.json
index bcd0424b90..01203da05f 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -13,7 +13,7 @@
"astro": "astro"
},
"dependencies": {
- "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.1.1",
+ "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.8.0",
"@abgov/react-components": "*",
"@abgov/ui-components-common": "*",
"@abgov/web-components": "*",
diff --git a/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp b/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp
deleted file mode 100644
index 6999f06b1c..0000000000
Binary files a/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp and /dev/null differ
diff --git a/docs/public/images/examples/confirm-that-an-application-was-submitted.webp b/docs/public/images/examples/confirm-that-an-application-was-submitted.webp
deleted file mode 100644
index b37b6694ab..0000000000
Binary files a/docs/public/images/examples/confirm-that-an-application-was-submitted.webp and /dev/null differ
diff --git a/docs/public/images/examples/give-more-information-before-asking-a-question-a.webp b/docs/public/images/examples/give-more-information-before-asking-a-question-a.webp
deleted file mode 100644
index 45afa67e11..0000000000
Binary files a/docs/public/images/examples/give-more-information-before-asking-a-question-a.webp and /dev/null differ
diff --git a/docs/public/images/examples/give-more-information-before-asking-a-question-b.webp b/docs/public/images/examples/give-more-information-before-asking-a-question-b.webp
deleted file mode 100644
index 99f16ba6a9..0000000000
Binary files a/docs/public/images/examples/give-more-information-before-asking-a-question-b.webp and /dev/null differ
diff --git a/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp b/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp
deleted file mode 100644
index a7c3a08e53..0000000000
Binary files a/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/my-applications-page.png b/docs/public/images/examples/my-applications-page.png
new file mode 100644
index 0000000000..7d6e407876
Binary files /dev/null and b/docs/public/images/examples/my-applications-page.png differ
diff --git a/docs/public/images/examples/public-form.webp b/docs/public/images/examples/public-form.webp
deleted file mode 100644
index c56e904930..0000000000
Binary files a/docs/public/images/examples/public-form.webp and /dev/null differ
diff --git a/docs/public/images/examples/question-page-background-radio.png b/docs/public/images/examples/question-page-background-radio.png
new file mode 100644
index 0000000000..4722e777d8
Binary files /dev/null and b/docs/public/images/examples/question-page-background-radio.png differ
diff --git a/docs/public/images/examples/question-page-grouped.png b/docs/public/images/examples/question-page-grouped.png
new file mode 100644
index 0000000000..90e9355e43
Binary files /dev/null and b/docs/public/images/examples/question-page-grouped.png differ
diff --git a/docs/public/images/examples/question-page-help-details.png b/docs/public/images/examples/question-page-help-details.png
new file mode 100644
index 0000000000..acfdee2809
Binary files /dev/null and b/docs/public/images/examples/question-page-help-details.png differ
diff --git a/docs/public/images/examples/question-page-one-question.png b/docs/public/images/examples/question-page-one-question.png
new file mode 100644
index 0000000000..075973ca77
Binary files /dev/null and b/docs/public/images/examples/question-page-one-question.png differ
diff --git a/docs/public/images/examples/question-page-progress-indicator.png b/docs/public/images/examples/question-page-progress-indicator.png
new file mode 100644
index 0000000000..d3e67fe812
Binary files /dev/null and b/docs/public/images/examples/question-page-progress-indicator.png differ
diff --git a/docs/public/images/examples/question-page-section-title.png b/docs/public/images/examples/question-page-section-title.png
new file mode 100644
index 0000000000..5356646204
Binary files /dev/null and b/docs/public/images/examples/question-page-section-title.png differ
diff --git a/docs/public/images/examples/question-page.png b/docs/public/images/examples/question-page.png
new file mode 100644
index 0000000000..3ce45f38d0
Binary files /dev/null and b/docs/public/images/examples/question-page.png differ
diff --git a/docs/public/images/examples/question-page.webp b/docs/public/images/examples/question-page.webp
deleted file mode 100644
index 45592418c1..0000000000
Binary files a/docs/public/images/examples/question-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/result-page.png b/docs/public/images/examples/result-page.png
new file mode 100644
index 0000000000..55c9ef6ac9
Binary files /dev/null and b/docs/public/images/examples/result-page.png differ
diff --git a/docs/public/images/examples/result-page.webp b/docs/public/images/examples/result-page.webp
deleted file mode 100644
index aaeead3d27..0000000000
Binary files a/docs/public/images/examples/result-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/review-page.png b/docs/public/images/examples/review-page.png
new file mode 100644
index 0000000000..a4a655dfca
Binary files /dev/null and b/docs/public/images/examples/review-page.png differ
diff --git a/docs/public/images/examples/review-page.webp b/docs/public/images/examples/review-page.webp
deleted file mode 100644
index ed544bc60a..0000000000
Binary files a/docs/public/images/examples/review-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp b/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp
deleted file mode 100644
index c63b3b0e5c..0000000000
Binary files a/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp and /dev/null differ
diff --git a/docs/public/images/examples/show-a-section-title-on-a-question-page.webp b/docs/public/images/examples/show-a-section-title-on-a-question-page.webp
deleted file mode 100644
index 9eb75e3a49..0000000000
Binary files a/docs/public/images/examples/show-a-section-title-on-a-question-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp
deleted file mode 100644
index f6c96f70f7..0000000000
Binary files a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp and /dev/null differ
diff --git a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp
deleted file mode 100644
index e494c970bd..0000000000
Binary files a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp b/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp
deleted file mode 100644
index 81386807c1..0000000000
Binary files a/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp and /dev/null differ
diff --git a/docs/public/images/examples/start-page.png b/docs/public/images/examples/start-page.png
new file mode 100644
index 0000000000..479cd01db9
Binary files /dev/null and b/docs/public/images/examples/start-page.png differ
diff --git a/docs/public/images/examples/start-page.webp b/docs/public/images/examples/start-page.webp
deleted file mode 100644
index 7cb04e4f74..0000000000
Binary files a/docs/public/images/examples/start-page.webp and /dev/null differ
diff --git a/docs/public/images/examples/task-list-page.png b/docs/public/images/examples/task-list-page.png
new file mode 100644
index 0000000000..54699ea39e
Binary files /dev/null and b/docs/public/images/examples/task-list-page.png differ
diff --git a/docs/public/images/examples/task-list-page.webp b/docs/public/images/examples/task-list-page.webp
deleted file mode 100644
index a8d6acfe21..0000000000
Binary files a/docs/public/images/examples/task-list-page.webp and /dev/null differ
diff --git a/docs/public/images/home/hero-banner-gradient-dark.svg b/docs/public/images/home/hero-banner-gradient-dark.svg
new file mode 100644
index 0000000000..0fd953e0f3
--- /dev/null
+++ b/docs/public/images/home/hero-banner-gradient-dark.svg
@@ -0,0 +1,29 @@
+
diff --git a/docs/public/images/home/main-pages-thumb.svg b/docs/public/images/home/main-pages-thumb.svg
new file mode 100644
index 0000000000..47d6eda402
--- /dev/null
+++ b/docs/public/images/home/main-pages-thumb.svg
@@ -0,0 +1,31 @@
+
diff --git a/docs/public/images/home/primary-users-thumb.svg b/docs/public/images/home/primary-users-thumb.svg
new file mode 100644
index 0000000000..cc61e485e0
--- /dev/null
+++ b/docs/public/images/home/primary-users-thumb.svg
@@ -0,0 +1,11 @@
+
diff --git a/docs/public/images/home/storyboard-thumb.svg b/docs/public/images/home/storyboard-thumb.svg
new file mode 100644
index 0000000000..94ac6b1cdd
--- /dev/null
+++ b/docs/public/images/home/storyboard-thumb.svg
@@ -0,0 +1,28 @@
+
diff --git a/docs/public/search-index.json b/docs/public/search-index.json
index b8c930df1d..be01a451f5 100644
--- a/docs/public/search-index.json
+++ b/docs/public/search-index.json
@@ -11,8 +11,7 @@
"blind",
"collapse",
"content layout",
- "expandable panel",
- "expand"
+ "expandable panel"
],
"slug": "accordion"
},
@@ -179,7 +178,14 @@
"description": "Advanced table with sorting and selection.",
"status": "stable",
"category": "content-layout",
- "tags": [],
+ "tags": [
+ "table",
+ "grid",
+ "content layout",
+ "data table",
+ "sorting",
+ "selection"
+ ],
"slug": "data-grid"
},
{
@@ -246,7 +252,7 @@
"name": "Drawer",
"description": "A panel that slides in from the side of the screen to display additional content or actions without navigating away from the current view.",
"status": "stable",
- "category": "content-layout",
+ "category": "structure-and-navigation",
"tags": [
"sections",
"structure and navigation",
@@ -325,34 +331,6 @@
],
"slug": "form-item"
},
- {
- "type": "component",
- "id": "form-stepper",
- "name": "Form stepper",
- "description": "Provides a visual representation of a form through a series of steps.",
- "status": "deprecated",
- "category": "structure-and-navigation",
- "tags": [
- "form stepper",
- "horizontal step navigation",
- "process overview",
- "progress indicator",
- "steps",
- "structure and navigation",
- "wizard"
- ],
- "slug": "form-stepper"
- },
- {
- "type": "component",
- "id": "form",
- "name": "Form",
- "description": "Container for form inputs and validation.",
- "status": "stable",
- "category": "inputs-and-actions",
- "tags": [],
- "slug": "form"
- },
{
"type": "component",
"id": "grid",
@@ -724,15 +702,27 @@
"tags": [],
"slug": "work-side-menu"
},
+ {
+ "type": "component",
+ "id": "work-side-notification-panel",
+ "name": "Notification Panel",
+ "description": "A notification center panel that displays notification items within a work side menu, with tabs for filtering by unread, urgent, and all notifications.",
+ "status": "stable",
+ "category": "structure-and-navigation",
+ "tags": [
+ "notifications",
+ "work side menu",
+ "panel"
+ ],
+ "slug": "work-side-notification-panel"
+ },
{
"type": "example",
"id": "add-a-filter-chip",
"title": "Add a filter chip",
"description": "Allow users to apply filters using selectable chips, which visually represent active filters and can be removed to update results dynamically.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"filtering",
"chips",
@@ -742,8 +732,7 @@
"filter-chip",
"button"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "add-a-filter-chip"
},
{
@@ -752,9 +741,8 @@
"title": "Add a record using a drawer",
"description": "Add a record using a drawer. The drawer slides in from the side to allow data entry without navigating away from the current view.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"drawer",
"forms",
@@ -771,8 +759,7 @@
"radio-group",
"block"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "add-a-record-using-a-drawer"
},
{
@@ -781,9 +768,8 @@
"title": "Add and edit lots of filters",
"description": "Add and edit filters using a drawer. This pattern is useful when you have many filter options that would clutter the main interface.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"filtering",
"drawer",
@@ -800,8 +786,7 @@
"dropdown",
"radio-group"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "add-and-edit-lots-of-filters"
},
{
@@ -810,9 +795,7 @@
"title": "Add another item in a modal",
"description": "Add a new item within a modal window without navigating away from the current context.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "section",
"tags": [
"modal",
"forms",
@@ -827,8 +810,7 @@
"input",
"text-area"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "add-another-item-in-a-modal"
},
{
@@ -837,9 +819,8 @@
"title": "Ask a long answer question with a maximum word count",
"description": "Restrict a long answer input to a maximum number of words or characters.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
+ "productType": "public-form",
"tags": [
"forms",
"text-area",
@@ -850,8 +831,7 @@
"form-item",
"text-area"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-long-answer-question-with-a-maximum-word-count"
},
{
@@ -860,9 +840,8 @@
"title": "Ask a user for a birthday",
"description": "Asks for a user's birthday using the date picker component.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
+ "productType": "public-form",
"tags": [
"forms",
"date-input",
@@ -872,8 +851,7 @@
"form-item",
"date-picker"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-user-for-a-birthday"
},
{
@@ -882,9 +860,8 @@
"title": "Ask a user for an address",
"description": "Collect a complete mailing address from the user, including fields like street, city, and postal code.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "section",
+ "productType": "public-form",
"tags": [
"forms",
"address",
@@ -899,8 +876,7 @@
"button-group",
"text"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-user-for-an-address"
},
{
@@ -909,9 +885,8 @@
"title": "Ask a user for an Indian registration number",
"description": "Request a user's Indian registration number with appropriate validation and context.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
+ "productType": "public-form",
"tags": [
"forms",
"identity",
@@ -922,8 +897,7 @@
"input",
"block"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-user-for-an-indian-registration-number"
},
{
@@ -932,9 +906,8 @@
"title": "Ask a user for direct deposit information",
"description": "Gather banking details from users to enable direct deposit, including account number and financial institution information.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "section",
+ "productType": "public-form",
"tags": [
"forms",
"banking",
@@ -946,8 +919,7 @@
"details",
"text"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-user-for-direct-deposit-information"
},
{
@@ -956,9 +928,8 @@
"title": "Ask a user for dollar amounts",
"description": "Prompt users to enter monetary values using a consistent input format that supports validation and currency symbols.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
+ "productType": "public-form",
"tags": [
"forms",
"currency",
@@ -968,43 +939,16 @@
"form-item",
"input"
],
- "scale": "task",
- "userType": "citizen",
+ "aliases": [],
"slug": "ask-a-user-for-dollar-amounts"
},
- {
- "type": "example",
- "id": "ask-a-user-one-question-at-a-time",
- "title": "Ask a user one question at a time",
- "description": "Ask a user one question at a time.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "questions",
- "public-form"
- ],
- "components": [
- "form-item",
- "radio-group",
- "radio-item",
- "button"
- ],
- "scale": "page",
- "userType": "citizen",
- "slug": "ask-a-user-one-question-at-a-time"
- },
{
"type": "example",
"id": "basic-page-layout",
"title": "Basic page layout",
"description": "A basic page template to use as a starting point.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "page",
"tags": [
"layout",
"page-structure",
@@ -1017,8 +961,7 @@
"skeleton",
"grid"
],
- "scale": "page",
- "userType": "both",
+ "aliases": [],
"slug": "basic-page-layout"
},
{
@@ -1027,9 +970,7 @@
"title": "Button with Icon",
"description": "Shows how to add leading or trailing icons to buttons for enhanced visual communication.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"icons",
"buttons",
@@ -1040,8 +981,7 @@
"button-group",
"icon"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "button-with-icon"
},
{
@@ -1050,9 +990,7 @@
"title": "Card grid",
"description": "Display multiple cards in a grid layout, each containing related content or actions.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
"tags": [
"cards",
"grid",
@@ -1065,8 +1003,7 @@
"link",
"text"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "card-grid"
},
{
@@ -1075,9 +1012,8 @@
"title": "Card view of case files",
"description": "Present a visual overview of individual case files in a card format for scanning and access.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"cards",
"case-management",
@@ -1090,41 +1026,16 @@
"badge",
"button"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "card-view-of-case-files"
},
- {
- "type": "example",
- "id": "communicate-a-future-service-outage",
- "title": "Communicate a future service outage",
- "description": "Display a clear message to inform users about an upcoming service outage, including the date, time, and expected impact on service availability.",
- "status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
- "tags": [
- "notification",
- "maintenance",
- "alerts",
- "system-status"
- ],
- "components": [
- "notification"
- ],
- "scale": "task",
- "userType": "both",
- "slug": "communicate-a-future-service-outage"
- },
{
"type": "example",
"id": "confirm-a-change",
"title": "Confirm a change",
"description": "Ask the user to confirm a proposed change before it is applied.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"modal",
"confirmation",
@@ -1139,8 +1050,7 @@
"form-item",
"date-picker"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "confirm-a-change"
},
{
@@ -1149,9 +1059,7 @@
"title": "Confirm a destructive action",
"description": "Confirm a destructive action like deletion to prevent accidental data loss.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"modal",
"confirmation",
@@ -1163,8 +1071,7 @@
"button",
"button-group"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "confirm-a-destructive-action"
},
{
@@ -1173,9 +1080,8 @@
"title": "Confirm before navigating away",
"description": "Prompt the user in a modal before navigating to a new route to preserve context.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
+ "productType": "workspace",
"tags": [
"modal",
"navigation",
@@ -1187,43 +1093,16 @@
"button",
"button-group"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "confirm-before-navigating-away"
},
- {
- "type": "example",
- "id": "confirm-that-an-application-was-submitted",
- "title": "Confirm that an application was submitted",
- "description": "Display a confirmation screen to indicate successful application submission.",
- "status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
- "tags": [
- "confirmation",
- "success",
- "callout",
- "application"
- ],
- "components": [
- "callout",
- "button",
- "button-group"
- ],
- "scale": "page",
- "userType": "citizen",
- "slug": "confirm-that-an-application-was-submitted"
- },
{
"type": "example",
"id": "copy-to-clipboard",
"title": "Copy to clipboard",
"description": "Allow users to quickly copy text or data to their clipboard with a single click.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"clipboard",
"copy",
@@ -1235,8 +1114,7 @@
"icon-button",
"tooltip"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "copy-to-clipboard"
},
{
@@ -1245,9 +1123,7 @@
"title": "Disabled button with a required field",
"description": "Disable a submit button until required form fields are completed.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"button",
"form",
@@ -1261,8 +1137,7 @@
"form-item",
"input"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "disabled-button-with-a-required-field"
},
{
@@ -1271,9 +1146,8 @@
"title": "Display numbers in a table so they can be scanned easily",
"description": "Right-align numeric columns in tables to make them easier to scan and compare.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"numbers",
@@ -1284,8 +1158,7 @@
"components": [
"table"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "display-numbers-in-a-table-so-they-can-be-scanned-easily"
},
{
@@ -1294,9 +1167,8 @@
"title": "Display user information",
"description": "Display user contact information and related data using containers with clear visual hierarchy.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"container",
"user-info",
@@ -1311,8 +1183,7 @@
"table",
"text"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "display-user-information"
},
{
@@ -1321,9 +1192,7 @@
"title": "Dynamically add an item to a dropdown list",
"description": "Allow users to add new items to a dropdown list dynamically.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"dropdown",
"dynamic",
@@ -1338,8 +1207,7 @@
"input",
"button"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "dynamically-add-an-item-to-a-dropdown-list"
},
{
@@ -1348,9 +1216,7 @@
"title": "Dynamically change items in a dropdown list",
"description": "Update dropdown options based on the selection in another dropdown (cascading/dependent dropdowns).",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"dropdown",
"dynamic",
@@ -1363,19 +1229,51 @@
"dropdown-item",
"form-item"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "dynamically-change-items-in-a-dropdown-list"
},
+ {
+ "type": "example",
+ "id": "error-pages",
+ "title": "Error pages",
+ "description": "Standard error screens for Government of Alberta services. Use when a user lands somewhere that is missing, forbidden, or broken so they understand what happened and what to do next.",
+ "status": "published",
+ "size": "page",
+ "tags": [
+ "error",
+ "error page",
+ "\"401\"",
+ "\"404\"",
+ "\"500\"",
+ "page not found",
+ "unauthorized",
+ "restricted access",
+ "server error",
+ "server problem",
+ "page-structure"
+ ],
+ "components": [
+ "page-block",
+ "block",
+ "text",
+ "icon",
+ "link",
+ "button"
+ ],
+ "aliases": [
+ "401-error-page",
+ "404-error-page",
+ "500-error-page"
+ ],
+ "slug": "error-pages"
+ },
{
"type": "example",
"id": "expand-or-collapse-part-of-a-form",
"title": "Expand or collapse part of a form",
"description": "Use accordions to organize form review sections that users can expand or collapse.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "section",
"tags": [
"accordion",
"form",
@@ -1387,8 +1285,7 @@
"accordion",
"badge"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "expand-or-collapse-part-of-a-form"
},
{
@@ -1397,9 +1294,8 @@
"title": "Filter a list using a push drawer",
"description": "Use a push drawer to house filters alongside a list of records. The push drawer keeps the filter controls accessible while users can still see and interact with the filtered results.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"push-drawer",
"filters",
@@ -1416,8 +1312,7 @@
"dropdown",
"form-item"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "filter-a-list-using-a-push-drawer"
},
{
@@ -1426,9 +1321,8 @@
"title": "Filter data in a table",
"description": "Enable users to filter table data using search input and filter chips.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"filter",
@@ -1446,127 +1340,16 @@
"badge",
"text"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "filter-data-in-a-table"
},
- {
- "type": "example",
- "id": "form-stepper-with-controlled-navigation",
- "title": "Form stepper with controlled navigation",
- "description": "Create a multi-step form with controlled navigation using Previous/Next buttons.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "stepper",
- "form",
- "wizard",
- "multi-step",
- "navigation",
- "pages"
- ],
- "components": [
- "form-stepper",
- "form-step",
- "pages",
- "button",
- "skeleton",
- "spacer"
- ],
- "scale": "task",
- "userType": "both",
- "slug": "form-stepper-with-controlled-navigation"
- },
- {
- "type": "example",
- "id": "give-background-information-before-asking-a-question",
- "title": "Give background information before asking a question",
- "description": "Provide explanatory context before asking a question to help users understand what is being asked.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "form",
- "question",
- "context",
- "radio",
- "citizen-facing"
- ],
- "components": [
- "form-item",
- "radio-group",
- "radio-item",
- "button"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "give-background-information-before-asking-a-question"
- },
- {
- "type": "example",
- "id": "give-context-before-asking-a-long-answer-question",
- "title": "Give context before asking a long answer question",
- "description": "Provide context and guidance before a long-answer text field to help users provide relevant information.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "form",
- "text-area",
- "question",
- "context",
- "details",
- "citizen-facing"
- ],
- "components": [
- "text-area",
- "form-item",
- "details",
- "button",
- "button-group"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "give-context-before-asking-a-long-answer-question"
- },
- {
- "type": "example",
- "id": "group-related-questions-together-on-a-question-page",
- "title": "Group related questions together on a question page",
- "description": "Group related form fields together on a single page to collect address information from users, making it easier to complete logically connected questions at once.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "address",
- "question-page"
- ],
- "components": [
- "form-item",
- "input",
- "dropdown",
- "dropdown-item",
- "button"
- ],
- "scale": "page",
- "userType": "citizen",
- "slug": "group-related-questions-together-on-a-question-page"
- },
{
"type": "example",
"id": "header-with-navigation",
"title": "Header with navigation",
"description": "An application header with navigation links, grouped menu items, and a user account menu.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
"tags": [
"header",
"navigation",
@@ -1576,8 +1359,7 @@
"app-header",
"app-header-menu"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "header-with-navigation"
},
{
@@ -1586,9 +1368,7 @@
"title": "Hero banner with actions",
"description": "Create a hero banner with a call-to-action button to guide users toward the primary task on a landing page.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
"tags": [
"hero",
"banner",
@@ -1599,8 +1379,7 @@
"hero-banner",
"button"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "hero-banner-with-actions"
},
{
@@ -1609,9 +1388,7 @@
"title": "Hide and show many sections of information",
"description": "Allow users to expand and collapse multiple accordion sections, with a button to show or hide all sections at once.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
"tags": [
"accordion",
"expand",
@@ -1622,8 +1399,7 @@
"accordion",
"button"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "hide-and-show-many-sections-of-information"
},
{
@@ -1632,9 +1408,7 @@
"title": "Include a link in the helper text of an option",
"description": "Add links within the description text of checkbox options to provide additional context or resources while users are making selections.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"checkbox",
"helper-text",
@@ -1645,8 +1419,7 @@
"checkbox",
"form-item"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "include-a-link-in-the-helper-text-of-an-option"
},
{
@@ -1655,9 +1428,7 @@
"title": "Include descriptions for items in a checkbox list",
"description": "Add descriptive text to radio button options to help users understand the implications of each choice.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"radio",
"descriptions",
@@ -1668,8 +1439,7 @@
"radio-group",
"radio-item"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "include-descriptions-for-items-in-a-checkbox-list"
},
{
@@ -1678,9 +1448,7 @@
"title": "Link the user to give feedback to the service",
"description": "Use the microsite header's feedback functionality to collect user feedback during alpha or beta phases of a service.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"feedback",
"microsite-header",
@@ -1690,8 +1458,7 @@
"components": [
"microsite-header"
],
- "scale": "interaction",
- "userType": "citizen",
+ "aliases": [],
"slug": "link-the-user-to-give-feedback-to-the-service"
},
{
@@ -1700,9 +1467,7 @@
"title": "Link to an external page",
"description": "Use an external link indicator to show users when a link will take them to a different website.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"link",
"external",
@@ -1711,53 +1476,74 @@
"components": [
"link"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "link-to-an-external-page"
},
{
"type": "example",
- "id": "public-form",
- "title": "Public form",
- "description": "The public form pattern provides a structure for citizen-facing form experiences, emphasizing simplicity, accessibility, and low cognitive load.",
+ "id": "notify-the-user-of-a-future-service-outage",
+ "title": "Notify the user of a future service outage",
+ "description": "Display a clear message to inform users about an upcoming service outage, including the date, time, and expected impact on service availability.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
- "form",
- "public",
- "citizen",
- "pattern"
+ "notification",
+ "maintenance",
+ "alerts",
+ "system-status"
],
- "components": [],
- "scale": "service",
- "userType": "citizen",
- "slug": "public-form"
+ "components": [
+ "notification"
+ ],
+ "aliases": [],
+ "slug": "notify-the-user-of-a-future-service-outage"
},
{
"type": "example",
"id": "question-page",
"title": "Question page",
- "description": "A question page pattern that presents one question at a time to help users focus, reduce cognitive load, and navigate complex forms more easily.",
+ "description": "A question page presents one focused step in a multi-step form. Several variants adapt the shape: section titles, progress indicators, supporting context, expandable help, and grouped fields.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "page",
+ "productType": "public-form",
"tags": [
"forms",
"question",
"wizard",
- "one-thing-per-page"
+ "one-thing-per-page",
+ "public-form",
+ "section-title",
+ "progress",
+ "context",
+ "help",
+ "details",
+ "grouped-fields",
+ "address"
],
"components": [
"form-item",
"input",
+ "text-area",
+ "radio-group",
+ "radio-item",
+ "dropdown",
+ "dropdown-item",
+ "details",
+ "block",
"button",
"button-group"
],
- "scale": "page",
- "userType": "citizen",
+ "aliases": [
+ "ask-a-user-one-question-at-a-time",
+ "give-more-information-before-asking-a-question-a",
+ "give-more-information-before-asking-a-question-b",
+ "show-more-information-to-help-answer-a-question",
+ "show-a-list-to-help-answer-a-question",
+ "show-a-section-title-on-a-question-page",
+ "show-a-simple-progress-indicator-on-a-question-page",
+ "show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions",
+ "group-related-questions-together-on-a-question-page"
+ ],
"slug": "question-page"
},
{
@@ -1766,9 +1552,7 @@
"title": "Remove a filter",
"description": "Allow users to remove active filters by clicking on filter chips, providing clear visual feedback and dynamic updates to filtered results.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"filtering",
"chips",
@@ -1777,8 +1561,7 @@
"components": [
"filter-chip"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "remove-a-filter"
},
{
@@ -1787,9 +1570,7 @@
"title": "Require user action before continuing",
"description": "Use a modal dialog to require users to confirm an action before proceeding, especially for irreversible operations or important decision points.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"modal",
"confirmation",
@@ -1801,8 +1582,7 @@
"button",
"button-group"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "require-user-action-before-continuing"
},
{
@@ -1811,9 +1591,7 @@
"title": "Reset date picker field",
"description": "Allow users to programmatically set or clear a date picker field value, useful for reset functionality or setting default dates.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"date-picker",
"form",
@@ -1826,31 +1604,33 @@
"button",
"button-group"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "reset-date-picker-field"
},
{
"type": "example",
"id": "result-page",
"title": "Result page",
- "description": "A result page shown after form submission to confirm success, provide next steps, and offer relevant contact information.",
+ "description": "A result page shown after a citizen has submitted a form, application, or task. Confirms success, explains what happens next, and points the user at any follow-up actions.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "page",
+ "productType": "public-form",
"tags": [
"confirmation",
"success",
"completion",
- "forms"
+ "forms",
+ "application"
],
"components": [
"block",
- "callout"
+ "callout",
+ "button",
+ "button-group"
+ ],
+ "aliases": [
+ "confirm-that-an-application-was-submitted"
],
- "scale": "page",
- "userType": "citizen",
"slug": "result-page"
},
{
@@ -1859,9 +1639,7 @@
"title": "Reveal input based on a selection",
"description": "Progressively reveal additional form fields based on user selections, reducing visual complexity while gathering necessary information.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"conditional",
"reveal",
@@ -1876,8 +1654,7 @@
"form-item",
"input"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "reveal-input-based-on-a-selection"
},
{
@@ -1886,9 +1663,8 @@
"title": "Review and action",
"description": "A side-by-side layout for workers to review case details while taking an action, commonly used in case management and approval workflows.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"review",
"action",
@@ -1906,19 +1682,17 @@
"text-area",
"button"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "review-and-action"
},
{
"type": "example",
"id": "review-page",
"title": "Review page",
- "description": "A review page where users can check their answers before submitting a form, with options to change individual responses.",
+ "description": "A review page lets a user check their answers at the end of a form or section before submitting. Each answer has a \"change\" link so the user can revise without starting over.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "page",
+ "productType": "public-form",
"tags": [
"review",
"check-answers",
@@ -1930,8 +1704,7 @@
"button",
"button-group"
],
- "scale": "page",
- "userType": "citizen",
+ "aliases": [],
"slug": "review-page"
},
{
@@ -1940,9 +1713,7 @@
"title": "Search",
"description": "A search input pattern with a search icon and button for users to find content or filter results.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"search",
"input",
@@ -1954,8 +1725,7 @@
"block",
"form-item"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "search"
},
{
@@ -1964,9 +1734,7 @@
"title": "Select one or more from a list of options",
"description": "Use checkboxes to let users select one or more options from a list when multiple selections are valid.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"checkbox",
"selection",
@@ -1977,8 +1745,7 @@
"checkbox",
"form-item"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "select-one-or-more-from-a-list-of-options"
},
{
@@ -1987,9 +1754,7 @@
"title": "Set a max width on a long radio item",
"description": "Set a max width on a long radio item to control line wrapping.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"radio",
"forms",
@@ -2000,8 +1765,7 @@
"radio-group",
"radio-item"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "set-a-max-width-on-a-long-radio-item"
},
{
@@ -2010,9 +1774,7 @@
"title": "Set a specific tab to be active",
"description": "Set a specific tab to be active on page load using the initialTab property.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"tabs",
"navigation",
@@ -2025,44 +1787,16 @@
"badge",
"button"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "set-a-specific-tab-to-be-active"
},
- {
- "type": "example",
- "id": "set-the-status-of-step-on-a-form-stepper",
- "title": "Set the status of step on a form stepper",
- "description": "Set the status of each step on a form stepper to indicate completion progress.",
- "status": "published",
- "categories": [
- "inputs-and-actions"
- ],
- "tags": [
- "forms",
- "stepper",
- "multi-step",
- "navigation"
- ],
- "components": [
- "form-stepper",
- "form-step",
- "pages",
- "button"
- ],
- "scale": "task",
- "userType": "both",
- "slug": "set-the-status-of-step-on-a-form-stepper"
- },
{
"type": "example",
"id": "show-a-label-on-an-icon-only-button",
"title": "Show a label on an icon only button",
"description": "Show a label on an icon-only button using a tooltip to improve discoverability.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"buttons",
"icons",
@@ -2074,45 +1808,16 @@
"tooltip",
"button-group"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-a-label-on-an-icon-only-button"
},
- {
- "type": "example",
- "id": "show-a-list-to-help-answer-a-question",
- "title": "Show a list to help answer a question",
- "description": "Show a list to help answer a question using an expandable details component.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "details",
- "guidance",
- "help"
- ],
- "components": [
- "form-item",
- "radio-group",
- "radio-item",
- "details",
- "block"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "show-a-list-to-help-answer-a-question"
- },
{
"type": "example",
"id": "show-a-notification",
"title": "Show a notification",
"description": "Show a temporary notification to confirm an action was completed successfully.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"notification",
"feedback",
@@ -2123,8 +1828,7 @@
"temporary-notification",
"button"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-a-notification"
},
{
@@ -2133,9 +1837,7 @@
"title": "Show a notification with an action",
"description": "Show a temporary notification with an action button for user interaction.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"notification",
"feedback",
@@ -2146,94 +1848,16 @@
"temporary-notification",
"button"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-a-notification-with-an-action"
},
- {
- "type": "example",
- "id": "show-a-section-title-on-a-question-page",
- "title": "Show a section title on a question page",
- "description": "Show a section title on a question page to help users understand which part of the form they are completing.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "questions",
- "navigation",
- "section"
- ],
- "components": [
- "form-item",
- "radio-group",
- "radio-item",
- "button"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "show-a-section-title-on-a-question-page"
- },
- {
- "type": "example",
- "id": "show-a-simple-progress-indicator-on-a-question-page",
- "title": "Show a simple progress indicator on a question page",
- "description": "Show a simple progress indicator on a question page to help users understand their progress through the form.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "questions",
- "progress",
- "navigation"
- ],
- "components": [
- "form-item",
- "radio-group",
- "radio-item",
- "button"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "show-a-simple-progress-indicator-on-a-question-page"
- },
- {
- "type": "example",
- "id": "show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions",
- "title": "Show a simple progress indicator on a question page with multiple questions",
- "description": "Show a simple progress indicator on a question page when grouping multiple related questions together.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "forms",
- "questions",
- "progress",
- "navigation",
- "multi-question"
- ],
- "components": [
- "form-item",
- "input",
- "button"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions"
- },
{
"type": "example",
"id": "show-a-user-progress",
"title": "Show a user progress",
"description": "Display progress feedback during long-running operations like downloads, showing percentage completion with the ability to cancel and receive success confirmation.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"progress",
"notification",
@@ -2244,8 +1868,7 @@
"temporary-notification",
"button"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "show-a-user-progress"
},
{
@@ -2254,9 +1877,7 @@
"title": "Show a user progress when the time is unknown",
"description": "Display indeterminate progress for operations where completion time cannot be estimated, such as complex searches or external system queries.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "interaction",
"tags": [
"progress",
"notification",
@@ -2268,8 +1889,7 @@
"temporary-notification",
"button"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "show-a-user-progress-when-the-time-is-unknown"
},
{
@@ -2278,9 +1898,8 @@
"title": "Show different views of data in a table",
"description": "Use tabs to organize table data into different views based on status or category, showing counts in each tab to help workers quickly navigate to relevant items.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"tabs",
@@ -2295,8 +1914,7 @@
"badge",
"button"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "show-different-views-of-data-in-a-table"
},
{
@@ -2305,9 +1923,7 @@
"title": "Show full date in a tooltip",
"description": "Display relative time (like \"4 hours ago\") while providing the full date and time on hover via tooltip for users who need exact timestamps.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"tooltip",
"date",
@@ -2318,8 +1934,7 @@
"tooltip",
"container"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-full-date-in-a-tooltip"
},
{
@@ -2328,9 +1943,7 @@
"title": "Show links to navigation items",
"description": "Use the app footer to display comprehensive navigation links organized into sections, along with meta links for common utilities like privacy and accessibility.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
"tags": [
"footer",
"navigation",
@@ -2342,46 +1955,17 @@
"footer-nav-section",
"footer-meta-section"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "show-links-to-navigation-items"
},
- {
- "type": "example",
- "id": "show-more-information-to-help-answer-a-question",
- "title": "Show more information to help answer a question",
- "description": "Use the Details component to provide optional contextual help that explains why a question is being asked, helping users understand the purpose without cluttering the main form.",
- "status": "published",
- "categories": [
- "forms"
- ],
- "tags": [
- "form",
- "details",
- "help",
- "question-page",
- "expandable"
- ],
- "components": [
- "details",
- "form-item",
- "radio-group",
- "radio-item",
- "button"
- ],
- "scale": "task",
- "userType": "citizen",
- "slug": "show-more-information-to-help-answer-a-question"
- },
{
"type": "example",
"id": "show-multiple-actions-in-a-compact-table",
"title": "Show multiple actions in a compact table",
"description": "Use icon buttons to provide multiple row actions in tables where space is limited, keeping the interface compact while maintaining accessibility through aria labels.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"icon-button",
@@ -2395,8 +1979,7 @@
"badge",
"block"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "show-multiple-actions-in-a-compact-table"
},
{
@@ -2405,9 +1988,7 @@
"title": "Show multiple tags together",
"description": "Display multiple badges together using GoabBlock with tight spacing to show multiple statuses or categories for a single item.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"badge",
"tags",
@@ -2418,8 +1999,7 @@
"badge",
"block"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-multiple-tags-together"
},
{
@@ -2428,9 +2008,7 @@
"title": "Show number of results per page",
"description": "Combine pagination with a dropdown selector to let users control how many results appear per page, improving data browsing for different use cases.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
"tags": [
"pagination",
"table",
@@ -2446,8 +2024,7 @@
"block",
"spacer"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "show-number-of-results-per-page"
},
{
@@ -2456,9 +2033,7 @@
"title": "Show quick links",
"description": "Use the app footer meta section to display essential quick links like feedback, accessibility, privacy, and contact information without the full navigation structure.",
"status": "published",
- "categories": [
- "structure-and-navigation"
- ],
+ "size": "section",
"tags": [
"footer",
"navigation",
@@ -2469,8 +2044,7 @@
"footer",
"footer-meta-section"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "show-quick-links"
},
{
@@ -2479,9 +2053,8 @@
"title": "Show status in a table",
"description": "Display status information within table rows using badges to provide clear visual indicators of item states like pending, complete, failed, or in progress.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"badge",
@@ -2492,8 +2065,7 @@
"badge",
"button"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "show-status-in-a-table"
},
{
@@ -2502,9 +2074,8 @@
"title": "Show status on a card",
"description": "Display status indicators on cards using badges in the actions slot, allowing workers to quickly see the priority or state of each item.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "interaction",
+ "productType": "workspace",
"tags": [
"card",
"container",
@@ -2515,8 +2086,7 @@
"container",
"badge"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "show-status-on-a-card"
},
{
@@ -2525,9 +2095,7 @@
"title": "Show version number",
"description": "Display version information in the microsite header using the version slot, allowing custom formatting and styling of version text.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"microsite-header",
"version",
@@ -2537,8 +2105,7 @@
"components": [
"microsite-header"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "show-version-number"
},
{
@@ -2547,9 +2114,7 @@
"title": "Slotted error text in a form item",
"description": "Use the error slot in a form item to display formatted error messages with custom styling like bold or italic text.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"form",
"form-item",
@@ -2561,8 +2126,7 @@
"form-item",
"input"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "slotted-error-text-in-a-form-item"
},
{
@@ -2571,9 +2135,7 @@
"title": "Slotted helper text in a form item",
"description": "Use the helpText slot in a form item to display formatted helper text with custom styling like bold, italic, or links.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "interaction",
"tags": [
"form",
"form-item",
@@ -2584,8 +2146,7 @@
"form-item",
"input"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "slotted-helper-text-in-a-form-item"
},
{
@@ -2594,9 +2155,8 @@
"title": "Sort data in a table",
"description": "Enable column sorting in tables using sort headers, allowing workers to organize data by clicking column headers to toggle ascending/descending order.",
"status": "published",
- "categories": [
- "content-layout"
- ],
+ "size": "section",
+ "productType": "workspace",
"tags": [
"table",
"sorting",
@@ -2606,19 +2166,17 @@
"table",
"table-sort-header"
],
- "scale": "task",
- "userType": "worker",
+ "aliases": [],
"slug": "sort-data-in-a-table"
},
{
"type": "example",
"id": "start-page",
"title": "Start page",
- "description": "A start page is the front door to a government service for citizens. It provides essential information about the service and a clear call to action to begin.",
+ "description": "The front door to a government service for a citizen. It is the way into the service and how citizens access it. Each government service has a start page on Alberta.ca.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "page",
+ "productType": "public-form",
"tags": [
"page",
"service",
@@ -2628,19 +2186,17 @@
"components": [
"button"
],
- "scale": "page",
- "userType": "citizen",
+ "aliases": [],
"slug": "start-page"
},
{
"type": "example",
"id": "task-list-page",
"title": "Task list page",
- "description": "A task list page provides a structure for multi-step services, showing users their progress through a series of tasks with clear status indicators.",
+ "description": "A page that provides structure for multiple steps in a service. Use a task list to outline the entire process and show the status of each task as users move through it.",
"status": "published",
- "categories": [
- "forms"
- ],
+ "size": "page",
+ "productType": "public-form",
"tags": [
"page",
"task-list",
@@ -2652,8 +2208,7 @@
"badge",
"callout"
],
- "scale": "page",
- "userType": "both",
+ "aliases": [],
"slug": "task-list-page"
},
{
@@ -2662,9 +2217,7 @@
"title": "Type to create a new filter",
"description": "Allow users to type custom filter values and create filter chips by pressing Enter, with the ability to remove chips using Backspace or by clicking them.",
"status": "published",
- "categories": [
- "inputs-and-actions"
- ],
+ "size": "interaction",
"tags": [
"filter-chip",
"input",
@@ -2677,8 +2230,7 @@
"form-item",
"container"
],
- "scale": "interaction",
- "userType": "both",
+ "aliases": [],
"slug": "type-to-create-a-new-filter"
},
{
@@ -2687,9 +2239,7 @@
"title": "Warn a user of a deadline",
"description": "Use a modal with important callout styling to warn users about time-sensitive deadlines that could affect their submission or action.",
"status": "published",
- "categories": [
- "feedback-and-alerts"
- ],
+ "size": "section",
"tags": [
"modal",
"warning",
@@ -2701,8 +2251,358 @@
"button",
"button-group"
],
- "scale": "task",
- "userType": "both",
+ "aliases": [],
"slug": "warn-a-user-of-a-deadline"
+ },
+ {
+ "type": "example",
+ "id": "workspace-case-detail",
+ "title": "Case detail",
+ "description": "A single-record view for reviewing and acting on one case. Uses accordion sections, a table-of-contents sidebar, badges for status, and header actions for quick operations.",
+ "status": "published",
+ "size": "page",
+ "productType": "workspace",
+ "tags": [
+ "workspace",
+ "case-detail",
+ "worker"
+ ],
+ "components": [
+ "accordion",
+ "badge",
+ "button",
+ "drawer"
+ ],
+ "aliases": [],
+ "slug": "workspace/case-detail"
+ },
+ {
+ "type": "example",
+ "id": "workspace-dashboard",
+ "title": "Dashboard",
+ "description": "Gives staff an overview of their work with counts, trends, and assigned items.",
+ "status": "published",
+ "size": "page",
+ "productType": "workspace",
+ "tags": [
+ "workspace",
+ "dashboard",
+ "worker"
+ ],
+ "components": [
+ "container",
+ "block",
+ "badge"
+ ],
+ "aliases": [],
+ "slug": "workspace/dashboard"
+ },
+ {
+ "type": "example",
+ "id": "workspace-index-page",
+ "title": "Index page",
+ "description": "The page staff land on to scan, filter, sort, and pick records to work on. The home of the workspace's daily queue.",
+ "status": "published",
+ "size": "page",
+ "productType": "workspace",
+ "tags": [
+ "workspace",
+ "index",
+ "worker"
+ ],
+ "components": [
+ "work-side-menu",
+ "data-grid",
+ "tabs",
+ "filter-chip",
+ "badge"
+ ],
+ "aliases": [],
+ "slug": "workspace/index-page"
+ },
+ {
+ "type": "page",
+ "id": "automated-accessibility",
+ "title": "Automated accessibility",
+ "description": "Guidance on using automated accessibility testing tools effectively",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "intro"
+ ],
+ "slug": "get-started/automated-accessibility"
+ },
+ {
+ "type": "page",
+ "id": "component-lifecycle",
+ "title": "Component lifecycle",
+ "description": "The stages each Design System component moves through",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "intro"
+ ],
+ "slug": "get-started/component-lifecycle"
+ },
+ {
+ "type": "page",
+ "id": "contribute",
+ "title": "Contribute",
+ "description": "How to contribute to the GoA Design System",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "appendix"
+ ],
+ "slug": "get-started/contribute"
+ },
+ {
+ "type": "page",
+ "id": "designers/designing-for-dark-mode",
+ "title": "Designing for dark mode",
+ "description": "How dark mode works for designers",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "designers",
+ "designer"
+ ],
+ "slug": "get-started/designers/designing-for-dark-mode"
+ },
+ {
+ "type": "page",
+ "id": "designers/designing-with-ds",
+ "title": "Designing with Design System 2.0",
+ "description": "How to start new designs and update existing projects to Design System 2.0",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "designers",
+ "designer"
+ ],
+ "slug": "get-started/designers/designing-with-ds"
+ },
+ {
+ "type": "page",
+ "id": "designers/ux-guidelines",
+ "title": "User experience guidelines",
+ "description": "User experience guidelines for Government of Alberta digital products",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "designers",
+ "designer"
+ ],
+ "slug": "get-started/designers/ux-guidelines"
+ },
+ {
+ "type": "page",
+ "id": "designers",
+ "title": "Designers overview",
+ "description": "How designers use the design system through Figma",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "designers",
+ "designer"
+ ],
+ "slug": "get-started/designers"
+ },
+ {
+ "type": "page",
+ "id": "developers/browsers",
+ "title": "Supported browsers",
+ "description": "Browser and operating system support for Design System components",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/browsers"
+ },
+ {
+ "type": "page",
+ "id": "developers/bug",
+ "title": "Verify a bug",
+ "description": "How to verify and report a bug in a Design System component",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/bug"
+ },
+ {
+ "type": "page",
+ "id": "developers/dark-mode-theme",
+ "title": "Dark mode theme",
+ "description": "Switch between light and dark mode using the React useTheme hook or Angular GoabThemeService",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/dark-mode-theme"
+ },
+ {
+ "type": "page",
+ "id": "developers/setup",
+ "title": "Developer setup",
+ "description": "Set up Angular, React, or Web Components to use the GoA Design System",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/setup"
+ },
+ {
+ "type": "page",
+ "id": "developers/technologies",
+ "title": "Technologies",
+ "description": "An overview of the technologies used in the Design System",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/technologies"
+ },
+ {
+ "type": "page",
+ "id": "developers/updating-your-product",
+ "title": "Updating your product",
+ "description": "The rationale and practical steps for updating your GoA product to Design System 2.0 using the developer-first approach.",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers/updating-your-product"
+ },
+ {
+ "type": "page",
+ "id": "developers",
+ "title": "Developers overview",
+ "description": "How developers use the design system through tokens, components, examples, and templates",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "developers",
+ "developer"
+ ],
+ "slug": "get-started/developers"
+ },
+ {
+ "type": "page",
+ "id": "index",
+ "title": "Start with the design system",
+ "description": "Start with the design system to build on the research and experience of other service teams",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "intro"
+ ],
+ "slug": "get-started"
+ },
+ {
+ "type": "page",
+ "id": "migration-guide",
+ "title": "Migration guide",
+ "description": "Choose the right Design System 2.0 migration pathway for your product",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "intro"
+ ],
+ "slug": "get-started/migration-guide"
+ },
+ {
+ "type": "page",
+ "id": "out-of-support",
+ "title": "Out of support versions",
+ "description": "Design System versions that are no longer supported",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "appendix"
+ ],
+ "slug": "get-started/out-of-support"
+ },
+ {
+ "type": "page",
+ "id": "qa-testing",
+ "title": "QA testing",
+ "description": "Testing process for Design System components",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "appendix"
+ ],
+ "slug": "get-started/qa-testing"
+ },
+ {
+ "type": "page",
+ "id": "roadmap",
+ "title": "Roadmap",
+ "description": "High-level roadmap for the design system team's 2026-27 fiscal year",
+ "status": "published",
+ "category": "get started",
+ "tags": [
+ "intro"
+ ],
+ "slug": "get-started/roadmap"
+ },
+ {
+ "type": "example",
+ "id": "public-form",
+ "title": "Public form",
+ "description": "For citizen-facing services where users apply for a benefit, request a service, or submit information. Designed around simplicity and low cognitive load, with plain-language questions, focused pages that ask one thing at a time, save-and-resume, and a clear confirmation of what happens next.",
+ "status": "published",
+ "size": "product",
+ "tags": [
+ "form",
+ "public",
+ "citizen",
+ "pattern"
+ ],
+ "components": [],
+ "aliases": [],
+ "slug": "public-form"
+ },
+ {
+ "type": "example",
+ "id": "workspace",
+ "title": "Workspace",
+ "description": "The workspace is for productivity-focused services used by service delivery staff as a daily tool to review information, manage records, and complete tasks. The design prioritizes productivity, efficiency, and accuracy so staff can move through their work quickly while ensuring the best outcome for citizens and government.",
+ "status": "published",
+ "size": "product",
+ "tags": [
+ "workspace",
+ "worker",
+ "service",
+ "case-management",
+ "dashboard",
+ "pattern"
+ ],
+ "components": [
+ "work-side-menu",
+ "table",
+ "badge",
+ "tabs",
+ "container",
+ "accordion",
+ "drawer",
+ "button",
+ "block"
+ ],
+ "aliases": [],
+ "slug": "workspace"
}
]
\ No newline at end of file
diff --git a/docs/public/thumbnails/error-pages-401.png b/docs/public/thumbnails/error-pages-401.png
new file mode 100644
index 0000000000..440acb7512
Binary files /dev/null and b/docs/public/thumbnails/error-pages-401.png differ
diff --git a/docs/public/thumbnails/error-pages-404.png b/docs/public/thumbnails/error-pages-404.png
new file mode 100644
index 0000000000..d380995b1a
Binary files /dev/null and b/docs/public/thumbnails/error-pages-404.png differ
diff --git a/docs/public/thumbnails/error-pages-500.png b/docs/public/thumbnails/error-pages-500.png
new file mode 100644
index 0000000000..1291a72b14
Binary files /dev/null and b/docs/public/thumbnails/error-pages-500.png differ
diff --git a/docs/public/thumbnails/workspace-notification-panel.png b/docs/public/thumbnails/workspace-notification-panel.png
new file mode 100644
index 0000000000..b0bb9762d4
Binary files /dev/null and b/docs/public/thumbnails/workspace-notification-panel.png differ
diff --git a/docs/public/thumbnails/workspace-sticky-action-bar.png b/docs/public/thumbnails/workspace-sticky-action-bar.png
index 6e9e528067..3b1879875c 100644
Binary files a/docs/public/thumbnails/workspace-sticky-action-bar.png and b/docs/public/thumbnails/workspace-sticky-action-bar.png differ
diff --git a/docs/src/components/Breadcrumbs.astro b/docs/src/components/Breadcrumbs.astro
index ef9fda790c..0d668720f9 100644
--- a/docs/src/components/Breadcrumbs.astro
+++ b/docs/src/components/Breadcrumbs.astro
@@ -22,7 +22,9 @@ const segments = pathname.split('/').filter(Boolean);
// Show on any page within a section
const showBreadcrumbs = segments.length >= 1;
-// Build set of valid page routes from the pages directory
+// Build set of valid page routes from the pages directory. Dynamic segments
+// like `[family]` are kept as `*` so we can later test crumb paths against
+// them as patterns (e.g. `/examples/workspace` matches `/examples/*`).
const pageFiles = import.meta.glob('/src/pages/**/*.{astro,md,mdx}', { eager: false });
const validPaths = new Set(
Object.keys(pageFiles).map(file =>
@@ -30,10 +32,20 @@ const validPaths = new Set(
.replace('/src/pages', '')
.replace(/\/index\.(astro|md|mdx)$/, '')
.replace(/\.(astro|md|mdx)$/, '')
- .replace(/\[.*?\]/g, '*') // dynamic routes aren't valid intermediate targets
+ .replace(/\[.*?\]/g, '*')
)
);
+function isValidPath(path: string): boolean {
+ if (validPaths.has(path)) return true;
+ for (const vp of validPaths) {
+ if (!vp.includes('*')) continue;
+ const pattern = '^' + vp.replace(/\*/g, '[^/]+') + '$';
+ if (new RegExp(pattern).test(path)) return true;
+ }
+ return false;
+}
+
// Known labels for path segments
const SEGMENT_LABELS: Record = {
"get-started": "Get Started",
@@ -59,7 +71,7 @@ let path = '';
const crumbCount = Math.max(1, segments.length - 1);
for (let i = 0; i < crumbCount; i++) {
path += '/' + segments[i];
- crumbs.push({ label: segmentToLabel(segments[i]), url: path, hasPage: validPaths.has(path) });
+ crumbs.push({ label: segmentToLabel(segments[i]), url: path, hasPage: isValidPath(path) });
}
---
diff --git a/docs/src/components/CardLite.astro b/docs/src/components/CardLite.astro
index 7f9f718854..59bb46a21e 100644
--- a/docs/src/components/CardLite.astro
+++ b/docs/src/components/CardLite.astro
@@ -5,6 +5,8 @@
* A lightweight card component for homepage grids.
* Displays an image, title, and description with a link.
*/
+import { withBase } from '@/lib/base-url';
+
interface Props {
title: string;
description: string;
@@ -19,7 +21,7 @@ const isDisabled = !linkTo;
{isDisabled ? (
diff --git a/docs/src/content/examples/button-with-icon/index.mdx b/docs/src/content/examples/button-with-icon/index.mdx
index a4fdb99952..7348b53deb 100644
--- a/docs/src/content/examples/button-with-icon/index.mdx
+++ b/docs/src/content/examples/button-with-icon/index.mdx
@@ -1,10 +1,7 @@
---
id: button-with-icon
title: Button with Icon
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- icons
- buttons
diff --git a/docs/src/content/examples/card-grid/index.mdx b/docs/src/content/examples/card-grid/index.mdx
index 191d3c4b91..432c23ee4d 100644
--- a/docs/src/content/examples/card-grid/index.mdx
+++ b/docs/src/content/examples/card-grid/index.mdx
@@ -1,10 +1,7 @@
---
id: card-grid
title: Card grid
-categories:
- - content-layout
-scale: task
-userType: both
+size: section
tags:
- cards
- grid
diff --git a/docs/src/content/examples/card-view-of-case-files/index.mdx b/docs/src/content/examples/card-view-of-case-files/index.mdx
index bd5315ffed..05c3e1585d 100644
--- a/docs/src/content/examples/card-view-of-case-files/index.mdx
+++ b/docs/src/content/examples/card-view-of-case-files/index.mdx
@@ -1,10 +1,8 @@
---
id: card-view-of-case-files
title: Card view of case files
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- cards
- case-management
diff --git a/docs/src/content/examples/confirm-a-change/index.mdx b/docs/src/content/examples/confirm-a-change/index.mdx
index 0b23ced98b..a37fdb914f 100644
--- a/docs/src/content/examples/confirm-a-change/index.mdx
+++ b/docs/src/content/examples/confirm-a-change/index.mdx
@@ -1,10 +1,7 @@
---
id: confirm-a-change
title: Confirm a change
-categories:
- - inputs-and-actions
-scale: task
-userType: both
+size: interaction
tags:
- modal
- confirmation
diff --git a/docs/src/content/examples/confirm-a-destructive-action/index.mdx b/docs/src/content/examples/confirm-a-destructive-action/index.mdx
index 8a50858892..71ace15f4d 100644
--- a/docs/src/content/examples/confirm-a-destructive-action/index.mdx
+++ b/docs/src/content/examples/confirm-a-destructive-action/index.mdx
@@ -1,10 +1,7 @@
---
id: confirm-a-destructive-action
title: Confirm a destructive action
-categories:
- - feedback-and-alerts
-scale: task
-userType: both
+size: interaction
tags:
- modal
- confirmation
diff --git a/docs/src/content/examples/confirm-before-navigating-away/index.mdx b/docs/src/content/examples/confirm-before-navigating-away/index.mdx
index de334716c2..9581a48eae 100644
--- a/docs/src/content/examples/confirm-before-navigating-away/index.mdx
+++ b/docs/src/content/examples/confirm-before-navigating-away/index.mdx
@@ -1,10 +1,8 @@
---
id: confirm-before-navigating-away
title: Confirm before navigating away
-categories:
- - feedback-and-alerts
-scale: task
-userType: worker
+size: interaction
+productType: workspace
tags:
- modal
- navigation
diff --git a/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.html b/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.html
deleted file mode 100644
index 08cd9b6def..0000000000
--- a/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.html
+++ /dev/null
@@ -1,26 +0,0 @@
-You have completed the application
-
-
- You will receive a copy of the confirmation to the email
- person@email.com
- Confirmation number: 1234ABC
-
-
-Go back to the dashboard, or direct your user somewhere else useful.
-Other information about what was just completed, other tertiary information, and/or
- contact information.
-
- Phone: 780 123 4567
-
- Email: information@gov.ab.ca
-
-
-
- Go to application
- Back to dashboard
-
diff --git a/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.ts b/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.ts
deleted file mode 100644
index 817bed0c4c..0000000000
--- a/docs/src/content/examples/confirm-that-an-application-was-submitted/angular.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { Component } from "@angular/core";
-
-@Component({
- selector: "app-confirm-that-an-application-was-submitted",
- templateUrl: "./angular.html",
-})
-export class ConfirmThatAnApplicationWasSubmittedComponent {}
diff --git a/docs/src/content/examples/confirm-that-an-application-was-submitted/index.mdx b/docs/src/content/examples/confirm-that-an-application-was-submitted/index.mdx
deleted file mode 100644
index 6aa9364d72..0000000000
--- a/docs/src/content/examples/confirm-that-an-application-was-submitted/index.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
----
-id: confirm-that-an-application-was-submitted
-title: Confirm that an application was submitted
-categories:
- - feedback-and-alerts
-scale: page
-userType: citizen
-tags:
- - confirmation
- - success
- - callout
- - application
-components:
- - callout
- - button
- - button-group
-figmaUrl: https://www.figma.com/design/Jpy1Ea5qglwnp1SgGnagY9/%E2%9D%96-Component-library-%7C-DDD?node-id=63353-169579
-status: published
-previewImage: /images/examples/confirm-that-an-application-was-submitted.webp
----
-
-Display a confirmation screen to indicate successful application submission.
-
-## When to use
-
-Use this pattern when:
-
-- A user has successfully completed an application or form
-- You need to confirm the submission was received
-- Users need a confirmation number for their records
-- You want to provide next steps after submission
-
-## Considerations
-
-- Use a success callout to clearly indicate success
-- Include a confirmation number users can reference later
-- Mention where a confirmation email will be sent
-- Provide clear next steps and navigation options
-- Include contact information for questions
diff --git a/docs/src/content/examples/confirm-that-an-application-was-submitted/react.tsx b/docs/src/content/examples/confirm-that-an-application-was-submitted/react.tsx
deleted file mode 100644
index 5a6d308496..0000000000
--- a/docs/src/content/examples/confirm-that-an-application-was-submitted/react.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import {
- GoabButton,
- GoabButtonGroup,
- GoabCallout,
- GoabText,
-} from "@abgov/react-components";
-
-export function ConfirmThatAnApplicationWasSubmitted() {
- return (
- <>
-
- You have completed the application
-
-
-
-
- You will receive a copy of the confirmation to the email person@email.com
-
-
- Confirmation number: 1234ABC
-
-
-
-
- Go back to the dashboard, or direct your user somewhere else useful.
-
-
- Other information about what was just completed, other tertiary information,
- and/or contact information.
-
- Phone: 780 123 4567
-
- Email: information@gov.ab.ca
-
-
-
- Go to application
- Back to dashboard
-
- >
- );
-}
diff --git a/docs/src/content/examples/confirm-that-an-application-was-submitted/web-components.html b/docs/src/content/examples/confirm-that-an-application-was-submitted/web-components.html
deleted file mode 100644
index ccdbdb6f19..0000000000
--- a/docs/src/content/examples/confirm-that-an-application-was-submitted/web-components.html
+++ /dev/null
@@ -1,25 +0,0 @@
-You have completed the application
-
-
- You will receive a copy of the confirmation to the email person@email.com
- Confirmation number: 1234ABC
-
-
-Go back to the dashboard, or direct your user somewhere else useful.
-Other information about what was just completed, other tertiary information, and/or
- contact information.
-
- Phone: 780 123 4567
-
- Email: information@gov.ab.ca
-
-
-
- Go to application
- Back to dashboard
-
diff --git a/docs/src/content/examples/copy-to-clipboard/index.mdx b/docs/src/content/examples/copy-to-clipboard/index.mdx
index 439cc4a776..6b9f5dc34d 100644
--- a/docs/src/content/examples/copy-to-clipboard/index.mdx
+++ b/docs/src/content/examples/copy-to-clipboard/index.mdx
@@ -1,10 +1,7 @@
---
id: copy-to-clipboard
title: Copy to clipboard
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- clipboard
- copy
diff --git a/docs/src/content/examples/disabled-button-with-a-required-field/index.mdx b/docs/src/content/examples/disabled-button-with-a-required-field/index.mdx
index ee961c2bc4..db920cbfb7 100644
--- a/docs/src/content/examples/disabled-button-with-a-required-field/index.mdx
+++ b/docs/src/content/examples/disabled-button-with-a-required-field/index.mdx
@@ -1,10 +1,7 @@
---
id: disabled-button-with-a-required-field
title: Disabled button with a required field
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- button
- form
diff --git a/docs/src/content/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily/index.mdx b/docs/src/content/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily/index.mdx
index ba920ccf82..ab1bc725cb 100644
--- a/docs/src/content/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily/index.mdx
+++ b/docs/src/content/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily/index.mdx
@@ -1,10 +1,8 @@
---
id: display-numbers-in-a-table-so-they-can-be-scanned-easily
title: Display numbers in a table so they can be scanned easily
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- numbers
diff --git a/docs/src/content/examples/display-user-information/index.mdx b/docs/src/content/examples/display-user-information/index.mdx
index 6fc54f492b..ba97c6141a 100644
--- a/docs/src/content/examples/display-user-information/index.mdx
+++ b/docs/src/content/examples/display-user-information/index.mdx
@@ -1,10 +1,8 @@
---
id: display-user-information
title: Display user information
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- container
- user-info
diff --git a/docs/src/content/examples/dynamically-add-an-item-to-a-dropdown-list/index.mdx b/docs/src/content/examples/dynamically-add-an-item-to-a-dropdown-list/index.mdx
index 00d5cb5551..96f1f8d3d2 100644
--- a/docs/src/content/examples/dynamically-add-an-item-to-a-dropdown-list/index.mdx
+++ b/docs/src/content/examples/dynamically-add-an-item-to-a-dropdown-list/index.mdx
@@ -1,10 +1,7 @@
---
id: dynamically-add-an-item-to-a-dropdown-list
title: Dynamically add an item to a dropdown list
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- dropdown
- dynamic
diff --git a/docs/src/content/examples/dynamically-change-items-in-a-dropdown-list/index.mdx b/docs/src/content/examples/dynamically-change-items-in-a-dropdown-list/index.mdx
index 2483250d66..faa2b79321 100644
--- a/docs/src/content/examples/dynamically-change-items-in-a-dropdown-list/index.mdx
+++ b/docs/src/content/examples/dynamically-change-items-in-a-dropdown-list/index.mdx
@@ -1,10 +1,7 @@
---
id: dynamically-change-items-in-a-dropdown-list
title: Dynamically change items in a dropdown list
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- dropdown
- dynamic
diff --git a/docs/src/content/examples/401-error-page/angular.html b/docs/src/content/examples/error-pages/401/angular.html
similarity index 100%
rename from docs/src/content/examples/401-error-page/angular.html
rename to docs/src/content/examples/error-pages/401/angular.html
diff --git a/docs/src/content/examples/401-error-page/angular.ts b/docs/src/content/examples/error-pages/401/angular.ts
similarity index 100%
rename from docs/src/content/examples/401-error-page/angular.ts
rename to docs/src/content/examples/error-pages/401/angular.ts
diff --git a/docs/src/content/examples/401-error-page/react.tsx b/docs/src/content/examples/error-pages/401/react.tsx
similarity index 100%
rename from docs/src/content/examples/401-error-page/react.tsx
rename to docs/src/content/examples/error-pages/401/react.tsx
diff --git a/docs/src/content/examples/401-error-page/web-components.html b/docs/src/content/examples/error-pages/401/web-components.html
similarity index 100%
rename from docs/src/content/examples/401-error-page/web-components.html
rename to docs/src/content/examples/error-pages/401/web-components.html
diff --git a/docs/src/content/examples/404-error-page/angular.html b/docs/src/content/examples/error-pages/404/angular.html
similarity index 100%
rename from docs/src/content/examples/404-error-page/angular.html
rename to docs/src/content/examples/error-pages/404/angular.html
diff --git a/docs/src/content/examples/404-error-page/angular.ts b/docs/src/content/examples/error-pages/404/angular.ts
similarity index 100%
rename from docs/src/content/examples/404-error-page/angular.ts
rename to docs/src/content/examples/error-pages/404/angular.ts
diff --git a/docs/src/content/examples/404-error-page/react.tsx b/docs/src/content/examples/error-pages/404/react.tsx
similarity index 100%
rename from docs/src/content/examples/404-error-page/react.tsx
rename to docs/src/content/examples/error-pages/404/react.tsx
diff --git a/docs/src/content/examples/404-error-page/web-components.html b/docs/src/content/examples/error-pages/404/web-components.html
similarity index 100%
rename from docs/src/content/examples/404-error-page/web-components.html
rename to docs/src/content/examples/error-pages/404/web-components.html
diff --git a/docs/src/content/examples/500-error-page/angular.html b/docs/src/content/examples/error-pages/500/angular.html
similarity index 100%
rename from docs/src/content/examples/500-error-page/angular.html
rename to docs/src/content/examples/error-pages/500/angular.html
diff --git a/docs/src/content/examples/500-error-page/angular.ts b/docs/src/content/examples/error-pages/500/angular.ts
similarity index 100%
rename from docs/src/content/examples/500-error-page/angular.ts
rename to docs/src/content/examples/error-pages/500/angular.ts
diff --git a/docs/src/content/examples/500-error-page/react.tsx b/docs/src/content/examples/error-pages/500/react.tsx
similarity index 100%
rename from docs/src/content/examples/500-error-page/react.tsx
rename to docs/src/content/examples/error-pages/500/react.tsx
diff --git a/docs/src/content/examples/500-error-page/web-components.html b/docs/src/content/examples/error-pages/500/web-components.html
similarity index 100%
rename from docs/src/content/examples/500-error-page/web-components.html
rename to docs/src/content/examples/error-pages/500/web-components.html
diff --git a/docs/src/content/examples/error-pages/index.mdx b/docs/src/content/examples/error-pages/index.mdx
new file mode 100644
index 0000000000..f63761dab3
--- /dev/null
+++ b/docs/src/content/examples/error-pages/index.mdx
@@ -0,0 +1,90 @@
+---
+id: error-pages
+title: Error pages
+size: page
+description: Standard error screens for Government of Alberta services. Use when a user lands somewhere that is missing, forbidden, or broken so they understand what happened and what to do next.
+previewImage: /thumbnails/error-pages-404.png
+hideHero: true
+components:
+ - page-block
+ - block
+ - text
+ - icon
+ - link
+ - button
+tags:
+ - error
+ - error page
+ - "401"
+ - "404"
+ - "500"
+ - page not found
+ - unauthorized
+ - restricted access
+ - server error
+ - server problem
+ - page-structure
+aliases:
+ - 401-error-page
+ - 404-error-page
+ - 500-error-page
+status: published
+---
+
+import PreviewContainer from "../../../components/PreviewContainer.astro";
+
+## Types of error pages
+
+### Restricted access (401)
+
+The user is not authorized, either because they need to sign in or because they lack the right permission.
+
+
+
+### Page not found (404)
+
+The page does not exist, usually because of a typo, a stale bookmark, or a deleted resource.
+
+
+
+### Server problem (500)
+
+A server-side error has interrupted the request, and there is nothing the user can do to fix it.
+
+
+
+## When to use
+
+Every service needs a story for the moments where something has gone wrong. These pages are the baseline. Each one is a small, self-contained page composition you drop into an existing service as a single route, no starter repo needed. Use them as the routes behind your router's catch-all outlets, or as the fallback view your outer error boundary renders when nothing else caught the failure.
+
+## Considerations
+
+- **Use plain language.** Explain what happened in one short sentence. "Page not found" beats "HTTP 404 resource unavailable".
+- **Offer a way back.** A home link is the usual fallback. Add a contact link when the user may need help.
+- **Keep the tone helpful, not accusatory.** Do not blame the user for the error, especially for 500-level failures the user could not have caused.
+- **Avoid exposing technical detail** like raw error codes, stack traces, or correlation IDs. Log them instead. If support needs a correlation id, give the user only what is useful.
+- **Do not render the service's navigation** on the error page. The error page is its own context.
+
+## How these pages are built
+
+Each error page is a composition of GoA components: `goa-page-block`, `goa-block`, `goa-text`, `goa-icon`, `goa-button`, and `goa-link` (on 401). A small amount of custom CSS covers the icon-in-circle treatment, accent bar, centred text, and icon scaling. Those are gaps the design system has not absorbed yet and are tracked for follow-up.
+
+Framework variants for React, Angular, and Web Components live alongside each preview route as sibling files. Click the React or Angular icon on a preview to open the folder on GitHub and copy the framework file you need.
diff --git a/docs/src/content/examples/expand-or-collapse-part-of-a-form/index.mdx b/docs/src/content/examples/expand-or-collapse-part-of-a-form/index.mdx
index 45de6c5213..1000f44979 100644
--- a/docs/src/content/examples/expand-or-collapse-part-of-a-form/index.mdx
+++ b/docs/src/content/examples/expand-or-collapse-part-of-a-form/index.mdx
@@ -1,10 +1,7 @@
---
id: expand-or-collapse-part-of-a-form
title: Expand or collapse part of a form
-categories:
- - forms
-scale: task
-userType: both
+size: section
tags:
- accordion
- form
diff --git a/docs/src/content/examples/filter-a-list-using-a-push-drawer/index.mdx b/docs/src/content/examples/filter-a-list-using-a-push-drawer/index.mdx
index 849448de0b..bd47c8df1f 100644
--- a/docs/src/content/examples/filter-a-list-using-a-push-drawer/index.mdx
+++ b/docs/src/content/examples/filter-a-list-using-a-push-drawer/index.mdx
@@ -1,10 +1,8 @@
---
id: filter-a-list-using-a-push-drawer
title: Filter a list using a push drawer
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- push-drawer
- filters
diff --git a/docs/src/content/examples/filter-data-in-a-table/index.mdx b/docs/src/content/examples/filter-data-in-a-table/index.mdx
index eba9122846..87c18fc8c5 100644
--- a/docs/src/content/examples/filter-data-in-a-table/index.mdx
+++ b/docs/src/content/examples/filter-data-in-a-table/index.mdx
@@ -1,10 +1,8 @@
---
id: filter-data-in-a-table
title: Filter data in a table
-categories:
- - structure-and-navigation
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- filter
diff --git a/docs/src/content/examples/form-stepper-with-controlled-navigation/index.mdx b/docs/src/content/examples/form-stepper-with-controlled-navigation/index.mdx
index c4fbd42920..828af8de86 100644
--- a/docs/src/content/examples/form-stepper-with-controlled-navigation/index.mdx
+++ b/docs/src/content/examples/form-stepper-with-controlled-navigation/index.mdx
@@ -1,10 +1,7 @@
---
id: form-stepper-with-controlled-navigation
title: Form stepper with controlled navigation
-categories:
- - forms
-scale: task
-userType: both
+size: section
tags:
- stepper
- form
@@ -20,6 +17,7 @@ components:
- skeleton
- spacer
status: published
+hidden: true
previewImage: /images/examples/form-stepper-with-controlled-navigation.webp
---
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-a/index.mdx b/docs/src/content/examples/give-more-information-before-asking-a-question-a/index.mdx
deleted file mode 100644
index d8148b2215..0000000000
--- a/docs/src/content/examples/give-more-information-before-asking-a-question-a/index.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
----
-id: give-more-information-before-asking-a-question-a
-title: Give more information before asking a question (a)
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - form
- - question
- - context
- - radio
- - citizen-facing
-components:
- - form-item
- - radio-group
- - radio-item
- - button
-figmaUrl: https://www.figma.com/design/Jpy1Ea5qglwnp1SgGnagY9/%E2%9D%96-Component-library-%7C-DDD?node-id=63353-114502
-status: published
-previewImage: /images/examples/give-more-information-before-asking-a-question-a.webp
----
-
-Provide explanatory context before asking a question to help users understand what is being asked.
-
-## When to use
-
-Use this pattern when:
-
-- The question requires domain knowledge to answer correctly
-- Terms need clarification for users unfamiliar with the subject
-- Providing context will reduce confusion and incorrect answers
-- Building citizen-facing forms where accessibility of information is important
-
-## Considerations
-
-- Place context information before the question, not after
-- Use clear, plain language that citizens can understand
-- Suggest where users can get additional help if needed
-- Keep explanatory text focused and relevant to the question
-- Use appropriate heading hierarchy for screen reader accessibility
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-b/index.mdx b/docs/src/content/examples/give-more-information-before-asking-a-question-b/index.mdx
deleted file mode 100644
index 5bac4b1a12..0000000000
--- a/docs/src/content/examples/give-more-information-before-asking-a-question-b/index.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
----
-id: give-more-information-before-asking-a-question-b
-title: Give more information before asking a question (b)
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - form
- - text-area
- - question
- - context
- - details
- - citizen-facing
-components:
- - text-area
- - form-item
- - details
- - button
- - button-group
-figmaUrl: https://www.figma.com/design/Jpy1Ea5qglwnp1SgGnagY9/%E2%9D%96-Component-library-%7C-DDD?node-id=63353-124277
-status: published
-previewImage: /images/examples/give-more-information-before-asking-a-question-b.webp
----
-
-Provide context and guidance before a long-answer text field to help users provide relevant information.
-
-## When to use
-
-Use this pattern when:
-
-- Asking open-ended questions that require detailed responses
-- Users may not know what information is most helpful to provide
-- You want to encourage more useful and complete answers
-- Building citizen-facing forms with benefit inquiries or support requests
-
-## Considerations
-
-- Explain the purpose of the question briefly
-- Use a Details component to provide additional guidance without cluttering the form
-- Set appropriate character limits with `maxCount` and `countBy` props
-- Keep instructions focused on what will help process their request
diff --git a/docs/src/content/examples/group-related-questions-together-on-a-question-page/index.mdx b/docs/src/content/examples/group-related-questions-together-on-a-question-page/index.mdx
deleted file mode 100644
index 2ef206a635..0000000000
--- a/docs/src/content/examples/group-related-questions-together-on-a-question-page/index.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-id: group-related-questions-together-on-a-question-page
-title: Group related questions together on a question page
-categories:
- - forms
-scale: page
-userType: citizen
-tags:
- - forms
- - address
- - question-page
-components:
- - form-item
- - input
- - dropdown
- - dropdown-item
- - button
-status: published
-previewImage: /images/examples/group-related-questions-together-on-a-question-page.webp
----
-
-Group related form fields together on a single page to collect address information from users, making it easier to complete logically connected questions at once.
-
-## When to use
-
-Use this pattern when:
-
-- Collecting address or contact information
-- Form fields are logically related and should be completed together
-- Users need context between related fields
-- Following a question page pattern in a multi-step form
-
-## Considerations
-
-- Use clear, descriptive labels for each form field
-- Include a back link for navigation in multi-step forms
-- Consider adding a section title and subtitle to provide context
-- Use appropriate input widths based on expected content length
diff --git a/docs/src/content/examples/header-with-navigation/index.mdx b/docs/src/content/examples/header-with-navigation/index.mdx
index 9e74923314..fab1cfb61e 100644
--- a/docs/src/content/examples/header-with-navigation/index.mdx
+++ b/docs/src/content/examples/header-with-navigation/index.mdx
@@ -1,10 +1,7 @@
---
id: header-with-navigation
title: Header with navigation
-categories:
- - structure-and-navigation
-scale: task
-userType: both
+size: section
tags:
- header
- navigation
diff --git a/docs/src/content/examples/hero-banner-with-actions/index.mdx b/docs/src/content/examples/hero-banner-with-actions/index.mdx
index 7ffbec3a29..198631f2cc 100644
--- a/docs/src/content/examples/hero-banner-with-actions/index.mdx
+++ b/docs/src/content/examples/hero-banner-with-actions/index.mdx
@@ -1,10 +1,7 @@
---
id: hero-banner-with-actions
title: Hero banner with actions
-categories:
- - content-layout
-scale: task
-userType: both
+size: section
tags:
- hero
- banner
diff --git a/docs/src/content/examples/hide-and-show-many-sections-of-information/index.mdx b/docs/src/content/examples/hide-and-show-many-sections-of-information/index.mdx
index 38f18d8ec3..c8711b025d 100644
--- a/docs/src/content/examples/hide-and-show-many-sections-of-information/index.mdx
+++ b/docs/src/content/examples/hide-and-show-many-sections-of-information/index.mdx
@@ -1,10 +1,7 @@
---
id: hide-and-show-many-sections-of-information
title: Hide and show many sections of information
-categories:
- - content-layout
-scale: task
-userType: both
+size: section
tags:
- accordion
- expand
diff --git a/docs/src/content/examples/include-a-link-in-the-helper-text-of-an-option/index.mdx b/docs/src/content/examples/include-a-link-in-the-helper-text-of-an-option/index.mdx
index 0780b6cc89..8f62fd102a 100644
--- a/docs/src/content/examples/include-a-link-in-the-helper-text-of-an-option/index.mdx
+++ b/docs/src/content/examples/include-a-link-in-the-helper-text-of-an-option/index.mdx
@@ -1,10 +1,7 @@
---
id: include-a-link-in-the-helper-text-of-an-option
title: Include a link in the helper text of an option
-categories:
- - forms
-scale: interaction
-userType: both
+size: interaction
tags:
- checkbox
- helper-text
diff --git a/docs/src/content/examples/include-descriptions-for-items-in-a-checkbox-list/index.mdx b/docs/src/content/examples/include-descriptions-for-items-in-a-checkbox-list/index.mdx
index a11ec10c91..bc7279bf16 100644
--- a/docs/src/content/examples/include-descriptions-for-items-in-a-checkbox-list/index.mdx
+++ b/docs/src/content/examples/include-descriptions-for-items-in-a-checkbox-list/index.mdx
@@ -1,10 +1,7 @@
---
id: include-descriptions-for-items-in-a-checkbox-list
title: Include descriptions for items in a checkbox list
-categories:
- - forms
-scale: task
-userType: both
+size: interaction
tags:
- radio
- descriptions
diff --git a/docs/src/content/examples/link-the-user-to-give-feedback-to-the-service/index.mdx b/docs/src/content/examples/link-the-user-to-give-feedback-to-the-service/index.mdx
index 3ab774ec01..9bde96ed10 100644
--- a/docs/src/content/examples/link-the-user-to-give-feedback-to-the-service/index.mdx
+++ b/docs/src/content/examples/link-the-user-to-give-feedback-to-the-service/index.mdx
@@ -1,10 +1,7 @@
---
id: link-the-user-to-give-feedback-to-the-service
title: Link the user to give feedback to the service
-categories:
- - feedback-and-alerts
-scale: interaction
-userType: citizen
+size: interaction
tags:
- feedback
- microsite-header
diff --git a/docs/src/content/examples/link-to-an-external-page/index.mdx b/docs/src/content/examples/link-to-an-external-page/index.mdx
index e4d40ddb4a..aae56271e6 100644
--- a/docs/src/content/examples/link-to-an-external-page/index.mdx
+++ b/docs/src/content/examples/link-to-an-external-page/index.mdx
@@ -1,10 +1,7 @@
---
id: link-to-an-external-page
title: Link to an external page
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- link
- external
diff --git a/docs/src/content/examples/notify-the-user-of-a-future-service-outage/index.mdx b/docs/src/content/examples/notify-the-user-of-a-future-service-outage/index.mdx
index caca42817f..bc55fd54ca 100644
--- a/docs/src/content/examples/notify-the-user-of-a-future-service-outage/index.mdx
+++ b/docs/src/content/examples/notify-the-user-of-a-future-service-outage/index.mdx
@@ -1,10 +1,7 @@
---
id: notify-the-user-of-a-future-service-outage
title: Notify the user of a future service outage
-categories:
- - feedback-and-alerts
-scale: task
-userType: both
+size: interaction
tags:
- notification
- maintenance
diff --git a/docs/src/content/examples/public-form/angular.html b/docs/src/content/examples/public-form/angular.html
deleted file mode 100644
index 1849c5cc42..0000000000
--- a/docs/src/content/examples/public-form/angular.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- Primary users: citizens, public, external
- You are designing a public service for citizens. It should be designed to be as simple
- and intuitive as possible, while ensuring citizens can make complete and informed
- decisions for themselves using the service.
-
- There is an emphasis on an accessible experience with a low cognitive load for users
- who use the service infrequently.
-
-
-
-Pages
-
-
-
- 1. Start page
-
- This is the starting point for a citizen to begin your form from within your service
- or from Alberta.ca.
-
-
- 2. Task list page (optional)
-
- Outline the entire process for the user and help them through the process by
- breaking down an experience into individual tasks.
-
-
- 3. Question pages
-
- Ask a user a question or a small set of related questions.
-
-
- 4. Review page
-
- Let users check answers before submitting information to a service.
-
-
- 5. Results page
-
- Let users know that they've completed a form, application, or task and tell them
- what to do next.
-
-
-
diff --git a/docs/src/content/examples/public-form/angular.ts b/docs/src/content/examples/public-form/angular.ts
deleted file mode 100644
index fb2b7a40ae..0000000000
--- a/docs/src/content/examples/public-form/angular.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { Component } from "@angular/core";
-
-@Component({
- selector: "app-public-form",
- templateUrl: "./angular.html",
-})
-export class PublicFormComponent {}
diff --git a/docs/src/content/examples/public-form/index.mdx b/docs/src/content/examples/public-form/index.mdx
deleted file mode 100644
index 969e089442..0000000000
--- a/docs/src/content/examples/public-form/index.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
----
-id: public-form
-title: Public form
-categories:
- - forms
-scale: product
-userType: citizen
-tags:
- - form
- - public
- - citizen
- - pattern
-components: []
-status: published
-previewImage: /images/examples/public-form.webp
----
-
-The public form pattern provides a structure for citizen-facing form experiences, emphasizing simplicity, accessibility, and low cognitive load.
-
-## When to use
-
-Use this pattern when:
-
-- Designing a public service for citizens
-- Building forms that should be simple and intuitive
-- Users need to make informed decisions while completing the form
-- The service should accommodate users who use it infrequently
-
-## Considerations
-
-- Follow the "one idea per page" principle to reduce cognitive load
-- Break complex forms into multiple pages with single questions
-- Use task list pages for longer processes with multiple sections
-- Consider using simple progress indicators rather than horizontal steppers
-- Ensure all form elements meet WCAG 2.2 AA accessibility standards
diff --git a/docs/src/content/examples/public-form/react.tsx b/docs/src/content/examples/public-form/react.tsx
deleted file mode 100644
index bc97714020..0000000000
--- a/docs/src/content/examples/public-form/react.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { GoabDetails, GoabGrid, GoabText } from "@abgov/react-components";
-
-export function PublicForm() {
- return (
- <>
-
-
- Primary users: citizens, public, external
-
-
- You are designing a public service for citizens. It should be designed to be as
- simple and intuitive as possible, while ensuring citizens can make complete and
- informed decisions for themselves using the service.
-
-
- There is an emphasis on an accessible experience with a low cognitive load for
- users who use the service infrequently.
-
-
-
-
- Pages
-
-
-
-
-
- 1. Start page
-
-
- This is the starting point for a citizen to begin your form from within your
- service or from Alberta.ca.
-
-
-
- 2. Task list page (optional)
-
-
- Outline the entire process for the user and help them through the process by
- breaking down an experience into individual tasks.
-
-
-
- 3. Question pages
-
-
- Ask a user a question or a small set of related questions.
-
-
-
- 4. Review page
-
-
- Let users check answers before submitting information to a service.
-
-
-
- 5. Results page
-
-
- Let users know that they've completed a form, application, or task and tell
- them what to do next.
-
-
- You are designing a public service for citizens. It should be designed to be as simple
- and intuitive as possible, while ensuring citizens can make complete and informed
- decisions for themselves using the service.
-
- There is an emphasis on an accessible experience with a low cognitive load for users
- who use the service infrequently.
-
-
-
-Pages
-
-
-
- 1. Start page
-
- This is the starting point for a citizen to begin your form from within your service
- or from Alberta.ca.
-
-
- 2. Task list page (optional)
-
- Outline the entire process for the user and help them through the process by
- breaking down an experience into individual tasks.
-
-
- 3. Question pages
-
- Ask a user a question or a small set of related questions.
-
-
- 4. Review page
-
- Let users check answers before submitting information to a service.
-
-
- 5. Results page
-
- Let users know that they've completed a form, application, or task and tell them
- what to do next.
-
-
-
diff --git a/docs/src/content/examples/question-page/index.mdx b/docs/src/content/examples/question-page/index.mdx
index d23077989a..ab95516c23 100644
--- a/docs/src/content/examples/question-page/index.mdx
+++ b/docs/src/content/examples/question-page/index.mdx
@@ -1,39 +1,172 @@
---
id: question-page
title: Question page
-categories:
- - forms
-scale: page
-userType: citizen
+size: page
+productType: public-form
+description: "A question page presents one focused step in a multi-step form. Several variants adapt the shape: section titles, progress indicators, supporting context, expandable help, and grouped fields."
tags:
- forms
- question
- wizard
- one-thing-per-page
+ - public-form
+ - section-title
+ - progress
+ - context
+ - help
+ - details
+ - grouped-fields
+ - address
components:
- form-item
- input
+ - text-area
+ - radio-group
+ - radio-item
+ - dropdown
+ - dropdown-item
+ - details
+ - block
- button
- button-group
+aliases:
+ - ask-a-user-one-question-at-a-time
+ - give-more-information-before-asking-a-question-a
+ - give-more-information-before-asking-a-question-b
+ - show-more-information-to-help-answer-a-question
+ - show-a-list-to-help-answer-a-question
+ - show-a-section-title-on-a-question-page
+ - show-a-simple-progress-indicator-on-a-question-page
+ - show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions
+ - group-related-questions-together-on-a-question-page
status: published
-previewImage: /images/examples/question-page.webp
+previewImage: /images/examples/question-page.png
+hideHero: true
---
-A question page pattern that presents one question at a time to help users focus, reduce cognitive load, and navigate complex forms more easily.
+import PreviewContainer from "../../../components/PreviewContainer.astro";
+
+## Types of question pages
+
+### Ask one question at a time
+
+The default question page. One idea per page reduces cognitive load and keeps users moving through the flow.
+
+
+
+- Lead with a clear, plain-language question.
+- Use a large label size to make the question prominent.
+- Provide help text when the question could be ambiguous.
+- Pair a primary action button with a back link.
+
+### Show a section title
+
+Add a section title above the question to tell users which part of the form they are completing. Useful in multi-section forms divided into logical groups like "Personal information" or "Employment history."
+
+
+
+- Use a subdued text color so the section title sits above the question without competing with it.
+- Keep the title concise and descriptive.
+- Maintain consistent spacing between back link, section title, and question across the form.
+
+### Show a progress indicator
+
+Show progress to help users understand how far they are through the form. Use "Question X of Y" for single-question pages, or "Step X of Y" when grouping multiple related questions into sections.
+
+
+
+- Display progress consistently across the form ("Question X of Y" for single-question pages, "Step X of Y" for multi-question sections).
+- Use a subdued text color so the indicator sits above the question.
+- Position above the question, below the back link.
+
+For step-based progress when grouping multiple questions into sections, see the [progress-indicator-multi variant on GitHub](https://github.com/GovAlta/ui-components/tree/dev/docs/src/content/examples/question-page/variants/progress-indicator-multi).
+
+### Give background information before asking
+
+Provide explanatory context before a question when the question requires domain knowledge or terms that may need clarification.
+
+
+
+- Place context information before the question, not after.
+- Use plain language citizens can understand.
+- Suggest where users can get additional help if needed.
+
+For an open-ended question with a long-answer textarea, the same pattern applies with a Details component for additional guidance. See the [background-textarea variant on GitHub](https://github.com/GovAlta/ui-components/tree/dev/docs/src/content/examples/question-page/variants/background-textarea).
+
+### Reveal more information to help answer
+
+Use the Details component to provide optional context that explains why a question is being asked, or that lists examples of qualifying items. The expandable shape keeps the form uncluttered for users who do not need the help.
+
+
+
+- Place the Details component after the question input.
+- Phrase the Details heading as a question (e.g. "Why are we asking this question?") so users know it provides clarification.
+- Keep the expanded content concise, scannable, and easy to act on.
+
+When the help content is a list of examples (what to include, what to exclude), structure the expanded content with clear headings. See the [help-list variant on GitHub](https://github.com/GovAlta/ui-components/tree/dev/docs/src/content/examples/question-page/variants/help-list).
+
+### Group related questions on one page
+
+When fields are tightly related and harder to answer in isolation, group them on one page. The typical case is collecting an address, where street, town, province, and postal code naturally belong together.
+
+
+
+- Group fields only when the whole group answers one logical question. Do not group unrelated questions just to fit them on one page.
+- Use clear, descriptive labels per field.
+- Add a section title above the group to provide context.
+- Use input widths appropriate to the expected content (postal code narrower than street).
## When to use
Use this pattern when:
-- Building multi-step forms or wizards
-- Asking users for information that requires focused attention
-- The form has branching logic based on user responses
-- You want to reduce cognitive load and errors
+- Building multi-step forms or wizards where users complete one decision at a time
+- Asking for information that requires focused attention or careful consideration
+- The form has branching logic based on previous answers
+- You want to reduce errors and improve mobile and accessibility outcomes
## Considerations
-- Each page should contain one idea: one question, one decision, or one piece of information
-- Progress indicators are optional - test without one first
-- The pattern helps with mobile responsiveness and accessibility
-- Enables automatic saving and better error handling
+- Each page should contain one idea: one question, one decision, or one logically grouped set of fields
+- Include a back link so users can revise previous answers
+- Use a large label size to make the question prominent
+- Provide help text when wording could be ambiguous
+- A clear primary action progresses the user; a back link returns them
+- Progress indicators are optional. Test the form without one before adding one.
- Consider adaptive questioning where subsequent questions depend on previous answers
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-a/angular.html b/docs/src/content/examples/question-page/variants/background-radio/angular.html
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-a/angular.html
rename to docs/src/content/examples/question-page/variants/background-radio/angular.html
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-a/angular.ts b/docs/src/content/examples/question-page/variants/background-radio/angular.ts
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-a/angular.ts
rename to docs/src/content/examples/question-page/variants/background-radio/angular.ts
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-a/react.tsx b/docs/src/content/examples/question-page/variants/background-radio/react.tsx
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-a/react.tsx
rename to docs/src/content/examples/question-page/variants/background-radio/react.tsx
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-a/web-components.html b/docs/src/content/examples/question-page/variants/background-radio/web-components.html
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-a/web-components.html
rename to docs/src/content/examples/question-page/variants/background-radio/web-components.html
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-b/angular.html b/docs/src/content/examples/question-page/variants/background-textarea/angular.html
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-b/angular.html
rename to docs/src/content/examples/question-page/variants/background-textarea/angular.html
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-b/angular.ts b/docs/src/content/examples/question-page/variants/background-textarea/angular.ts
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-b/angular.ts
rename to docs/src/content/examples/question-page/variants/background-textarea/angular.ts
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-b/react.tsx b/docs/src/content/examples/question-page/variants/background-textarea/react.tsx
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-b/react.tsx
rename to docs/src/content/examples/question-page/variants/background-textarea/react.tsx
diff --git a/docs/src/content/examples/give-more-information-before-asking-a-question-b/web-components.html b/docs/src/content/examples/question-page/variants/background-textarea/web-components.html
similarity index 100%
rename from docs/src/content/examples/give-more-information-before-asking-a-question-b/web-components.html
rename to docs/src/content/examples/question-page/variants/background-textarea/web-components.html
diff --git a/docs/src/content/examples/group-related-questions-together-on-a-question-page/angular.html b/docs/src/content/examples/question-page/variants/grouped/angular.html
similarity index 100%
rename from docs/src/content/examples/group-related-questions-together-on-a-question-page/angular.html
rename to docs/src/content/examples/question-page/variants/grouped/angular.html
diff --git a/docs/src/content/examples/group-related-questions-together-on-a-question-page/angular.ts b/docs/src/content/examples/question-page/variants/grouped/angular.ts
similarity index 100%
rename from docs/src/content/examples/group-related-questions-together-on-a-question-page/angular.ts
rename to docs/src/content/examples/question-page/variants/grouped/angular.ts
diff --git a/docs/src/content/examples/group-related-questions-together-on-a-question-page/react.tsx b/docs/src/content/examples/question-page/variants/grouped/react.tsx
similarity index 100%
rename from docs/src/content/examples/group-related-questions-together-on-a-question-page/react.tsx
rename to docs/src/content/examples/question-page/variants/grouped/react.tsx
diff --git a/docs/src/content/examples/group-related-questions-together-on-a-question-page/web-components.html b/docs/src/content/examples/question-page/variants/grouped/web-components.html
similarity index 100%
rename from docs/src/content/examples/group-related-questions-together-on-a-question-page/web-components.html
rename to docs/src/content/examples/question-page/variants/grouped/web-components.html
diff --git a/docs/src/content/examples/show-more-information-to-help-answer-a-question/angular.html b/docs/src/content/examples/question-page/variants/help-details/angular.html
similarity index 100%
rename from docs/src/content/examples/show-more-information-to-help-answer-a-question/angular.html
rename to docs/src/content/examples/question-page/variants/help-details/angular.html
diff --git a/docs/src/content/examples/show-more-information-to-help-answer-a-question/angular.ts b/docs/src/content/examples/question-page/variants/help-details/angular.ts
similarity index 100%
rename from docs/src/content/examples/show-more-information-to-help-answer-a-question/angular.ts
rename to docs/src/content/examples/question-page/variants/help-details/angular.ts
diff --git a/docs/src/content/examples/show-more-information-to-help-answer-a-question/react.tsx b/docs/src/content/examples/question-page/variants/help-details/react.tsx
similarity index 100%
rename from docs/src/content/examples/show-more-information-to-help-answer-a-question/react.tsx
rename to docs/src/content/examples/question-page/variants/help-details/react.tsx
diff --git a/docs/src/content/examples/show-more-information-to-help-answer-a-question/web-components.html b/docs/src/content/examples/question-page/variants/help-details/web-components.html
similarity index 100%
rename from docs/src/content/examples/show-more-information-to-help-answer-a-question/web-components.html
rename to docs/src/content/examples/question-page/variants/help-details/web-components.html
diff --git a/docs/src/content/examples/show-a-list-to-help-answer-a-question/angular.html b/docs/src/content/examples/question-page/variants/help-list/angular.html
similarity index 100%
rename from docs/src/content/examples/show-a-list-to-help-answer-a-question/angular.html
rename to docs/src/content/examples/question-page/variants/help-list/angular.html
diff --git a/docs/src/content/examples/show-a-list-to-help-answer-a-question/angular.ts b/docs/src/content/examples/question-page/variants/help-list/angular.ts
similarity index 100%
rename from docs/src/content/examples/show-a-list-to-help-answer-a-question/angular.ts
rename to docs/src/content/examples/question-page/variants/help-list/angular.ts
diff --git a/docs/src/content/examples/show-a-list-to-help-answer-a-question/react.tsx b/docs/src/content/examples/question-page/variants/help-list/react.tsx
similarity index 100%
rename from docs/src/content/examples/show-a-list-to-help-answer-a-question/react.tsx
rename to docs/src/content/examples/question-page/variants/help-list/react.tsx
diff --git a/docs/src/content/examples/show-a-list-to-help-answer-a-question/web-components.html b/docs/src/content/examples/question-page/variants/help-list/web-components.html
similarity index 100%
rename from docs/src/content/examples/show-a-list-to-help-answer-a-question/web-components.html
rename to docs/src/content/examples/question-page/variants/help-list/web-components.html
diff --git a/docs/src/content/examples/question-page/angular.html b/docs/src/content/examples/question-page/variants/one-question/angular.html
similarity index 100%
rename from docs/src/content/examples/question-page/angular.html
rename to docs/src/content/examples/question-page/variants/one-question/angular.html
diff --git a/docs/src/content/examples/question-page/angular.ts b/docs/src/content/examples/question-page/variants/one-question/angular.ts
similarity index 100%
rename from docs/src/content/examples/question-page/angular.ts
rename to docs/src/content/examples/question-page/variants/one-question/angular.ts
diff --git a/docs/src/content/examples/question-page/react.tsx b/docs/src/content/examples/question-page/variants/one-question/react.tsx
similarity index 100%
rename from docs/src/content/examples/question-page/react.tsx
rename to docs/src/content/examples/question-page/variants/one-question/react.tsx
diff --git a/docs/src/content/examples/question-page/web-components.html b/docs/src/content/examples/question-page/variants/one-question/web-components.html
similarity index 100%
rename from docs/src/content/examples/question-page/web-components.html
rename to docs/src/content/examples/question-page/variants/one-question/web-components.html
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/angular.html b/docs/src/content/examples/question-page/variants/progress-indicator-multi/angular.html
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/angular.html
rename to docs/src/content/examples/question-page/variants/progress-indicator-multi/angular.html
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/angular.ts b/docs/src/content/examples/question-page/variants/progress-indicator-multi/angular.ts
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/angular.ts
rename to docs/src/content/examples/question-page/variants/progress-indicator-multi/angular.ts
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/react.tsx b/docs/src/content/examples/question-page/variants/progress-indicator-multi/react.tsx
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/react.tsx
rename to docs/src/content/examples/question-page/variants/progress-indicator-multi/react.tsx
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/web-components.html b/docs/src/content/examples/question-page/variants/progress-indicator-multi/web-components.html
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/web-components.html
rename to docs/src/content/examples/question-page/variants/progress-indicator-multi/web-components.html
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/angular.html b/docs/src/content/examples/question-page/variants/progress-indicator/angular.html
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/angular.html
rename to docs/src/content/examples/question-page/variants/progress-indicator/angular.html
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/angular.ts b/docs/src/content/examples/question-page/variants/progress-indicator/angular.ts
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/angular.ts
rename to docs/src/content/examples/question-page/variants/progress-indicator/angular.ts
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/react.tsx b/docs/src/content/examples/question-page/variants/progress-indicator/react.tsx
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/react.tsx
rename to docs/src/content/examples/question-page/variants/progress-indicator/react.tsx
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/web-components.html b/docs/src/content/examples/question-page/variants/progress-indicator/web-components.html
similarity index 100%
rename from docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/web-components.html
rename to docs/src/content/examples/question-page/variants/progress-indicator/web-components.html
diff --git a/docs/src/content/examples/show-a-section-title-on-a-question-page/angular.html b/docs/src/content/examples/question-page/variants/section-title/angular.html
similarity index 100%
rename from docs/src/content/examples/show-a-section-title-on-a-question-page/angular.html
rename to docs/src/content/examples/question-page/variants/section-title/angular.html
diff --git a/docs/src/content/examples/show-a-section-title-on-a-question-page/angular.ts b/docs/src/content/examples/question-page/variants/section-title/angular.ts
similarity index 100%
rename from docs/src/content/examples/show-a-section-title-on-a-question-page/angular.ts
rename to docs/src/content/examples/question-page/variants/section-title/angular.ts
diff --git a/docs/src/content/examples/show-a-section-title-on-a-question-page/react.tsx b/docs/src/content/examples/question-page/variants/section-title/react.tsx
similarity index 100%
rename from docs/src/content/examples/show-a-section-title-on-a-question-page/react.tsx
rename to docs/src/content/examples/question-page/variants/section-title/react.tsx
diff --git a/docs/src/content/examples/show-a-section-title-on-a-question-page/web-components.html b/docs/src/content/examples/question-page/variants/section-title/web-components.html
similarity index 100%
rename from docs/src/content/examples/show-a-section-title-on-a-question-page/web-components.html
rename to docs/src/content/examples/question-page/variants/section-title/web-components.html
diff --git a/docs/src/content/examples/remove-a-filter/index.mdx b/docs/src/content/examples/remove-a-filter/index.mdx
index c1e7603a90..7b8f0e3f21 100644
--- a/docs/src/content/examples/remove-a-filter/index.mdx
+++ b/docs/src/content/examples/remove-a-filter/index.mdx
@@ -1,10 +1,7 @@
---
id: remove-a-filter
title: Remove a filter
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- filtering
- chips
diff --git a/docs/src/content/examples/require-user-action-before-continuing/index.mdx b/docs/src/content/examples/require-user-action-before-continuing/index.mdx
index 432bbf909a..4ca615f207 100644
--- a/docs/src/content/examples/require-user-action-before-continuing/index.mdx
+++ b/docs/src/content/examples/require-user-action-before-continuing/index.mdx
@@ -1,10 +1,7 @@
---
id: require-user-action-before-continuing
title: Require user action before continuing
-categories:
- - forms
-scale: task
-userType: both
+size: interaction
tags:
- modal
- confirmation
diff --git a/docs/src/content/examples/reset-date-picker-field/index.mdx b/docs/src/content/examples/reset-date-picker-field/index.mdx
index c8e25f1b3d..cc0efda327 100644
--- a/docs/src/content/examples/reset-date-picker-field/index.mdx
+++ b/docs/src/content/examples/reset-date-picker-field/index.mdx
@@ -1,10 +1,7 @@
---
id: reset-date-picker-field
title: Reset date picker field
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- date-picker
- form
diff --git a/docs/src/content/examples/result-page/index.mdx b/docs/src/content/examples/result-page/index.mdx
index 7f4187c23d..32aff76624 100644
--- a/docs/src/content/examples/result-page/index.mdx
+++ b/docs/src/content/examples/result-page/index.mdx
@@ -1,38 +1,42 @@
---
id: result-page
title: Result page
-categories:
- - forms
-scale: page
-userType: citizen
+size: page
+productType: public-form
+description: A result page shown after a citizen has submitted a form, application, or task. Confirms success, explains what happens next, and points the user at any follow-up actions.
tags:
- confirmation
- success
- completion
- forms
+ - application
components:
- block
- callout
+ - button
+ - button-group
+aliases:
+ - confirm-that-an-application-was-submitted
status: published
-previewImage: /images/examples/result-page.webp
+previewImage: /images/examples/result-page.png
---
-A result page shown after form submission to confirm success, provide next steps, and offer relevant contact information.
+## When to use a result page
-## When to use
+Use a result page when a user has submitted a form, application, or task, and there is a result to show them.
-Use this pattern when:
+## What content to include
-- A user has submitted a form or application
-- You need to confirm successful completion of a process
-- There is important follow-up information to communicate
-- Users need reference numbers or confirmation details
+- details of what happens next, and when
+- a reference number, if applicable
+- a link to save a record of the confirmation, for example as a PDF
+- a link to give feedback on the service
+- contact details for the service
+- links to information or services that users are likely to need next
## Considerations
-- Include a reference number if applicable
-- Clearly explain what happens next and when
-- Provide a way to save or print the confirmation
-- Include service contact information for questions
-- Link to feedback forms and related services
-- Keep the success message clear and reassuring
+- Use a success callout to clearly indicate the submission was received
+- Mention where a confirmation email will be sent, if applicable
+- Keep the success message clear, reassuring, and short
+- Surface contact information so users can reach out if something is wrong
diff --git a/docs/src/content/examples/reveal-input-based-on-a-selection/index.mdx b/docs/src/content/examples/reveal-input-based-on-a-selection/index.mdx
index 3db92fe75c..6ea6be06c8 100644
--- a/docs/src/content/examples/reveal-input-based-on-a-selection/index.mdx
+++ b/docs/src/content/examples/reveal-input-based-on-a-selection/index.mdx
@@ -1,10 +1,7 @@
---
id: reveal-input-based-on-a-selection
title: Reveal input based on a selection
-categories:
- - forms
-scale: task
-userType: both
+size: interaction
tags:
- conditional
- reveal
diff --git a/docs/src/content/examples/review-and-action/index.mdx b/docs/src/content/examples/review-and-action/index.mdx
index 10644516e9..6deea2648f 100644
--- a/docs/src/content/examples/review-and-action/index.mdx
+++ b/docs/src/content/examples/review-and-action/index.mdx
@@ -1,10 +1,8 @@
---
id: review-and-action
title: Review and action
-categories:
- - structure-and-navigation
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- review
- action
diff --git a/docs/src/content/examples/review-page/index.mdx b/docs/src/content/examples/review-page/index.mdx
index e17cdd3ef5..46cf94c768 100644
--- a/docs/src/content/examples/review-page/index.mdx
+++ b/docs/src/content/examples/review-page/index.mdx
@@ -1,10 +1,9 @@
---
id: review-page
title: Review page
-categories:
- - forms
-scale: page
-userType: citizen
+size: page
+productType: public-form
+description: A review page lets a user check their answers at the end of a form or section before submitting. Each answer has a "change" link so the user can revise without starting over.
tags:
- review
- check-answers
@@ -15,25 +14,19 @@ components:
- button
- button-group
status: published
-previewImage: /images/examples/review-page.webp
+previewImage: /images/examples/review-page.png
---
-A review page where users can check their answers before submitting a form, with options to change individual responses.
+## When to use a review page
+
+Review and submit your answers at the end of a form or section.
-## When to use
+When designing a very large transaction with multiple sections, it may help to include a check-answers page at the end of each section.
-Use this pattern when:
+## Let users go back and change their answers
-- Users need to review their form answers before submission
-- At the end of a multi-step form or wizard
-- Before finalizing applications or important submissions
-- When accuracy of submitted information is critical
+Provide a "change" link next to each section so that users can add or change the information they are submitting.
-## Considerations
+If you have questions that are optional, let users know that they have skipped them without giving an answer by showing their response as "Not provided".
-- Display all answered questions with current values
-- Provide "Change" links for each answer
-- Show "Not provided" for skipped optional questions
-- Include visually hidden text in change links for accessibility
-- Consider grouping related answers under section headings
-- For large forms, consider review pages at the end of each section
+Include the full question name again in the change button as visually hidden text so that the screen reader reads out "change [question]" instead of just "change". This gives context to a user using assistive technologies while keeping the link simple for most users.
diff --git a/docs/src/content/examples/search/index.mdx b/docs/src/content/examples/search/index.mdx
index 8b677bebb9..ae597aed14 100644
--- a/docs/src/content/examples/search/index.mdx
+++ b/docs/src/content/examples/search/index.mdx
@@ -1,10 +1,7 @@
---
id: search
title: Search
-categories:
- - inputs-and-actions
-scale: task
-userType: both
+size: interaction
tags:
- search
- input
diff --git a/docs/src/content/examples/select-one-or-more-from-a-list-of-options/index.mdx b/docs/src/content/examples/select-one-or-more-from-a-list-of-options/index.mdx
index cda106545a..f37710f3ad 100644
--- a/docs/src/content/examples/select-one-or-more-from-a-list-of-options/index.mdx
+++ b/docs/src/content/examples/select-one-or-more-from-a-list-of-options/index.mdx
@@ -1,10 +1,7 @@
---
id: select-one-or-more-from-a-list-of-options
title: Select one or more from a list of options
-categories:
- - forms
-scale: task
-userType: both
+size: interaction
tags:
- checkbox
- selection
diff --git a/docs/src/content/examples/set-a-max-width-on-a-long-radio-item/index.mdx b/docs/src/content/examples/set-a-max-width-on-a-long-radio-item/index.mdx
index 80a1aa605a..8945d9bf77 100644
--- a/docs/src/content/examples/set-a-max-width-on-a-long-radio-item/index.mdx
+++ b/docs/src/content/examples/set-a-max-width-on-a-long-radio-item/index.mdx
@@ -1,10 +1,7 @@
---
id: set-a-max-width-on-a-long-radio-item
title: Set a max width on a long radio item
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- radio
- forms
diff --git a/docs/src/content/examples/set-a-specific-tab-to-be-active/index.mdx b/docs/src/content/examples/set-a-specific-tab-to-be-active/index.mdx
index cfe782b02a..24f7126376 100644
--- a/docs/src/content/examples/set-a-specific-tab-to-be-active/index.mdx
+++ b/docs/src/content/examples/set-a-specific-tab-to-be-active/index.mdx
@@ -1,10 +1,7 @@
---
id: set-a-specific-tab-to-be-active
title: Set a specific tab to be active
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- tabs
- navigation
diff --git a/docs/src/content/examples/set-the-status-of-step-on-a-form-stepper/index.mdx b/docs/src/content/examples/set-the-status-of-step-on-a-form-stepper/index.mdx
index bb5d6c4ef9..080a79efc8 100644
--- a/docs/src/content/examples/set-the-status-of-step-on-a-form-stepper/index.mdx
+++ b/docs/src/content/examples/set-the-status-of-step-on-a-form-stepper/index.mdx
@@ -1,10 +1,7 @@
---
id: set-the-status-of-step-on-a-form-stepper
title: Set the status of step on a form stepper
-categories:
- - inputs-and-actions
-scale: task
-userType: both
+size: interaction
tags:
- forms
- stepper
@@ -16,6 +13,7 @@ components:
- pages
- button
status: published
+hidden: true
previewImage: /images/examples/set-the-status-of-step-on-a-form-stepper.webp
---
diff --git a/docs/src/content/examples/show-a-label-on-an-icon-only-button/index.mdx b/docs/src/content/examples/show-a-label-on-an-icon-only-button/index.mdx
index 28ebc57a57..ffba97c535 100644
--- a/docs/src/content/examples/show-a-label-on-an-icon-only-button/index.mdx
+++ b/docs/src/content/examples/show-a-label-on-an-icon-only-button/index.mdx
@@ -1,10 +1,7 @@
---
id: show-a-label-on-an-icon-only-button
title: Show a label on an icon only button
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- buttons
- icons
diff --git a/docs/src/content/examples/show-a-list-to-help-answer-a-question/index.mdx b/docs/src/content/examples/show-a-list-to-help-answer-a-question/index.mdx
deleted file mode 100644
index 08dc3bfd31..0000000000
--- a/docs/src/content/examples/show-a-list-to-help-answer-a-question/index.mdx
+++ /dev/null
@@ -1,40 +0,0 @@
----
-id: show-a-list-to-help-answer-a-question
-title: Show a list to help answer a question
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - forms
- - details
- - guidance
- - help
-components:
- - form-item
- - radio-group
- - radio-item
- - details
- - block
-status: published
-previewImage: /images/examples/show-a-list-to-help-answer-a-question.webp
----
-
-Show a list to help answer a question using an expandable details component.
-
-## When to use
-
-Use this pattern when:
-
-- Users need clarification about what items qualify for a question
-- You want to provide examples of what to include or exclude
-- The guidance content would clutter the form if always visible
-- Users can make better decisions with reference information
-
-## Considerations
-
-- Place the details component after the form question it relates to
-- Use clear headings within the details to organize content
-- Include both "examples of" and "do not include" lists when relevant
-- Keep the details heading phrased as a question to indicate it provides clarification
-- Ensure the expanded content is easy to scan with clear formatting
diff --git a/docs/src/content/examples/show-a-notification-with-an-action/index.mdx b/docs/src/content/examples/show-a-notification-with-an-action/index.mdx
index de8947d9c4..a151ed152c 100644
--- a/docs/src/content/examples/show-a-notification-with-an-action/index.mdx
+++ b/docs/src/content/examples/show-a-notification-with-an-action/index.mdx
@@ -1,10 +1,7 @@
---
id: show-a-notification-with-an-action
title: Show a notification with an action
-categories:
- - feedback-and-alerts
-scale: interaction
-userType: both
+size: interaction
tags:
- notification
- feedback
diff --git a/docs/src/content/examples/show-a-notification/index.mdx b/docs/src/content/examples/show-a-notification/index.mdx
index 51a848f758..f0648d0a19 100644
--- a/docs/src/content/examples/show-a-notification/index.mdx
+++ b/docs/src/content/examples/show-a-notification/index.mdx
@@ -1,10 +1,7 @@
---
id: show-a-notification
title: Show a notification
-categories:
- - feedback-and-alerts
-scale: interaction
-userType: both
+size: interaction
tags:
- notification
- feedback
diff --git a/docs/src/content/examples/show-a-section-title-on-a-question-page/index.mdx b/docs/src/content/examples/show-a-section-title-on-a-question-page/index.mdx
deleted file mode 100644
index 283f82ec47..0000000000
--- a/docs/src/content/examples/show-a-section-title-on-a-question-page/index.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
----
-id: show-a-section-title-on-a-question-page
-title: Show a section title on a question page
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - forms
- - questions
- - navigation
- - section
-components:
- - form-item
- - radio-group
- - radio-item
- - button
-status: published
-previewImage: /images/examples/show-a-section-title-on-a-question-page.webp
----
-
-Show a section title on a question page to help users understand which part of the form they are completing.
-
-## When to use
-
-Use this pattern when:
-
-- Building multi-section forms where context helps users
-- Users need to know which category of questions they are answering
-- The form is divided into logical sections like "Personal information"
-- Following the one-question-per-page pattern for government services
-
-## Considerations
-
-- Use a subdued text color for the section title to differentiate from the question
-- Include a back link for navigation to previous questions
-- The section title should appear above the question
-- Use consistent spacing between the back link, section title, and question
-- Keep section titles concise and descriptive
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/index.mdx b/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/index.mdx
deleted file mode 100644
index b5817324da..0000000000
--- a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions/index.mdx
+++ /dev/null
@@ -1,40 +0,0 @@
----
-id: show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions
-title: Show a simple progress indicator on a question page with multiple questions
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - forms
- - questions
- - progress
- - navigation
- - multi-question
-components:
- - form-item
- - input
- - button
-status: published
-previewImage: /images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp
----
-
-Show a simple progress indicator on a question page when grouping multiple related questions together.
-
-## When to use
-
-Use this pattern when:
-
-- Grouping multiple related questions on a single page improves the user experience
-- The questions form a logical unit (e.g., personal information fields)
-- Users benefit from progress tracking across the form
-- A step-based indicator shows progress through form sections
-
-## Considerations
-
-- Display progress as "Step X of Y" when grouping questions into sections
-- Include a clear section heading that describes the group of questions
-- Use a subdued text color for the progress indicator
-- Include a back link for navigation to previous sections
-- Position related questions close together with consistent spacing
-- The `leadingContent` prop on inputs can add prefixes like country codes
diff --git a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/index.mdx b/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/index.mdx
deleted file mode 100644
index c978a41b35..0000000000
--- a/docs/src/content/examples/show-a-simple-progress-indicator-on-a-question-page/index.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
----
-id: show-a-simple-progress-indicator-on-a-question-page
-title: Show a simple progress indicator on a question page
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - forms
- - questions
- - progress
- - navigation
-components:
- - form-item
- - radio-group
- - radio-item
- - button
-status: published
-previewImage: /images/examples/show-a-simple-progress-indicator-on-a-question-page.webp
----
-
-Show a simple progress indicator on a question page to help users understand their progress through the form.
-
-## When to use
-
-Use this pattern when:
-
-- Building a multi-question form where progress tracking helps users
-- Users benefit from knowing how many questions remain
-- The form has a linear flow with a known number of questions
-- Following the one-question-per-page pattern for government services
-
-## Considerations
-
-- Display progress as "Question X of Y" for clarity
-- Use a subdued text color for the progress indicator
-- Include a back link for navigation to previous questions
-- Position the progress indicator above the question
-- Keep the format consistent throughout the form
diff --git a/docs/src/content/examples/show-a-user-progress-when-the-time-is-unknown/index.mdx b/docs/src/content/examples/show-a-user-progress-when-the-time-is-unknown/index.mdx
index 83f7f392fa..d825ddcda0 100644
--- a/docs/src/content/examples/show-a-user-progress-when-the-time-is-unknown/index.mdx
+++ b/docs/src/content/examples/show-a-user-progress-when-the-time-is-unknown/index.mdx
@@ -1,10 +1,7 @@
---
id: show-a-user-progress-when-the-time-is-unknown
title: Show a user progress when the time is unknown
-categories:
- - feedback-and-alerts
-scale: task
-userType: both
+size: interaction
tags:
- progress
- notification
diff --git a/docs/src/content/examples/show-a-user-progress/index.mdx b/docs/src/content/examples/show-a-user-progress/index.mdx
index 4ecd7c7f54..e51005aaca 100644
--- a/docs/src/content/examples/show-a-user-progress/index.mdx
+++ b/docs/src/content/examples/show-a-user-progress/index.mdx
@@ -1,10 +1,7 @@
---
id: show-a-user-progress
title: Show a user progress
-categories:
- - feedback-and-alerts
-scale: task
-userType: both
+size: interaction
tags:
- progress
- notification
diff --git a/docs/src/content/examples/show-different-views-of-data-in-a-table/index.mdx b/docs/src/content/examples/show-different-views-of-data-in-a-table/index.mdx
index 1b65965c59..26769993b9 100644
--- a/docs/src/content/examples/show-different-views-of-data-in-a-table/index.mdx
+++ b/docs/src/content/examples/show-different-views-of-data-in-a-table/index.mdx
@@ -1,10 +1,8 @@
---
id: show-different-views-of-data-in-a-table
title: Show different views of data in a table
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- tabs
diff --git a/docs/src/content/examples/show-full-date-in-a-tooltip/index.mdx b/docs/src/content/examples/show-full-date-in-a-tooltip/index.mdx
index d578104746..f97c267218 100644
--- a/docs/src/content/examples/show-full-date-in-a-tooltip/index.mdx
+++ b/docs/src/content/examples/show-full-date-in-a-tooltip/index.mdx
@@ -1,10 +1,7 @@
---
id: show-full-date-in-a-tooltip
title: Show full date in a tooltip
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- tooltip
- date
diff --git a/docs/src/content/examples/show-links-to-navigation-items/index.mdx b/docs/src/content/examples/show-links-to-navigation-items/index.mdx
index 51901b1a64..f00f26a007 100644
--- a/docs/src/content/examples/show-links-to-navigation-items/index.mdx
+++ b/docs/src/content/examples/show-links-to-navigation-items/index.mdx
@@ -1,10 +1,7 @@
---
id: show-links-to-navigation-items
title: Show links to navigation items
-categories:
- - structure-and-navigation
-scale: task
-userType: both
+size: section
tags:
- footer
- navigation
diff --git a/docs/src/content/examples/show-more-information-to-help-answer-a-question/index.mdx b/docs/src/content/examples/show-more-information-to-help-answer-a-question/index.mdx
deleted file mode 100644
index 7476c80530..0000000000
--- a/docs/src/content/examples/show-more-information-to-help-answer-a-question/index.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
----
-id: show-more-information-to-help-answer-a-question
-title: Show more information to help answer a question
-categories:
- - forms
-scale: task
-userType: citizen
-tags:
- - form
- - details
- - help
- - question-page
- - expandable
-components:
- - details
- - form-item
- - radio-group
- - radio-item
- - button
-figmaUrl: https://www.figma.com/design/Jpy1Ea5qglwnp1SgGnagY9/%E2%9D%96-Component-library-%7C-DDD?node-id=63353-123863
-status: published
-previewImage: /images/examples/show-more-information-to-help-answer-a-question.webp
----
-
-Use the Details component to provide optional contextual help that explains why a question is being asked, helping users understand the purpose without cluttering the main form.
-
-## When to use
-
-Use this pattern when:
-
-- Users may wonder why a question is being asked
-- Additional context helps users answer correctly
-- The information is optional and shouldn't distract
-- Following question page patterns for citizen services
-
-## Considerations
-
-- Place the details component after the question input
-- Use a clear heading like "Why are we asking this question?"
-- Keep the expanded content concise and helpful
-- Include helper text for the main question when appropriate
diff --git a/docs/src/content/examples/show-multiple-actions-in-a-compact-table/index.mdx b/docs/src/content/examples/show-multiple-actions-in-a-compact-table/index.mdx
index ba326e5c44..5d1f100848 100644
--- a/docs/src/content/examples/show-multiple-actions-in-a-compact-table/index.mdx
+++ b/docs/src/content/examples/show-multiple-actions-in-a-compact-table/index.mdx
@@ -1,10 +1,8 @@
---
id: show-multiple-actions-in-a-compact-table
title: Show multiple actions in a compact table
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- icon-button
diff --git a/docs/src/content/examples/show-multiple-tags-together/index.mdx b/docs/src/content/examples/show-multiple-tags-together/index.mdx
index f559c4f25f..2a08a2ca4d 100644
--- a/docs/src/content/examples/show-multiple-tags-together/index.mdx
+++ b/docs/src/content/examples/show-multiple-tags-together/index.mdx
@@ -1,10 +1,7 @@
---
id: show-multiple-tags-together
title: Show multiple tags together
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- badge
- tags
diff --git a/docs/src/content/examples/show-number-of-results-per-page/index.mdx b/docs/src/content/examples/show-number-of-results-per-page/index.mdx
index ed45a48c97..759ebf725c 100644
--- a/docs/src/content/examples/show-number-of-results-per-page/index.mdx
+++ b/docs/src/content/examples/show-number-of-results-per-page/index.mdx
@@ -1,10 +1,7 @@
---
id: show-number-of-results-per-page
title: Show number of results per page
-categories:
- - content-layout
-scale: task
-userType: both
+size: section
tags:
- pagination
- table
diff --git a/docs/src/content/examples/show-quick-links/index.mdx b/docs/src/content/examples/show-quick-links/index.mdx
index 3e85fc456d..86bbe9ee8f 100644
--- a/docs/src/content/examples/show-quick-links/index.mdx
+++ b/docs/src/content/examples/show-quick-links/index.mdx
@@ -1,10 +1,7 @@
---
id: show-quick-links
title: Show quick links
-categories:
- - structure-and-navigation
-scale: task
-userType: both
+size: section
tags:
- footer
- navigation
diff --git a/docs/src/content/examples/show-status-in-a-table/index.mdx b/docs/src/content/examples/show-status-in-a-table/index.mdx
index 1e1ecc216a..05bb69758f 100644
--- a/docs/src/content/examples/show-status-in-a-table/index.mdx
+++ b/docs/src/content/examples/show-status-in-a-table/index.mdx
@@ -1,10 +1,8 @@
---
id: show-status-in-a-table
title: Show status in a table
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- badge
diff --git a/docs/src/content/examples/show-status-on-a-card/index.mdx b/docs/src/content/examples/show-status-on-a-card/index.mdx
index 1298d12e0b..45fa3c2b83 100644
--- a/docs/src/content/examples/show-status-on-a-card/index.mdx
+++ b/docs/src/content/examples/show-status-on-a-card/index.mdx
@@ -1,10 +1,8 @@
---
id: show-status-on-a-card
title: Show status on a card
-categories:
- - content-layout
-scale: task
-userType: worker
+size: interaction
+productType: workspace
tags:
- card
- container
diff --git a/docs/src/content/examples/show-version-number/index.mdx b/docs/src/content/examples/show-version-number/index.mdx
index e99e6fe382..0d7747b978 100644
--- a/docs/src/content/examples/show-version-number/index.mdx
+++ b/docs/src/content/examples/show-version-number/index.mdx
@@ -1,10 +1,7 @@
---
id: show-version-number
title: Show version number
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- microsite-header
- version
diff --git a/docs/src/content/examples/slotted-error-text-in-a-form-item/index.mdx b/docs/src/content/examples/slotted-error-text-in-a-form-item/index.mdx
index 7f437b6786..196392c3f6 100644
--- a/docs/src/content/examples/slotted-error-text-in-a-form-item/index.mdx
+++ b/docs/src/content/examples/slotted-error-text-in-a-form-item/index.mdx
@@ -1,10 +1,7 @@
---
id: slotted-error-text-in-a-form-item
title: Slotted error text in a form item
-categories:
- - forms
-scale: interaction
-userType: both
+size: interaction
tags:
- form
- form-item
diff --git a/docs/src/content/examples/slotted-helper-text-in-a-form-item/index.mdx b/docs/src/content/examples/slotted-helper-text-in-a-form-item/index.mdx
index bb9035b364..d8727a1fae 100644
--- a/docs/src/content/examples/slotted-helper-text-in-a-form-item/index.mdx
+++ b/docs/src/content/examples/slotted-helper-text-in-a-form-item/index.mdx
@@ -1,10 +1,7 @@
---
id: slotted-helper-text-in-a-form-item
title: Slotted helper text in a form item
-categories:
- - forms
-scale: interaction
-userType: both
+size: interaction
tags:
- form
- form-item
diff --git a/docs/src/content/examples/sort-data-in-a-table/index.mdx b/docs/src/content/examples/sort-data-in-a-table/index.mdx
index 922ad704a3..a850c691f3 100644
--- a/docs/src/content/examples/sort-data-in-a-table/index.mdx
+++ b/docs/src/content/examples/sort-data-in-a-table/index.mdx
@@ -1,10 +1,8 @@
---
id: sort-data-in-a-table
title: Sort data in a table
-categories:
- - content-layout
-scale: task
-userType: worker
+size: section
+productType: workspace
tags:
- table
- sorting
diff --git a/docs/src/content/examples/start-page/index.mdx b/docs/src/content/examples/start-page/index.mdx
index 72fdfe44a8..053a1fb58d 100644
--- a/docs/src/content/examples/start-page/index.mdx
+++ b/docs/src/content/examples/start-page/index.mdx
@@ -1,10 +1,9 @@
---
id: start-page
title: Start page
-categories:
- - forms
-scale: page
-userType: citizen
+size: page
+productType: public-form
+description: The front door to a government service for a citizen. It is the way into the service and how citizens access it. Each government service has a start page on Alberta.ca.
tags:
- page
- service
@@ -13,23 +12,44 @@ tags:
components:
- button
status: published
-previewImage: /images/examples/start-page.webp
+previewImage: /images/examples/start-page.png
---
-A start page is the front door to a government service for citizens. It provides essential information about the service and a clear call to action to begin.
+## When to use a start page
-## When to use
+A start page is the front door to a government service for a citizen. It is the way into the service, how they access the service. Each government service has a start page on Alberta.ca. Contact the relevant person at Alberta.ca to make changes to the start page for your service.
-Use this pattern when:
+This is the starting point for a citizen to begin your form from within your service or from Alberta.ca.
-- Creating the entry point for a citizen-facing government service
-- Citizens need to understand what the service does before starting
-- You need to communicate prerequisites, time estimates, or required documents
+Provide the user with any information that is important before starting the form, such as how long it should take, a list of documents or information they may need to complete the form, any costs involved, or alternative ways to access the service.
-## Considerations
+## A service's start page should
-- Keep the overview concise and focused on what users can do
-- List what documents or information users will need
-- Include an estimated completion time
-- Use a prominent "Get started" or "Start now" button
-- Provide contact information and alternative ways to access the service below the main call to action
+- give the user just enough information to help them understand what the service does and whether it will meet their need
+- have a service name that reflects the problem it solves for users
+- be written in plain language. See the [GoA web writing style guide](https://www.alberta.ca/web-writing-style-guide).
+- include a "start" button linking into the service, with text consistent with the action you are asking users to take. For example: "Start now", "Sign in", or "Register or update your details".
+- include any other information that most users are likely to need before they start using the service online. For example: how much it costs to use the service and roughly how long it will take.
+- include additional information about the service, such as other ways to access it (e.g. by telephone or by completing a paper form). This should be included after the main call to action to start the digital service.
+
+## Page content
+
+Consider the primary information that the user needs to know before entering into the service. Provide that information clearly, then provide a link to start using the service. Provide additional secondary information below the call to action.
+
+### Overview
+
+What the user needs to know before they enter the service. A high-level description of what the service is and what they can use it to do.
+
+### Before you begin
+
+- how long it will take
+- what they will need to complete the service (e.g. specific documents)
+- other important information
+
+### Call to action
+
+Below the primary information, include an obvious call to action to get started with the service.
+
+### Other information
+
+Below the call to action, include any additional information as applicable, such as customer support, frequently asked questions, or related links.
diff --git a/docs/src/content/examples/task-list-page/index.mdx b/docs/src/content/examples/task-list-page/index.mdx
index 4d1c48e09e..9ed787dca6 100644
--- a/docs/src/content/examples/task-list-page/index.mdx
+++ b/docs/src/content/examples/task-list-page/index.mdx
@@ -1,10 +1,9 @@
---
id: task-list-page
title: Task list page
-categories:
- - forms
-scale: page
-userType: both
+size: page
+productType: public-form
+description: A page that provides structure for multiple steps in a service. Use a task list to outline the entire process and show the status of each task as users move through it.
tags:
- page
- task-list
@@ -15,24 +14,55 @@ components:
- badge
- callout
status: published
-previewImage: /images/examples/task-list-page.webp
+previewImage: /images/examples/task-list-page.png
---
-A task list page provides a structure for multi-step services, showing users their progress through a series of tasks with clear status indicators.
+## When to use a task list page
-## When to use
+Use a task list page to provide a structure for multiple steps in a service. Show a task list page when a citizen begins a service, and when they return to the service.
-Use this pattern when:
+When using a task list, group related actions into tasks and show the status of the tasks.
-- A service has multiple distinct tasks or sections to complete
-- Users need to see their overall progress
-- Tasks can potentially be completed in different orders
-- Users may return to complete tasks over multiple sessions
+## How to define a task
-## Considerations
+The size and complexity of a task is determined by the service and content. A task can be defined as small as a single action, such as "sign a document" or "upload a file", or it can be as big as an entire section of a form with multiple question pages and a review page.
-- Group related actions into logical tasks
-- Show status badges for each task (Completed, In progress, Not started, Cannot start yet)
-- Include a summary callout showing how many sections are complete
-- Allow users to complete tasks in any order when possible
-- Clearly indicate when tasks have dependencies
+Use tasks to break down the steps in a service in an understandable way.
+
+## Show status of tasks
+
+Make it clear which tasks a user has completed and which they still need to complete.
+
+### Suggested statuses
+
+- **Completed** — success
+- **In progress** — dark grey
+- **Not started** — information
+- **Cannot start yet** — light grey
+
+Include a summary above the task list to say how many tasks have been completed. This also makes it clearer to the user that there are still tasks left to complete.
+
+### How is a task list different from a stepper?
+
+**Stepper:**
+
+- a visual navigation within a form
+- shown at the top of every page in a form
+- scope: sections of a form
+
+**Task list:**
+
+- can be used to outline more than just sections of a form
+- not shown on every page
+
+### Completing tasks in order
+
+When possible, allow users to complete tasks in any order. This will help them plan their time and complete sections as and when they can.
+
+## Anatomy
+
+1. **Page title** — heading-large
+2. **Status of completed sections** — `goa-callout`
+3. **Section** — task-list-section
+4. **Section heading** — heading-medium
+5. **Task** — `goa-table`
diff --git a/docs/src/content/examples/type-to-create-a-new-filter/index.mdx b/docs/src/content/examples/type-to-create-a-new-filter/index.mdx
index 74c567a50b..31db30217b 100644
--- a/docs/src/content/examples/type-to-create-a-new-filter/index.mdx
+++ b/docs/src/content/examples/type-to-create-a-new-filter/index.mdx
@@ -1,10 +1,7 @@
---
id: type-to-create-a-new-filter
title: Type to create a new filter
-categories:
- - inputs-and-actions
-scale: interaction
-userType: both
+size: interaction
tags:
- filter-chip
- input
diff --git a/docs/src/content/examples/warn-a-user-of-a-deadline/index.mdx b/docs/src/content/examples/warn-a-user-of-a-deadline/index.mdx
index 150862da76..e8dea0506d 100644
--- a/docs/src/content/examples/warn-a-user-of-a-deadline/index.mdx
+++ b/docs/src/content/examples/warn-a-user-of-a-deadline/index.mdx
@@ -1,10 +1,7 @@
---
id: warn-a-user-of-a-deadline
title: Warn a user of a deadline
-categories:
- - feedback-and-alerts
-scale: task
-userType: both
+size: section
tags:
- modal
- warning
diff --git a/docs/src/content/examples/workspace/case-detail/index.mdx b/docs/src/content/examples/workspace/case-detail/index.mdx
new file mode 100644
index 0000000000..ef0a7d6ad5
--- /dev/null
+++ b/docs/src/content/examples/workspace/case-detail/index.mdx
@@ -0,0 +1,37 @@
+---
+id: workspace-case-detail
+title: Case detail
+size: page
+productType: workspace
+description: A single-record view for reviewing and acting on one case. Uses accordion sections, a table-of-contents sidebar, badges for status, and header actions for quick operations.
+previewUrl: https://digital-service-demo-v2.netlify.app/workspace/application/ef12df7d-74e7-4a82-9495-51589a0498ae
+previewImage: /thumbnails/workspace-case-detail.png
+reactSourceUrl: https://github.com/GovAlta/goa-workspace-playground/tree/main/src/routes/cases
+angularSourceUrl: https://github.com/GovAlta/goa-workspace-angular/tree/main/src/app/pages/cases
+components:
+ - accordion
+ - badge
+ - button
+ - drawer
+tags:
+ - workspace
+ - case-detail
+ - worker
+status: published
+---
+
+## When to use
+
+Use the case detail view when staff need to review and act on a single record.
+
+## Structure
+
+Break long content into sections using [accordions](/components/accordion) to organize submitted data into collapsible sections. A table-of-contents sidebar helps users navigate long case content. [Badges](/components/badge) show case status, and action buttons in the header provide quick access to review, assign, and comment actions.
+
+## Actions
+
+For focused work that should happen without leaving the page, pair case detail with a [push drawer](/components/push-drawer).
+
+## Considerations
+
+Keep the accordion section headings short and consistent. When the list of sections is long, the TOC sidebar becomes essential.
diff --git a/docs/src/content/examples/workspace/dashboard/index.mdx b/docs/src/content/examples/workspace/dashboard/index.mdx
new file mode 100644
index 0000000000..dedc429277
--- /dev/null
+++ b/docs/src/content/examples/workspace/dashboard/index.mdx
@@ -0,0 +1,40 @@
+---
+id: workspace-dashboard
+title: Dashboard
+size: page
+productType: workspace
+description: Gives staff an overview of their work with counts, trends, and assigned items.
+previewUrl: https://digital-service-demo-v2.netlify.app/workspace
+previewImage: /thumbnails/workspace-dashboard.png
+reactSourceUrl: https://github.com/GovAlta/goa-workspace-playground/tree/main/src/routes/dashboard
+angularSourceUrl: https://github.com/GovAlta/goa-workspace-angular/tree/main/src/app/pages/dashboard
+components:
+ - container
+ - block
+ - badge
+tags:
+ - workspace
+ - dashboard
+ - worker
+status: published
+---
+
+## When to use
+
+Use a dashboard as the landing view of a workspace when staff need to see priorities and act quickly.
+
+## What to include
+
+Include the information that helps staff understand priorities and act quickly, such as:
+
+- counts or status summaries
+- trends or workload charts
+- links to assigned or high-priority work
+
+## Layout
+
+The layout uses [containers](/components/container) and [blocks](/components/block) to organize content into scannable sections.
+
+## Considerations
+
+Prioritize the two or three things staff need to see on arrival. Surface everything else from deeper navigation rather than crowding the dashboard.
diff --git a/docs/src/content/examples/workspace/index-page/index.mdx b/docs/src/content/examples/workspace/index-page/index.mdx
new file mode 100644
index 0000000000..6980db1f85
--- /dev/null
+++ b/docs/src/content/examples/workspace/index-page/index.mdx
@@ -0,0 +1,36 @@
+---
+id: workspace-index-page
+title: Index page
+size: page
+productType: workspace
+description: The page staff land on to scan, filter, sort, and pick records to work on. The home of the workspace's daily queue.
+previewUrl: https://digital-service-demo-v2.netlify.app/workspace/applications
+previewImage: /thumbnails/workspace-table-view.png
+reactSourceUrl: https://github.com/GovAlta/goa-workspace-playground/tree/main/src/routes/search
+angularSourceUrl: https://github.com/GovAlta/goa-workspace-angular/tree/main/src/app/pages/search
+components:
+ - work-side-menu
+ - data-grid
+ - tabs
+ - filter-chip
+ - badge
+tags:
+ - workspace
+ - index
+ - worker
+status: published
+---
+
+## When to use
+
+Use the index page as the workspace's main listing surface. Most workspaces have one or more, organized by record type (applications, cases, claims, requests).
+
+## Structure
+
+The index page is built around a [data view](/examples/workspace#data-views) showing the records the user is responsible for. Tabs filter by status. Search and filter chips narrow further. A primary action button (often "New record") lives in the page header.
+
+## Considerations
+
+- Surface what staff need to act on first. The default sort and filter should reflect a typical worker's queue, not the database's order.
+- Keep the action bar slim. Filters and search go inside the table region; high-level actions sit in the page header.
+- Pair with [sidebar navigation](/examples/workspace#sidebar-navigation) so staff can jump between index pages for different record types.
diff --git a/docs/src/content/examples/workspace/index.mdx b/docs/src/content/examples/workspace/index.mdx
deleted file mode 100644
index 403a88644d..0000000000
--- a/docs/src/content/examples/workspace/index.mdx
+++ /dev/null
@@ -1,263 +0,0 @@
----
-id: workspace
-title: Workspace
-description: The workspace is for productivity-focused services used by service delivery staff as a daily tool to review information, manage records, and complete tasks. The design prioritizes productivity, efficiency, and accuracy so staff can move through their work quickly while ensuring the best outcome for citizens and government. Workspaces should be adapted to fit each service's context and user needs. The reference example is a starting point to expand on, not a rigid template.
-categories: []
-scale: product
-userType: worker
-tags:
- - workspace
- - worker
- - service
- - case-management
- - dashboard
- - pattern
-components:
- - work-side-menu
- - table
- - badge
- - tabs
- - container
- - accordion
- - drawer
- - button
- - block
-previewImage: /thumbnails/workspace-preview.png
-status: published
----
-
-View demo
-
-import LinkCard from "../../../components/LinkCard.astro";
-
-
-
-
-
-
-**Primary user:** Service delivery staff
-
-## When to use
-
-Use the workspace when your service needs to support regular, task-based work, such as:
-
-- Reviewing and processing submissions
-- Managing case files, applications, or requests
-- Moving between dashboards, lists, and detail views
-- Taking actions such as approve, deny, assign, or request more information
-
-## When not to use
-
-- Citizen-facing services — use the [public form](/examples/public-form) pattern instead
-- Content-only pages that don't involve case management
-- Simple internal tools that don't need structured case processing
-
----
-
-## Sidebar navigation
-
-Use the [work side menu](/components/work-side-menu) as the primary navigation for a workspace.
-
-Keep top-level navigation focused on the main areas of work. When a user opens a record or case, switch to contextual navigation that supports that task. This puts the user into a focused mode with relevant navigation items (like sections of an application, comments, reminders) and a back link to return to the main view. The sidebar can adapt to what the user is doing, it doesn't have to show everything at once.
-
-
- Main workspace navigation
-
-
-
-
- Contextual case navigation
-
-
-
-View demo
-
----
-
-## Dashboard
-
-The dashboard gives staff an overview of their work.
-
-Include the information that helps them understand priorities and act quickly, such as:
-
-- counts or status summaries
-- trends or workload charts
-- links to assigned or high-priority work
-
-The layout uses [containers](/components/container) and [blocks](/components/block) to organize content into scannable sections.
-
-
-
-View demo
-
----
-
-## Data views
-
-Workers need different ways to view, scan, and act on records depending on the task. Choose the data view that best supports the task.
-
-- **Table view** — Dense, scannable rows with sortable columns. Best for users who need to compare fields across many records at once.
-- **Card view** — Each record as a card showing key details grouped into sections. Useful when records have more complex data that doesn't fit neatly into columns.
-- **Expandable list view** — Compact rows that expand inline to reveal detail. A middle ground between the density of a table and the richness of cards.
-
-Any view can be combined with grouping (for example, group by priority or status) to organize records into collapsible sections. Users can also search, filter by status using [tabs](/components/tabs), sort with multi-level sorting, and manage active filters with [filter chips](/components/filter-chip).
-
-
- Table view
-
-
-
-
- Card view
-
-
-
-
- Expandable list view
-
-
-
-View demo
-
----
-
-## Case detail
-
-Use the case detail view to help users review and act on a single record.
-
-Break long content into sections using [accordions](/components/accordion) to organize submitted data into collapsible sections. A table-of-contents sidebar helps users navigate long case content. [Badges](/components/badge) show case status, and action buttons in the header provide quick access to review, assign, and comment actions.
-
-
-
-View demo
-
----
-
-## Sticky action bar
-
-A scroll-aware header that pins to the top of the content area as the user scrolls. Use it to keep the most important tools visible.
-
-Set the content for each page based on the task:
-
-- On a cases list page, keep tools such as search and key actions visible.
-- On a detail page, keep the case name and key actions visible.
-
-Do not pin everything. Keep only the information and actions people need to continue their work without losing context.
-
-
-
-View demo
-
----
-
-## Push drawer
-
-Use a [push drawer](/components/drawer) for focused work that should happen without leaving the current page.
-
-This works well for actions such as:
-
-- approving or denying a record
-- requesting more information
-- completing a short decision form
-- reviewing supporting details while taking action
-
-Use it when users need to keep the main record in view while completing the task.
-
-
-
-View demo
-
----
-
-## Keyboard-accessible data views
-
-Workspace data views use the [data grid](/components/data-grid) to make table and card layouts fully keyboard navigable. Users can use arrow keys to move between cells and rows, making it possible to scan and act on records without a mouse. This is especially important in workspace contexts where staff are processing high volumes of cases and keyboard navigation is significantly faster than clicking. For assistive technology users, screen readers announce cell content and position as the user navigates.
-
----
-
-## Components built for workspace
-
-Workspace patterns are supported by component features designed for denser, more productive interfaces:
-
-- **Compact inputs** — Every input component now has a `compact` variant that reduces height and spacing. This lets you build tighter forms and toolbars without sacrificing usability.
-- **Compact badges and notifications** — [Badges](/components/badge) and [notification banners](/components/notification) also have compact sizing to fit within dense data views and action bars.
-- **Badge variants** — [Badges](/components/badge) now include `strong` and `subtle` emphasis options, giving you control over visual weight depending on context.
-- **Data grid** — The [data grid](/components/data-grid) works with the table component to support accessible, keyboard-navigable data views. Use them together when the user needs to move through records efficiently without relying on a mouse.
-- **Segmented tabs** — A new [tab](/components/tab) variant that works as a segmented toggle for switching between views or modes within a workspace, rather than navigating between pages.
-- **Enhanced filter chips** — [Filter chips](/components/filter-chip) now support secondary text and secondary icons, making them more useful for richer filtering in workspace data views.
-
----
-
-## Get started
-
-Use one of the workspace templates as a starting point for your service. Each template includes the sidebar navigation, dashboard, data views, and case detail patterns described above.
-
-
-
-
-
-
----
-
-## Considerations
-
-- The reference demo is a spike — component customizations haven't gone through the production pipeline yet
-- There should be significant variability within a workspace to meet each service's specific context and user needs
-- The demo is a starting point to expand on and adapt, not a rigid template to copy exactly
-- Desktop uses a card container pattern for the main content area; this is removed on mobile for space
diff --git a/docs/src/content/get-started/automated-accessibility.mdx b/docs/src/content/get-started/automated-accessibility.mdx
new file mode 100644
index 0000000000..07bae83e0b
--- /dev/null
+++ b/docs/src/content/get-started/automated-accessibility.mdx
@@ -0,0 +1,83 @@
+---
+id: automated-accessibility
+title: Automated accessibility
+description: Guidance on using automated accessibility testing tools effectively
+section: intro
+order: 2
+status: published
+---
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Automated accessibility
+Automated accessibility testing tools help you identify potential accessibility issues. Use them as a starting point.
+
+
+ However, these tools are not a complete solution. They can produce:
+
+
+
False positives – flagging issues that are not actual problems
+
False negatives – missing real accessibility barriers
+
+
+ To ensure your digital product is accessible, combine automated testing with manual testing and apply
+ human judgment.
+
+Why automated tools alone are not enough
+
+False positives
+
+ Automated tools may flag elements as non-compliant even when they work correctly for users. For
+ example, a tool may report that an input is "missing an id" even though it is correctly associated with a
+ label using a valid method, such as wrapping the input inside a <label> element.
+
+
+False negatives
+
+ Automated tools cannot detect nuanced or context-specific issues. For example, all interactive
+ elements may be tabbable, but the order jumps around the page. Tools often don't judge whether the
+ tab order is logical for completing the task.
+
+
+Real user experience
+
+ Accessibility ensures real people can use a product effectively. Automated tools cannot fully simulate
+ how users interact with your product.
+
+Steps for effective accessibility testing
+
+
+
+ Run automated tools to get an initial assessment.
+
+
+ Manually verify flagged issues and review the element's intent and context.
+
+
+ Do additional manual testing for issues automated tools cannot detect:
+
+
Test with a screen reader, such as VoiceOver (macOS) or NVDA (Windows)
+
Test keyboard navigation by checking focus visibility and order
+
+
+
+ Report findings
+
+
Record what you tested, what failed, and how to reproduce it
+
If the issue relates to a design system component, submit it using the design system bug report form
+
+
+
+Why this process matters
+
+ Automated tools provide helpful insight. Relying only on automation can result in:
+
+
+
Time spent fixing issues that are not real barriers
+
Missed opportunities to address genuine accessibility issues
+
A false sense of compliance without meaningful usability improvements
+
+
+ Combine automated and manual testing to identify real barriers. This approach improves accessibility
+ and overall product quality.
+
+
diff --git a/docs/src/content/get-started/component-lifecycle.mdx b/docs/src/content/get-started/component-lifecycle.mdx
new file mode 100644
index 0000000000..c7e881c163
--- /dev/null
+++ b/docs/src/content/get-started/component-lifecycle.mdx
@@ -0,0 +1,57 @@
+---
+id: component-lifecycle
+title: Component lifecycle
+description: The stages each Design System component moves through
+section: intro
+order: 3
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Component lifecycle
+The component lifecycle defines the stages each Design System component moves through, from Experimental to Production to Legacy.
+
+
+ Experimental components are new or significantly updated. They are available for testing and feedback
+ before public release.
+
+
+Characteristics
+
+
Feedback is gathered from selected teams
+
May be unstable or include breaking changes
+
Limited documentation
+
+Production
+
+ Production components are stable and ready for broader adoption.
+
+
+Characteristics
+
+
Fully documented, including design guidelines, properties, and examples
+
Meet accessibility and design system standards
+
Optimized for mobile use
+
Actively maintained with updates and bug fixes
+
Publicly available documentation
+
+Legacy
+
+ Legacy components are older components maintained primarily to support older implementations. If
+ possible, transition to production is recommended.
+
+
+Characteristics
+
+
No active maintenance or updates
+
Critical issues may remain unresolved
+
Recommended alternative clearly identified
+
Marked as "Legacy" in official documentation
+
+
diff --git a/docs/src/content/get-started/contribute.mdx b/docs/src/content/get-started/contribute.mdx
new file mode 100644
index 0000000000..8e6f4e0437
--- /dev/null
+++ b/docs/src/content/get-started/contribute.mdx
@@ -0,0 +1,177 @@
+---
+id: contribute
+title: Contribute
+description: How to contribute to the GoA Design System
+section: appendix
+order: 2
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Contribute
+The Design System is a shared resource used and improved by service teams. All roles are encouraged to contribute.
+
+
+ Start by using existing Design System components and patterns. If a component or pattern does not
+ meet your needs, follow the contribution process below.
+
+Design contribution process
+
+ If a required component or example does not exist in production,
+ contact the Design System team. We will review the request together and determine next steps.
+
Share iterations explored with and without the Design System
+
+
+
+ There are open contribution files in Figma for every component and pattern in the design system, including unpublished ideas and experiments.
+
+
+2. Contribution criteria
+
A proposed component or pattern must meet the following criteria.
+
+Proposal criteria
+
Useful
+
+ Evidence shows it supports multiple teams or services. Provide screenshots or links to demonstrate usage.
+
+
+
Unique
+
+ It does not duplicate an existing component or pattern. If replacing an existing component, provide
+ evidence that the new approach improves usability or accessibility.
+
+
+Publication standards
+
To be published, the solution must be:
+
+
Usable
+
+ Improves clarity, usability, and accessibility for users. Is informed by research and addresses a
+ validated user need.
+
+
+
Universal
+
+ Inclusive and accessible. Meets or exceeds accessibility standards.
+ WCAG 2.2 AA is the minimum requirement.
+
+ When development begins, the Design System team will collaborate with you to confirm detailed requirements.
+
+Code contribution process
+
+ The Design System supports multiple development frameworks through Web Components. Contributing full
+ components can be complex. Smaller contributions are encouraged.
+
+ Select an issue tagged ready-for-contribution from the
+ backlog.
+ Confirm which issue you will work on.
+
+
+
+ Since the repository is public, use a personal GitHub account instead of your Enterprise Managed User (EMU) account.
+
+
+Set up your contribution environment
+
+
+ The playgrounds for local testing are located in:
+
/apps/dev/angular
+/apps/dev/react
+
+
+
+Run playground environments
+
Angular
+
npm run dev:watch
+npm run serve:dev:angular
+
+
React
+
npm run dev:watch
+npm run serve:dev:react
+
+Repository structure
+
+
React wrappers
+
/libs/react-components/src/lib
+
Each folder represents a single component with its associated unit tests and wrapper code.
+
+
Angular wrappers
+
/libs/angular-components/src/lib/components
+
Each folder represents a single component with its associated unit tests and wrapper code.
+
+
Web Components
+
/libs/web-components/src/components
+
+
Unit tests as {"*.spec.ts"}
+
Component code as {"*.svelte"}
+
+
+Testing requirements
+
+
Write all unit tests in Svelte.
+
If updating React or Angular wrappers, write unit tests in those respective frameworks.
+
+ Add browser testing using Jest for React wrappers and Svelte components when appropriate.
+ These can be found in: libs/react-components/specs
+
+
Manually test components in both React and Angular.
+
+ Create test files that others can use to manually test the PR. These can be created in:
+
/apps/prs/angular
+/apps/prs/react
+
+
Follow the conventions already used in those files to create your test files.
+
+
A Design System developer will also manually test the pull request.
+
+Submit your contribution
+
Use the following commit message format:
+
+
Bug fix
+
fix(#storyNumber): short description (7 words max)
+
+
Feature request
+
feat(#storyNumber): short description (7 words max)
+
+
+
Create a pull request from your branch to the dev branch.
+
Notify the design system team of the PR.
+
+
diff --git a/docs/src/content/get-started/designers.mdx b/docs/src/content/get-started/designers.mdx
new file mode 100644
index 0000000000..fcf79c98bd
--- /dev/null
+++ b/docs/src/content/get-started/designers.mdx
@@ -0,0 +1,86 @@
+---
+id: designers
+title: Designers overview
+navLabel: Overview
+description: How designers use the design system through Figma
+section: designers
+order: 1
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Overview
+As a designer, you use the design system through Figma.
+
+ The design system library in Figma aligns with coded components used by developers. Start with
+ design system components for common parts of your service. This helps developers use the matching
+ coded components and reduces custom work.
+
+
+ Start with the design system. Validate your design through user testing. If usability issues arise,
+ or the problem cannot be solved within the system, consider creating a custom solution.
+
+Design with development in mind
+
+ When selecting components, prioritize those with a "goa-" prefix, such as
+ goa-input. These components exist in both design and development. Using them reduces
+ the need for custom development.
+
+
Choose shared components whenever possible to maintain consistency and efficiency.
+
+Design tokens
+
Design system components in Figma and code are built using design tokens.
+
+ Use tokens to communicate design decisions clearly. Developers can reference the same tokens in code.
+
+
Instead of sharing hex values or pixel adjustments, reference semantic tokens.
+
For example:
+
+
Colour: --goa-color-info-default
+
Spacing: --goa-spacing-m
+
+
Using tokens reduces back-and-forth and keeps design and development aligned.
+
+Components
+
All design system components are available in Figma and in code.
+
+ These components are designed to meet
+ WCAG 2.2 accessibility standards.
+
+
Avoid detaching components. Instead:
+
+
Use variants
+
Show or hide layers within the component
+
+
+ Use #figma for Figma-related issues, including library updates, missing components,
+ broken instances, or component behaviour in Figma.
+
+
+ Use #design-system-support for design system guidance, component usage questions,
+ standards, and implementation support.
+
+
Keep your components up to date. Figma will notify you when library updates are available.
+
+Figma file templates and helper components
+
Each digital service project folder includes a starter Figma template.
+
Use this template to:
+
+
Organize your design file
+
Support developer handoff
+
Help team members navigate files
+
+
+ Helper components are also available. Use them to clearly communicate intent when sharing designs
+ with developers and other team members.
+
+
diff --git a/docs/src/content/get-started/designers/designing-for-dark-mode.mdx b/docs/src/content/get-started/designers/designing-for-dark-mode.mdx
new file mode 100644
index 0000000000..57cbb5820c
--- /dev/null
+++ b/docs/src/content/get-started/designers/designing-for-dark-mode.mdx
@@ -0,0 +1,56 @@
+---
+id: designers/designing-for-dark-mode
+title: Designing for dark mode
+description: How dark mode works for designers
+section: designers
+order: 3
+status: published
+---
+import { withBase } from "@/lib/base-url";
+
+Designing for dark mode
+
+ Dark mode is handled by the design system. Here's what that means for your designs.
+
+
+
+
+ Available in code now, not in Figma yet. Design in light mode and work with a developer to see your designs in dark mode.
+
+
+
+How it works
+
+ We have an experimental version of dark mode you can try out in your service. It's handled automatically in code, so designers don't need to do anything different. The Figma library doesn't have a dark mode yet, so keep designing in light mode like you always have. Your designs will translate to dark mode when developers add the dark mode theme to your service.
+
+
+Custom components and styles
+
+ If you're using design system components, they all work with dark mode automatically.
+
+
+ If you have custom components that use our design tokens, they'll switch to dark mode along with the rest of the system. Always worth testing to make sure things look right in both modes.
+
+
+ If your custom components don't use our design tokens, they won't switch on their own. You'll need to handle dark mode for those yourself. We recommend using design tokens where you can so most of this happens automatically.
+
+ The same goes for illustrations and images with set colors. These look the same in both modes, so check whether they read well on a dark background or whether you need a dark version.
+
+
+Try it and share feedback
+
+ Dark mode is still being tested. Try it out in your service and let the design system team know what works, what doesn't, and what's missing.
+
+
+Ways to apply dark mode in your service
+
+ Two ways users end up in dark mode. Use either, or both:
+
+
+
System settings. If their operating system is in dark mode, your service follows automatically.
+
A toggle in your service. Let users switch modes themselves through a preferences or settings screen.
+
diff --git a/docs/src/content/get-started/designers/designing-with-ds.mdx b/docs/src/content/get-started/designers/designing-with-ds.mdx
new file mode 100644
index 0000000000..3be1641e5b
--- /dev/null
+++ b/docs/src/content/get-started/designers/designing-with-ds.mdx
@@ -0,0 +1,71 @@
+---
+id: designers/designing-with-ds
+title: Designing with Design System 2.0
+description: How to start new designs and update existing projects to Design System 2.0
+section: designers
+order: 2
+status: published
+---
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Designing with Design System 2.0
+What's new in DS 2.0 and how to start using it in your designs.
+
+ The Digital Design and Delivery (DDD) Design System has evolved to better support how service teams
+ design and build digital government services. Design System 2.0 includes an updated design
+ language, new tokens, refreshed components, and ready-to-use templates.
+
+Starting a new design
+
+ Use DS 2.0 templates as your starting point. Templates package layout, navigation, spacing, and
+ example content that you can adapt to your service. Some templates are built for specific service types
+ (for example, public-facing forms and workspace applications), and others are more general-purpose
+ starting points you can use across many kinds of pages and flows.
+
+
+Starting from an existing design
+
+Library swap
+
+ Use a library swap if
+ your goal is to convert most of the file to DS 2.0 in one pass.
+
+
+
Make a copy of your file before you start.
+
Expect mixed results. Some screens may need cleanup after the swap.
+
+
+Manual rebuild
+
Use a manual rebuild if you need more control.
+
+
Rebuild your highest value screens first.
+
Consider using DS 2.0 templates as a base to speed things up.
+
+Update an existing project to the new design library
+
+Approach 1: Developer-first
+
Use this approach in most cases.
+
+
A developer creates a new branch and completes the upgrade steps.
+
The team runs the upgraded application to see what changed.
+
Designers review the upgraded screens and identify what needs design updates.
+
+
When reviewing the upgraded branch, watch for:
+
+
Spacing and layout rhythm
+
Typography scale and weight usage
+
Dense or constrained screens (these often have the highest risk during an update)
+
+
+Approach 2: Design-first
+
Use this approach when you want design work to move ahead of development work.
+
+
Identify custom elements that support your users' needs.
+
Create an inventory and prioritize items by importance and effort.
+
Redesign the highest priority items using the visual design values in the Styles library.
+
+
+
+ In most cases, start with the developer-first approach. It helps you quickly see what changed in your real product, so you can focus design effort where it matters most.
+
+
diff --git a/docs/src/content/get-started/designers/ux-guidelines.mdx b/docs/src/content/get-started/designers/ux-guidelines.mdx
new file mode 100644
index 0000000000..8af7b905f9
--- /dev/null
+++ b/docs/src/content/get-started/designers/ux-guidelines.mdx
@@ -0,0 +1,45 @@
+---
+id: designers/ux-guidelines
+title: User experience guidelines
+description: User experience guidelines for Government of Alberta digital products
+section: designers
+order: 4
+status: published
+---
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+User experience guidelines
+Digital products built for the Government of Alberta should comply with these guidelines to ensure a quality user experience for Albertans.
+
+
+
User-centered: Designed with a clear understanding of users, their goals, tasks, environments, and context of use, using user-centered design methods.
+
Usable: Interfaces will be easy to use, enabling users to find the information they need and complete tasks successfully.
+
Accessible: Digital products will be inclusive, ensuring usability for everyone, regardless of physical or cognitive ability.
+
Trustworthy: Experiences will feel familiar and recognizable as a Government of Alberta product, ensuring users' security and privacy.
+
Modern: Digital experiences will meet present-day user expectations and preferences for aesthetics and interaction.
+ Usability testing is our preferred method to understand user needs as they relate to each guideline.
+
+
Suitable usability testing includes:
+
+
Diverse user group: Real users from different demographic, behavioural backgrounds, and geographical regions within Alberta that will experience the problem or benefit of the product.
+
Inclusive testing: Users with various physical and/or cognitive abilities, literacy levels, and tech savviness.
+
Device variety: A diverse range of devices that reflect users' preferred choice when interacting with government services.
+
Tasks: Activities that cover tasks and service process from end-to-end.
+
+
+ Frequent usability testing should be conducted to maintain product usability, effectiveness and
+ alignment to the user needs as they evolve over time.
+
+
+ For guidance on the process of usability testing, refer to our
+ Understanding Usability documentation.
+
+
diff --git a/docs/src/content/get-started/developers.mdx b/docs/src/content/get-started/developers.mdx
new file mode 100644
index 0000000000..f6330b62e2
--- /dev/null
+++ b/docs/src/content/get-started/developers.mdx
@@ -0,0 +1,96 @@
+---
+id: developers
+title: Developers overview
+navLabel: Overview
+description: How developers use the design system through tokens, components, examples, and templates
+section: developers
+order: 1
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Overview
+As a developer, you use the Design System through tokens, components, examples, and templates.
+
+
+ The DDD Design System is built using Web Components. Web Components are framework-agnostic.
+ You can use them with Angular, React, or other front-end frameworks.
+
+ Designers use equivalent resources in Figma. When they design with Design System components, you
+ can build with the matching coded components. This reduces custom development and rework.
+
+ Refer to the Design System technologies documentation
+ for implementation details.
+
+
+Examples
+
+ Examples are multiple components assembled in realistic service contexts. They help you understand
+ how to apply Design System guidance in a working interface.
+
+
You can use examples to:
+
+
Understand how components work together
+
Use them as a starting point for building parts of your interface
+
Use proven approaches to meet user needs
+
+
+ Examples help you build with more consistency and less rework. Use them to guide implementation,
+ then adjust them to meet the needs of your product.
+
+
+Templates
+
+ Templates are opinionated starting points for common service types. They package layout, navigation,
+ spacing, and example content so you can start with a proven structure instead of building from scratch.
+
+
You can use templates to:
+
+
Start a new product with a proven structure
+
Learn how components work together in a real layout
+
Adapt a proven starting point to fit your service needs
+
+
+ Templates help teams move faster, reduce rework, and stay aligned with Design System guidance.
+
+
diff --git a/docs/src/content/get-started/developers/browsers.mdx b/docs/src/content/get-started/developers/browsers.mdx
new file mode 100644
index 0000000000..44a09a61b3
--- /dev/null
+++ b/docs/src/content/get-started/developers/browsers.mdx
@@ -0,0 +1,78 @@
+---
+id: developers/browsers
+title: Supported browsers
+description: Browser and operating system support for Design System components
+section: developers
+order: 7
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Supported browsers
+Design System components are tested across supported browsers and devices.
+
+
+ We support the latest version of each browser listed on this page. Support applies to the browser and
+ operating system combinations shown in the table below. On mobile, support is limited to the browser
+ and operating system combinations listed for Android and iOS.
+
+
+Browser and operating system support
+
+
+
+
+
+
Browser
+
Windows
+
Mac OS
+
Android
+
iOS
+
+
+
+
+
Google Chrome
+
Yes
+
Yes
+
Yes
+
Yes
+
+
+
Microsoft Edge
+
Yes
+
Yes
+
+
+
+
+
Mozilla Firefox
+
Yes
+
Yes
+
Yes
+
+
+
+
Apple Safari
+
N/A
+
Yes
+
N/A
+
Yes
+
+
+
+
+
+Representative mobile OS used in testing
+
+
Android OS: 10+
+
iOS: 15+
+
+Testing guidance
+
+ Use supported browsers and operating system versions when developing and testing services. If you
+ encounter a browser-specific issue, follow the
+ Verify a bug process.
+
+
diff --git a/docs/src/content/get-started/developers/bug.mdx b/docs/src/content/get-started/developers/bug.mdx
new file mode 100644
index 0000000000..48d6836b6d
--- /dev/null
+++ b/docs/src/content/get-started/developers/bug.mdx
@@ -0,0 +1,56 @@
+---
+id: developers/bug
+title: Verify a bug
+description: How to verify and report a bug in a Design System component
+section: developers
+order: 5
+status: published
+---
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Verify a bug
+Follow this process when you encounter an issue with a Design System component.
+
+
+ These steps help confirm whether the issue is caused by the Design System, your product setup, or
+ custom code. This process applies to Angular and React implementations.
+
+
+1. Check versions
+
Confirm you are using the latest version of:
+
+
Web Components
+
Angular or React
+
+
+ If you are not using the latest version, upgrade and retest. If the issue remains, continue to the next step.
+
+
+2. Test with product templates
+
Use the official Angular or React product templates to isolate the issue.
Provide a link to your repository so the team can review and replicate the issue
+
+
+ Following these steps will help to ensure efficient investigation and quicker resolution of
+ design system component issues.
+
+
diff --git a/docs/src/content/get-started/developers/dark-mode-theme.mdx b/docs/src/content/get-started/developers/dark-mode-theme.mdx
new file mode 100644
index 0000000000..a8caf821d1
--- /dev/null
+++ b/docs/src/content/get-started/developers/dark-mode-theme.mdx
@@ -0,0 +1,259 @@
+---
+id: developers/dark-mode-theme
+title: Dark mode theme
+description: Switch between light and dark mode using the React useTheme hook or Angular GoabThemeService
+section: developers
+order: 3
+status: published
+---
+import { withBase } from "@/lib/base-url";
+
+Dark mode theme
+
+ Toggle light and dark mode using the React useTheme hook or the Angular
+ GoabThemeService. The user's choice persists across sessions.
+
+
+
+
+ Dark mode is still being tested. The CSS API and tokens may evolve as we iterate.
+
+
+
+
+
+ Theme switching requires @abgov/design-tokens version 2.8.0 or
+ higher with the dark theme stylesheet imported. See Setup
+ for installation steps.
+
+
+
+
How it works
+
+ Both the React provider and the Angular service write a data-theme
+ attribute on the document root (<html>). Design tokens scoped
+ to :root[data-theme="dark"] activate via CSS cascade,
+ automatically applying dark colors to every component without re-rendering.
+
+
+
Initial mode priority
+
+ On first load, the active mode is resolved in this order:
+
+
+
The user's previously chosen mode, read from local storage
+
The operating system preference (light or dark)
+
The framework default (light)
+
+
+
+
+
React
+
+ The React package exposes a context provider and a hook.
+
+
+
1. Wrap your app with GoabThemeProvider
+
+ Place the provider near the top of your app, alongside other framework
+ providers such as BrowserRouter:
+
+
{`@Injectable({ providedIn: "root" })
+class GoabThemeService {
+ /** Read-only signal — use in templates: theme.mode() === "dark". */
+ readonly mode: Signal<"light" | "dark">;
+ /** Set theme to a specific mode. */
+ setMode(next: "light" | "dark"): void;
+ /** Flip between light and dark. */
+ toggle(): void;
+}`}
+
+
+
+
Custom styling for dark mode
+
+ If you're using design system components, they handle dark mode automatically.
+
+
+ If your custom CSS uses design system tokens, dark mode is handled too. The tokens cascade to their dark values when data-theme="dark" is active.
+
+
+
+ Always verify in both modes.
+
+
+ If your custom CSS uses values that aren't from our design tokens (specific colors, backgrounds, hardcoded styles), those won't switch on their own. You can either swap them out for design tokens where possible, or extend dark mode by setting up your own custom property and overriding it under :root[data-theme="dark"]:
+
+
{`/* Default (light) value */
+:root {
+ --my-card-background: #f9f9f9;
+}
+
+/* Dark mode value */
+:root[data-theme="dark"] {
+ --my-card-background: #1a1a1a;
+}
+
+/* Use it in your component */
+.my-card {
+ background-color: var(--my-card-background);
+}`}
+
+
+
+
Using design tokens in SCSS
+
+
+
+ Dark theme support requires CSS custom properties. Sass variables
+ ({`$goa-*`}) are inlined at compile time and cannot flip when the
+ theme changes. Reference tokens via {`var(--goa-*)`} wherever a
+ value should respond to theme switching.
+
+
+
+
+ The simplest setup imports only tokens.css and uses
+ {`var(--goa-*)`} everywhere — every token automatically participates
+ in theme switching, and there is one syntax to remember.
+
+
+
+ Some workflows need Sass arithmetic, mixins, or functions over token values
+ (for example {`$goa-space-m * 2`}). In that case, import
+ tokens.scss alongside the CSS files and use {`$goa-*`}
+ for compile-time values only — never for colors, surfaces, or anything that
+ should flip with theme.
+
+
{`.my-card {
+ // Theme-responsive — must use var()
+ background: var(--goa-color-surface-card);
+
+ // Compile-time only — Sass arithmetic OK
+ padding: $goa-space-m * 2;
+ border-radius: $goa-border-radius-m;
+}`}
diff --git a/docs/src/content/get-started/developers/setup.mdx b/docs/src/content/get-started/developers/setup.mdx
new file mode 100644
index 0000000000..3eda4feeca
--- /dev/null
+++ b/docs/src/content/get-started/developers/setup.mdx
@@ -0,0 +1,128 @@
+---
+id: developers/setup
+title: Developer setup
+navLabel: Setup
+description: Set up Angular, React, or Web Components to use the GoA Design System
+section: developers
+order: 2
+status: published
+---
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Developer setup
+Set up the Government of Alberta Design System in Angular, React, or directly with Web Components.
+
+
Angular UI components
+
+ Supported versions: 18, 19, 20, 21
+
+
+ This is the web component library and utilizes Angular's web component
+ integration.
+
+
+
1. Add dependencies
+
npm i @abgov/web-components
+npm i @abgov/angular-components
+npm i @abgov/ui-components-common
+npm i @abgov/design-tokens
+
+
2. Link ionicons in app/index.html
+
+ Add the following in the head element:
+
+
{`
+`}
+
+
3. Update src/app/app.module.ts
+
+ Update src/app/app.module.ts as per the four steps below:
+
+
{`// 1. Import the CUSTOM_ELEMENTS_SCHEMA
+import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
+
+// 2. Import the libs
+import "@abgov/web-components";
+import { AngularComponentsModule } from "@abgov/angular-components";
+
+@NgModule({
+ declarations: [AppComponent],
+ imports: [
+ // 3. Add the needed imports
+ BrowserModule,
+ AngularComponentsModule,
+ ],
+ providers: [],
+ bootstrap: [AppComponent],
+ // 4. Add the CUSTOM_ELEMENTS_SCHEMA to the NgModule
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
+ })
+export class AppModule {}`}
+
+
+
+
diff --git a/docs/src/content/get-started/developers/technologies.mdx b/docs/src/content/get-started/developers/technologies.mdx
new file mode 100644
index 0000000000..8078fa92a5
--- /dev/null
+++ b/docs/src/content/get-started/developers/technologies.mdx
@@ -0,0 +1,101 @@
+---
+id: developers/technologies
+title: Technologies
+description: An overview of the technologies used in the Design System
+section: developers
+order: 6
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Technologies
+An overview of the technologies used in the Design System.
+
+How the technologies fit together
+
+ The Design System is built on Web Components. Most component functionality lives in the core Web
+ Components layer. Angular and React wrappers sit on top of that layer to make the components easier
+ to use in those frameworks.
+
+
+ We use Svelte to author the components that are compiled to custom elements. You can use the Design
+ System through the core Web Components or through Angular and React wrappers.
+
+
+Web Components
+
+ Web Components
+ are a set of standard web technologies that allow you to create reusable custom elements. Each component
+ includes its own structure, styling, and behaviour. This keeps it independent from the rest of your code.
+
+
+ In the Design System, Web Components are the core library. They are framework-agnostic, so teams
+ can use them in different front-end environments.
+
+
+Benefits of using Web Components
+
+
Reuse: Build once and use across pages, applications, and frameworks
+
Browser support: Work in modern browsers without additional libraries
+
Maintenance: Modular and self-contained structure simplifies updates
+
Encapsulation: Structure, style, and behaviour remain isolated from other page elements
+
Reliability: Code is not spread across HTML and JS files, thereby avoiding inconsistencies
+
Flexibility: Use inline, import, or compile components as needed
+
Composability: Combine components or integrate them with other components
+
+
+
+ Do not use Web Components directly unless there is a specific reason to do so. Using wrappers provides type checking and developer helpers that are not available when working with the core Web Components alone.
+
+Svelte
+
+ Svelte is the framework used to generate the
+ Design System Web Components. Svelte combines JavaScript (logic), HTML (structure), and CSS (style)
+ within a single file. It compiles these into efficient, reusable components.
+
+Why Svelte
+
We use Svelte to:
+
+
Build reusable Web Components
+
Keep component logic, structure, and styling together
+
Support integration with multiple front-end frameworks
+ Angular is a TypeScript-based framework for building
+ web applications. The Design System supports Angular through Angular wrappers around the core Web Components.
+
+
+How Web Components and Angular work together
+
Angular wrappers are created around the Web Components. These wrappers:
+
+
Manage component properties and events
+
Support form binding (Reactive and Template-driven)
+
Allow integration within Angular applications
+
+
The Angular application interacts with the wrapper, which renders the underlying Web Component.
+React
+
+
+ Supported versions: 17, 18, 19
+
+
+
+ React is an open-source JavaScript library used to
+ build user interfaces from reusable components.
+
+
+How Web Components and React work together
+
React wrappers are created around the Web Components. These wrappers:
+
+
Manage properties and events
+
Enable integration within React applications
+
+
The React application interacts with the wrapper, which renders the underlying Web Component.
+
diff --git a/docs/src/content/get-started/developers/updating-your-product.mdx b/docs/src/content/get-started/developers/updating-your-product.mdx
new file mode 100644
index 0000000000..8e810c3758
--- /dev/null
+++ b/docs/src/content/get-started/developers/updating-your-product.mdx
@@ -0,0 +1,162 @@
+---
+id: developers/updating-your-product
+title: Updating your product
+description: The rationale and practical steps for updating your GoA product to Design System 2.0 using the developer-first approach.
+section: developers
+order: 4
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../../components/DropInCallout.astro";
+
+Updating your product
+The updated design system includes a new design language, updated design tokens and components, and new templates. For your product, updating means:
+
+
Your service stays aligned with the current GoA standard as more services update and users move between them
+
You get access to new component properties, examples, and templates that reduce build time for common service types
+
Your product remains supported — the legacy design system stops receiving fixes after September 2026
+
+
+ Most of the update applies automatically. Most of the work will be reviewing what changed in
+ your product and deciding where design follow-up is needed. These steps help you work through
+ the process.
+
+
+Use the developer-first approach
+
+ The developer-first approach lets you see what actually changed in your product before
+ committing to design work.
+
+
+ When you run the update first, spacing, typography, and token changes apply automatically. You
+ can then review the result with your team and focus design and development effort on the screens
+ that need it most. This avoids redesigning screens based on assumptions about what will change
+ before you update.
+
+
+Migration walkthrough
+
+ The migration walkthrough steps through four stages — legacy design system, upgrade applied,
+ layout and styling fixes, and custom component updates — and shows the visual impact on your
+ interface at each stage. The walkthrough covers both public form and workspace product types.
+ Review it with your team before you start: it helps designers and developers see where changes
+ occur, and gives product owners a clearer picture of the scope for planning.
+
+ Applying the update to some parts of your product but not others tends to cause the update to
+ stall. Teams focus on a few components then deprioritize the rest, leaving the product in a
+ mixed state that becomes harder to resolve over time. Reviewing your updated application
+ together in step 3 is designed to address this. Reviewing the full update in a branch before
+ committing gives your team a clear picture of the actual work involved. Use that branch to plan
+ your migration window — you are not committing to proceeding until you are ready.
+
+
+Migration steps
+
+Step 1: Create a branch
+
+ Create a dedicated branch for the update. Keeping it separate from your regular development
+ work lets your team review the changes before merging.
+
+
git checkout -b ds-migration
+
Use a branch name that works for your team — this is just an example.
+
+Step 2: Run the version update
+
+ Follow the steps in Setup to install the
+ updated packages. Run your application after installing the updates. Do this before making any
+ other changes.
+
+
+Step 3: Review the updated application as a team
+
+ Walk through your application with your product team. At this stage, the team will identify
+ what needs attention and decide what to prioritize.
+
+
What to look for:
+
+
+
+
+
+
Area
+
What to look for
+
+
+
+
+
Spacing and layout
+
Screens that feel too tight or unbalanced
+
+
+
Typography
+
Headings or body text that look off in size or weight
+
+
+
Dense or data-heavy screens
+
These carry the most risk during an update and often need the most follow-up
+
+
+
Custom components
+
Anything built outside the design system that needs manual alignment
+
+
+
+
+
+
+ Record what you find. A list of screens and issues is enough at this stage. Your designers and
+ product owner can use that output to plan and prioritize work.
+
+
+Understanding the effort
+
+ There is no single estimate for how long a migration takes. It varies depending on your
+ product. The main factors are:
+
+
+
+
+
+
+
Factor
+
Impact on migration effort
+
+
+
+
+
App size
+
More screens means more to test and review after the update
+
+
+
Design system utilization
+
Products with more custom code need more manual alignment
+
+
+
Developer familiarity
+
Developers with more design system experience move faster through the migration steps
+
+
+
+
+
+
+ Use the team review of your updated application in step 3 to build a realistic estimate for
+ your own product before committing to a timeline.
+
+
+Getting help
+
+
Bring what you find when reviewing your updated application to drop-in hours to get feedback on what to prioritize
+
If you find a problem with the design system itself, reach out on the support channel rather than working around it
+
+
+
diff --git a/docs/src/content/get-started/index.mdx b/docs/src/content/get-started/index.mdx
new file mode 100644
index 0000000000..3c989ccc42
--- /dev/null
+++ b/docs/src/content/get-started/index.mdx
@@ -0,0 +1,97 @@
+---
+id: index
+title: Start with the design system
+description: Start with the design system to build on the research and experience of other service teams
+section: intro
+order: 1
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Start with the design system
+Start with the design system to build on the research and experience of other service teams. This helps you avoid repeating work that has already been done.
+
+
+ The design system gives you a strong foundation for common service needs. It allows your team to focus on the specific challenges of your product.
+ Build on it. Do not start from scratch.
+
+
+Design system by role
+
+
+
+Why start with the design system?
+
+Streamline collaboration
+
+ Designers and developers work from shared components and guidance. This reduces rework and misalignment.
+
+
+Improve accessibility
+
Accessibility is built into both the design and coded components.
+
+Reduce testing effort
+
Components are tested across devices, browsers, and service contexts.
+
+Maintain consistency
+
+ Components align with the broader system to create a cohesive user experience across government services.
+
+
+Spend more time on high-value work
+
Using existing components saves time. You can focus on work that improves service quality, including:
+
+
Usability testing
+
User research
+
Content design
+
Accessibility reviews
+
Design quality checks
+
Low-fidelity prototyping and testing
+
+
This leads to better outcomes for users.
+How to use the design system in your service
+
Follow these steps when designing and building your service.
+
+Use system components first
+
Start with existing components and patterns. These meet most user needs.
+
+Identify gaps through user testing
+
Test your service with users. Identify needs that are not covered by current components.
+
+Before you design something new
+
+ Check what's already available and what's in progress. The team can point you to existing components,
+ solutions other teams have built, and planned work that may meet your need.
+
+
+Design and test new solutions when you need them
+
+ If you still have a gap, design a new solution and test it with users. Move forward only when
+ testing shows clear user value.
+
+
+Share what you learn
+
+ Share your findings with the design system team. Your solution may become part of the design system.
+
+
+
+ Do not create custom components without a clear user need.
+ Unnecessary customization:
+
+
Increases maintenance effort
+
Slows delivery
+
Reduces consistency
+
+ Always confirm the need through research and testing.
+
+
+
+ View the design system governance process
+
+
diff --git a/docs/src/content/get-started/migration-guide.mdx b/docs/src/content/get-started/migration-guide.mdx
new file mode 100644
index 0000000000..27692407b0
--- /dev/null
+++ b/docs/src/content/get-started/migration-guide.mdx
@@ -0,0 +1,107 @@
+---
+id: migration-guide
+title: Migration guide
+description: Choose the right Design System 2.0 migration pathway for your product
+section: intro
+order: 5
+status: published
+---
+import { withBase } from "@/lib/base-url";
+
+Migration guide
+Design System 2.0 (DS 2.0) becomes the Government of Alberta standard in March 2026. New products starting after launch should use DS 2.0. Existing active products should plan their move to DS 2.0 during the recommended migration window, which runs from March 2026 to September 2026.
+
+
+
+
Migration pathways
+The right migration path depends on your product's context, including team funding and capacity, other delivery obligations, product lifecycle, and the effort required to update. The three pathways are standard migration, late migration, and no migration.
+
+
Starting a new product
+If your product starts after March 2026, start with DS 2.0. Migration pathways apply to existing products moving from DS 1.x to DS 2.0.
+
+
Compare the pathways
+
+
+
+
+
+
Pathway
+
Use it when
+
Recommendation
+
+
+
+
+
Standard migration
+
Your product has an active funded team and can migrate by September 2026
+
Recommended default
+
+
+
Late migration
+
Your team cannot meet the standard window because of delivery timelines, dependencies, or capacity constraints
+
Only when necessary
+
+
+
No migration
+
Your product does not have an active funded team and/or is not in a position to upgrade
+
Only in specific cases
+
+
+
+
+
+
+
Standard migration
+Standard migration is the default pathway for active products.
+Choose this path if your product has an active funded team and can schedule migration work between March 2026 and September 2026. This is the recommended path for most teams because it keeps your product aligned with the current standard and gives you the best support.
+Use this pathway when:
+
+
your product is actively maintained
+
your team can reserve time to migrate by September 2026
+
you want access to the latest templates, components, tokens, and guidance
+
+Plan for work across the product team. Typical upgrade tasks include the library updates, adjusting spacing and typography, and updating custom code to align with the DS 2.0 visual design. This is a significant update and will usually involve design, development, and testing.
+
+
Late migration
+Late migration is a last-resort pathway for active products.
+Choose this path only when delivery deadlines, dependencies, or capacity constraints make the standard migration window unrealistic. This path gives your team more time, but it also increases risk and reduces your ongoing support.
+Use this pathway when:
+
+
a major delivery deadline blocks migration work
+
critical dependencies prevent the upgrade during the standard window
+
capacity or funding makes the standard window unrealistic
+
+Delaying migration means your product will wait longer to benefit from DS 2.0 improvements. Over time, unresolved issues will accumulate and your product will be inconsistent with the new standard for longer.
+
+
No migration
+No migration is an opt-out pathway for specific situations.
+Choose this path only when your product does not have an active funded team and/or is not in a position to upgrade. In these cases, the product may remain on DS 1.x.
+Teams on this path should understand that the product will not receive DS 2.0 improvements and will not align with the current standard. Support for DS 1.x is limited from March to September and ends after September 2026.
+
+
+
+
What changes after launch
+After the DS 2.0 launch in March 2026:
+
+
New products should use DS 2.0
+
Active products should aim to migrate by September 2026
+
After launch, web components will move to version 2.x. Although this is a major version update, it does not include breaking changes.
+
Angular 4.x and React 6.x receive limited fixes or features from March to September
+
Support for DS 1.0 ends after September 2026
+
Web components will update to a new major version after September 2026
+
+
+
How to choose a pathway
+Use these questions to guide your decision:
+
+
Is this a new product starting after March 2026?
+
Does the product have an active funded team?
+
Can the team schedule migration work before September 2026?
+
Are there delivery deadlines or dependencies that block the standard window?
+
Is the team prepared to accept reduced support and higher maintenance risk if migration is delayed?
+
+
+
Related guidance
+
+ Review the setup steps for developers
+
diff --git a/docs/src/content/get-started/out-of-support.mdx b/docs/src/content/get-started/out-of-support.mdx
new file mode 100644
index 0000000000..fa61fea200
--- /dev/null
+++ b/docs/src/content/get-started/out-of-support.mdx
@@ -0,0 +1,43 @@
+---
+id: out-of-support
+title: Out of support versions
+description: Design System versions that are no longer supported
+section: appendix
+order: 3
+status: published
+---
+import { withBase } from "@/lib/base-url";
+import DropInCallout from "../../components/DropInCallout.astro";
+
+Out-of-support versions
+With the launch of the new Design System, support for Angular v4 and lower, and React v6 and lower is significantly reduced.
+
+What this means
+
+Fewer fixes or patches
+
Bug fixes and security updates are no longer prioritized for these versions.
+
+No new features
+
All new features and enhancements are released only in the current major version.
+
+Use at your own risk
+
Existing projects may continue to run. However:
+
+
Compatibility with new browsers or operating systems is not guaranteed
+
Compatibility with future framework updates is not guaranteed
+
Issues discovered in these versions will not be resolved
+
+
+
+ Projects using Angular v4 and lower, and React v6 and lower will continue to function. New issues or defects identified in these versions may not be fixed.
+
+What to do next
+
+ Upgrade to the latest supported version. Refer to the
+ Developer setup page.
+
+
diff --git a/docs/src/content/get-started/qa-testing.mdx b/docs/src/content/get-started/qa-testing.mdx
new file mode 100644
index 0000000000..edb2d726e1
--- /dev/null
+++ b/docs/src/content/get-started/qa-testing.mdx
@@ -0,0 +1,67 @@
+---
+id: qa-testing
+title: QA testing
+description: Testing process for Design System components
+section: appendix
+order: 1
+status: published
+---
+import DropInCallout from "../../components/DropInCallout.astro";
+
+QA testing
+This page outlines the testing process for the Design System. The process ensures components function correctly and integrate within products.
+
+Testing objectives
+
QA testing ensures that:
+
+
Coded components match the design specifications
+
Components work in both React and Angular implementations
+
Components are responsive across screen sizes
+
Components meet accessibility requirements
+
Mobile behaviour is validated
+
Documentation on the Design System website is accurate
+
+Test cases
+
+Component testing
+
+
Confirm the rendered component matches design and styling guidelines
+
Confirm configured properties display correctly
+
Confirm the expected event triggers when interacting with the component
+
+
+Responsiveness testing
+
+
Test components on mobile, tablet, and desktop screen sizes
+
Use browser developer tools to simulate devices
+
+
+Accessibility testing
+
+
Run Lighthouse audits to review accessibility scores
+
Confirm appropriate ARIA (Accessible Rich Internet Applications) roles and labels
+
Test keyboard navigation
+
Test with NVDA screen reader
+
+
+Cross-browser testing
+
+
Test on the latest versions of Chrome, Firefox, Safari, and Edge
+
Use Chrome device mode to simulate mobile environments
+
Confirm consistent appearance and behaviour across browsers
+
+
+Bug testing
+
When a bug is fixed:
+
+
Reproduce the issue using the main branch.
+
Verify the fix in the pull request branch.
+
Retest the component across all relevant areas.
+
+
Confirm the issue no longer occurs.
+Reporting
+
+
Document updated test results, findings, and screenshots in the pull request comments
+
diff --git a/docs/src/content/get-started/roadmap.mdx b/docs/src/content/get-started/roadmap.mdx
new file mode 100644
index 0000000000..0672ebdd37
--- /dev/null
+++ b/docs/src/content/get-started/roadmap.mdx
@@ -0,0 +1,127 @@
+---
+id: roadmap
+title: Roadmap
+description: High-level roadmap for the design system team's 2026-27 fiscal year
+section: intro
+order: 4
+status: published
+---
+
+Roadmap
+A high-level summary of the work the design system team plans to focus on in the 2026-27 Fiscal Year.
+
+The roadmap is subject to change as we gather new information. We will communicate updates to ensure product teams can align and plan their work accordingly.
+
+For more details on our priorities and day-to-day activities, see our design system backlog.
+
+
+
+
Now
+Focus: Drive DS 2.0 adoption momentum, protect post-launch stability, and prove DS 2.0 helps teams move faster through prescriptive guidance and examples.
+
+
DS 2.0 adoption and satisfaction measurement
+Objective: Establish reliable DS 2.0 adoption tracking and reporting, and pair it with satisfaction signals from designers, developers, and end users to understand whether DS 2.0 is improving service outcomes as teams upgrade.
+Benefit: Enables accurate progress reporting and provides evidence that DS 2.0 is improving usability, accessibility, and experience quality, not only adoption.
+Examples:
+
+
Create a mechanism to reliably collect and report adoption rate
+
Track upgrade progress against the adoption schedule
+
Capture qualitative signals from teams (developer and designer feedback themes)
+
Capture end-user feedback where available (citizen or worker satisfaction, accessibility and usability feedback)
+
+
+
Product acceleration enablement
+Objective: Provide prescriptive guidance and resources that help teams get to screens, prototypes, and working experiences faster using DS 2.0.
+Benefit: Reduces time to first screens and improves consistency by helping teams start from proven patterns instead of building from scratch.
+Examples:
+
+
Create resources that show how to quickly prototype with DS 2.0 components and examples
+
Provide contextual starting points for teams using Public form and Workspace templates
+
Pilot DS 2.0 with teams to generate strong examples to share
+
Create and publish migration success stories
+
+
+
Design system MCP
+Objective: Stand up the design system Model Context Protocol (MCP) capability so AI tools and platforms can reliably access design system guidance, components, patterns, and standards.
+Benefit: Helps teams generate more consistent, standards-aligned front-ends by making trusted design system context available directly in AI-assisted workflows.
+Examples:
+
+
Define the initial MCP scope and supported design system resources
+
Stand up the MCP server and validate the hosting and maintenance approach
+
Test the MCP use in real product workflows and capture gaps to address
+
Document recommended workflows for teams
+
+
+
Vue support decision
+Objective: Explore and define the minimum work required to confidently state DS 2.0 officially supports Vue, including scope, constraints, and support model.
+Benefit: Prevents unclear commitments and reduces strategic risk by enabling an informed investment decision aligned to organizational needs.
+Examples:
+
+
Define what "official Vue support" means
+
Outline the minimum supportable scope
+
Identify implications for documentation, maintenance, testing, and support
+
+
+
+
+
Next
+Focus: Improve the core Public form and Workspace experience, mature reusable patterns and examples, reduce adoption friction through better packaging, and execute on the chosen Vue direction.
+
+
Public form and Workspace capability improvements
+Objective: Enhance key Public form and Workspace capabilities based on adoption needs and workflow requirements.
+Benefit: Improves feature sets and reduces the need for custom one-off solutions by making common workflows easier to implement with DS 2.0.
+Example:
+
+
Build the review, revise, resubmit feature
+
+
+
Examples and pattern maturity
+Objective: Expand and refine examples and position them as adaptable reusable patterns that teams can apply with confidence.
+Benefit: Improves self-serve success and product consistency, reducing implementation variance and support demand over time.
+Examples:
+
+
Continue expanding and refining examples
+
Show how components and examples combine into larger contexts and workflows
+
+
+
Library packaging and tech stack upgrades
+Objective: Reduce friction in how design system assets are bundled and adopted across libraries and update important tech stacks.
+Benefit: Lowers setup and upgrade complexity, and keeps the design system up to date with the latest supported versions.
+Examples:
+
+
Improve how code libraries are bundled together (React, web components, tokens)
+
Update to Svelte 5
+
+
+
Vue follow-through
+Objective: Based on Vue discovery, either implement formal Vue support or clearly position Angular and React as the recommended approach for teams using AI-assisted workflows.
+Benefit: Provides clear direction to product teams and reduces uncertainty, enabling progress on a supported path while keeping support sustainable for the design system team.
+Examples:
+
+
Publish Vue support guidance and expectations
+
Implement agreed scope if approved
+
Publish recommended alternatives if Vue support is not pursued
+
+
+
+
+
Later
+Focus: Support DS 2.0 version updates and improve documentation and communications quality to support scaling and sustainability.
+
+
Documentation and communications improvements
+Objective: Improve how teams access and understand design system guidance, and communicate design system value areas like accessibility more clearly.
+Benefit: Increases trust, improves reuse, and supports self-serve adoption by making guidance easier to consume and share.
+Examples:
+
+
Add markdown file download to website documentation
+
Articulate accessibility work more clearly (what is covered and how it supports teams)
+
+
+
Targeted capacity support for DS 2.0 version updates
+Objective: Provide targeted design system team capacity to help remaining DS 1.x product teams complete the DS 2.0 version update.
+Benefit: Accelerates adoption progress and unblocks teams facing more difficult migrations, supporting adoption targets while keeping support sustainable through a focus on teams most in need.
+Example:
+
+
+
Focus migration support on late adopters facing systemic barriers to upgrading
+
diff --git a/docs/src/content/productTypes/public-form/index.mdx b/docs/src/content/productTypes/public-form/index.mdx
new file mode 100644
index 0000000000..d74d27da0b
--- /dev/null
+++ b/docs/src/content/productTypes/public-form/index.mdx
@@ -0,0 +1,166 @@
+---
+id: public-form
+title: Public form
+summary: For citizen-facing services where users apply for a benefit, request a service, or submit information. Designed around simplicity and low cognitive load, with plain-language questions, focused pages that ask one thing at a time, save-and-resume, and a clear confirmation of what happens next. The reference example is a starting point to expand on, not a rigid template. Adapt it to fit each service's context.
+heroImage: /images/examples/my-applications-page.png
+demoUrl: https://digital-service-demo-v2.netlify.app/
+tags:
+ - form
+ - public
+ - citizen
+ - pattern
+components: []
+status: published
+---
+
+View demo
+
+import PreviewContainer from "../../../components/PreviewContainer.astro";
+
+Primary user: Citizens applying for a service, benefit, permit, or status update.
+
+## Pages
+
+A public form is built from a small set of page types. Combine and adapt them to fit the work the service supports.
+
+### Start page
+
+The starting point for a citizen to begin your form from within your service or from Alberta.ca.
+
+
+
+### Task list page (optional)
+
+Outline the entire process for the user and help them through it by breaking the experience into individual tasks. Use it for longer or multi-section forms.
+
+
+
+### Question page
+
+Ask a user a question, or a small set of closely related questions. The most common page in a public form. Several variants cover progress indicators, section titles, background context, expandable help, and grouped fields.
+
+
+
+### Review page
+
+Let users check their answers before submitting information to the service. Group answers by section and let the user jump back to any answer they want to change.
+
+
+
+### Result page
+
+Confirm to users that they have completed a form, application, or task, and tell them what to do next.
+
+
+
+---
+
+## Form structure
+
+Use the public form structure focused on content. Asking the right questions in the right shape keeps the interaction as simple as possible.
+
+### Start with one idea per page
+
+Split the form across multiple pages with each page containing just one idea. For example:
+
+- one decision they have to make
+- one question they have to answer
+- one piece of information you are telling a user
+
+Starting with one thing per page helps users to:
+
+- understand what you are asking them to do
+- focus on a specific question and its answer
+- find their way through an unfamiliar process
+- use the service on a mobile device
+- recover easily from form errors
+
+It also helps the service to:
+
+- handle branching questions and loops
+- design for mobile use
+- save a user's answers automatically as they go
+- capture analytics about each question
+
+### Combine questions when helpful
+
+Asking a question does not necessarily mean you should use one form field. Asking a user for their address is best captured all on the same page with multiple fields. See the [grouped fields variant on the question page](/examples/question-page#group-related-questions-on-one-page).
+
+---
+
+## When to use
+
+Use the public form pattern when:
+
+- The service is for citizens, not internal staff
+- Users may complete the form infrequently and need plain-language guidance
+- The form has more than a handful of questions and benefits from being split across pages
+- Branching, conditional logic, or save-and-resume matters
+
+---
+
+## Accessibility
+
+Structuring your form with one idea per page simplifies the experience and makes it more accessible.
+
+1. **Reduced cognitive load.** Presenting only one idea at a time reduces cognitive load on the user. This is particularly beneficial for users with cognitive impairments who might find it difficult to process and respond to multiple questions at once.
+2. **Improved navigation for a screen reader.** This simplified approach efficiently guides the user through the form based on each answer and makes it easier to navigate with screen readers or other assistive technology.
+3. **Better error handling.** With smaller sets of questions validated at a time, errors can be identified and addressed in context. This makes it less confusing and less overwhelming, particularly for users with cognitive impairments and those using assistive technologies.
+4. **Progressive disclosure.** One idea per page allows the user to focus on the current task and move through information slowly. This is especially helpful for users who are easily distracted or overwhelmed by too much information.
+
+---
+
+## Adding complexity
+
+Start by making sure the content and questions you are asking the user are as simple as possible.
+
+As the complexity of your form grows, consider:
+
+- adding simple [progress indicators on a question page](/examples/question-page#show-a-progress-indicator) to communicate progress
+- breaking the form into sections on a [task list page](/examples/task-list-page)
+
+---
+
+## Form stepper
+
+Avoid using a traditional horizontal form stepper on every form. Research has shown that horizontal steppers shown on every page can distract and confuse some users, take up too much space, and make it hard to handle branching and conditional sections of a form.
+
+As the complexity of your form grows, consider:
+
+- adding simple text progress indicators to communicate progress
+- following the one idea per page approach, and breaking the form into sections as needed using a task list page
diff --git a/docs/src/content/productTypes/workspace/index.mdx b/docs/src/content/productTypes/workspace/index.mdx
new file mode 100644
index 0000000000..d3b5d25f72
--- /dev/null
+++ b/docs/src/content/productTypes/workspace/index.mdx
@@ -0,0 +1,262 @@
+---
+id: workspace
+title: Workspace
+summary: The workspace is for productivity-focused services used by service delivery staff as a daily tool to review information, manage records, and complete tasks. The design prioritizes productivity, efficiency, and accuracy so staff can move through their work quickly while ensuring the best outcome for citizens and government. Workspaces should be adapted to fit each service's context and user needs. The reference example is a starting point to expand on, not a rigid template.
+heroImage: /thumbnails/workspace-preview.png
+demoUrl: https://digital-service-demo-v2.netlify.app/workspace
+sourceUrl: https://github.com/GovAlta/goa-workspace-playground
+tags:
+ - workspace
+ - worker
+ - service
+ - case-management
+ - dashboard
+ - pattern
+components:
+ - work-side-menu
+ - table
+ - badge
+ - tabs
+ - container
+ - accordion
+ - drawer
+ - button
+ - block
+status: published
+---
+
+View demo
+
+import LinkCard from "../../../components/LinkCard.astro";
+import PreviewContainer from "../../../components/PreviewContainer.astro";
+
+
+
+
+
+
+Primary user: Service delivery staff
+
+## Pages
+
+Combine and adapt these to fit the work your service supports.
+
+### Dashboard
+
+The landing view of a workspace, showing staff their counts, trends, and assigned work.
+
+
+
+### Index page
+
+The page where staff scan and pick records to work on, with filters, search, and tabs.
+
+
+
+### Case detail
+
+A single-record view for reviewing and acting on one case.
+
+
+
+---
+
+## Patterns
+
+Patterns that show up across multiple workspace pages.
+
+### Data views
+
+Workers need different ways to view, scan, and act on records depending on the task. Choose the data view that best supports the task.
+
+- **Table view.** Dense, scannable rows with sortable columns. Best for users who need to compare fields across many records at once.
+- **Card view.** Each record as a card showing key details grouped into sections. Useful when records have more complex data that doesn't fit neatly into columns.
+- **Expandable list view.** Compact rows that expand inline to reveal detail. A middle ground between the density of a table and the richness of cards.
+
+Any view can be combined with grouping (for example, group by priority or status) to organize records into collapsible sections. Users can also search, filter by status using [tabs](/components/tabs), sort with multi-level sorting, and manage active filters with [filter chips](/components/filter-chip).
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Sidebar navigation
+
+Use the [work side menu](/components/work-side-menu) as the primary navigation for a workspace.
+
+Keep top-level navigation focused on the main areas of work. When a user opens a record or case, switch to contextual navigation that supports that task. This puts the user into a focused mode with relevant navigation items (like sections of an application, comments, reminders) and a back link to return to the main view. The sidebar can adapt to what the user is doing, it doesn't have to show everything at once.
+
+
+
+
+ Main workspace navigation
+
+
+
+
+
+ Contextual case navigation
+
+
+
+
+
+### Sticky action bar
+
+A scroll-aware header that pins to the top of the content area as the user scrolls. Use it to keep the most important tools visible.
+
+Set the content for each page based on the task:
+
+- On a cases list page, keep tools such as search and key actions visible.
+- On a detail page, keep the case name and key actions visible.
+
+Do not pin everything. Keep only the information and actions people need to continue their work without losing context.
+
+
+
+### Push drawer
+
+Use a [push drawer](/components/push-drawer) for focused work that should happen without leaving the current page.
+
+This works well for actions such as:
+
+- approving or denying a record
+- requesting more information
+- completing a short decision form
+- reviewing supporting details while taking action
+
+Use it when users need to keep the main record in view while completing the task.
+
+
+
+---
+
+## Components built for workspace
+
+Workspace patterns are supported by component features designed for denser, more productive interfaces:
+
+- **Compact inputs.** Every input component now has a `compact` variant that reduces height and spacing. This lets you build tighter forms and toolbars without sacrificing usability.
+- **Compact badges and notifications.** [Badges](/components/badge) and [notification banners](/components/notification) also have compact sizing to fit within dense data views and action bars.
+- **Badge variants.** [Badges](/components/badge) now include `strong` and `subtle` emphasis options, giving you control over visual weight depending on context.
+- **Data grid.** The [data grid](/components/data-grid) works with the table component to support accessible, keyboard-navigable data views. Use them together when the user needs to move through records efficiently without relying on a mouse.
+- **Segmented tabs.** A new [tab](/components/tab) variant that works as a segmented toggle for switching between views or modes within a workspace, rather than navigating between pages.
+- **Enhanced filter chips.** [Filter chips](/components/filter-chip) now support secondary text and secondary icons, making them more useful for richer filtering in workspace data views.
+
+---
+
+## Keyboard-accessible data views
+
+Workspace data views use the [data grid](/components/data-grid) to make table and card layouts fully keyboard navigable. Users can use arrow keys to move between cells and rows, making it possible to scan and act on records without a mouse. This is especially important in workspace contexts where staff are processing high volumes of cases and keyboard navigation is significantly faster than clicking. For assistive technology users, screen readers announce cell content and position as the user navigates.
+
+---
+
+## When to use
+
+Use the workspace when your service needs to support regular, task-based work, such as:
+
+- Reviewing and processing submissions
+- Managing case files, applications, or requests
+- Moving between dashboards, lists, and detail views
+- Taking actions such as approve, deny, assign, or request more information
+
+## When not to use
+
+- Citizen-facing services. Use the [public form](/examples/public-form) pattern instead.
+- Content-only pages that do not involve case management.
+- Simple internal tools that do not need structured case processing.
+
+---
+
+## Get started
+
+Use one of the workspace templates as a starting point for your service. Each template includes the sidebar navigation, dashboard, data views, and case detail patterns described above.
+
+
+
+
+
+
+---
+
+## Considerations
+
+- The reference demo is a spike. Component customizations have not gone through the production pipeline yet.
+- There should be significant variability within a workspace to meet each service's specific context and user needs.
+- The demo is a starting point to expand on and adapt, not a rigid template to copy exactly.
+- Desktop uses a card container pattern for the main content area. This is removed on mobile for space.
diff --git a/docs/src/data/configurations/accordion.ts b/docs/src/data/configurations/accordion.ts
index 2ce87e20f7..79a8d21b3e 100644
--- a/docs/src/data/configurations/accordion.ts
+++ b/docs/src/data/configurations/accordion.ts
@@ -144,6 +144,78 @@ export const accordionConfigurations: ComponentConfigurations = {
Applications are typically processed within 10 business days.
+`,
+ },
+ },
+ {
+ id: "filled",
+ name: "Filled accordion",
+ description: "Single accordion with filled type",
+ code: {
+ react: `
+ You will need to provide proof of identity, proof of address,
+ and any relevant supporting documentation.
+`,
+ angular: `
+ You will need to provide proof of identity, proof of address,
+ and any relevant supporting documentation.
+`,
+ webComponents: `
+ You will need to provide proof of identity, proof of address,
+ and any relevant supporting documentation.
+`,
+ },
+ },
+ {
+ id: "actions",
+ name: "Accordion with actions",
+ description: "Accordion with actions slot content",
+ code: {
+ react: `
+
+
+ View all
+
+
+ }
+>
+
+ This example mixes badges and controls inside the actions slot.
+
+`,
+ angular: `
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+
+
+ View all
+
+`,
+ webComponents: `
+
+ This example mixes badges and controls inside the actions slot.
+
+
+
+
+ View all
+
+
`,
},
},
diff --git a/docs/src/data/configurations/index.ts b/docs/src/data/configurations/index.ts
index d01d86eaa0..cbfbe46429 100644
--- a/docs/src/data/configurations/index.ts
+++ b/docs/src/data/configurations/index.ts
@@ -54,6 +54,7 @@ export { sideMenuConfigurations } from "./side-menu";
export { sideMenuGroupConfigurations } from "./side-menu-group";
export { sideMenuHeadingConfigurations } from "./side-menu-heading";
export { workSideMenuConfigurations } from "./work-side-menu";
+export { workSideNotificationPanelConfigurations } from "./work-side-notification-panel";
export { menuButtonConfigurations } from "./menu-button";
export { appHeaderConfigurations } from "./app-header";
export { appHeaderMenuConfigurations } from "./app-header-menu";
@@ -122,6 +123,7 @@ import { sideMenuConfigurations } from "./side-menu";
import { sideMenuGroupConfigurations } from "./side-menu-group";
import { sideMenuHeadingConfigurations } from "./side-menu-heading";
import { workSideMenuConfigurations } from "./work-side-menu";
+import { workSideNotificationPanelConfigurations } from "./work-side-notification-panel";
import { menuButtonConfigurations } from "./menu-button";
import { appHeaderConfigurations } from "./app-header";
import { appHeaderMenuConfigurations } from "./app-header-menu";
@@ -196,6 +198,7 @@ export const configurationRegistry: ConfigurationRegistry = {
"side-menu-group": sideMenuGroupConfigurations,
"side-menu-heading": sideMenuHeadingConfigurations,
"work-side-menu": workSideMenuConfigurations,
+ "work-side-notification-panel": workSideNotificationPanelConfigurations,
"menu-button": menuButtonConfigurations,
"app-header": appHeaderConfigurations,
"app-header-menu": appHeaderMenuConfigurations,
diff --git a/docs/src/data/configurations/push-drawer.ts b/docs/src/data/configurations/push-drawer.ts
index f0d2a3ffb4..923e112b17 100644
--- a/docs/src/data/configurations/push-drawer.ts
+++ b/docs/src/data/configurations/push-drawer.ts
@@ -51,6 +51,7 @@ export const pushDrawerConfigurations: ComponentConfigurations = {
componentSlug: "push-drawer",
componentName: "Push Drawer",
defaultConfigurationId: "basic",
+ previewStyle: "padding: 0;",
configurations: [
{
diff --git a/docs/src/data/configurations/shared/shared-previews.ts b/docs/src/data/configurations/shared/shared-previews.ts
new file mode 100644
index 0000000000..7894d697e9
--- /dev/null
+++ b/docs/src/data/configurations/shared/shared-previews.ts
@@ -0,0 +1,22 @@
+/**
+ * Shared preview style/wrapper templates for ConfigurationPreview.
+ *
+ * Use these when a component is meant to be seen inside a larger product layout
+ * (e.g. work-side-menu and notification panel sit next to a workspace area).
+ *
+ * - previewStyle: CSS applied to the preview container (replaces inline cssText).
+ * - previewWrapper: HTML around the component. `{{slot}}` is replaced with the
+ * component code at render time. Only used in the preview, never in the code
+ * snippet shown to users.
+ */
+
+export const workspacePreviewStyle =
+ "background: var(--goa-color-greyscale-50, #f8f8f8); padding: 0; display: flex; min-height: 500px;";
+
+export const workspacePreviewWrapper = `
{{slot}}
+
+
+
Dashboard
+
Welcome back.
+
+
`;
diff --git a/docs/src/data/configurations/temporary-notification.ts b/docs/src/data/configurations/temporary-notification.ts
index 5c1bc5789e..23b64478c5 100644
--- a/docs/src/data/configurations/temporary-notification.ts
+++ b/docs/src/data/configurations/temporary-notification.ts
@@ -108,29 +108,40 @@ export class SomeOtherComponent {
{
id: "with-progress",
name: "Progress and indeterminate",
- description:
- "Notifications for loading states (note: progress and indeterminate types may have rendering issues)",
+ description: "Notifications for loading states",
code: {
react: ` {
- const uuid = TemporaryNotification.show("Uploading file...", { type: "progress" });
- TemporaryNotification.setProgress(uuid, 65);
+ const uuid = TemporaryNotification.show("Uploading file...", { type: "progress", duration: "long" });
+ // Simulate progress; in real usage, drive this from your operation's progress events.
+ let progress = 0;
+ const interval = setInterval(() => {
+ progress = Math.min(progress + 10, 100);
+ TemporaryNotification.setProgress(uuid, progress);
+ if (progress >= 100) clearInterval(interval);
+ }, 500);
}} mb="xs">Progress {
- TemporaryNotification.show("Processing your request...", { type: "indeterminate" });
+ TemporaryNotification.show("Processing your request...", { type: "indeterminate", duration: "long" });
}}>Indeterminate`,
angular: {
ts: `import { TemporaryNotification } from "@abgov/ui-components-common";
export class SomeOtherComponent {
showProgress() {
- const uuid = TemporaryNotification.show("Uploading file...", { type: "progress" });
- TemporaryNotification.setProgress(uuid, 65);
+ const uuid = TemporaryNotification.show("Uploading file...", { type: "progress", duration: "long" });
+ // Simulate progress; in real usage, drive this from your operation's progress events.
+ let progress = 0;
+ const interval = setInterval(() => {
+ progress = Math.min(progress + 10, 100);
+ TemporaryNotification.setProgress(uuid, progress);
+ if (progress >= 100) clearInterval(interval);
+ }, 500);
}
showIndeterminate() {
- TemporaryNotification.show("Processing your request...", { type: "indeterminate" });
+ TemporaryNotification.show("Processing your request...", { type: "indeterminate", duration: "long" });
}
}`,
template: `
@@ -145,15 +156,86 @@ export class SomeOtherComponent {
`,
+ },
+ },
+ {
+ id: "with-action",
+ name: "Notification with action",
+ description: "Notification with a clickable action button (e.g., Undo)",
+ code: {
+ react: `
+
+ {
+ TemporaryNotification.show("Item moved to trash", {
+ type: "basic",
+ duration: "long",
+ actionText: "Undo",
+ action: () => {
+ console.log("Undo clicked");
+ },
+ });
+}}>Show notification`,
+ angular: {
+ ts: `import { TemporaryNotification } from "@abgov/ui-components-common";
+
+export class SomeOtherComponent {
+ showWithAction() {
+ TemporaryNotification.show("Item moved to trash", {
+ type: "basic",
+ duration: "long",
+ actionText: "Undo",
+ action: () => {
+ console.log("Undo clicked");
+ },
+ });
+ }
+}`,
+ template: `
+
+Show notification`,
+ },
+ webComponents: `
+
+Show notification
+
+`,
diff --git a/docs/src/data/configurations/types.ts b/docs/src/data/configurations/types.ts
index c73938b0e7..3bd0e0a7b9 100644
--- a/docs/src/data/configurations/types.ts
+++ b/docs/src/data/configurations/types.ts
@@ -94,6 +94,13 @@ export interface ComponentConfigurations {
/** Default configuration ID to show on page load */
defaultConfigurationId: string;
+ /** Optional inline CSS for the preview container (e.g. background color for workspace context) */
+ previewStyle?: string;
+
+ /** Optional HTML that wraps each config's webComponents code in the preview only (not shown in code snippet).
+ * Use {{slot}} as placeholder for the component code. */
+ previewWrapper?: string;
+
/** All available configurations */
configurations: ComponentConfiguration[];
}
diff --git a/docs/src/data/configurations/work-side-menu.ts b/docs/src/data/configurations/work-side-menu.ts
index bfb35371e1..bae643cbef 100644
--- a/docs/src/data/configurations/work-side-menu.ts
+++ b/docs/src/data/configurations/work-side-menu.ts
@@ -5,11 +5,14 @@
*/
import type { ComponentConfigurations } from "./types";
+import { workspacePreviewStyle, workspacePreviewWrapper } from "./shared/shared-previews";
export const workSideMenuConfigurations: ComponentConfigurations = {
componentSlug: "work-side-menu",
componentName: "Work side menu",
defaultConfigurationId: "basic",
+ previewStyle: workspacePreviewStyle,
+ previewWrapper: workspacePreviewWrapper,
configurations: [
{
@@ -49,7 +52,7 @@ export const workSideMenuConfigurations: ComponentConfigurations = {
{
id: "with-user-profile",
name: "With user profile",
- description: "Menu showing user name and role",
+ description: "Menu showing user name and role with an account menu",
code: {
react: `
>
}
+ accountContent={
+ <>
+
+
+
+ >
+ }
/>`,
- angular: `
-
-
-
-
-`,
+ angular: `
+
+
+
+
+
+
+
+
+
+
+`,
webComponents: `
-
-
+
+
+ `,
},
},
diff --git a/docs/src/data/configurations/work-side-notification-panel.ts b/docs/src/data/configurations/work-side-notification-panel.ts
new file mode 100644
index 0000000000..ac467b5420
--- /dev/null
+++ b/docs/src/data/configurations/work-side-notification-panel.ts
@@ -0,0 +1,784 @@
+/**
+ * WorkSideNotificationPanel Component Configurations
+ *
+ * Notification center panel used within a work side menu item's popover.
+ */
+
+import type { ComponentConfigurations } from "./types";
+import { workspacePreviewStyle, workspacePreviewWrapper } from "./shared/shared-previews";
+
+export const workSideNotificationPanelConfigurations: ComponentConfigurations = {
+ componentSlug: "work-side-notification-panel",
+ componentName: "Notification panel",
+ defaultConfigurationId: "basic",
+ previewStyle: workspacePreviewStyle,
+ previewWrapper: workspacePreviewWrapper,
+
+ configurations: [
+ {
+ id: "basic",
+ name: "Basic notification panel",
+ description:
+ "Panel with a mix of read and unread notifications in a work side menu",
+ code: {
+ react: {
+ ts: `const initialItems: (GoabWorkSideNotificationItemProps & { id: string })[] = [
+ {
+ id: "1",
+ title: "New case assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T10:30:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Document uploaded",
+ description: "A new document was uploaded to Case #12340.",
+ timestamp: "2025-03-15T09:15:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-14T16:00:00Z",
+ type: "success",
+ readStatus: "read",
+ priority: "normal",
+ },
+];
+
+const [items, setItems] = useState(initialItems);
+
+const handleMarkAllRead = () => {
+ setItems((items) => items.map((item) => ({ ...item, readStatus: "read" })));
+};
+
+const handleViewAll = () => {
+ console.log("view all");
+};
+
+const handleClick = (id: string) => {
+ setItems((items) =>
+ items.map((item) => (item.id === id ? { ...item, readStatus: "read" } : item)),
+ );
+};`,
+ jsx: ` navigate(path)}
+ primaryContent={
+ <>
+
+
+ >
+ }
+ secondaryContent={
+
+ {items.map(({ id, ...item }) => (
+ handleClick(id)}
+ />
+ ))}
+
+ }
+ />
+ }
+/>`,
+ },
+ angular: {
+ ts: `interface NotificationItem {
+ id: string;
+ title: string;
+ description: string;
+ timestamp: string;
+ type: GoabWorkSideNotificationItemType;
+ readStatus: GoabWorkSideNotificationReadStatus;
+ priority: GoabWorkSideNotificationPriority;
+}
+
+export class SomeOtherComponent {
+ items: NotificationItem[] = [
+ {
+ id: "1",
+ title: "New case assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T10:30:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Document uploaded",
+ description: "A new document was uploaded to Case #12340.",
+ timestamp: "2025-03-15T09:15:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-14T16:00:00Z",
+ type: "success",
+ readStatus: "read",
+ priority: "normal",
+ },
+ ];
+
+ handleMarkAllRead() {
+ this.items = this.items.map((item) => ({ ...item, readStatus: "read" }));
+ }
+
+ handleViewAll() {
+ console.log("view all");
+ }
+
+ handleClick(id: string) {
+ this.items = this.items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ );
+ }
+}`,
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+ @for (item of items; track item.id) {
+
+ }
+
+`,
+ },
+ webComponents: {
+ html: `
+
+
+
+
+
+
+
+
+
+`,
+ js: `const panel = container.querySelector("goa-work-side-notification-panel");
+const items = container.querySelectorAll("goa-work-side-notification-item");
+
+items.forEach((item) => {
+ item.addEventListener("_click", () => {
+ item.setAttribute("read-status", "read");
+ });
+});
+
+panel.addEventListener("_markAllRead", () => {
+ items.forEach((item) => item.setAttribute("read-status", "read"));
+});
+
+panel.addEventListener("_viewAll", () => {
+ console.log("view all");
+});`,
+ },
+ },
+ },
+ {
+ id: "urgent-notifications",
+ name: "With urgent notifications",
+ description: "Menu with urgent priority notifications in the panel",
+ code: {
+ react: {
+ ts: `const initialItems: (GoabWorkSideNotificationItemProps & { id: string })[] = [
+ {
+ id: "1",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T14:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "2",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T12:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "3",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T11:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+];
+
+const [items, setItems] = useState(initialItems);
+
+const handleMarkAllRead = () => {
+ setItems((items) => items.map((item) => ({ ...item, readStatus: "read" })));
+};
+
+const handleViewAll = () => {
+ console.log("view all");
+};
+
+const handleClick = (id: string) => {
+ setItems((items) =>
+ items.map((item) => (item.id === id ? { ...item, readStatus: "read" } : item)),
+ );
+};`,
+ jsx: ` navigate(path)}
+ primaryContent={
+ <>
+
+
+ >
+ }
+ secondaryContent={
+
+ {items.map(({ id, ...item }) => (
+ handleClick(id)}
+ />
+ ))}
+
+ }
+ />
+ }
+/>`,
+ },
+ angular: {
+ ts: `interface NotificationItem {
+ id: string;
+ title: string;
+ description: string;
+ timestamp: string;
+ type: GoabWorkSideNotificationItemType;
+ readStatus: GoabWorkSideNotificationReadStatus;
+ priority: GoabWorkSideNotificationPriority;
+}
+
+export class SomeOtherComponent {
+ items: NotificationItem[] = [
+ {
+ id: "1",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T14:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "2",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T12:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "urgent",
+ },
+ {
+ id: "3",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T11:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ ];
+
+ handleMarkAllRead() {
+ this.items = this.items.map((item) => ({ ...item, readStatus: "read" }));
+ }
+
+ handleViewAll() {
+ console.log("view all");
+ }
+
+ handleClick(id: string) {
+ this.items = this.items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ );
+ }
+}`,
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+ @for (item of items; track item.id) {
+
+ }
+
+`,
+ },
+ webComponents: {
+ html: `
+
+
+
+
+
+
+
+
+
+`,
+ js: `const panel = container.querySelector("goa-work-side-notification-panel");
+const items = container.querySelectorAll("goa-work-side-notification-item");
+
+items.forEach((item) => {
+ item.addEventListener("_click", () => {
+ item.setAttribute("read-status", "read");
+ });
+});
+
+panel.addEventListener("_markAllRead", () => {
+ items.forEach((item) => item.setAttribute("read-status", "read"));
+});
+
+panel.addEventListener("_viewAll", () => {
+ console.log("view all");
+});`,
+ },
+ },
+ },
+ {
+ id: "notification-types",
+ name: "Notification type badges",
+ description: "All notification item type variants with their badge icons",
+ code: {
+ react: {
+ ts: `const initialItems: (GoabWorkSideNotificationItemProps & { id: string })[] = [
+ {
+ id: "1",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T10:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Case #12345 assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T09:00:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-15T08:00:00Z",
+ type: "success",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "4",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T07:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "5",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T06:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "normal",
+ },
+];
+
+const [items, setItems] = useState(initialItems);
+
+const handleMarkAllRead = () => {
+ setItems((items) => items.map((item) => ({ ...item, readStatus: "read" })));
+};
+
+const handleViewAll = () => {
+ console.log("view all");
+};
+
+const handleClick = (id: string) => {
+ setItems((items) =>
+ items.map((item) => (item.id === id ? { ...item, readStatus: "read" } : item)),
+ );
+};`,
+ jsx: ` navigate(path)}
+ primaryContent={
+
+ }
+ secondaryContent={
+
+ {items.map(({ id, ...item }) => (
+ handleClick(id)}
+ />
+ ))}
+
+ }
+ />
+ }
+/>`,
+ },
+ angular: {
+ ts: `interface NotificationItem {
+ id: string;
+ title: string;
+ description: string;
+ timestamp: string;
+ type: GoabWorkSideNotificationItemType;
+ readStatus: GoabWorkSideNotificationReadStatus;
+ priority: GoabWorkSideNotificationPriority;
+}
+
+export class SomeOtherComponent {
+ items: NotificationItem[] = [
+ {
+ id: "1",
+ title: "New comment on case",
+ description: "A team member commented on Case #12340.",
+ timestamp: "2025-03-15T10:00:00Z",
+ type: "default",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "2",
+ title: "Case #12345 assigned",
+ description: "Case #12345 has been assigned to you for review.",
+ timestamp: "2025-03-15T09:00:00Z",
+ type: "info",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "3",
+ title: "Case resolved",
+ description: "Case #12330 has been marked as resolved.",
+ timestamp: "2025-03-15T08:00:00Z",
+ type: "success",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "4",
+ title: "Deadline approaching",
+ description: "Case #12345 response is due in 2 hours.",
+ timestamp: "2025-03-15T07:00:00Z",
+ type: "warning",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ {
+ id: "5",
+ title: "System maintenance",
+ description: "Scheduled maintenance tonight at 11 PM. All services will be unavailable.",
+ timestamp: "2025-03-15T06:00:00Z",
+ type: "critical",
+ readStatus: "unread",
+ priority: "normal",
+ },
+ ];
+
+ handleMarkAllRead() {
+ this.items = this.items.map((item) => ({ ...item, readStatus: "read" }));
+ }
+
+ handleViewAll() {
+ console.log("view all");
+ }
+
+ handleClick(id: string) {
+ this.items = this.items.map((item) =>
+ item.id === id ? { ...item, readStatus: "read" } : item,
+ );
+ }
+}`,
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+ @for (item of items; track item.id) {
+
+ }
+
+`,
+ },
+ webComponents: {
+ html: `
+
+
+
+
+
+
+
+
+
+
+`,
+ js: `const panel = container.querySelector("goa-work-side-notification-panel");
+const items = container.querySelectorAll("goa-work-side-notification-item");
+
+items.forEach((item) => {
+ item.addEventListener("_click", () => {
+ item.setAttribute("read-status", "read");
+ });
+});
+
+panel.addEventListener("_markAllRead", () => {
+ items.forEach((item) => item.setAttribute("read-status", "read"));
+});
+
+panel.addEventListener("_viewAll", () => {
+ console.log("view all");
+});`,
+ },
+ },
+ },
+ ],
+};
diff --git a/docs/src/hooks/index.ts b/docs/src/hooks/index.ts
index 652c65f682..e61376a796 100644
--- a/docs/src/hooks/index.ts
+++ b/docs/src/hooks/index.ts
@@ -5,3 +5,4 @@
export { useTwoLevelSort, type SortConfig, type SortLevel } from './useTwoLevelSort';
export { useCompactToolbar, useMobile, COMPACT_TOOLBAR_BREAKPOINT, MOBILE_BREAKPOINT } from './useCompactToolbar';
export { useViewSettings, type ViewSettings, type LayoutType, type GroupByField } from './useViewSettings';
+export { useIsDarkMode } from './useIsDarkMode';
diff --git a/docs/src/hooks/useIsDarkMode.ts b/docs/src/hooks/useIsDarkMode.ts
new file mode 100644
index 0000000000..24afeb84cd
--- /dev/null
+++ b/docs/src/hooks/useIsDarkMode.ts
@@ -0,0 +1,42 @@
+/**
+ * useIsDarkMode.ts
+ *
+ * Watches the active theme via the `data-theme` attribute on .
+ * Returns true when in dark mode. Reacts to toggle changes via MutationObserver.
+ *
+ * Why read from the DOM attribute instead of localStorage:
+ * - The pre-paint script in BaseLayout.astro sets `data-theme` from
+ * localStorage > prefers-color-scheme > "light", so the attribute is
+ * the source of truth for what's currently rendered.
+ * - localStorage has no in-tab change event; MutationObserver on the
+ * attribute is the cleanest way to react to toggle in other islands.
+ * - localStorage may be blocked (private mode, sandboxed iframe); the
+ * DOM attribute is always set.
+ *
+ * Astro islands cannot share React context, so the DOM attribute is the
+ * cross-island sync channel for theme.
+ */
+
+import { useEffect, useState } from "react";
+
+export function useIsDarkMode(): boolean {
+ const [isDark, setIsDark] = useState(
+ () =>
+ typeof document !== "undefined" &&
+ document.documentElement.getAttribute("data-theme") === "dark",
+ );
+
+ useEffect(() => {
+ if (typeof document === "undefined") return;
+ const observer = new MutationObserver(() => {
+ setIsDark(document.documentElement.getAttribute("data-theme") === "dark");
+ });
+ observer.observe(document.documentElement, {
+ attributes: true,
+ attributeFilter: ["data-theme"],
+ });
+ return () => observer.disconnect();
+ }, []);
+
+ return isDark;
+}
diff --git a/docs/src/layouts/BaseLayout.astro b/docs/src/layouts/BaseLayout.astro
index b9f9d3fa4c..0f9905158d 100644
--- a/docs/src/layouts/BaseLayout.astro
+++ b/docs/src/layouts/BaseLayout.astro
@@ -2,6 +2,7 @@
// Import v2 design tokens and web component styles
import '@abgov/web-components/index.css';
import '@design-tokens/tokens.css';
+import '@design-tokens/dark-theme.css';
// Import search styles eagerly so inline search inputs don't flash unstyled
import '../components/search/search.css';
@@ -26,6 +27,24 @@ const ogUrl = new URL(withBase(Astro.url.pathname), Astro.site).href;
+
+
+
+
+
+
+
+
+
+
+ {backLabel}
+
+
+
@@ -214,10 +250,11 @@ const v1DocsUrl = `https://v1.design.alberta.ca/examples/${slug}`;
margin-bottom: var(--goa-space-2xl, 2.5rem);
}
+ /* Use goa-text typography tokens so MDX headings match the design system's
+ heading scale without authors having to wrap each heading in . */
.example-content :global(h2) {
- font-size: 1.25rem;
- font-weight: 600;
- margin: var(--goa-space-xl, 2rem) 0 var(--goa-space-m, 1rem);
+ font: var(--goa-typography-heading-m);
+ margin: var(--goa-space-2xl, 2.5rem) 0 var(--goa-space-m, 1rem);
color: var(--goa-color-text-default, #333);
}
@@ -225,6 +262,12 @@ const v1DocsUrl = `https://v1.design.alberta.ca/examples/${slug}`;
margin-top: 0;
}
+ .example-content :global(h3) {
+ font: var(--goa-typography-heading-s);
+ margin: var(--goa-space-2xl, 2.5rem) 0 var(--goa-space-s, 0.5rem);
+ color: var(--goa-color-text-default, #333);
+ }
+
.example-content :global(p) {
margin-bottom: var(--goa-space-m, 1rem);
max-width: 65ch;
diff --git a/docs/src/pages/examples/[slug]/preview.astro b/docs/src/pages/examples/[slug]/preview.astro
new file mode 100644
index 0000000000..7098c794a8
--- /dev/null
+++ b/docs/src/pages/examples/[slug]/preview.astro
@@ -0,0 +1,87 @@
+---
+/**
+ * Generic preview route for flat-slug page-scale examples.
+ *
+ * Renders the page's React component full-screen wrapped in PreviewLayout.
+ * Astro hydration needs static imports so it can ship the right JS bundle
+ * to the client, hence the SLUG_TO_COMPONENT map below. Adding a new
+ * page-scale entry means one import + one map entry here.
+ *
+ * Workspace pages (nested slugs) use [family]/[page]/preview.astro which
+ * iframes an external demo. Error-page variants and question-page variants
+ * have their own routes.
+ */
+import { getCollection } from "astro:content";
+import PreviewLayout from "../../../layouts/PreviewLayout.astro";
+import { StartPage } from "../../../content/examples/start-page/react";
+import { TaskListPage } from "../../../content/examples/task-list-page/react";
+import { ReviewPage } from "../../../content/examples/review-page/react";
+import { ResultPage } from "../../../content/examples/result-page/react";
+import { BasicPageLayout } from "../../../content/examples/basic-page-layout/react";
+
+export async function getStaticPaths() {
+ // Inline list — Astro's getStaticPaths runs in an isolated module context
+ // and cannot see frontmatter top-level constants like SLUG_TO_COMPONENT.
+ // Keep this list in sync with the SLUG_TO_COMPONENT map above when adding
+ // page-scale entries that need a preview route.
+ const slugsWithPreview = new Set([
+ "start-page",
+ "task-list-page",
+ "review-page",
+ "result-page",
+ "basic-page-layout",
+ ]);
+ const examples = await getCollection("examples");
+ return examples
+ .filter(
+ (e) =>
+ !e.slug.includes("/") &&
+ e.data.size !== "section" &&
+ slugsWithPreview.has(e.slug),
+ )
+ .map((entry) => ({
+ params: { slug: entry.slug },
+ props: { entry },
+ }));
+}
+
+const { entry } = Astro.props;
+const { slug } = Astro.params;
+const { data } = entry;
+const fullWidth = data.previewFullWidth === true;
+
+const githubBlob = `https://github.com/GovAlta/ui-components/blob/dev/docs/src/content/examples/${slug}/react.tsx`;
+const githubFolder = `https://github.com/GovAlta/ui-components/tree/dev/docs/src/content/examples/${slug}`;
+---
+
+
+
+ {/* Each branch is its own statically-imported JSX element so Astro
+ can wire up client:load hydration. Add a new branch when adding
+ a page-scale entry that needs a preview route. */}
+ {slug === "start-page" && }
+ {slug === "task-list-page" && }
+ {slug === "review-page" && }
+ {slug === "result-page" && }
+ {slug === "basic-page-layout" && }
+
+
+
+
diff --git a/docs/src/pages/examples/error-pages/401/preview.astro b/docs/src/pages/examples/error-pages/401/preview.astro
new file mode 100644
index 0000000000..6c2dc91688
--- /dev/null
+++ b/docs/src/pages/examples/error-pages/401/preview.astro
@@ -0,0 +1,76 @@
+---
+/**
+ * Error pages: 401 live preview
+ *
+ * Render-local preview. Composition mirrors
+ * content/examples/error-pages/401/web-components.html so the rendered
+ * preview is visually identical to the source a consumer would paste.
+ */
+import PreviewLayout from "../../../../layouts/PreviewLayout.astro";
+import { withBase } from "@/lib/base-url";
+
+const homeUrl = withBase("/");
+---
+
+
+
+
+
+
+
+
+
+ Error 401
+
+
+
+
+ Restricted access
+
+ We cannot provide access to this page without valid credentials. Please sign in or
+ contact support at
+
+ cs.licensingsupport@gov.ab.ca
+
+ to request access.
+
+
+
+
+ Go to home page
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/error-pages/404/preview.astro b/docs/src/pages/examples/error-pages/404/preview.astro
new file mode 100644
index 0000000000..05343bdff1
--- /dev/null
+++ b/docs/src/pages/examples/error-pages/404/preview.astro
@@ -0,0 +1,71 @@
+---
+/**
+ * Error pages: 404 live preview
+ *
+ * Render-local preview. Composition mirrors
+ * content/examples/error-pages/404/web-components.html so the rendered
+ * preview is visually identical to the source a consumer would paste.
+ */
+import PreviewLayout from "../../../../layouts/PreviewLayout.astro";
+import { withBase } from "@/lib/base-url";
+
+const homeUrl = withBase("/");
+---
+
+
+
+
+
+
+
+
+
+ Error 404
+
+
+
+
+ Page not found
+
+ The page you're looking for doesn't exist or has been moved.
+
+
+
+
+ Go to home page
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/error-pages/500/preview.astro b/docs/src/pages/examples/error-pages/500/preview.astro
new file mode 100644
index 0000000000..9f8eb71b6a
--- /dev/null
+++ b/docs/src/pages/examples/error-pages/500/preview.astro
@@ -0,0 +1,72 @@
+---
+/**
+ * Error pages: 500 live preview
+ *
+ * Render-local preview. Composition mirrors
+ * content/examples/error-pages/500/web-components.html so the rendered
+ * preview is visually identical to the source a consumer would paste.
+ */
+import PreviewLayout from "../../../../layouts/PreviewLayout.astro";
+import { withBase } from "@/lib/base-url";
+
+const homeUrl = withBase("/");
+---
+
+
+
+
+
+
+
+
+
+ Error 500
+
+
+
+
+ We are experiencing a problem
+
+ We cannot load this page right now. Please try again in a few minutes. We apologize
+ for the inconvenience.
+
+
+
+
+ Go to home page
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/index.astro b/docs/src/pages/examples/index.astro
index 75692da9e2..990a81abef 100644
--- a/docs/src/pages/examples/index.astro
+++ b/docs/src/pages/examples/index.astro
@@ -16,21 +16,43 @@ import Breadcrumbs from '../../components/Breadcrumbs.astro';
import { ExamplesGrid } from '../../components/ExamplesGrid';
-// Get all examples
+// Pull both collections so the grid can surface product-type overviews
+// alongside their member examples. Synthesizing the productTypes entries
+// at render time avoids the stub-MDX duplication we used to have in the
+// examples collection.
const allExamples = await getCollection('examples');
+const allProductTypes = await getCollection('productTypes');
+
+// Transform examples to the shape ExamplesGrid expects, excluding hidden entries.
+const exampleEntries = allExamples
+ .filter((example) => !example.data.hidden)
+ .map(example => ({
+ slug: example.slug,
+ data: example.data,
+ body: example.data.description || example.body,
+ }));
+
+// Synthesize a size:product card per productType. The slug matches the
+// /examples/[productType]/ route the [family] page handler already serves.
+const productTypeEntries = allProductTypes.map(productType => ({
+ slug: productType.slug,
+ data: {
+ id: productType.data.id,
+ title: productType.data.title,
+ description: productType.data.summary.replace(/<[^>]+>/g, ''),
+ size: 'product' as const,
+ components: productType.data.components ?? [],
+ tags: productType.data.tags ?? [],
+ status: productType.data.status,
+ previewImage: productType.data.heroImage,
+ },
+ body: productType.data.summary,
+}));
-// Sort by title (default)
-const sortedExamples = allExamples.sort((a, b) =>
+const examples = [...exampleEntries, ...productTypeEntries].sort((a, b) =>
a.data.title.localeCompare(b.data.title)
);
-// Transform to the shape ExamplesGrid expects
-const examples = sortedExamples.map(example => ({
- slug: example.slug,
- data: example.data,
- body: example.data.description || example.body,
-}));
-
---
({
For citizens submitting applications and requests
-
-
-
- Digital service
- How workspace and public form connect end-to-end
-
-
-
diff --git a/docs/src/pages/examples/question-page/variants/background-radio/preview.astro b/docs/src/pages/examples/question-page/variants/background-radio/preview.astro
new file mode 100644
index 0000000000..c93a5abb56
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/background-radio/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { GiveBackgroundInformationBeforeAskingAQuestion } from "../../../../../content/examples/question-page/variants/background-radio/react";
+---
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/question-page/variants/grouped/preview.astro b/docs/src/pages/examples/question-page/variants/grouped/preview.astro
new file mode 100644
index 0000000000..79eb3f4bbd
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/grouped/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { GroupRelatedQuestionsTogetherOnAQuestionPage } from "../../../../../content/examples/question-page/variants/grouped/react";
+---
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/question-page/variants/help-details/preview.astro b/docs/src/pages/examples/question-page/variants/help-details/preview.astro
new file mode 100644
index 0000000000..18ffa1be51
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/help-details/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { ShowMoreInformationToHelpAnswerAQuestion } from "../../../../../content/examples/question-page/variants/help-details/react";
+---
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/question-page/variants/one-question/preview.astro b/docs/src/pages/examples/question-page/variants/one-question/preview.astro
new file mode 100644
index 0000000000..218f2534c3
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/one-question/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { QuestionPage } from "../../../../../content/examples/question-page/variants/one-question/react";
+---
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/question-page/variants/progress-indicator/preview.astro b/docs/src/pages/examples/question-page/variants/progress-indicator/preview.astro
new file mode 100644
index 0000000000..6761fdbc0f
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/progress-indicator/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { ShowASimpleProgressIndicatorOnAQuestionPage } from "../../../../../content/examples/question-page/variants/progress-indicator/react";
+---
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/examples/question-page/variants/section-title/preview.astro b/docs/src/pages/examples/question-page/variants/section-title/preview.astro
new file mode 100644
index 0000000000..50e13f7d3e
--- /dev/null
+++ b/docs/src/pages/examples/question-page/variants/section-title/preview.astro
@@ -0,0 +1,24 @@
+---
+import PreviewLayout from "../../../../../layouts/PreviewLayout.astro";
+import { ShowASectionTitleOnAQuestionPage } from "../../../../../content/examples/question-page/variants/section-title/react";
+---
+
+
+
- However, these tools are not a complete solution. They can produce:
-
-
-
False positives – flagging issues that are not actual problems
-
False negatives – missing real accessibility barriers
-
-
- To ensure your digital product is accessible, combine automated testing with manual testing and apply
- human judgment.
-
- Why automated tools alone are not enough
-
- False positives
-
- Automated tools may flag elements as non-compliant even when they work correctly for users. For
- example, a tool may report that an input is "missing an id" even though it is correctly associated with a
- label using a valid method, such as wrapping the input inside a <label> element.
-
-
- False negatives
-
- Automated tools cannot detect nuanced or context-specific issues. For example, all interactive
- elements may be tabbable, but the order jumps around the page. Tools often don't judge whether the
- tab order is logical for completing the task.
-
-
- Real user experience
-
- Accessibility ensures real people can use a product effectively. Automated tools cannot fully simulate
- how users interact with your product.
-
- Steps for effective accessibility testing
-
-
-
- Run automated tools to get an initial assessment.
-
-
- Manually verify flagged issues and review the element's intent and context.
-
-
- Do additional manual testing for issues automated tools cannot detect:
-
-
Test with a screen reader, such as VoiceOver (macOS) or NVDA (Windows)
-
Test keyboard navigation by checking focus visibility and order
-
-
-
- Report findings
-
-
Record what you tested, what failed, and how to reproduce it
-
If the issue relates to a design system component, submit it using the design system bug report form
-
-
-
- Why this process matters
-
- Automated tools provide helpful insight. Relying only on automation can result in:
-
-
-
Time spent fixing issues that are not real barriers
-
Missed opportunities to address genuine accessibility issues
-
A false sense of compliance without meaningful usability improvements
-
-
- Combine automated and manual testing to identify real barriers. This approach improves accessibility
- and overall product quality.
-
-
-
diff --git a/docs/src/pages/get-started/component-lifecycle.astro b/docs/src/pages/get-started/component-lifecycle.astro
deleted file mode 100644
index 42b0df0f4a..0000000000
--- a/docs/src/pages/get-started/component-lifecycle.astro
+++ /dev/null
@@ -1,67 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Component Lifecycle
- *
- * Defines the stages each Design System component moves through.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Component lifecycle
-
- The component lifecycle defines the stages each Design System component moves through, from
- Experimental to Production to Legacy.
-
-
-
- Experimental components are new or significantly updated. They are available for testing and feedback
- before public release.
-
-
- Characteristics
-
-
Feedback is gathered from selected teams
-
May be unstable or include breaking changes
-
Limited documentation
-
- Production
-
- Production components are stable and ready for broader adoption.
-
-
- Characteristics
-
-
Fully documented, including design guidelines, properties, and examples
-
Meet accessibility and design system standards
-
Optimized for mobile use
-
Actively maintained with updates and bug fixes
-
Publicly available documentation
-
- Legacy
-
- Legacy components are older components maintained primarily to support older implementations. If
- possible, transition to production is recommended.
-
-
- Characteristics
-
-
No active maintenance or updates
-
Critical issues may remain unresolved
-
Recommended alternative clearly identified
-
Marked as "Legacy" in official documentation
-
-
-
diff --git a/docs/src/pages/get-started/contribute.astro b/docs/src/pages/get-started/contribute.astro
deleted file mode 100644
index 7a2ea6d675..0000000000
--- a/docs/src/pages/get-started/contribute.astro
+++ /dev/null
@@ -1,188 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Contribute
- *
- * How to contribute to the Design System (design and code).
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Contribute
-
- The Design System is a shared resource used and improved by service teams. All roles are encouraged
- to contribute.
-
-
-
- Start by using existing Design System components and patterns. If a component or pattern does not
- meet your needs, follow the contribution process below.
-
- Design contribution process
-
- If a required component or example does not exist in production,
- contact the Design System team. We will review the request together and determine next steps.
-
Share iterations explored with and without the Design System
-
-
-
- There are open contribution files in Figma for every component and pattern in the design system,
- including unpublished ideas and experiments.
-
-
- 2. Contribution criteria
-
A proposed component or pattern must meet the following criteria.
-
- Proposal criteria
-
Useful
-
- Evidence shows it supports multiple teams or services. Provide screenshots or links to demonstrate usage.
-
-
-
Unique
-
- It does not duplicate an existing component or pattern. If replacing an existing component, provide
- evidence that the new approach improves usability or accessibility.
-
-
- Publication standards
-
To be published, the solution must be:
-
-
Usable
-
- Improves clarity, usability, and accessibility for users. Is informed by research and addresses a
- validated user need.
-
-
-
Universal
-
- Inclusive and accessible. Meets or exceeds accessibility standards.
- WCAG 2.2 AA is the minimum requirement.
-
- When development begins, the Design System team will collaborate with you to confirm detailed requirements.
-
- Code contribution process
-
- The Design System supports multiple development frameworks through Web Components. Contributing full
- components can be complex. Smaller contributions are encouraged.
-
- Select an issue tagged ready-for-contribution from the
- backlog.
- Confirm which issue you will work on.
-
-
-
- Since the repository is public, use a personal GitHub account instead of your Enterprise Managed User (EMU) account.
-
-
- Set up your contribution environment
-
-
- The playgrounds for local testing are located in:
-
/apps/dev/angular
-/apps/dev/react
-
-
-
- Run playground environments
-
Angular
-
npm run dev:watch
-npm run serve:dev:angular
-
-
React
-
npm run dev:watch
-npm run serve:dev:react
-
- Repository structure
-
-
React wrappers
-
/libs/react-components/src/lib
-
Each folder represents a single component with its associated unit tests and wrapper code.
-
-
Angular wrappers
-
/libs/angular-components/src/lib/components
-
Each folder represents a single component with its associated unit tests and wrapper code.
-
-
Web Components
-
/libs/web-components/src/components
-
-
Unit tests as *.spec.ts
-
Component code as *.svelte
-
-
- Testing requirements
-
-
Write all unit tests in Svelte.
-
If updating React or Angular wrappers, write unit tests in those respective frameworks.
-
- Add browser testing using Jest for React wrappers and Svelte components when appropriate.
- These can be found in: libs/react-components/specs
-
-
Manually test components in both React and Angular.
-
- Create test files that others can use to manually test the PR. These can be created in:
-
/apps/prs/angular
-/apps/prs/react
-
-
Follow the conventions already used in those files to create your test files.
-
-
A Design System developer will also manually test the pull request.
-
- Submit your contribution
-
Use the following commit message format:
-
-
Bug fix
-
fix(#storyNumber): short description (7 words max)
-
-
Feature request
-
feat(#storyNumber): short description (7 words max)
-
-
-
Create a pull request from your branch to the dev branch.
-
Notify the design system team of the PR.
-
-
-
diff --git a/docs/src/pages/get-started/designers.astro b/docs/src/pages/get-started/designers.astro
deleted file mode 100644
index 2d8a3b163d..0000000000
--- a/docs/src/pages/get-started/designers.astro
+++ /dev/null
@@ -1,94 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Designers Overview
- *
- * Overview of design system resources for designers.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Overview
-
- As a designer, you use the design system through Figma.
-
-
- The design system library in Figma aligns with coded components used by developers. Start with
- design system components for common parts of your service. This helps developers use the matching
- coded components and reduces custom work.
-
-
- Start with the design system. Validate your design through user testing. If usability issues arise,
- or the problem cannot be solved within the system, consider creating a custom solution.
-
- Design with development in mind
-
- When selecting components, prioritize those with a "goa-" prefix, such as
- goa-input. These components exist in both design and development. Using them reduces
- the need for custom development.
-
-
Choose shared components whenever possible to maintain consistency and efficiency.
-
- Design tokens
-
Design system components in Figma and code are built using design tokens.
-
- Use tokens to communicate design decisions clearly. Developers can reference the same tokens in code.
-
-
Instead of sharing hex values or pixel adjustments, reference semantic tokens.
-
For example:
-
-
Colour: --goa-color-info-default
-
Spacing: --goa-spacing-m
-
-
Using tokens reduces back-and-forth and keeps design and development aligned.
-
- Components
-
All design system components are available in Figma and in code.
-
- These components are designed to meet
- WCAG 2.2 accessibility standards.
-
-
Avoid detaching components. Instead:
-
-
Use variants
-
Show or hide layers within the component
-
-
- Use #figma for Figma-related issues, including library updates, missing components,
- broken instances, or component behaviour in Figma.
-
-
- Use #design-system-support for design system guidance, component usage questions,
- standards, and implementation support.
-
-
Keep your components up to date. Figma will notify you when library updates are available.
-
- Figma file templates and helper components
-
Each digital service project folder includes a starter Figma template.
-
Use this template to:
-
-
Organize your design file
-
Support developer handoff
-
Help team members navigate files
-
-
- Helper components are also available. Use them to clearly communicate intent when sharing designs
- with developers and other team members.
-
-
-
diff --git a/docs/src/pages/get-started/designers/designing-with-ds.astro b/docs/src/pages/get-started/designers/designing-with-ds.astro
deleted file mode 100644
index a875429941..0000000000
--- a/docs/src/pages/get-started/designers/designing-with-ds.astro
+++ /dev/null
@@ -1,81 +0,0 @@
----
-/**
- * Get Started - Designers - Designing with Design System 2.0
- *
- * How to start new designs and update existing projects to DS 2.0.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro';
----
-
-
- Designing with Design System 2.0
-
- What's new in DS 2.0 and how to start using it in your designs.
-
-
- The Digital Design and Delivery (DDD) Design System has evolved to better support how service teams
- design and build digital government services. Design System 2.0 includes an updated design
- language, new tokens, refreshed components, and ready-to-use templates.
-
- Starting a new design
-
- Use DS 2.0 templates as your starting point. Templates package layout, navigation, spacing, and
- example content that you can adapt to your service. Some templates are built for specific service types
- (for example, public-facing forms and workspace applications), and others are more general-purpose
- starting points you can use across many kinds of pages and flows.
-
-
- Starting from an existing design
-
- Library swap
-
- Use a library swap if
- your goal is to convert most of the file to DS 2.0 in one pass.
-
-
-
Make a copy of your file before you start.
-
Expect mixed results. Some screens may need cleanup after the swap.
-
-
- Manual rebuild
-
Use a manual rebuild if you need more control.
-
-
Rebuild your highest value screens first.
-
Consider using DS 2.0 templates as a base to speed things up.
-
- Update an existing project to the new design library
-
- Approach 1: Developer-first
-
Use this approach in most cases.
-
-
A developer creates a new branch and completes the upgrade steps.
-
The team runs the upgraded application to see what changed.
-
Designers review the upgraded screens and identify what needs design updates.
-
-
When reviewing the upgraded branch, watch for:
-
-
Spacing and layout rhythm
-
Typography scale and weight usage
-
Dense or constrained screens (these often have the highest risk during an update)
-
-
- Approach 2: Design-first
-
Use this approach when you want design work to move ahead of development work.
-
-
Identify custom elements that support your users' needs.
-
Create an inventory and prioritize items by importance and effort.
-
Redesign the highest priority items using the visual design values in the Styles library.
-
-
-
- In most cases, start with the developer-first approach. It helps you quickly see what changed in your
- real product, so you can focus design effort where it matters most.
-
-
-
diff --git a/docs/src/pages/get-started/designers/ux-guidelines.astro b/docs/src/pages/get-started/designers/ux-guidelines.astro
deleted file mode 100644
index b44c9c82e5..0000000000
--- a/docs/src/pages/get-started/designers/ux-guidelines.astro
+++ /dev/null
@@ -1,55 +0,0 @@
----
-/**
- * Get Started - Designers - User Experience Guidelines
- *
- * UX guidelines for Government of Alberta digital products.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro';
----
-
-
- User experience guidelines
-
- Digital products built for the Government of Alberta should comply with these guidelines to ensure a
- quality user experience for Albertans.
-
-
-
-
User-centered: Designed with a clear understanding of users, their goals, tasks, environments, and context of use, using user-centered design methods.
-
Usable: Interfaces will be easy to use, enabling users to find the information they need and complete tasks successfully.
-
Accessible: Digital products will be inclusive, ensuring usability for everyone, regardless of physical or cognitive ability.
-
Trustworthy: Experiences will feel familiar and recognizable as a Government of Alberta product, ensuring users' security and privacy.
-
Modern: Digital experiences will meet present-day user expectations and preferences for aesthetics and interaction.
- Usability testing is our preferred method to understand user needs as they relate to each guideline.
-
-
Suitable usability testing includes:
-
-
Diverse user group: Real users from different demographic, behavioural backgrounds, and geographical regions within Alberta that will experience the problem or benefit of the product.
-
Inclusive testing: Users with various physical and/or cognitive abilities, literacy levels, and tech savviness.
-
Device variety: A diverse range of devices that reflect users' preferred choice when interacting with government services.
-
Tasks: Activities that cover tasks and service process from end-to-end.
-
-
- Frequent usability testing should be conducted to maintain product usability, effectiveness and
- alignment to the user needs as they evolve over time.
-
-
- For guidance on the process of usability testing, refer to our
- Understanding Usability documentation.
-
-
-
diff --git a/docs/src/pages/get-started/developers.astro b/docs/src/pages/get-started/developers.astro
deleted file mode 100644
index b34d1c3712..0000000000
--- a/docs/src/pages/get-started/developers.astro
+++ /dev/null
@@ -1,104 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Developers Overview
- *
- * Overview of design system resources for developers.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Overview
-
- As a developer, you use the Design System through tokens, components, examples, and templates.
-
-
-
- The DDD Design System is built using Web Components. Web Components are framework-agnostic.
- You can use them with Angular, React, or other front-end frameworks.
-
- Designers use equivalent resources in Figma. When they design with Design System components, you
- can build with the matching coded components. This reduces custom development and rework.
-
- Refer to the Design System technologies documentation
- for implementation details.
-
-
- Examples
-
- Examples are multiple components assembled in realistic service contexts. They help you understand
- how to apply Design System guidance in a working interface.
-
-
You can use examples to:
-
-
Understand how components work together
-
Use them as a starting point for building parts of your interface
-
Use proven approaches to meet user needs
-
-
- Examples help you build with more consistency and less rework. Use them to guide implementation,
- then adjust them to meet the needs of your product.
-
-
- Templates
-
- Templates are opinionated starting points for common service types. They package layout, navigation,
- spacing, and example content so you can start with a proven structure instead of building from scratch.
-
-
You can use templates to:
-
-
Start a new product with a proven structure
-
Learn how components work together in a real layout
-
Adapt a proven starting point to fit your service needs
-
-
- Templates help teams move faster, reduce rework, and stay aligned with Design System guidance.
-
-
-
diff --git a/docs/src/pages/get-started/developers/browsers.astro b/docs/src/pages/get-started/developers/browsers.astro
deleted file mode 100644
index 3ced88e5fc..0000000000
--- a/docs/src/pages/get-started/developers/browsers.astro
+++ /dev/null
@@ -1,87 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Developers - Supported browsers
- *
- * Browser and OS support matrix for Design System components.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro';
----
-
-
- Supported browsers
-
- Design System components are tested across supported browsers and devices.
-
-
-
- We support the latest version of each browser listed on this page. Support applies to the browser and
- operating system combinations shown in the table below. On mobile, support is limited to the browser
- and operating system combinations listed for Android and iOS.
-
-
- Browser and operating system support
-
-
-
-
-
-
Browser
-
Windows
-
Mac OS
-
Android
-
iOS
-
-
-
-
-
Google Chrome
-
Yes
-
Yes
-
Yes
-
Yes
-
-
-
Microsoft Edge
-
Yes
-
Yes
-
-
-
-
-
Mozilla Firefox
-
Yes
-
Yes
-
Yes
-
-
-
-
Apple Safari
-
N/A
-
Yes
-
N/A
-
Yes
-
-
-
-
-
- Representative mobile OS used in testing
-
-
Android OS: 10+
-
iOS: 15+
-
- Testing guidance
-
- Use supported browsers and operating system versions when developing and testing services. If you
- encounter a browser-specific issue, follow the
- Verify a bug process.
-
-
-
diff --git a/docs/src/pages/get-started/developers/bug.astro b/docs/src/pages/get-started/developers/bug.astro
deleted file mode 100644
index ffabd0fc5e..0000000000
--- a/docs/src/pages/get-started/developers/bug.astro
+++ /dev/null
@@ -1,65 +0,0 @@
----
-/**
- * Get Started - Developers - Verify a bug
- *
- * Process for verifying and reporting Design System component issues.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro';
----
-
-
- Verify a bug
-
- Follow this process when you encounter an issue with a Design System component.
-
-
-
- These steps help confirm whether the issue is caused by the Design System, your product setup, or
- custom code. This process applies to Angular and React implementations.
-
-
- 1. Check versions
-
Confirm you are using the latest version of:
-
-
Web Components
-
Angular or React
-
-
- If you are not using the latest version, upgrade and retest. If the issue remains, continue to the next step.
-
-
- 2. Test with product templates
-
Use the official Angular or React product templates to isolate the issue.
Provide a link to your repository so the team can review and replicate the issue
-
-
- Following these steps will help to ensure efficient investigation and quicker resolution of
- design system component issues.
-
-
-
diff --git a/docs/src/pages/get-started/developers/setup.astro b/docs/src/pages/get-started/developers/setup.astro
deleted file mode 100644
index 326b964dfe..0000000000
--- a/docs/src/pages/get-started/developers/setup.astro
+++ /dev/null
@@ -1,141 +0,0 @@
----
-/**
- * Get Started - Developers - Setup
- *
- * Setup instructions for Angular, React, and Web Components.
- * Based on the current website content with DS 2.0 token updates.
- */
-import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro";
-import DropInCallout from "../../../components/DropInCallout.astro";
----
-
-
- Developer setup
-
- Set up the Government of Alberta Design System in Angular, React, or directly with Web
- Components.
-
-
-
Angular UI components
-
- Supported versions: 18, 19, 20, 21
-
-
- This is the web component library and utilizes Angular's web component
- integration.
-
-
-
1. Add dependencies
-
npm i @abgov/web-components
-npm i @abgov/angular-components
-npm i @abgov/ui-components-common
-npm i @abgov/design-tokens
-
-
-
-
-
diff --git a/docs/src/pages/get-started/developers/technologies.astro b/docs/src/pages/get-started/developers/technologies.astro
deleted file mode 100644
index 272d9a8a12..0000000000
--- a/docs/src/pages/get-started/developers/technologies.astro
+++ /dev/null
@@ -1,111 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Developers - Technologies
- *
- * Overview of Design System technologies: Web Components, Svelte, Angular, React.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro';
----
-
-
- Technologies
-
- An overview of the technologies used in the Design System.
-
-
- How the technologies fit together
-
- The Design System is built on Web Components. Most component functionality lives in the core Web
- Components layer. Angular and React wrappers sit on top of that layer to make the components easier
- to use in those frameworks.
-
-
- We use Svelte to author the components that are compiled to custom elements. You can use the Design
- System through the core Web Components or through Angular and React wrappers.
-
-
- Web Components
-
- Web Components
- are a set of standard web technologies that allow you to create reusable custom elements. Each component
- includes its own structure, styling, and behaviour. This keeps it independent from the rest of your code.
-
-
- In the Design System, Web Components are the core library. They are framework-agnostic, so teams
- can use them in different front-end environments.
-
-
- Benefits of using Web Components
-
-
Reuse: Build once and use across pages, applications, and frameworks
-
Browser support: Work in modern browsers without additional libraries
-
Maintenance: Modular and self-contained structure simplifies updates
-
Encapsulation: Structure, style, and behaviour remain isolated from other page elements
-
Reliability: Code is not spread across HTML and JS files, thereby avoiding inconsistencies
-
Flexibility: Use inline, import, or compile components as needed
-
Composability: Combine components or integrate them with other components
-
-
-
- Do not use Web Components directly unless there is a specific reason to do so. Using wrappers provides
- type checking and developer helpers that are not available when working with the core Web Components alone.
-
- Svelte
-
- Svelte is the framework used to generate the
- Design System Web Components. Svelte combines JavaScript (logic), HTML (structure), and CSS (style)
- within a single file. It compiles these into efficient, reusable components.
-
- Why Svelte
-
We use Svelte to:
-
-
Build reusable Web Components
-
Keep component logic, structure, and styling together
-
Support integration with multiple front-end frameworks
- Angular is a TypeScript-based framework for building
- web applications. The Design System supports Angular through Angular wrappers around the core Web Components.
-
-
- How Web Components and Angular work together
-
Angular wrappers are created around the Web Components. These wrappers:
-
-
Manage component properties and events
-
Support form binding (Reactive and Template-driven)
-
Allow integration within Angular applications
-
-
The Angular application interacts with the wrapper, which renders the underlying Web Component.
- React is an open-source JavaScript library used to
- build user interfaces from reusable components.
-
-
- How Web Components and React work together
-
React wrappers are created around the Web Components. These wrappers:
-
-
Manage properties and events
-
Enable integration within React applications
-
-
The React application interacts with the wrapper, which renders the underlying Web Component.
-
-
diff --git a/docs/src/pages/get-started/index.astro b/docs/src/pages/get-started/index.astro
deleted file mode 100644
index 1b92e400aa..0000000000
--- a/docs/src/pages/get-started/index.astro
+++ /dev/null
@@ -1,108 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Landing Page
- *
- * Overview of the design system and how to use it in your service.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Start with the design system
-
- Start with the design system to build on the research and experience of other service teams.
- This helps you avoid repeating work that has already been done.
-
-
-
- The design system gives you a strong foundation for common service needs. It allows your team
- to focus on the specific challenges of your product.
- Build on it. Do not start from scratch.
-
-
- Design system by role
-
-
-
- Why start with the design system?
-
- Streamline collaboration
-
- Designers and developers work from shared components and guidance. This reduces rework and misalignment.
-
-
- Improve accessibility
-
Accessibility is built into both the design and coded components.
-
- Reduce testing effort
-
Components are tested across devices, browsers, and service contexts.
-
- Maintain consistency
-
- Components align with the broader system to create a cohesive user experience across government services.
-
-
- Spend more time on high-value work
-
Using existing components saves time. You can focus on work that improves service quality, including:
-
-
Usability testing
-
User research
-
Content design
-
Accessibility reviews
-
Design quality checks
-
Low-fidelity prototyping and testing
-
-
This leads to better outcomes for users.
- How to use the design system in your service
-
Follow these steps when designing and building your service.
-
- Use system components first
-
Start with existing components and patterns. These meet most user needs.
-
- Identify gaps through user testing
-
Test your service with users. Identify needs that are not covered by current components.
-
- Before you design something new
-
- Check what's already available and what's in progress. The team can point you to existing components,
- solutions other teams have built, and planned work that may meet your need.
-
-
- Design and test new solutions when you need them
-
- If you still have a gap, design a new solution and test it with users. Move forward only when
- testing shows clear user value.
-
-
- Share what you learn
-
- Share your findings with the design system team. Your solution may become part of the design system.
-
-
-
- Do not create custom components without a clear user need.
- Unnecessary customization:
-
-
Increases maintenance effort
-
Slows delivery
-
Reduces consistency
-
- Always confirm the need through research and testing.
-
-
-
- View the design system governance process
-
-
-
diff --git a/docs/src/pages/get-started/migration-guide.astro b/docs/src/pages/get-started/migration-guide.astro
deleted file mode 100644
index b43c6678e3..0000000000
--- a/docs/src/pages/get-started/migration-guide.astro
+++ /dev/null
@@ -1,232 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Developers - Migration guide
- *
- * Migration pathways and guidance for moving products from DS 1.x to DS 2.0.
- * Content adapted from Confluence.
- */
-import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro";
----
-
-
- Migration guide
-
- Design System 2.0 (DS 2.0) becomes the Government of Alberta standard in March 2026.
- New products starting after launch should use DS 2.0. Existing active products should
- plan their move to DS 2.0 during the recommended migration window, which runs from
- March 2026 to September 2026.
-
-
-
-
-
Migration pathways
-
- The right migration path depends on your product's context, including team
- funding and capacity, other delivery obligations, product lifecycle, and the effort
- required to update. The three pathways are standard migration, late migration, and no
- migration.
-
-
-
Starting a new product
-
- If your product starts after March 2026, start with DS 2.0. Migration pathways apply
- to existing products moving from DS 1.x to DS 2.0.
-
-
-
Compare the pathways
-
-
-
-
-
-
Pathway
-
Use it when
-
Recommendation
-
-
-
-
-
- Standard migration
-
-
-
- Your product has an active funded team and can migrate by September 2026
-
-
-
- Recommended default
-
-
-
-
- Late migration
-
-
-
- Your team cannot meet the standard window because of delivery timelines,
- dependencies, or capacity constraints
-
-
-
- Only when necessary
-
-
-
-
- No migration
-
-
-
- Your product does not have an active funded team and/or is not in a
- position to upgrade
-
-
-
- Only in specific cases
-
-
-
-
-
-
-
-
- Standard migration
-
-
-
- Standard migration is the default pathway for active products.
-
-
- Choose this path if your product has an active funded team and can schedule migration
- work between March 2026 and September 2026. This is the recommended path for most
- teams because it keeps your product aligned with the current standard and gives you
- the best support.
-
- Use this pathway when:
-
-
-
your product is actively maintained
-
your team can reserve time to migrate by September 2026
-
you want access to the latest templates, components, tokens, and guidance
-
-
-
- Plan for work across the product team. Typical upgrade tasks include the library
- updates, adjusting spacing and typography, and updating custom code to align with the
- DS 2.0 visual design. This is a significant update and will usually involve design,
- development, and testing.
-
-
-
Late migration
-
- Late migration is a last-resort pathway for active products.
-
-
- Choose this path only when delivery deadlines, dependencies, or capacity constraints
- make the standard migration window unrealistic. This path gives your team more time,
- but it also increases risk and reduces your ongoing support.
-
- Use this pathway when:
-
-
-
a major delivery deadline blocks migration work
-
critical dependencies prevent the upgrade during the standard window
-
capacity or funding makes the standard window unrealistic
-
-
-
- Delaying migration means your product will wait longer to benefit from DS 2.0
- improvements. Over time, unresolved issues will accumulate and your product will be
- inconsistent with the new standard for longer.
-
-
-
No migration
-
- No migration is an opt-out pathway for specific situations.
-
-
- Choose this path only when your product does not have an active funded team and/or is
- not in a position to upgrade. In these cases, the product may remain on DS 1.x.
-
-
- Teams on this path should understand that the product will not receive DS 2.0
- improvements and will not align with the current standard. Support for DS 1.x is
- limited from March to September and ends after September 2026.
-
-
-
-
-
What changes after launch
-
- After the DS 2.0 launch in March 2026:
-
-
-
-
New products should use DS 2.0
-
Active products should aim to migrate by September 2026
-
- After launch, web components will move to version 2.x. Although this is a major
- version update, it does not include breaking changes.
-
-
- Angular 4.x and React 6.x receive limited fixes or features from March to
- September
-
-
Support for DS 1.0 ends after September 2026
-
Web components will update to a new major version after September 2026
-
-
-
-
How to choose a pathway
-
- Use these questions to guide your decision:
-
-
-
-
Is this a new product starting after March 2026?
-
Does the product have an active funded team?
-
Can the team schedule migration work before September 2026?
-
- Are there delivery deadlines or dependencies that block the standard window?
-
-
- Is the team prepared to accept reduced support and higher maintenance risk if
- migration is delayed?
-
-
-
-
-
Related guidance
-
- Review the setup steps for developers
-
-
diff --git a/docs/src/pages/get-started/out-of-support.astro b/docs/src/pages/get-started/out-of-support.astro
deleted file mode 100644
index 3944d67e3a..0000000000
--- a/docs/src/pages/get-started/out-of-support.astro
+++ /dev/null
@@ -1,54 +0,0 @@
----
-import { withBase } from '@/lib/base-url';
-/**
- * Get Started - Out of Support Versions
- *
- * Information about unsupported Design System versions.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- Out-of-support versions
-
- With the launch of the new Design System, support for Angular v4 and lower, and React v6 and lower
- is significantly reduced.
-
-
- What this means
-
- Fewer fixes or patches
-
Bug fixes and security updates are no longer prioritized for these versions.
-
- No new features
-
All new features and enhancements are released only in the current major version.
-
- Use at your own risk
-
Existing projects may continue to run. However:
-
-
Compatibility with new browsers or operating systems is not guaranteed
-
Compatibility with future framework updates is not guaranteed
-
Issues discovered in these versions will not be resolved
-
-
-
- Projects using Angular v4 and lower, and React v6 and lower will continue to function.
- New issues or defects identified in these versions may not be fixed.
-
- What to do next
-
- Upgrade to the latest supported version. Refer to the
- version update guide.
-
-
-
diff --git a/docs/src/pages/get-started/qa-testing.astro b/docs/src/pages/get-started/qa-testing.astro
deleted file mode 100644
index 146cb12778..0000000000
--- a/docs/src/pages/get-started/qa-testing.astro
+++ /dev/null
@@ -1,77 +0,0 @@
----
-/**
- * Get Started - QA Testing
- *
- * Testing process for Design System components.
- * Content from Confluence (Brief 87).
- */
-import DropInCallout from '../../components/DropInCallout.astro';
-import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro';
----
-
-
- QA testing
-
- This page outlines the testing process for the Design System. The process ensures components
- function correctly and integrate within products.
-
-
- Testing objectives
-
QA testing ensures that:
-
-
Coded components match the design specifications
-
Components work in both React and Angular implementations
-
Components are responsive across screen sizes
-
Components meet accessibility requirements
-
Mobile behaviour is validated
-
Documentation on the Design System website is accurate
-
- Test cases
-
- Component testing
-
-
Confirm the rendered component matches design and styling guidelines
-
Confirm configured properties display correctly
-
Confirm the expected event triggers when interacting with the component
-
-
- Responsiveness testing
-
-
Test components on mobile, tablet, and desktop screen sizes
-
Use browser developer tools to simulate devices
-
-
- Accessibility testing
-
-
Run Lighthouse audits to review accessibility scores
-
Confirm appropriate ARIA (Accessible Rich Internet Applications) roles and labels
-
Test keyboard navigation
-
Test with NVDA screen reader
-
-
- Cross-browser testing
-
-
Test on the latest versions of Chrome, Firefox, Safari, and Edge
-
Use Chrome device mode to simulate mobile environments
-
Confirm consistent appearance and behaviour across browsers
-
-
- Bug testing
-
When a bug is fixed:
-
-
Reproduce the issue using the main branch.
-
Verify the fix in the pull request branch.
-
Retest the component across all relevant areas.
-
-
Confirm the issue no longer occurs.
- Reporting
-
-
Document updated test results, findings, and screenshots in the pull request comments
-
-
diff --git a/docs/src/pages/get-started/roadmap.astro b/docs/src/pages/get-started/roadmap.astro
deleted file mode 100644
index 070656eab6..0000000000
--- a/docs/src/pages/get-started/roadmap.astro
+++ /dev/null
@@ -1,347 +0,0 @@
----
-/**
- * Get Started - Roadmap
- *
- * High-level roadmap for the design system team's 2026-27 fiscal year.
- * Content adapted from Confluence.
- */
-import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro";
----
-
-
- Roadmap
-
- A high-level summary of the work the design system team plans to focus on in the
- 2026-27 Fiscal Year.
-
-
-
- The roadmap is subject to change as we gather new information. We will communicate
- updates to ensure product teams can align and plan their work accordingly.
-
-
-
- For more details on our priorities and day-to-day activities, see our
-
- design system backlog.
-
-
-
-
-
-
Now
-
- Focus: Drive DS 2.0 adoption momentum, protect post-launch stability, and
- prove DS 2.0 helps teams move faster through prescriptive guidance and examples.
-
-
-
DS 2.0 adoption and satisfaction measurement
-
- Objective: Establish reliable DS 2.0 adoption tracking and reporting, and
- pair it with satisfaction signals from designers, developers, and end users to understand
- whether DS 2.0 is improving service outcomes as teams upgrade.
-
-
- Benefit: Enables accurate progress reporting and provides evidence that
- DS 2.0 is improving usability, accessibility, and experience quality, not only adoption.
-
-
- Examples:
-
-
-
- Create a mechanism to reliably collect and report adoption rate
-
-
- Track upgrade progress against the adoption schedule
-
-
- Capture qualitative signals from teams (developer and designer feedback themes)
-
-
- Capture end-user feedback where available (citizen or worker satisfaction,
- accessibility and usability feedback)
-
-
-
-
Product acceleration enablement
-
- Objective: Provide prescriptive guidance and resources that help teams
- get to screens, prototypes, and working experiences faster using DS 2.0.
-
-
- Benefit: Reduces time to first screens and improves consistency by helping
- teams start from proven patterns instead of building from scratch.
-
-
- Examples:
-
-
-
- Create resources that show how to quickly prototype with DS 2.0 components and
- examples
-
-
- Provide contextual starting points for teams using Public form and Workspace
- templates
-
-
- Pilot DS 2.0 with teams to generate strong examples to share
-
-
- Create and publish migration success stories
-
-
-
-
Design system MCP
-
- Objective: Stand up the design system Model Context Protocol (MCP) capability
- so AI tools and platforms can reliably access design system guidance, components, patterns,
- and standards.
-
-
- Benefit: Helps teams generate more consistent, standards-aligned front-ends
- by making trusted design system context available directly in AI-assisted workflows.
-
-
- Examples:
-
-
-
- Define the initial MCP scope and supported design system resources
-
-
- Stand up the MCP server and validate the hosting and maintenance approach
-
-
- Test the MCP use in real product workflows and capture gaps to address
-
-
- Document recommended workflows for teams
-
-
-
-
Vue support decision
-
- Objective: Explore and define the minimum work required to confidently
- state DS 2.0 officially supports Vue, including scope, constraints, and support model.
-
-
- Benefit: Prevents unclear commitments and reduces strategic risk by enabling
- an informed investment decision aligned to organizational needs.
-
-
- Examples:
-
-
-
- Define what "official Vue support" means
-
-
- Outline the minimum supportable scope
-
-
- Identify implications for documentation, maintenance, testing, and support
-
-
-
-
-
-
Next
-
- Focus: Improve the core Public form and Workspace experience, mature reusable
- patterns and examples, reduce adoption friction through better packaging, and execute on
- the chosen Vue direction.
-
-
-
Public form and Workspace capability improvements
-
- Objective: Enhance key Public form and Workspace capabilities based on
- adoption needs and workflow requirements.
-
-
- Benefit: Improves feature sets and reduces the need for custom one-off
- solutions by making common workflows easier to implement with DS 2.0.
-
-
- Example:
-
-
-
- Build the review, revise, resubmit feature
-
-
-
-
Examples and pattern maturity
-
- Objective: Expand and refine examples and position them as adaptable reusable
- patterns that teams can apply with confidence.
-
-
- Benefit: Improves self-serve success and product consistency, reducing
- implementation variance and support demand over time.
-
-
- Examples:
-
-
-
- Continue expanding and refining examples
-
-
- Show how components and examples combine into larger contexts and workflows
-
-
-
-
Library packaging and tech stack upgrades
-
- Objective: Reduce friction in how design system assets are bundled and
- adopted across libraries and update important tech stacks.
-
-
- Benefit: Lowers setup and upgrade complexity, and keeps the design system
- up to date with the latest supported versions.
-
-
- Examples:
-
-
-
- Improve how code libraries are bundled together (React, web components, tokens)
-
-
- Update to Svelte 5
-
-
-
-
Vue follow-through
-
- Objective: Based on Vue discovery, either implement formal Vue support
- or clearly position Angular and React as the recommended approach for teams using AI-assisted
- workflows.
-
-
- Benefit: Provides clear direction to product teams and reduces uncertainty,
- enabling progress on a supported path while keeping support sustainable for the design system
- team.
-
-
- Examples:
-
-
-
- Publish Vue support guidance and expectations
-
-
- Implement agreed scope if approved
-
-
- Publish recommended alternatives if Vue support is not pursued
-
-
-
-
-
-
Later
-
- Focus: Support DS 2.0 version updates and improve documentation and communications
- quality to support scaling and sustainability.
-
-
-
Documentation and communications improvements
-
- Objective: Improve how teams access and understand design system guidance,
- and communicate design system value areas like accessibility more clearly.
-
-
- Benefit: Increases trust, improves reuse, and supports self-serve adoption
- by making guidance easier to consume and share.
-
-
- Examples:
-
-
-
- Add markdown file download to website documentation
-
-
- Articulate accessibility work more clearly (what is covered and how it supports
- teams)
-
-
-
-
Targeted capacity support for DS 2.0 version updates
-
- Objective: Provide targeted design system team capacity to help remaining
- DS 1.x product teams complete the DS 2.0 version update.
-
-
- Benefit: Accelerates adoption progress and unblocks teams facing more difficult
- migrations, supporting adoption targets while keeping support sustainable through a focus
- on teams most in need.
-
-
- Example:
-
-
-
-
- Focus migration support on late adopters facing systemic barriers to upgrading
-
- Conduct research with your users to validate your design decisions. Test your assumptions, gather insights, and ensure your service meets real user needs.
-
-
-
-
-
-
-
Understand your service
@@ -103,24 +83,44 @@ import CardLite from '../components/CardLite.astro';
+
+
+
Research tools
+
+ Conduct research with your users to validate your design decisions. Test your assumptions, gather insights, and ensure your service meets real user needs.
+
+ }
}
@@ -60,10 +68,14 @@ export class GoabAccordion extends GoabBaseComponent implements OnInit {
@Input() headingSize?: GoabAccordionHeadingSize;
/** Sets the heading content template reference. */
@Input() headingContent!: TemplateRef;
+ /** Sets the actions content template reference, rendered right-aligned in the heading before the expand/collapse icon. */
+ @Input() actions?: TemplateRef;
/** Sets the maximum width of the accordion. */
@Input() maxWidth?: string;
/** Sets the position of the expand/collapse icon. */
@Input() iconPosition?: GoabAccordionIconPosition;
+ /** Sets the accordion style variant. */
+ @Input() headingType?: GoabAccordionHeadingType;
/** Emits when the accordion opens or closes. Emits the new open state as a boolean. */
@Output() onChange = new EventEmitter();
diff --git a/libs/angular-components/src/lib/components/chip/chip.ts b/libs/angular-components/src/lib/components/chip/chip.ts
index 615c0411a8..99f4d97070 100644
--- a/libs/angular-components/src/lib/components/chip/chip.ts
+++ b/libs/angular-components/src/lib/components/chip/chip.ts
@@ -56,17 +56,17 @@ export class GoabChip extends GoabBaseComponent implements OnInit {
}, 0);
}
- /** @deprecated Use GoAFilterChip instead. Icon displayed at the start of the chip. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. Icon displayed at the start of the chip. */
@Input() leadingIcon?: GoabIconType | null;
- /** @deprecated Use GoAFilterChip instead. Shows an error state on the chip. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. Shows an error state on the chip. */
@Input({ transform: booleanAttribute }) error?: boolean;
- /** @deprecated Use GoAFilterChip instead. When true, shows a delete icon and makes chip clickable. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. When true, shows a delete icon and makes chip clickable. */
@Input({ transform: booleanAttribute }) deletable?: boolean;
- /** @deprecated Use GoAFilterChip instead. The text content displayed in the chip. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. The text content displayed in the chip. */
@Input() content?: string = "";
- /** @deprecated Use GoAFilterChip instead. The chip variant style. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. The chip variant style. */
@Input() variant?: GoabChipVariant;
- /** @deprecated Use GoAFilterChip instead. The icon theme - outline or filled. */
+ /** @deprecated Use GoabFilterChip (goab-filter-chip) instead. The icon theme - outline or filled. */
@Input() iconTheme?: GoabChipTheme;
/** Emits when the chip is clicked. */
diff --git a/libs/angular-components/src/lib/components/drawer/drawer.ts b/libs/angular-components/src/lib/components/drawer/drawer.ts
index 29ff92aff0..c6f5ae6541 100644
--- a/libs/angular-components/src/lib/components/drawer/drawer.ts
+++ b/libs/angular-components/src/lib/components/drawer/drawer.ts
@@ -25,7 +25,7 @@ import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"
[attr.maxsize]="maxSize"
[attr.testid]="testId"
[attr.version]="version"
- (_close)="_onClose()"
+ (_close)="_onClose($event)"
>
@@ -70,7 +70,8 @@ export class GoabDrawer implements OnInit {
}, 0);
}
- _onClose() {
+ _onClose(event: Event) {
+ if (event.target !== event.currentTarget) return;
this.onClose.emit();
}
diff --git a/libs/angular-components/src/lib/components/dropdown/dropdown.ts b/libs/angular-components/src/lib/components/dropdown/dropdown.ts
index 92f6a25625..3306dcc334 100644
--- a/libs/angular-components/src/lib/components/dropdown/dropdown.ts
+++ b/libs/angular-components/src/lib/components/dropdown/dropdown.ts
@@ -83,7 +83,7 @@ export class GoabDropdown extends GoabControlValueAccessor implements OnInit {
@Input() leadingIcon?: GoabIconType;
/** Maximum height of the dropdown menu. Non-native only. */
@Input() maxHeight?: string;
- /** When true, allows multiple items to be selected. Not currently exposed. */
+ /** When true, allows multiple items to be selected. @internal */
@Input({ transform: booleanAttribute }) multiselect?: boolean;
/** When true will render the native select HTML element. */
@Input({ transform: booleanAttribute }) native?: boolean;
diff --git a/libs/angular-components/src/lib/components/header-menu/header-menu.ts b/libs/angular-components/src/lib/components/header-menu/header-menu.ts
index a89deb5324..d0e00a86db 100644
--- a/libs/angular-components/src/lib/components/header-menu/header-menu.ts
+++ b/libs/angular-components/src/lib/components/header-menu/header-menu.ts
@@ -9,8 +9,6 @@ import {
inject,
} from "@angular/core";
-import { GoabBaseComponent } from "../base.component";
-
@Component({
standalone: true,
selector: "goab-app-header-menu",
@@ -26,13 +24,15 @@ import { GoabBaseComponent } from "../base.component";
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
/** Menu items within the app header. */
-export class GoabAppHeaderMenu extends GoabBaseComponent implements OnInit {
+export class GoabAppHeaderMenu implements OnInit {
private cdr = inject(ChangeDetectorRef);
/** Icon displayed before the heading text. */
@Input() leadingIcon?: GoabIconType;
/** The menu heading text displayed as the dropdown trigger. */
@Input() heading?: string;
+ /** Sets a data-testid attribute for automated testing. */
+ @Input() testId?: string;
/** Sets the slot name for the component. */
@Input() slotName?: string;
diff --git a/libs/angular-components/src/lib/components/header/header.ts b/libs/angular-components/src/lib/components/header/header.ts
index a04e04b9d4..94f9bfae93 100644
--- a/libs/angular-components/src/lib/components/header/header.ts
+++ b/libs/angular-components/src/lib/components/header/header.ts
@@ -10,8 +10,6 @@ import {
inject,
} from "@angular/core";
-import { GoabBaseComponent } from "../base.component";
-
@Component({
standalone: true,
selector: "goab-app-header",
@@ -33,7 +31,7 @@ import { GoabBaseComponent } from "../base.component";
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
/** Provide structure to help users find their way around the service. */
-export class GoabAppHeader extends GoabBaseComponent implements OnInit {
+export class GoabAppHeader implements OnInit {
private cdr = inject(ChangeDetectorRef);
/** Sets the URL to link from the alberta.ca logo. A full url is required. */
@@ -46,6 +44,8 @@ export class GoabAppHeader extends GoabBaseComponent implements OnInit {
@Input() maxContentWidth?: string;
/** Sets the breakpoint in px for the full menu to display. */
@Input({ transform: numberAttribute }) fullMenuBreakpoint?: number;
+ /** Sets a data-testid attribute for automated testing. */
+ @Input() testId?: string;
isReady = false;
version = "2";
diff --git a/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts b/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts
index c4d6dcb83f..92ce6d5abc 100644
--- a/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts
+++ b/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts
@@ -52,8 +52,8 @@ export class GoabHeroBanner implements OnInit {
@Input() backgroundColor?: string;
/** Text color within the hero banner. */
@Input() textColor?: string;
- /** Angular template reference for the actions slot content. */
- @Input() actions!: TemplateRef;
+ /** Content rendered in the actions slot. */
+ @Input() actions?: TemplateRef;
ngOnInit(): void {
setTimeout(() => {
diff --git a/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts b/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts
index ce0dbc6f73..5fe6393368 100644
--- a/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts
+++ b/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts
@@ -65,7 +65,7 @@ export class GoabMicrositeHeader implements OnInit {
}
/** Emits when the feedback link is clicked. */
- @Output() onFeedbackClick = new EventEmitter();
+ @Output() onFeedbackClick = new EventEmitter();
getVersionAsString(): string {
return typeof this.version === "string" ? this.version : "";
diff --git a/libs/angular-components/src/lib/components/modal/modal.ts b/libs/angular-components/src/lib/components/modal/modal.ts
index 6b5906f782..0562ad7391 100644
--- a/libs/angular-components/src/lib/components/modal/modal.ts
+++ b/libs/angular-components/src/lib/components/modal/modal.ts
@@ -32,7 +32,7 @@ import { NgTemplateOutlet } from "@angular/common";
[attr.closable]="closable"
[attr.transition]="transition"
[attr.heading]="getHeadingAsString()"
- (_close)="_onClose()"
+ (_close)="_onClose($event)"
>