@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.
- package/LICENSE +202 -0
- package/NOTICE +190 -0
- package/README.md +79 -0
- package/adapters/PolyxdSurface.svelte +65 -0
- package/adapters/PolyxdSurface.vue +61 -0
- package/dist/components/action-bar.d.ts +14 -0
- package/dist/components/action-bar.js +69 -0
- package/dist/components/action-bar.js.map +1 -0
- package/dist/components/avatar.d.ts +9 -0
- package/dist/components/avatar.js +16 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/chart.d.ts +5 -0
- package/dist/components/chart.js +132 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/content.d.ts +20 -0
- package/dist/components/content.js +286 -0
- package/dist/components/content.js.map +1 -0
- package/dist/components/filter.d.ts +9 -0
- package/dist/components/filter.js +43 -0
- package/dist/components/filter.js.map +1 -0
- package/dist/components/flow.d.ts +12 -0
- package/dist/components/flow.js +188 -0
- package/dist/components/flow.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.js +30 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inputs.d.ts +28 -0
- package/dist/components/inputs.js +530 -0
- package/dist/components/inputs.js.map +1 -0
- package/dist/components/marks.d.ts +32 -0
- package/dist/components/marks.js +164 -0
- package/dist/components/marks.js.map +1 -0
- package/dist/components/navigation.d.ts +11 -0
- package/dist/components/navigation.js +99 -0
- package/dist/components/navigation.js.map +1 -0
- package/dist/components/overlays.d.ts +16 -0
- package/dist/components/overlays.js +146 -0
- package/dist/components/overlays.js.map +1 -0
- package/dist/components/pickers.d.ts +6 -0
- package/dist/components/pickers.js +272 -0
- package/dist/components/pickers.js.map +1 -0
- package/dist/components/shell.d.ts +30 -0
- package/dist/components/shell.js +167 -0
- package/dist/components/shell.js.map +1 -0
- package/dist/components/split.d.ts +8 -0
- package/dist/components/split.js +76 -0
- package/dist/components/split.js.map +1 -0
- package/dist/components/structure.d.ts +12 -0
- package/dist/components/structure.js +69 -0
- package/dist/components/structure.js.map +1 -0
- package/dist/components/table.d.ts +11 -0
- package/dist/components/table.js +142 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tree.d.ts +10 -0
- package/dist/components/tree.js +177 -0
- package/dist/components/tree.js.map +1 -0
- package/dist/dom.d.ts +25 -0
- package/dist/dom.js +211 -0
- package/dist/dom.js.map +1 -0
- package/dist/elements.d.ts +87 -0
- package/dist/elements.js +244 -0
- package/dist/elements.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives.d.ts +111 -0
- package/dist/primitives.js +361 -0
- package/dist/primitives.js.map +1 -0
- package/dist/renderer.d.ts +145 -0
- package/dist/renderer.js +244 -0
- package/dist/renderer.js.map +1 -0
- package/dist/skeleton.d.ts +14 -0
- package/dist/skeleton.js +13 -0
- package/dist/skeleton.js.map +1 -0
- package/package.json +52 -0
- package/preview/polyxd-web.css +2 -0
- package/preview/polyxd-web.js +15 -0
- package/styles.css +5012 -0
- package/themes/antd.css +300 -0
- package/themes/bootstrap.css +300 -0
- package/themes/brutalist.css +300 -0
- package/themes/carbon.css +310 -0
- package/themes/chakra.css +300 -0
- package/themes/civic.css +300 -0
- package/themes/editorial.css +300 -0
- package/themes/finance.css +300 -0
- package/themes/fluent.css +300 -0
- package/themes/glass.css +300 -0
- package/themes/govuk.css +150 -0
- package/themes/health.css +300 -0
- package/themes/mantine.css +300 -0
- package/themes/material3.css +300 -0
- package/themes/mono.css +300 -0
- package/themes/neon.css +300 -0
- package/themes/pastel.css +300 -0
- package/themes/polaris.css +300 -0
- package/themes/primer.css +300 -0
- package/themes/radix.css +300 -0
- package/themes/shadcn.css +300 -0
- package/themes/sketch.css +356 -0
- package/themes/spectrum.css +300 -0
- package/themes/terminal.css +300 -0
- 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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"}
|