@polyxd/react 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,30 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** What each pattern's surface usually looks like, so the placeholder has the right silhouette. */
3
+ const PATTERN_SHAPE = {
4
+ "multi-step-form": "form",
5
+ "filter-and-browse": "list",
6
+ "undo-over-confirm": "list",
7
+ "compare-and-choose": "compare",
8
+ "confirm-destructive": "dialog",
9
+ "review-and-submit": "detail",
10
+ };
11
+ /** One placeholder block. `kind` sets its height and radius; `size` its width as a share of the row. */
12
+ function Block({ kind, size }) {
13
+ return _jsx("span", { className: `pxd-skeleton-block pxd-skeleton-${kind}${size ? ` pxd-skeleton-${size}` : ""}` });
14
+ }
15
+ const Row = ({ children }) => _jsx("div", { className: "pxd-skeleton-row", children: children });
16
+ const times = (n, render) => Array.from({ length: n }, (_, i) => render(i));
17
+ const SHAPES = {
18
+ list: () => (_jsxs(_Fragment, { children: [_jsx(Block, { kind: "field", size: "full" }), times(5, (i) => (_jsxs(Row, { children: [_jsx(Block, { kind: "square" }), _jsxs("div", { className: "pxd-skeleton-lines", children: [_jsx(Block, { kind: "line", size: i % 2 ? "medium" : "long" }), _jsx(Block, { kind: "small", size: "short" })] })] }, i)))] })),
19
+ form: () => (_jsxs(_Fragment, { children: [times(4, (i) => (_jsxs("div", { className: "pxd-skeleton-lines", children: [_jsx(Block, { kind: "small", size: "short" }), _jsx(Block, { kind: "field", size: i === 1 ? "medium" : "long" })] }, i))), _jsxs("div", { className: "pxd-skeleton-actions", children: [_jsx(Block, { kind: "button" }), _jsx(Block, { kind: "button" })] })] })),
20
+ detail: () => (_jsxs(_Fragment, { children: [_jsxs(Row, { children: [_jsx(Block, { kind: "circle" }), _jsxs("div", { className: "pxd-skeleton-lines", children: [_jsxs(Row, { children: [_jsx(Block, { kind: "line", size: "medium" }), _jsx(Block, { kind: "badge" })] }), _jsx(Block, { kind: "small", size: "short" })] })] }), _jsx("div", { className: "pxd-skeleton-dl", children: times(6, (i) => (_jsxs(Row, { children: [_jsx(Block, { kind: "small", size: "short" }), _jsx(Block, { kind: "line", size: i % 3 === 2 ? "medium" : "long" })] }, i))) })] })),
21
+ dashboard: () => (_jsxs(_Fragment, { children: [_jsx("div", { className: "pxd-skeleton-cards", children: times(3, (i) => (_jsxs("div", { className: "pxd-skeleton-card", children: [_jsx(Block, { kind: "small", size: "short" }), _jsx(Block, { kind: "value", size: "medium" })] }, i))) }), _jsx(Block, { kind: "chart", size: "full" })] })),
22
+ dialog: () => (_jsxs(_Fragment, { children: [_jsx(Block, { kind: "line", size: "long" }), _jsx(Block, { kind: "line", size: "medium" }), _jsxs("div", { className: "pxd-skeleton-actions", children: [_jsx(Block, { kind: "button" }), _jsx(Block, { kind: "button" })] })] })),
23
+ compare: () => (_jsx("div", { className: "pxd-skeleton-cards", children: times(3, (c) => (_jsxs("div", { className: "pxd-skeleton-card", children: [_jsx(Block, { kind: "line", size: "medium" }), times(5, (i) => (_jsx(Block, { kind: "small", size: i % 2 ? "short" : "long" }, i)))] }, c))) })),
24
+ };
25
+ /** The loading state for a surface that has not arrived yet: the shape it will take, shimmering. */
26
+ export function PolyxdSkeleton({ title, pattern, shape, theme, mode, density, locale = "en-GB", className }) {
27
+ const chosen = shape ?? (pattern ? PATTERN_SHAPE[pattern] : undefined) ?? "detail";
28
+ return (_jsxs("div", { className: ["pxd-surface", "pxd-skeleton", `pxd-skeleton-${chosen}`, className].filter(Boolean).join(" "), "data-pxd-theme": theme, "data-pxd-mode": mode, "data-pxd-density": density, lang: locale, role: "status", "aria-busy": "true", children: [_jsx("span", { className: "pxd-sr-only", children: title ? `Preparing ${title}` : "Preparing" }), _jsxs("div", { className: "pxd-skeleton-body", "aria-hidden": "true", children: [_jsx(Block, { kind: "title", size: chosen === "dialog" ? "short" : "medium" }), SHAPES[chosen]()] })] }));
29
+ }
30
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../src/skeleton.tsx"],"names":[],"mappings":"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"}
package/dist/surface.js CHANGED
@@ -8,6 +8,7 @@ import { Avatar } from "./components/avatar.js";
8
8
  export function PolyxdSurface({ document: doc, data: initial, onAction, onDataChange, onDismiss, theme, mode, density, disclosure = "progressive", locale = "en-GB", resolveMedia, components: overrides, className }) {
9
9
  const [data, setData] = useState(() => initial ?? doc.data ?? {});
10
10
  const [portal, setPortal] = useState(null);
11
+ const [root, setRoot] = useState(null);
11
12
  const byId = useMemo(() => new Map(doc.components.map((c) => [c.id, c])), [doc]);
12
13
  const components = useMemo(() => ({ ...registry, ...overrides }), [overrides]);
13
14
  const setValue = useCallback((pointer, value) => setData((d) => {
@@ -23,10 +24,10 @@ export function PolyxdSurface({ document: doc, data: initial, onAction, onDataCh
23
24
  return onDismiss?.();
24
25
  onAction?.({ name, context: resolveContext(context, data, scope), source });
25
26
  }, [data, onAction, onDismiss]);
26
- const value = { doc, byId, data, setValue, dispatch, locale, resolveMedia, portal, components, disclosure };
27
+ const value = { doc, byId, data, setValue, dispatch, locale, resolveMedia, portal, root, components, disclosure };
27
28
  const rootIsDialog = byId.get(doc.root)?.component === "Confirm";
28
29
  const nav = doc.components.find((c) => c.component === "Navigation" && (!c.kind || c.kind === "main"));
29
- return (_jsx(SurfaceContext.Provider, { value: value, children: _jsxs("div", { className: ["pxd-surface", doc.surface.presentation === "panel" ? "pxd-surface-panel" : null, nav ? "pxd-surface-with-nav" : null, className].filter(Boolean).join(" "), "data-pxd-theme": theme, "data-pxd-mode": mode, "data-pxd-density": density, "data-pxd-surface": doc.surface.id, lang: locale, children: [nav && _jsx(Render, { id: nav.id }), _jsxs("div", { className: "pxd-surface-main", children: [!rootIsDialog && _jsx(SurfaceHeader, {}), _jsx(Render, { id: doc.root })] }), _jsx("div", { ref: setPortal, className: "pxd-portal" })] }) }));
30
+ return (_jsx(SurfaceContext.Provider, { value: value, children: _jsxs("div", { ref: setRoot, className: ["pxd-surface", doc.surface.presentation === "panel" ? "pxd-surface-panel" : null, nav ? "pxd-surface-with-nav" : null, className].filter(Boolean).join(" "), "data-pxd-theme": theme, "data-pxd-mode": mode, "data-pxd-density": density, "data-pxd-surface": doc.surface.id, lang: locale, children: [nav && _jsx(Render, { id: nav.id }), _jsxs("div", { className: "pxd-surface-main", children: [!rootIsDialog && _jsx(SurfaceHeader, {}), _jsx(Render, { id: doc.root })] }), _jsx("div", { ref: setPortal, className: "pxd-portal" })] }) }));
30
31
  }
31
32
  /** Title, and on a record page: where it sits, what state it's in, and what you can do to it. */
32
33
  function SurfaceHeader() {
@@ -1 +1 @@
1
- {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAA0E,MAAM,cAAe,CAAC;AAC/J,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAyB,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAA0B,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAyB,CAAC;AA2BjD,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,aAAa,EAAE,MAAM,GAAG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAsB;IACvO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,GAAG,EAAE,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAsC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpH,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,OAAe,EAAE,KAAc,EAAE,EAAE,CAClC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACpC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,EACJ,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,KAAK,YAAY;YAAE,OAAO,SAAS,EAAE,EAAE,CAAC;QAChD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC,EACD,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAC5B,CAAC;IAEF,MAAM,KAAK,GAAwB,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IACvI,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,SAAS,CAAC;IACjE,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;IAEvG,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACnC,eACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,oBACvJ,KAAK,mBACN,IAAI,sBACD,OAAO,sBACP,GAAG,CAAC,OAAO,CAAC,EAAE,EAChC,IAAI,EAAE,MAAM,aAEX,GAAG,IAAI,KAAC,MAAM,IAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAI,EAC9B,eAAK,SAAS,EAAC,kBAAkB,aAC9B,CAAC,YAAY,IAAI,KAAC,aAAa,KAAG,EACnC,KAAC,MAAM,IAAC,EAAE,EAAE,GAAG,CAAC,IAAI,GAAI,IACpB,EACN,cAAK,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,YAAY,GAAG,IAC1C,GACkB,CAC3B,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,SAAS,aAAa;IACpB,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IAC/E,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;IACzE,IAAI,KAAK;QAAE,OAAO,aAAI,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAM,CAAC;IACjE,OAAO,CACL,kBAAQ,SAAS,EAAC,iBAAiB,aAChC,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,iBAAiB,gBAAY,YAAY,YACtD,uBACG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,CAAS,EAAE,EAAE,CAAC,CACtC,uBACG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CACV,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,YACzG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GACP,CACV,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CACd,IAPM,CAAC,CAQL,CACN,CAAC,GACC,GACD,CACP,EACD,eAAK,SAAS,EAAC,sBAAsB,aAClC,MAAM,KAAK,SAAS,IAAI,KAAC,MAAM,IAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAI,EAC/E,eAAK,SAAS,EAAC,sBAAsB,aACnC,cAAI,SAAS,EAAC,mBAAmB,aAC9B,KAAK,EACL,KAAK,IAAI,eAAM,SAAS,EAAE,sBAAsB,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,YAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAQ,IAClG,EACJ,QAAQ,IAAI,YAAG,SAAS,EAAC,sBAAsB,YAAE,QAAQ,GAAK,IAC3D,EACL,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,MAAM,IAAC,EAAE,EAAE,OAAO,GAAI,GACnB,CACP,IACG,IACC,CACV,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAiC;IACjE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC;IACnC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClG,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAA8C,CAAC;IAC5F,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,KAAC,gBAAgB,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;IACtF,OAAO,KAAK,CAAC,CAAC,CAAC,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,IAAI,GAAyB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5F,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAkB;IAChD,OAAO,CACL,eAAK,SAAS,EAAC,aAAa,EAAC,IAAI,EAAC,MAAM,6CACd,IAAI,CAAC,SAAS,cAClC,CACP,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,IAAU;IAChC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;IAC7B,6EAA6E;IAC7E,MAAM,GAAG,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAA6B,CAAC;IACxG,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACnB,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,OAAO;QACL,GAAG,GAAG;QACN,YAAY,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,kBAAkB,EAAE,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,WAAW,EAAE,CAAC,CAAC,IAAI;QACnB,aAAa,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;KACV,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyxd/react",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "React renderer for Polyxd UI documents: Radix primitives styled by design-system tokens",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "react-dom": "^19.3.0"
38
38
  },
39
39
  "dependencies": {
40
- "@polyxd/spec": "^0.2.0",
40
+ "@polyxd/spec": "^0.2.1",
41
41
  "radix-ui": "^1.6.7"
42
42
  },
43
43
  "repository": {
package/src/styles.css CHANGED
@@ -4120,3 +4120,289 @@ video.pxd-media {
4120
4120
  transition: none;
4121
4121
  }
4122
4122
  }
4123
+
4124
+ /* Keyboard shortcut hints (Action.shortcut): one kbd per key after the label, hidden where there is
4125
+ no keyboard. The hint is decoration; aria-keyshortcuts on the button carries the meaning. */
4126
+ .pxd-kbd-hint {
4127
+ display: inline-flex;
4128
+ align-items: center;
4129
+ gap: calc(var(--pxd-space-inline-tight) / 2);
4130
+ margin-inline-start: var(--pxd-space-inline-tight);
4131
+ }
4132
+ .pxd-kbd {
4133
+ font-family: var(--pxd-type-label-small-family);
4134
+ font-size: var(--pxd-type-label-small-size);
4135
+ font-weight: var(--pxd-type-label-small-weight);
4136
+ line-height: var(--pxd-type-label-small-line-height);
4137
+ letter-spacing: var(--pxd-type-label-small-letter-spacing);
4138
+ font-variant-numeric: tabular-nums;
4139
+ min-width: 1.6em;
4140
+ padding: 0 var(--pxd-space-inline-tight);
4141
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
4142
+ border-radius: var(--pxd-radius-small);
4143
+ color: var(--pxd-color-text-muted);
4144
+ text-align: center;
4145
+ white-space: nowrap;
4146
+ }
4147
+ /* On a filled button the muted grey is not guaranteed to contrast with the pack's primary, so the
4148
+ hint borrows the button's own foreground, only slightly faded, and the border fades further. */
4149
+ .pxd-button-primary .pxd-kbd,
4150
+ .pxd-button-danger .pxd-kbd {
4151
+ color: color-mix(in srgb, currentColor 85%, transparent);
4152
+ border-color: color-mix(in srgb, currentColor 55%, transparent);
4153
+ }
4154
+ /* A described button stacks label over description; the hint sits in the top trailing corner. */
4155
+ .pxd-button-described {
4156
+ position: relative;
4157
+ }
4158
+ .pxd-button-described .pxd-kbd-hint {
4159
+ position: absolute;
4160
+ inset-inline-end: var(--pxd-space-inset-default);
4161
+ top: var(--pxd-space-stack-tight);
4162
+ margin-inline-start: 0;
4163
+ }
4164
+ @container pxd (width < 30rem) {
4165
+ /* Stacked action bars are the phone layout, and phones have no keyboard. */
4166
+ .pxd-action-bar .pxd-kbd-hint {
4167
+ display: none;
4168
+ }
4169
+ }
4170
+
4171
+ /* Skeleton (PolyxdSkeleton): the loading state for a surface that has not arrived yet. Blocks are
4172
+ sized from the type and control tokens so the placeholder has the pack's rhythm, and shimmer
4173
+ with a sweep across two neutral mixes of the surface colour. */
4174
+ .pxd-skeleton-body {
4175
+ display: flex;
4176
+ flex-direction: column;
4177
+ gap: var(--polyxd-stack-apart);
4178
+ }
4179
+ .pxd-skeleton-block {
4180
+ --polyxd-skeleton-base: color-mix(in srgb, var(--pxd-color-text-muted) 14%, var(--pxd-color-surface-default));
4181
+ --polyxd-skeleton-sheen: color-mix(in srgb, var(--pxd-color-text-muted) 6%, var(--pxd-color-surface-default));
4182
+ display: block;
4183
+ flex: none;
4184
+ width: 100%;
4185
+ border-radius: var(--pxd-radius-small);
4186
+ background: linear-gradient(90deg, var(--polyxd-skeleton-base) 0 35%, var(--polyxd-skeleton-sheen) 50%, var(--polyxd-skeleton-base) 65% 100%);
4187
+ background-size: 300% 100%;
4188
+ animation: pxd-skeleton-sweep calc(var(--pxd-motion-duration-long) * 4) linear infinite;
4189
+ }
4190
+ @keyframes pxd-skeleton-sweep {
4191
+ from { background-position: 100% 0; }
4192
+ to { background-position: 0 0; }
4193
+ }
4194
+ /* Widths as a share of the row, so the lines look like text of varying length. */
4195
+ .pxd-skeleton-short { width: 30%; }
4196
+ .pxd-skeleton-medium { width: 55%; }
4197
+ .pxd-skeleton-long { width: 85%; }
4198
+ .pxd-skeleton-full { width: 100%; }
4199
+ /* Heights: each text block is one line of the role it stands in for. */
4200
+ .pxd-skeleton-title { height: calc(var(--pxd-type-title-page-size) * var(--pxd-type-title-page-line-height)); }
4201
+ .pxd-skeleton-line { height: calc(var(--pxd-type-body-default-size) * var(--pxd-type-body-default-line-height)); }
4202
+ .pxd-skeleton-small { height: calc(var(--pxd-type-body-small-size) * var(--pxd-type-body-small-line-height)); }
4203
+ .pxd-skeleton-value { height: calc(var(--pxd-type-numeric-display-size) * var(--pxd-type-numeric-display-line-height)); }
4204
+ .pxd-skeleton-field,
4205
+ .pxd-skeleton-button {
4206
+ height: var(--polyxd-control);
4207
+ border-radius: var(--pxd-radius-control);
4208
+ }
4209
+ .pxd-skeleton-button { width: calc(var(--pxd-size-target-min) * 2.5); }
4210
+ .pxd-skeleton-square {
4211
+ width: var(--polyxd-row-height);
4212
+ height: var(--polyxd-row-height);
4213
+ border-radius: var(--pxd-radius-default);
4214
+ }
4215
+ .pxd-skeleton-circle {
4216
+ width: var(--pxd-size-target-min);
4217
+ height: var(--pxd-size-target-min);
4218
+ border-radius: var(--pxd-radius-full);
4219
+ }
4220
+ .pxd-skeleton-badge {
4221
+ width: calc(var(--pxd-space-inset-comfortable) * 3);
4222
+ height: calc(var(--pxd-type-label-small-size) * var(--pxd-type-label-small-line-height));
4223
+ border-radius: var(--pxd-radius-full);
4224
+ }
4225
+ .pxd-skeleton-chart {
4226
+ height: 16rem; /* the chart's own max-height in .pxd-chart-svg */
4227
+ border-radius: var(--pxd-radius-default);
4228
+ }
4229
+ .pxd-skeleton-row {
4230
+ display: flex;
4231
+ align-items: center;
4232
+ gap: var(--pxd-space-inline-default);
4233
+ }
4234
+ .pxd-skeleton-lines {
4235
+ display: flex;
4236
+ flex: 1;
4237
+ min-width: 0;
4238
+ flex-direction: column;
4239
+ gap: var(--pxd-space-stack-tight);
4240
+ }
4241
+ .pxd-skeleton-actions {
4242
+ display: flex;
4243
+ flex-direction: row-reverse;
4244
+ justify-content: flex-end;
4245
+ gap: var(--pxd-space-inline-default);
4246
+ }
4247
+ .pxd-skeleton-dl {
4248
+ display: grid;
4249
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
4250
+ gap: var(--polyxd-stack) var(--pxd-space-inline-loose);
4251
+ }
4252
+ .pxd-skeleton-dl .pxd-skeleton-row {
4253
+ display: contents;
4254
+ }
4255
+ .pxd-skeleton-cards {
4256
+ display: grid;
4257
+ grid-template-columns: repeat(3, minmax(0, 1fr));
4258
+ gap: var(--pxd-space-inline-default);
4259
+ }
4260
+ .pxd-skeleton-card {
4261
+ display: flex;
4262
+ flex-direction: column;
4263
+ gap: var(--polyxd-stack);
4264
+ padding: var(--pxd-space-inset-default);
4265
+ background: var(--pxd-color-surface-raised);
4266
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
4267
+ border-radius: var(--pxd-radius-default);
4268
+ }
4269
+ @container pxd (width < 30rem) {
4270
+ .pxd-skeleton-actions {
4271
+ flex-direction: column;
4272
+ align-items: stretch;
4273
+ }
4274
+ .pxd-skeleton-actions .pxd-skeleton-button {
4275
+ width: 100%;
4276
+ }
4277
+ .pxd-skeleton-cards {
4278
+ grid-template-columns: minmax(0, 1fr);
4279
+ }
4280
+ }
4281
+ /* Reduced motion: flat blocks, no sweep. (The base sheet zeroes the duration; this also removes the gradient.) */
4282
+ @media (prefers-reduced-motion: reduce) {
4283
+ .pxd-skeleton-block {
4284
+ background: var(--polyxd-skeleton-base);
4285
+ animation: none;
4286
+ }
4287
+ }
4288
+
4289
+ /* ---- Form error summary ---- */
4290
+ /* Said once at the top of the fields, in the danger tokens as .pxd-field-error is; the links are
4291
+ the surface's link style on the surface itself, where the link colour is guaranteed readable. */
4292
+ .pxd-error-summary {
4293
+ display: flex;
4294
+ flex-direction: column;
4295
+ gap: var(--pxd-space-stack-tight);
4296
+ padding: var(--pxd-space-inset-default);
4297
+ border-left: var(--pxd-border-width-strong) solid var(--pxd-color-status-danger-emphasis);
4298
+ background: var(--pxd-color-surface-default);
4299
+ color: var(--pxd-color-text-default);
4300
+ }
4301
+ .pxd-error-summary:focus-visible {
4302
+ outline-offset: var(--pxd-focus-ring-offset);
4303
+ }
4304
+ .pxd-error-summary-title {
4305
+ margin: 0;
4306
+ color: var(--pxd-color-status-danger-foreground);
4307
+ font-family: var(--pxd-type-title-item-family);
4308
+ font-size: var(--pxd-type-title-item-size);
4309
+ font-weight: var(--pxd-type-title-item-weight);
4310
+ line-height: var(--pxd-type-title-item-line-height);
4311
+ letter-spacing: var(--pxd-type-title-item-letter-spacing);
4312
+ }
4313
+ .pxd-error-summary-list {
4314
+ display: flex;
4315
+ flex-direction: column;
4316
+ gap: var(--pxd-space-stack-tight);
4317
+ margin: 0;
4318
+ padding-left: 1.25em;
4319
+ }
4320
+ /* A control the summary marked is drawn like one the browser marked. */
4321
+ .pxd-input[aria-invalid="true"] {
4322
+ border-color: var(--pxd-color-status-danger-emphasis);
4323
+ border-width: var(--pxd-border-width-strong);
4324
+ }
4325
+
4326
+ /* ---- ActionBar overflow ---- */
4327
+ /* The "More actions" control sits where the least important action would have been. */
4328
+ .pxd-action-bar-more {
4329
+ flex: none;
4330
+ align-self: center;
4331
+ }
4332
+
4333
+ /* ---- Media gallery viewer ---- */
4334
+ /* Each resolved picture is a button; the viewer shows one at a time over the surface's scrim. */
4335
+ .pxd-gallery-item {
4336
+ display: block;
4337
+ width: 100%;
4338
+ padding: 0;
4339
+ border: 0;
4340
+ background: none;
4341
+ border-radius: var(--pxd-radius-default);
4342
+ cursor: pointer;
4343
+ }
4344
+ .pxd-gallery-item .pxd-gallery-image {
4345
+ display: block;
4346
+ }
4347
+ .pxd-viewer {
4348
+ position: fixed;
4349
+ inset: 0;
4350
+ z-index: 11;
4351
+ display: flex;
4352
+ flex-direction: column;
4353
+ align-items: center;
4354
+ justify-content: center;
4355
+ gap: var(--pxd-space-stack-default);
4356
+ padding: var(--pxd-space-inset-default);
4357
+ color: var(--pxd-color-text-default);
4358
+ }
4359
+ .pxd-viewer-figure {
4360
+ display: flex;
4361
+ flex-direction: column;
4362
+ align-items: center;
4363
+ gap: var(--pxd-space-stack-tight);
4364
+ margin: 0;
4365
+ min-height: 0;
4366
+ max-width: 100%;
4367
+ }
4368
+ .pxd-viewer-image {
4369
+ max-width: 100%;
4370
+ max-height: 80vh;
4371
+ object-fit: contain;
4372
+ border-radius: var(--pxd-radius-default);
4373
+ }
4374
+ /* Text and controls sit on the overlay surface, so they are readable whatever is behind the scrim. */
4375
+ .pxd-viewer-bar {
4376
+ display: flex;
4377
+ align-items: center;
4378
+ gap: var(--pxd-space-inline-default);
4379
+ width: min(100%, 48rem);
4380
+ padding: var(--pxd-space-inline-tight) var(--pxd-space-inset-compact);
4381
+ background: var(--pxd-color-surface-overlay);
4382
+ border-radius: var(--pxd-radius-default);
4383
+ box-shadow: var(--pxd-shadow-overlay);
4384
+ }
4385
+ .pxd-viewer-nav {
4386
+ width: auto;
4387
+ }
4388
+ .pxd-viewer-counter {
4389
+ flex: 1;
4390
+ font-size: var(--pxd-type-body-small-size);
4391
+ }
4392
+ .pxd-viewer-caption {
4393
+ padding: var(--pxd-space-inline-tight) var(--pxd-space-inset-compact);
4394
+ background: var(--pxd-color-surface-overlay);
4395
+ border-radius: var(--pxd-radius-default);
4396
+ color: var(--pxd-color-text-default);
4397
+ font-size: var(--pxd-type-body-small-size);
4398
+ text-align: center;
4399
+ }
4400
+ .pxd-viewer-close,
4401
+ .pxd-viewer-step {
4402
+ min-width: var(--pxd-size-target-min);
4403
+ min-height: var(--pxd-size-target-min);
4404
+ }
4405
+ .pxd-viewer-step:disabled {
4406
+ opacity: var(--pxd-opacity-state-disabled);
4407
+ cursor: not-allowed;
4408
+ }