@polyxd/web 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +190 -0
  3. package/README.md +79 -0
  4. package/adapters/PolyxdSurface.svelte +65 -0
  5. package/adapters/PolyxdSurface.vue +61 -0
  6. package/dist/components/action-bar.d.ts +14 -0
  7. package/dist/components/action-bar.js +69 -0
  8. package/dist/components/action-bar.js.map +1 -0
  9. package/dist/components/avatar.d.ts +9 -0
  10. package/dist/components/avatar.js +16 -0
  11. package/dist/components/avatar.js.map +1 -0
  12. package/dist/components/chart.d.ts +5 -0
  13. package/dist/components/chart.js +132 -0
  14. package/dist/components/chart.js.map +1 -0
  15. package/dist/components/content.d.ts +20 -0
  16. package/dist/components/content.js +286 -0
  17. package/dist/components/content.js.map +1 -0
  18. package/dist/components/filter.d.ts +9 -0
  19. package/dist/components/filter.js +43 -0
  20. package/dist/components/filter.js.map +1 -0
  21. package/dist/components/flow.d.ts +12 -0
  22. package/dist/components/flow.js +188 -0
  23. package/dist/components/flow.js.map +1 -0
  24. package/dist/components/index.d.ts +10 -0
  25. package/dist/components/index.js +30 -0
  26. package/dist/components/index.js.map +1 -0
  27. package/dist/components/inputs.d.ts +28 -0
  28. package/dist/components/inputs.js +530 -0
  29. package/dist/components/inputs.js.map +1 -0
  30. package/dist/components/marks.d.ts +32 -0
  31. package/dist/components/marks.js +164 -0
  32. package/dist/components/marks.js.map +1 -0
  33. package/dist/components/navigation.d.ts +11 -0
  34. package/dist/components/navigation.js +99 -0
  35. package/dist/components/navigation.js.map +1 -0
  36. package/dist/components/overlays.d.ts +16 -0
  37. package/dist/components/overlays.js +146 -0
  38. package/dist/components/overlays.js.map +1 -0
  39. package/dist/components/pickers.d.ts +6 -0
  40. package/dist/components/pickers.js +272 -0
  41. package/dist/components/pickers.js.map +1 -0
  42. package/dist/components/shell.d.ts +30 -0
  43. package/dist/components/shell.js +167 -0
  44. package/dist/components/shell.js.map +1 -0
  45. package/dist/components/split.d.ts +8 -0
  46. package/dist/components/split.js +76 -0
  47. package/dist/components/split.js.map +1 -0
  48. package/dist/components/structure.d.ts +12 -0
  49. package/dist/components/structure.js +69 -0
  50. package/dist/components/structure.js.map +1 -0
  51. package/dist/components/table.d.ts +11 -0
  52. package/dist/components/table.js +142 -0
  53. package/dist/components/table.js.map +1 -0
  54. package/dist/components/tree.d.ts +10 -0
  55. package/dist/components/tree.js +177 -0
  56. package/dist/components/tree.js.map +1 -0
  57. package/dist/dom.d.ts +25 -0
  58. package/dist/dom.js +211 -0
  59. package/dist/dom.js.map +1 -0
  60. package/dist/elements.d.ts +87 -0
  61. package/dist/elements.js +244 -0
  62. package/dist/elements.js.map +1 -0
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.js +7 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/primitives.d.ts +111 -0
  67. package/dist/primitives.js +361 -0
  68. package/dist/primitives.js.map +1 -0
  69. package/dist/renderer.d.ts +145 -0
  70. package/dist/renderer.js +244 -0
  71. package/dist/renderer.js.map +1 -0
  72. package/dist/skeleton.d.ts +14 -0
  73. package/dist/skeleton.js +13 -0
  74. package/dist/skeleton.js.map +1 -0
  75. package/package.json +52 -0
  76. package/preview/polyxd-web.css +2 -0
  77. package/preview/polyxd-web.js +15 -0
  78. package/styles.css +5012 -0
  79. package/themes/antd.css +300 -0
  80. package/themes/bootstrap.css +300 -0
  81. package/themes/brutalist.css +300 -0
  82. package/themes/carbon.css +310 -0
  83. package/themes/chakra.css +300 -0
  84. package/themes/civic.css +300 -0
  85. package/themes/editorial.css +300 -0
  86. package/themes/finance.css +300 -0
  87. package/themes/fluent.css +300 -0
  88. package/themes/glass.css +300 -0
  89. package/themes/govuk.css +150 -0
  90. package/themes/health.css +300 -0
  91. package/themes/mantine.css +300 -0
  92. package/themes/material3.css +300 -0
  93. package/themes/mono.css +300 -0
  94. package/themes/neon.css +300 -0
  95. package/themes/pastel.css +300 -0
  96. package/themes/polaris.css +300 -0
  97. package/themes/primer.css +300 -0
  98. package/themes/radix.css +300 -0
  99. package/themes/shadcn.css +300 -0
  100. package/themes/sketch.css +356 -0
  101. package/themes/spectrum.css +300 -0
  102. package/themes/terminal.css +300 -0
  103. package/themes/wireframe.css +328 -0
@@ -0,0 +1,167 @@
1
+ import { ROOT_SCOPE, appBarTitle, frameWidth, placementFor, resolve, resolveDeep } from "@polyxd/core";
2
+ import { adopt, h } from "../dom.js";
3
+ import { Icon } from "./avatar.js";
4
+ import { Skeleton } from "../skeleton.js";
5
+ /**
6
+ * The product's frame: its regions in reading order (skip link, banner, header, navigation,
7
+ * main, aside, footer), laid out for the width the frame has. The header's AppBar and the
8
+ * navigation read what was decided from the frame context; the host's screen arrives through
9
+ * the Outlet from the surface's `outlet` prop (<polyxd-frame>).
10
+ */
11
+ export function Frame(node, ctx) {
12
+ const r = ctx.r;
13
+ const mainId = ctx.id(node, "main");
14
+ // The first paint assumes a wide layout; the frame measures itself before the next.
15
+ const [width, setWidth] = ctx.state(node, "width", "wide");
16
+ const [drawerOpen, setDrawerOpen] = ctx.state(node, "drawer", false);
17
+ const nav = node.navigation ? r.byId.get(node.navigation) : undefined;
18
+ const navigation = placementFor(nav?.placement, width, nav?.items?.length ?? 0);
19
+ const text = (v) => String(resolve(v, r.data, ROOT_SCOPE) ?? "");
20
+ // A drawer that was open cannot linger once the width grows past it.
21
+ if (navigation !== "drawer" && drawerOpen)
22
+ setDrawerOpen(false);
23
+ const frame = {
24
+ navigation,
25
+ compact: width === "compact",
26
+ mainId,
27
+ navigationId: nav?.id,
28
+ navigationLabel: nav ? (nav.label !== undefined ? text(nav.label) : "Main") : undefined,
29
+ current: r.props.current,
30
+ drawerOpen,
31
+ setDrawerOpen,
32
+ };
33
+ const inner = ctx.with({ frame });
34
+ const header = node.header ? r.byId.get(node.header) : undefined;
35
+ const aside = node.aside ? r.byId.get(node.aside) : undefined;
36
+ return h("div", {
37
+ class: `pxd-frame pxd-frame-width-${node.width ?? "contained"}`,
38
+ "data-pxd-layout": width,
39
+ "data-pxd-nav": navigation,
40
+ "data-pxd-appbar": header?.component === "AppBar" && header.sticky !== false ? (header.variant ?? "standard") : undefined,
41
+ ...ctx.a11y(node),
42
+ ref: (el) => el && r.observeWidth(el, `${node.id}:frame`, (w) => setWidth(frameWidth(w))),
43
+ }, node.skipTarget !== false &&
44
+ h("a", {
45
+ class: "pxd-skip-link",
46
+ href: `#${mainId}`,
47
+ onClick: (e) => {
48
+ e.preventDefault();
49
+ document.getElementById(mainId)?.focus();
50
+ },
51
+ }, "Skip to main content"), node.banner && h("div", { class: "pxd-frame-banner" }, inner.render(node.banner)), node.header && inner.render(node.header), h("div", { class: "pxd-frame-body" }, nav && h("div", { class: "pxd-frame-nav" }, inner.render(nav.id)), h("div", { class: "pxd-frame-main" }, inner.render(node.main)), aside && h("aside", { class: "pxd-frame-aside", "aria-label": aside.title !== undefined ? text(aside.title) : "Aside" }, inner.render(aside.id))), node.footer && inner.render(node.footer));
52
+ }
53
+ /** The logo when the host can resolve the reference, otherwise the initials as a mark. */
54
+ function Brand(ctx, value, name) {
55
+ const ref = typeof value === "string" ? value : "";
56
+ const url = ref.length > 3 ? ctx.r.props.resolveMedia?.(ref) : undefined;
57
+ if (url)
58
+ return h("img", { class: "pxd-appbar-logo", src: url, alt: "" });
59
+ const initials = (ref && ref.length <= 3 ? ref : name.split(/\s+/).map((w) => w[0]).join("").slice(0, 2)).toUpperCase();
60
+ return h("span", { class: "pxd-appbar-mark", "aria-hidden": "true" }, initials);
61
+ }
62
+ /**
63
+ * The bar at the top of the product. The title is the product's name, or the current screen's
64
+ * on compact layouts when the Frame knows it. When the Frame put the navigation in a drawer,
65
+ * the menu button that opens it sits at the start. Search folds to an icon on compact layouts.
66
+ */
67
+ export function AppBar(node, ctx) {
68
+ const b = ctx.b;
69
+ const frame = ctx.frame;
70
+ const [scrolled, setScrolled] = ctx.state(node, "scrolled", false);
71
+ const [searchOpen, setSearchOpen] = ctx.state(node, "search", false);
72
+ const variant = node.variant ?? "standard";
73
+ const sticky = node.sticky !== false;
74
+ const compact = frame?.compact ?? false;
75
+ const product = b.text(node.title);
76
+ const title = appBarTitle(product, compact, frame?.current?.title);
77
+ const menu = frame?.navigation === "drawer";
78
+ const observers = new WeakMap();
79
+ // Elevation once content scrolls under the bar: a sentinel just above it leaves the viewport.
80
+ const sentinelRef = (el) => {
81
+ if (!el || !sticky || typeof IntersectionObserver === "undefined" || observers.has(el))
82
+ return;
83
+ const io = new IntersectionObserver(([entry]) => setScrolled(!entry.isIntersecting));
84
+ io.observe(el);
85
+ observers.set(el, io);
86
+ };
87
+ const search = (row) => h("div", {
88
+ class: `pxd-appbar-search${row ? " pxd-appbar-search-row" : ""}`,
89
+ role: "search",
90
+ "aria-label": "Search",
91
+ ref: row ? (el) => el && searchOpen && !el.dataset.focused && (el.dataset.focused = "1", el.querySelector("input, button")?.focus()) : undefined,
92
+ }, ctx.render(node.search));
93
+ return [
94
+ h("div", { class: "pxd-appbar-sentinel", "aria-hidden": "true", ref: sentinelRef }),
95
+ h("header", { class: `pxd-appbar pxd-appbar-${variant}${sticky ? " pxd-appbar-sticky" : ""}`, "data-pxd-scrolled": scrolled || undefined, ...ctx.a11y(node) }, h("div", { class: "pxd-appbar-row" }, menu
96
+ ? h("button", { type: "button", class: "pxd-icon-button pxd-appbar-menu", "aria-label": `${frame.navigationLabel ?? "Main"} menu`, "aria-expanded": frame.drawerOpen, onClick: () => frame.setDrawerOpen(true) }, Icon("menu"))
97
+ : node.leading && h("div", { class: "pxd-appbar-leading" }, ctx.render(node.leading)), h("div", { class: "pxd-appbar-brand" }, node.brand !== undefined && Brand(ctx, b.value(node.brand), product), (variant !== "large" || compact) && h("span", { class: "pxd-appbar-title" }, title)), node.search &&
98
+ (compact
99
+ ? h("button", { type: "button", class: "pxd-icon-button pxd-appbar-search-toggle", "aria-label": searchOpen ? "Close search" : "Search", "aria-expanded": searchOpen, onClick: () => setSearchOpen(!searchOpen) }, Icon(searchOpen ? "close" : "search"))
100
+ : search(false)), (node.actions || node.account) &&
101
+ h("div", { class: "pxd-appbar-end" }, node.actions && h("div", { class: "pxd-appbar-actions" }, ctx.render(node.actions)), node.account && h("div", { class: "pxd-appbar-account" }, ctx.render(node.account)))), node.search && compact && searchOpen && search(true), variant === "large" && !compact && h("div", { class: "pxd-appbar-headline" }, title)),
102
+ ];
103
+ }
104
+ /** The bar at the bottom of the product: link groups as columns (stacked on compact), then the legal line. */
105
+ export function Footer(node, ctx) {
106
+ const b = ctx.b;
107
+ const level = Math.min(ctx.heading, 6);
108
+ const groups = node.groups ?? [];
109
+ return h("footer", { class: "pxd-footer", ...ctx.a11y(node) }, groups.length > 0 &&
110
+ h("div", { class: "pxd-footer-groups" }, ...groups.map((g) => {
111
+ const id = ctx.id(node, g.key);
112
+ return h("nav", { key: g.key, class: "pxd-footer-group", "aria-labelledby": id }, h(`h${level}`, { id, class: "pxd-footer-heading" }, b.text(g.label)), h("ul", null, ...g.items.map((item) => h("li", { key: item.key }, h("button", { type: "button", class: "pxd-link pxd-footer-link", onClick: () => ctx.r.dispatch(item.action, b.scope, node.id) }, b.text(item.label))))));
113
+ })), h("div", { class: "pxd-footer-legal" }, h("p", { class: "pxd-footer-legal-text" }, b.text(node.legal)), node.aside && h("div", { class: "pxd-footer-aside" }, ctx.render(node.aside))));
114
+ }
115
+ /**
116
+ * Where the current screen renders: the host's element, or a skeleton while a screen is on its
117
+ * way. When the screen changes, focus moves to its h1. The frame's decisions still reach the
118
+ * screen, but its navigation slot does not: a screen's own Navigation is not the frame's.
119
+ */
120
+ export function Outlet(node, ctx) {
121
+ const b = ctx.b;
122
+ const r = ctx.r;
123
+ const frame = ctx.frame;
124
+ const loading = Boolean(r.props.loading);
125
+ const at = `${r.props.current?.key ?? ""}\u0000${r.props.current?.title ?? ""}`;
126
+ // The screen the outlet last showed: the first keeps the browser's focus where it was; only a change moves it.
127
+ const [shown, setShown] = ctx.state(node, "shown", at);
128
+ if (shown !== at) {
129
+ setShown(at);
130
+ if (!loading)
131
+ ctx.after(() => {
132
+ const main = document.getElementById(frame?.mainId ?? "");
133
+ if (!main)
134
+ return;
135
+ const h1 = main.querySelector("h1");
136
+ if (h1 && !h1.hasAttribute("tabindex"))
137
+ h1.tabIndex = -1;
138
+ (h1 ?? main).focus();
139
+ });
140
+ }
141
+ const outlet = r.props.outlet;
142
+ return h("main", { id: frame?.mainId, class: "pxd-outlet", tabindex: "-1", "aria-label": node.label !== undefined ? b.text(node.label) : undefined, ...ctx.a11y(node) }, loading ? (node.loading ? ctx.render(node.loading) : Skeleton({ title: r.props.current?.title, className: "pxd-outlet-skeleton" })) : outlet ? adopt(outlet, "outlet") : null);
143
+ }
144
+ const noted = new Set();
145
+ /**
146
+ * A slot for a component the host implements: looked up by name in the surface's `components`
147
+ * and rendered with its props resolved. Without one, the fallback stands in, and the console
148
+ * hears about the missing name once. The raw props are never drawn.
149
+ */
150
+ export function Custom(node, ctx) {
151
+ const b = ctx.b;
152
+ const Host = ctx.r.components[node.name];
153
+ if (!Host) {
154
+ if (!noted.has(node.name)) {
155
+ noted.add(node.name);
156
+ console.warn(`[polyxd] No host component named "${node.name}"; rendering its fallback. Pass one in the surface's components.`);
157
+ }
158
+ return node.fallback ? ctx.render(node.fallback) : null;
159
+ }
160
+ const props = (resolveDeep(node.props ?? {}, ctx.r.data, b.scope) ?? {});
161
+ const out = Host({ ...props, node });
162
+ const el = out instanceof Element ? adopt(out, node.id) : out;
163
+ if (node.label === undefined)
164
+ return el;
165
+ return h("div", { class: "pxd-custom", role: "group", "aria-label": b.text(node.label), ...ctx.a11y(node) }, el);
166
+ }
167
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/components/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Node } from "@polyxd/core";
2
+ import { type VNode } from "../dom.ts";
3
+ import type { Ctx } from "../renderer.ts";
4
+ /**
5
+ * Master and detail: the same panes, at the same widths, as the React Split (core decides). The
6
+ * list stays mounted throughout, keeping its scroll position and selection.
7
+ */
8
+ export declare function Split(node: Node, ctx: Ctx): VNode;
@@ -0,0 +1,76 @@
1
+ import { SHARE_MAX, SHARE_MIN, initialSplit, splitPanes, splitReducer, splitSelection } from "@polyxd/core";
2
+ import { h } from "../dom.js";
3
+ import { Icon } from "./avatar.js";
4
+ /**
5
+ * Master and detail: the same panes, at the same widths, as the React Split (core decides). The
6
+ * list stays mounted throughout, keeping its scroll position and selection.
7
+ */
8
+ export function Split(node, ctx) {
9
+ const b = ctx.b;
10
+ const [state, setState] = ctx.state(node, "split", () => initialSplit(node.ratio));
11
+ const [previous, setPrevious] = ctx.state(node, "previous", () => b.value(node.selected));
12
+ const selected = b.value(node.selected);
13
+ const { has, scope, name } = splitSelection(node, ctx.r.byId, ctx.r.data, b.scope);
14
+ const dispatch = (action) => setState((s) => splitReducer(s, action));
15
+ // A new selection shows its detail; on compact it takes the screen and focus.
16
+ let focusDetail = false;
17
+ if (selected !== previous) {
18
+ setPrevious(selected);
19
+ if (state.listShown)
20
+ dispatch({ type: "selected" });
21
+ focusDetail = state.compact && has;
22
+ }
23
+ const { showList, showDetail } = splitPanes(state, has);
24
+ const onPointerDown = (e) => {
25
+ if (e.pointerType === "mouse" && e.button !== 0)
26
+ return;
27
+ const handle = e.currentTarget;
28
+ const el = handle.parentElement;
29
+ handle.setPointerCapture(e.pointerId);
30
+ const rect = el.getBoundingClientRect();
31
+ const rtl = getComputedStyle(el).direction === "rtl";
32
+ const move = (ev) => {
33
+ const x = rtl ? rect.right - ev.clientX : ev.clientX - rect.left;
34
+ dispatch({ type: "share", value: (x / rect.width) * 100 });
35
+ };
36
+ const up = () => {
37
+ el.removeEventListener("pointermove", move);
38
+ el.removeEventListener("pointerup", up);
39
+ el.removeEventListener("pointercancel", up);
40
+ };
41
+ el.addEventListener("pointermove", move);
42
+ el.addEventListener("pointerup", up);
43
+ el.addEventListener("pointercancel", up);
44
+ };
45
+ const resizable = Boolean(node.resizable) && !state.compact;
46
+ const ref = (el) => {
47
+ if (!el)
48
+ return;
49
+ // Measured on the surface, the way the React Split does, so both stack at the same width.
50
+ const measured = el.closest(".pxd-surface") ?? el;
51
+ ctx.r.observeWidth(measured, `${node.id}:split`, (w) => dispatch({ type: "measure", width: w }));
52
+ };
53
+ if (focusDetail)
54
+ ctx.after(() => ctx.r.root?.querySelector(`[data-pxd-id="${node.id}"] > .pxd-split-detail`)?.focus());
55
+ return h("div", { class: `pxd-split pxd-split-${node.ratio ?? "narrow"}${state.compact ? " pxd-split-compact" : ""}${resizable ? " pxd-split-resizable" : ""}`, style: resizable ? { "--polyxd-split-share": `${state.share}%` } : undefined, ...ctx.a11y(node), ref }, h("div", { class: "pxd-split-primary", hidden: !showList }, ctx.render(node.primary)), resizable &&
56
+ h("div", {
57
+ role: "separator",
58
+ "aria-orientation": "vertical",
59
+ "aria-label": "Resize the list",
60
+ "aria-valuenow": Math.round(state.share),
61
+ "aria-valuemin": SHARE_MIN,
62
+ "aria-valuemax": SHARE_MAX,
63
+ tabindex: "0",
64
+ class: "pxd-split-handle",
65
+ onKeydown: (e) => {
66
+ const next = splitReducer(state, { type: "key", key: e.key, shift: e.shiftKey });
67
+ if (next === state)
68
+ return;
69
+ e.preventDefault();
70
+ setState(next);
71
+ },
72
+ onPointerdown: onPointerDown,
73
+ }, h("span", { class: "pxd-split-handle-line", "aria-hidden": "true" })), showDetail &&
74
+ h("div", { class: "pxd-split-detail", tabindex: "-1", "aria-label": name }, state.compact && h("button", { type: "button", class: "pxd-button pxd-button-tertiary pxd-split-back", onClick: () => dispatch({ type: "back" }) }, Icon("chevronLeft", 18), "Back"), has ? ctx.render(node.detail, scope) : node.empty ? ctx.render(node.empty) : null), h("span", { class: "pxd-sr-only", "aria-live": "polite" }, state.compact && has && !state.listShown ? name : ""));
75
+ }
76
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../src/components/split.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Node } from "@polyxd/core";
2
+ import { type VChild, type VNode } from "../dom.ts";
3
+ import type { Ctx } from "../renderer.ts";
4
+ export declare const Children: (ctx: Ctx, ids?: string[]) => VChild[];
5
+ export declare function Heading(ctx: Ctx, className: string | undefined, ...children: VChild[]): VNode;
6
+ export declare function Section(node: Node, ctx: Ctx): VNode;
7
+ export declare function Group(node: Node, ctx: Ctx): VNode;
8
+ /** Side-by-side columns, one child each, that stack below the collapse width (the stylesheet collapses them). */
9
+ export declare function Columns(node: Node, ctx: Ctx): VNode;
10
+ export declare function Card(node: Node, ctx: Ctx): VNode;
11
+ export declare function Disclosure(node: Node, ctx: Ctx): VNode;
12
+ export declare function Views(node: Node, ctx: Ctx): VNode;
@@ -0,0 +1,69 @@
1
+ import { formatCount, formatPercent, selectedView } from "@polyxd/core";
2
+ import { h } from "../dom.js";
3
+ import { Tabs } from "../primitives.js";
4
+ export const Children = (ctx, ids) => (ids ?? []).map((id) => ctx.render(id));
5
+ export function Heading(ctx, className, ...children) {
6
+ return h(`h${Math.min(ctx.heading, 6)}`, { class: className }, ...children);
7
+ }
8
+ export function Section(node, ctx) {
9
+ const b = ctx.b;
10
+ const headingId = ctx.id(node, "heading");
11
+ return h("section", { class: "pxd-section", "aria-labelledby": headingId, ...ctx.a11y(node) }, h("div", { class: "pxd-section-header" }, h(`h${Math.min(ctx.heading, 6)}`, { id: headingId, class: "pxd-section-title" }, b.text(node.title)), node.description !== undefined && h("p", { class: "pxd-section-description" }, b.text(node.description))), h("div", { class: "pxd-stack" }, ...Children(ctx.with({ heading: ctx.heading + 1 }), node.children)));
12
+ }
13
+ export function Group(node, ctx) {
14
+ // A group of numbers reads as one strip of tiles, not a stack of blocks.
15
+ const children = (node.children ?? []).map((id) => ctx.r.byId.get(id));
16
+ const metrics = children.length > 1 && children.every((c) => c?.component === "Metric");
17
+ // 'inline' and 'grid' are the author's call; 'auto' (the default) stacks, except a row of numbers.
18
+ const arrangement = node.arrangement ?? "auto";
19
+ const cls = arrangement === "inline" ? " pxd-group-inline" : arrangement === "grid" ? " pxd-group-grid" : metrics ? " pxd-metric-row" : "";
20
+ return h("div", { class: `pxd-group pxd-stack${cls}`, ...ctx.a11y(node) }, ...Children(ctx, node.children));
21
+ }
22
+ /** Side-by-side columns, one child each, that stack below the collapse width (the stylesheet collapses them). */
23
+ export function Columns(node, ctx) {
24
+ return h("div", { class: `pxd-columns pxd-columns-${node.layout ?? "two-thirds"} pxd-columns-collapse-${node.collapse ?? "compact"} pxd-columns-align-${node.align ?? "stretch"}`, ...ctx.a11y(node) }, ...Children(ctx, node.children));
25
+ }
26
+ export function Card(node, ctx) {
27
+ const b = ctx.b;
28
+ const title = b.text(node.title);
29
+ const badgeTone = node.badge?.tone ?? "neutral";
30
+ return h("article", { class: `pxd-card${node.action ? " pxd-card-actionable" : ""}`, ...ctx.a11y(node) }, node.media && h("div", { class: "pxd-card-media" }, ctx.render(node.media)), h("div", { class: "pxd-card-body" }, h("div", { class: "pxd-card-header" },
31
+ // Stretched button: the whole card is one target, named by its title.
32
+ Heading(ctx, "pxd-card-title", node.action ? h("button", { type: "button", class: "pxd-card-link", onClick: () => ctx.r.dispatch(node.action, b.scope, node.id) }, title) : title), node.badge && h("span", { class: `pxd-badge pxd-tone-${badgeTone}` }, b.text(node.badge.text))), node.subtitle !== undefined && h("p", { class: "pxd-card-subtitle" }, b.text(node.subtitle)), node.progress && CardProgress(b.value(node.progress.value), (node.progress.label !== undefined && b.text(node.progress.label)) || undefined, title, ctx.r.locale), node.children && h("div", { class: "pxd-stack pxd-stack-tight pxd-card-children" }, ...Children(ctx, node.children))));
33
+ }
34
+ /** Progress through an entity: a bar with its label, or the percentage. */
35
+ function CardProgress(value, label, name, locale) {
36
+ const v = Math.max(0, Math.min(1, Number(value) || 0));
37
+ const pct = formatPercent(v, locale);
38
+ return h("div", { class: "pxd-progress" }, h("div", { class: "pxd-progress-track", role: "progressbar", "aria-label": `Progress: ${name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(v * 100), "aria-valuetext": label ?? pct }, h("div", { class: "pxd-progress-fill", style: { width: `${v * 100}%` } })), h("span", { class: "pxd-progress-label" }, label ?? pct));
39
+ }
40
+ export function Disclosure(node, ctx) {
41
+ const b = ctx.b;
42
+ // Design Direction can say a product shows everything rather than tucking detail away.
43
+ const [open, setOpen] = ctx.state(node, "open", () => node.open ?? ctx.r.disclosure === "show-everything");
44
+ const contentId = ctx.id(node, "content");
45
+ const state = open ? "open" : "closed";
46
+ return h("div", { "data-state": state, class: "pxd-disclosure", ...ctx.a11y(node) }, h("button", { type: "button", "aria-controls": open ? contentId : undefined, "aria-expanded": open, "data-state": state, class: "pxd-disclosure-trigger", onClick: () => setOpen(!open) }, h("span", { class: "pxd-disclosure-icon", "aria-hidden": "true" }, open ? "▾" : "▸"), b.text(node.summary)), h("div", { "data-state": state, id: contentId, hidden: !open, class: "pxd-disclosure-content" }, open ? h("div", { class: "pxd-stack" }, ...Children(ctx, node.children)) : null));
47
+ }
48
+ export function Views(node, ctx) {
49
+ const b = ctx.b;
50
+ const bound = node.selected ? b.value(node.selected) : undefined;
51
+ const [local, setLocal] = ctx.state(node, "view", undefined);
52
+ const selected = selectedView(node.views, bound, local);
53
+ const change = (key) => (node.selected ? b.write(node.selected, key) : setLocal(key));
54
+ return Tabs({
55
+ id: ctx.id(node),
56
+ value: selected,
57
+ onValueChange: change,
58
+ rootClass: `pxd-views pxd-views-${node.variant ?? "tabs"}`,
59
+ rootProps: ctx.a11y(node),
60
+ listClass: "pxd-views-list",
61
+ tabClass: "pxd-views-tab",
62
+ panelClass: "pxd-views-panel",
63
+ tabs: node.views.map((v) => {
64
+ const count = v.count !== undefined ? b.value(v.count) : undefined;
65
+ return { key: v.key, label: [b.text(v.label), count !== undefined && h("span", { class: "pxd-views-count" }, formatCount(count, ctx.r.locale))], content: ctx.render(v.content) };
66
+ }),
67
+ });
68
+ }
69
+ //# sourceMappingURL=structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/components/structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Node } from "@polyxd/core";
2
+ import { type VNode } from "../dom.ts";
3
+ import type { Ctx } from "../renderer.ts";
4
+ /**
5
+ * Table: the dense list B2B software is made of. Saved views, a toolbar with search and filters,
6
+ * sortable columns, selection with bulk actions, a menu per row, and paging. On compact surfaces
7
+ * it becomes a list of rows, because 7 columns don't fit a phone.
8
+ */
9
+ export declare function Table(node: Node, ctx: Ctx): VNode;
10
+ /** Rows per page, the range shown, and the way to the next page. A Collection with 'page' uses it too. */
11
+ export declare function Paging(node: Node, ctx: Ctx, rows: number): VNode;
@@ -0,0 +1,142 @@
1
+ import { TABLE_COMPACT_PX, absolute, asList, childPointer, columnCount, formatCount, formatValue, get, isNumericColumn as isNumeric, nextSort, paging as pagingOf, resolve, resolveFormat, rowValue, safeColor, stackedColumns, toggleValue } from "@polyxd/core";
2
+ import { h } from "../dom.js";
3
+ import { Checkbox, Menu, closedMenu, menuTrigger } from "../primitives.js";
4
+ import { Avatar, Icon } from "./avatar.js";
5
+ /**
6
+ * Table: the dense list B2B software is made of. Saved views, a toolbar with search and filters,
7
+ * sortable columns, selection with bulk actions, a menu per row, and paging. On compact surfaces
8
+ * it becomes a list of rows, because 7 columns don't fit a phone.
9
+ */
10
+ export function Table(node, ctx) {
11
+ const b = ctx.b;
12
+ const r = ctx.r;
13
+ const [compact, setCompact] = ctx.state(node, "compact", false);
14
+ const pointer = absolute(node.rows.path, b.scope);
15
+ const rows = asList(get(r.data, pointer));
16
+ const caption = b.text(node.caption);
17
+ // Expandable rows: which are open, by row value. The detail renders in the row's scope.
18
+ const expandable = !!node.detail && node.expandable !== false;
19
+ const [expanded, setExpanded] = ctx.state(node, "expanded", () => []);
20
+ const isOpen = (v) => expanded.includes(v);
21
+ const toggleOpen = (v) => setExpanded((cur) => toggleValue(cur, v));
22
+ const expander = (v, name) => h("button", { type: "button", class: "pxd-icon-button pxd-table-expander", "aria-expanded": isOpen(v), "aria-label": `${isOpen(v) ? "Hide" : "Show"} details for ${name}`, onClick: () => toggleOpen(v) }, Icon(isOpen(v) ? "sortUp" : "sortDown", 16));
23
+ // Selection is host state: an array of row values.
24
+ const selection = node.selection === "multiple";
25
+ const selected = selection && node.selected ? (b.value(node.selected) ?? []) : [];
26
+ const valueOf = (scope, i) => rowValue(node, rows, i, r.data, scope);
27
+ const toggle = (v) => b.write(node.selected, toggleValue(selected, v));
28
+ const allValues = rows.map((_, i) => valueOf({ pointer: childPointer(pointer, i) }, i));
29
+ const allSelected = rows.length > 0 && allValues.every((v) => selected.includes(v));
30
+ const toggleAll = () => b.write(node.selected, allSelected ? [] : allValues);
31
+ // Sorting is host state too: the column key and direction it re-queried with.
32
+ const sortColumn = node.sort?.column ? b.value(node.sort.column) : undefined;
33
+ const sortDirection = node.sort?.direction ? b.value(node.sort.direction) : "ascending";
34
+ const sortBy = (key) => {
35
+ const next = nextSort(key, sortColumn, sortDirection);
36
+ if (node.sort?.column)
37
+ b.write(node.sort.column, key);
38
+ if (node.sort?.direction)
39
+ b.write(node.sort.direction, next);
40
+ if (node.sort?.action)
41
+ r.dispatch(node.sort.action, b.scope, node.id);
42
+ };
43
+ const check = (indicator) => h("span", { "data-state": "checked", style: { pointerEvents: "none" } }, indicator);
44
+ const cell = (c, scope) => {
45
+ const raw = get(r.data, absolute(c.path, scope));
46
+ const text = formatValue(raw, resolveFormat(c.format, r.data, b.scope), r.locale);
47
+ if (c.kind === "status")
48
+ return h("span", { class: `pxd-badge pxd-tone-${c.tones?.[String(raw)] ?? "neutral"}` }, text);
49
+ if (c.format?.type === "color")
50
+ return h("span", { class: "pxd-color-value" }, h("span", { class: `pxd-swatch${safeColor(text) ? "" : " pxd-swatch-unknown"}`, style: safeColor(text) ? { background: safeColor(text) } : undefined, "aria-hidden": "true" }), text);
51
+ if (c.kind === "entity") {
52
+ const second = c.secondaryPath ? String(get(r.data, absolute(c.secondaryPath, scope)) ?? "") : "";
53
+ return h("span", { class: "pxd-entity" }, c.avatarPath && Avatar(ctx, { value: get(r.data, absolute(c.avatarPath, scope)), name: text, size: 28 }), h("span", { class: "pxd-entity-text" }, node.rowAction ? h("button", { type: "button", class: "pxd-link", onClick: () => r.dispatch(node.rowAction, scope, node.id) }, text) : h("span", { class: "pxd-entity-name" }, text), second && h("span", { class: "pxd-entity-secondary" }, second)));
54
+ }
55
+ if (c.kind === "link" && node.rowAction)
56
+ return h("button", { type: "button", class: "pxd-link", onClick: () => r.dispatch(node.rowAction, scope, node.id) }, text);
57
+ return text;
58
+ };
59
+ const rowMenu = (scope, name, i) => {
60
+ const bar = r.byId.get(node.rowActions);
61
+ // A row's menu honours each Action's `visible` against that row, so a stage shows only its own moves.
62
+ const actions = (bar?.children ?? []).map((id) => r.byId.get(id)).filter((a) => Boolean(a) && (a.visible === undefined || resolve(a.visible, r.data, scope) !== false));
63
+ if (!actions.length)
64
+ return null;
65
+ const id = ctx.id(node, `row-${i}-menu`);
66
+ const [menu, setMenu] = ctx.state(node, `menu:${i}`, closedMenu);
67
+ Menu(ctx, id, menu, setMenu, actions.map((a) => ({ key: a.id, label: [b.text(a.label)], class: `pxd-menu-item${a.tone === "danger" ? " pxd-menu-item-danger" : ""}`, onSelect: () => r.dispatch(a.action, scope, a.id) })), { class: "pxd-menu" });
68
+ return h("button", { type: "button", ...menuTrigger(id, menu, setMenu, "end", { class: "pxd-icon-button", "aria-label": `Actions for ${name}` }) }, Icon("dots", 18));
69
+ };
70
+ const header = [
71
+ node.views && TableViews(node, ctx),
72
+ (node.search || node.toolbar || (selection && selected.length > 0)) &&
73
+ h("div", { class: `pxd-table-toolbar${selected.length > 0 ? " pxd-table-bulk" : ""}`, role: "toolbar", "aria-label": selected.length > 0 ? `Actions for ${selected.length} selected` : "Table tools" }, ...(selected.length > 0
74
+ ? [h("p", { class: "pxd-bulk-count", "aria-live": "polite" }, `${selected.length} selected`), node.bulkActions && ctx.render(node.bulkActions), h("button", { type: "button", class: "pxd-button pxd-button-tertiary", onClick: () => b.write(node.selected, []) }, "Cancel")]
75
+ : [node.search && ctx.render(node.search), h("span", { class: "pxd-table-toolbar-spacer" }), node.toolbar && ctx.render(node.toolbar)])),
76
+ ];
77
+ const rowList = () => h("ul", { class: "pxd-row-list", "aria-label": caption }, ...rows.map((_, i) => {
78
+ const scope = { pointer: childPointer(pointer, i) };
79
+ const { first, status, details } = stackedColumns(node.columns);
80
+ const name = formatValue(get(r.data, absolute(first.path, scope)), resolveFormat(first.format, r.data, b.scope), r.locale);
81
+ const v = valueOf(scope, i);
82
+ return h("li", { key: String(v), class: "pxd-row-item" }, selection && node.selected && Checkbox({ class: "pxd-checkbox", checked: selected.includes(v), onCheckedChange: () => toggle(v), "aria-label": `Select ${name}`, indicator: check(Icon("check", 14)) }), expandable && expander(v, name), h("div", { class: "pxd-row-main" }, h("div", { class: "pxd-row-title" }, cell(first, scope)), h("p", { class: "pxd-row-details" }, ...details.map((c, ci) => h("span", { key: c.key }, ci > 0 && h("span", { "aria-hidden": "true" }, " · "), h("span", { class: "pxd-sr-only" }, `${b.text(c.label)}: `), formatValue(get(r.data, absolute(c.path, scope)), resolveFormat(c.format, r.data, b.scope), r.locale))))), status && cell(status, scope), node.rowActions ? rowMenu(scope, name, i) : node.rowAction && !node.columns[0].kind ? h("button", { type: "button", class: "pxd-button pxd-button-tertiary", onClick: () => r.dispatch(node.rowAction, scope, node.id) }, "Select", h("span", { class: "pxd-sr-only" }, ` ${name}`)) : null, expandable && isOpen(v) && h("div", { class: "pxd-row-detail" }, ctx.render(node.detail, scope)));
83
+ }));
84
+ const grid = () => h("div", { class: "pxd-table-scroll" }, h("table", { class: "pxd-table" }, h("caption", { class: node.views || node.search ? "pxd-sr-only" : undefined }, caption), h("thead", null, h("tr", null, expandable && h("th", { scope: "col", class: "pxd-table-expand" }, h("span", { class: "pxd-sr-only" }, "Details")), selection && node.selected && h("th", { scope: "col", class: "pxd-table-select" }, Checkbox({ class: "pxd-checkbox", checked: allSelected ? true : selected.length > 0 ? "indeterminate" : false, onCheckedChange: toggleAll, "aria-label": "Select all rows", indicator: h("span", { "data-state": allSelected ? "checked" : "indeterminate", style: { pointerEvents: "none" } }, Icon(allSelected ? "check" : "dash", 14)) })), ...node.columns.map((c) => {
85
+ const sorted = c.key === sortColumn;
86
+ return h("th", { key: c.key, scope: "col", class: isNumeric(c) ? "pxd-num" : undefined, "aria-sort": c.sortable ? (sorted ? sortDirection : "none") : undefined }, c.sortable ? h("button", { type: "button", class: "pxd-sort", onClick: () => sortBy(c.key) }, b.text(c.label), Icon(sorted ? (sortDirection === "descending" ? "sortDown" : "sortUp") : "sort", 16)) : b.text(c.label));
87
+ }), (node.rowActions || node.rowAction) && h("th", { scope: "col" }, h("span", { class: "pxd-sr-only" }, "Actions")))), h("tbody", null, ...rows.flatMap((_, i) => {
88
+ const scope = { pointer: childPointer(pointer, i) };
89
+ const v = valueOf(scope, i);
90
+ const name = formatValue(get(r.data, absolute(node.columns[0].path, scope)), resolveFormat(node.columns[0].format, r.data, b.scope), r.locale);
91
+ return [
92
+ h("tr", { key: String(v), class: selected.includes(v) ? "pxd-row-selected" : undefined, "aria-selected": selection ? selected.includes(v) : undefined }, expandable && h("td", { class: "pxd-table-expand" }, expander(v, name)), selection && node.selected && h("td", { class: "pxd-table-select" }, Checkbox({ class: "pxd-checkbox", checked: selected.includes(v), onCheckedChange: () => toggle(v), "aria-label": `Select ${name}`, indicator: check(Icon("check", 14)) })), ...node.columns.map((c, ci) => h(ci === 0 ? "th" : "td", { key: c.key, scope: ci === 0 ? "row" : undefined, "data-label": b.text(c.label), class: isNumeric(c) ? "pxd-num" : undefined }, cell(c, scope))), (node.rowActions || node.rowAction) && h("td", { class: "pxd-table-action" }, node.rowActions ? rowMenu(scope, name, i) : h("button", { type: "button", class: "pxd-button pxd-button-tertiary", onClick: () => r.dispatch(node.rowAction, scope, node.id) }, "Select", h("span", { class: "pxd-sr-only" }, ` ${name}`)))),
93
+ expandable && isOpen(v) && h("tr", { key: `${String(v)}-detail`, class: "pxd-table-detail" }, h("td", { colspan: columnCount(node, expandable, Boolean(selection && node.selected)) }, ctx.render(node.detail, scope))),
94
+ ];
95
+ }))));
96
+ const body = !rows.length && node.empty ? ctx.render(node.empty) : compact ? rowList() : grid();
97
+ return h("div", { class: "pxd-table-wrap", ...ctx.a11y(node), ref: (el) => el && r.observeWidth(el, `${node.id}:table`, (w) => setCompact(w < TABLE_COMPACT_PX)) }, ...header, body, node.page && Paging(node, ctx, rows.length));
98
+ }
99
+ /** Saved views: All, Mine, Past due — tabs with counts, switching what the host sends. */
100
+ function TableViews(node, ctx) {
101
+ const b = ctx.b;
102
+ const current = node.view ? b.value(node.view) : node.views[0].key;
103
+ return h("div", { class: "pxd-table-views", role: "tablist", "aria-label": "Saved views" }, ...node.views.map((v) => {
104
+ const count = v.count !== undefined ? b.value(v.count) : undefined;
105
+ const on = v.key === current;
106
+ return h("button", {
107
+ key: v.key,
108
+ type: "button",
109
+ role: "tab",
110
+ "aria-selected": on,
111
+ class: `pxd-table-view${on ? " pxd-table-view-current" : ""}`,
112
+ onClick: () => {
113
+ if (node.view)
114
+ b.write(node.view, v.key);
115
+ ctx.r.dispatch(v.action, b.scope, node.id);
116
+ },
117
+ }, b.text(v.label), count !== undefined && h("span", { class: "pxd-views-count" }, formatCount(count, ctx.r.locale)));
118
+ }));
119
+ }
120
+ /** Rows per page, the range shown, and the way to the next page. A Collection with 'page' uses it too. */
121
+ export function Paging(node, ctx, rows) {
122
+ const b = ctx.b;
123
+ const p = node.page;
124
+ const { index, size, total, pages, from, to, sizes } = pagingOf(p.index ? b.value(p.index) : undefined, p.size ? b.value(p.size) : undefined, p.total ? b.value(p.total) : undefined, rows);
125
+ const n = (v) => formatCount(v, ctx.r.locale);
126
+ const go = (next) => {
127
+ if (p.index)
128
+ b.write(p.index, next);
129
+ ctx.r.dispatch(p.action, b.scope, node.id);
130
+ };
131
+ return h("div", { class: "pxd-paging" }, p.size &&
132
+ h("label", { class: "pxd-paging-size" }, "Rows per page", h("select", {
133
+ value: String(size),
134
+ onChange: (e) => {
135
+ b.write(p.size, Number(e.target.value));
136
+ if (p.index)
137
+ b.write(p.index, 1);
138
+ ctx.r.dispatch(p.action, b.scope, node.id);
139
+ },
140
+ }, ...sizes.map((x) => h("option", { key: x, value: String(x), selected: x === size }, String(x))))), h("p", { class: "pxd-paging-range", "aria-live": "polite" }, `${n(from)}–${n(to)} of ${n(total)}`), h("div", { class: "pxd-paging-controls" }, h("button", { type: "button", class: "pxd-icon-button", "aria-label": "Previous page", disabled: index <= 1, onClick: () => go(index - 1) }, Icon("chevronLeft", 18)), h("span", { class: "pxd-paging-page" }, `Page ${n(index)} of ${n(pages)}`), h("button", { type: "button", class: "pxd-icon-button", "aria-label": "Next page", disabled: index >= pages, onClick: () => go(index + 1) }, Icon("chevronRight", 18))));
141
+ }
142
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.ts"],"names":[],"mappings":"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"}