@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,10 @@
1
+ import { type Node } from "@polyxd/core";
2
+ import { type VNode } from "../dom.ts";
3
+ import type { Ctx } from "../renderer.ts";
4
+ /**
5
+ * Tree: a hierarchy people expand, browse and pick from (WAI-ARIA APG tree view). The visible
6
+ * nodes are flattened into rows (core) so level, position and set size can be exposed, and a
7
+ * large tree renders only the rows near its viewport. Focus roves: one row is tabbable, arrows
8
+ * move between them.
9
+ */
10
+ export declare function Tree(node: Node, ctx: Ctx): VNode;
@@ -0,0 +1,177 @@
1
+ import { TYPEAHEAD_MS, VIRTUAL_LIMIT, asList, treeKey, treeRows, typeAheadTarget, visibleWindow } from "@polyxd/core";
2
+ import { h } from "../dom.js";
3
+ import { Icon } from "./avatar.js";
4
+ /** Fallback row height (px) until the first row has been measured. */
5
+ const FALLBACK_ROW_HEIGHT = 40;
6
+ /**
7
+ * Tree: a hierarchy people expand, browse and pick from (WAI-ARIA APG tree view). The visible
8
+ * nodes are flattened into rows (core) so level, position and set size can be exposed, and a
9
+ * large tree renders only the rows near its viewport. Focus roves: one row is tabbable, arrows
10
+ * move between them.
11
+ */
12
+ export function Tree(node, ctx) {
13
+ const b = ctx.b;
14
+ const r = ctx.r;
15
+ const captionId = ctx.id(node, "caption");
16
+ const selection = node.selection ?? "none";
17
+ const selectable = selection !== "none" && !!node.selected;
18
+ // Expanded state: host data when bound, else local with the first level open.
19
+ const boundExpanded = node.expanded ? asList(b.value(node.expanded)) : undefined;
20
+ const [localExpanded, setLocalExpanded] = ctx.state(node, "expanded", null);
21
+ const expandedSet = boundExpanded ? new Set(boundExpanded) : localExpanded;
22
+ const selected = selectable ? b.value(node.selected) : undefined;
23
+ const isSelected = (v) => (Array.isArray(selected) ? selected.includes(v) : selected !== undefined && selected === v);
24
+ const { rows, indexByKey, topValues } = treeRows(node, r.data, b.scope, expandedSet);
25
+ // Roving tabindex: focus is tracked by node pointer so it survives expand/collapse and data updates.
26
+ const [focusKey, setFocusKey] = ctx.state(node, "focus", null);
27
+ const focusIndex = (focusKey !== null ? indexByKey.get(focusKey) : undefined) ?? 0;
28
+ const [pending] = ctx.state(node, "pending", () => ({ index: null }));
29
+ // Virtualisation: only past VIRTUAL_LIMIT rows, when the list becomes its own scroll viewport.
30
+ const virtual = rows.length > VIRTUAL_LIMIT;
31
+ const [geometry, setGeometry] = ctx.state(node, "geometry", () => ({ rowHeight: FALLBACK_ROW_HEIGHT, viewportHeight: FALLBACK_ROW_HEIGHT * 12, scrollTop: 0 }));
32
+ const { start, end } = visibleWindow(rows.length, geometry.scrollTop, geometry.rowHeight, geometry.viewportHeight);
33
+ const listOf = () => r.root?.querySelector(`[data-pxd-id="${CSS.escape(node.id)}"] .pxd-tree-list`);
34
+ // Move focus to a row; when it is outside the rendered window, scroll so it gets rendered first.
35
+ const focusRow = (index) => {
36
+ if (!rows.length)
37
+ return;
38
+ const i = Math.max(0, Math.min(rows.length - 1, index));
39
+ setFocusKey(rows[i].key);
40
+ const el = listOf()?.querySelector(`[data-index="${i}"]`);
41
+ if (el)
42
+ return el.focus();
43
+ pending.index = i;
44
+ const vp = listOf()?.parentElement;
45
+ if (virtual && vp?.classList.contains("pxd-tree-viewport")) {
46
+ const top = Math.max(0, i * geometry.rowHeight - (geometry.viewportHeight - geometry.rowHeight) / 2);
47
+ vp.scrollTop = top;
48
+ setGeometry({ ...geometry, scrollTop: top });
49
+ }
50
+ };
51
+ ctx.after(() => {
52
+ if (pending.index === null)
53
+ return;
54
+ const el = listOf()?.querySelector(`[data-index="${pending.index}"]`);
55
+ if (el) {
56
+ pending.index = null;
57
+ el.focus();
58
+ }
59
+ if (virtual) {
60
+ const first = listOf()?.querySelector(".pxd-tree-item");
61
+ const vp = listOf()?.parentElement;
62
+ const rowHeight = first && first.offsetHeight > 0 ? first.offsetHeight : geometry.rowHeight;
63
+ const viewportHeight = vp?.clientHeight || geometry.viewportHeight;
64
+ if (rowHeight !== geometry.rowHeight || viewportHeight !== geometry.viewportHeight)
65
+ setGeometry({ ...geometry, rowHeight, viewportHeight });
66
+ }
67
+ });
68
+ const setExpanded = (values, open) => {
69
+ if (node.expanded) {
70
+ const cur = boundExpanded ?? [];
71
+ b.write(node.expanded, open ? [...cur, ...values.filter((v) => !cur.includes(v))] : cur.filter((v) => !values.includes(v)));
72
+ return;
73
+ }
74
+ const next = new Set(localExpanded ?? topValues);
75
+ for (const v of values)
76
+ open ? next.add(v) : next.delete(v);
77
+ setLocalExpanded(next);
78
+ };
79
+ const toggle = (row) => setExpanded([row.value], !row.expanded);
80
+ const select = (row) => {
81
+ if (!selectable)
82
+ return;
83
+ if (selection === "single")
84
+ return b.write(node.selected, row.value);
85
+ const cur = Array.isArray(selected) ? selected : [];
86
+ b.write(node.selected, cur.includes(row.value) ? cur.filter((x) => x !== row.value) : [...cur, row.value]);
87
+ };
88
+ // Activate: select where selectable, and dispatch the action with its context bound to this node.
89
+ const activate = (row) => {
90
+ select(row);
91
+ if (node.action)
92
+ r.dispatch(node.action, row.scope, node.id);
93
+ };
94
+ // Type-ahead: letters typed in quick succession jump to the next label starting with them.
95
+ const [typedState] = ctx.state(node, "typed", () => ({ buffer: "", at: 0 }));
96
+ const typeAhead = (char) => {
97
+ const now = Date.now();
98
+ typedState.buffer = now - typedState.at < TYPEAHEAD_MS ? typedState.buffer + char.toLowerCase() : char.toLowerCase();
99
+ typedState.at = now;
100
+ const j = typeAheadTarget(rows, focusIndex, typedState.buffer);
101
+ if (j >= 0)
102
+ focusRow(j);
103
+ };
104
+ const onKeyDown = (e) => {
105
+ const row = rows[focusIndex];
106
+ const move = treeKey(rows, focusIndex, e);
107
+ if (!row || !move)
108
+ return;
109
+ e.preventDefault();
110
+ e.stopPropagation();
111
+ if ("focus" in move)
112
+ focusRow(move.focus);
113
+ else if ("toggle" in move)
114
+ toggle(row);
115
+ else if ("activate" in move)
116
+ activate(row);
117
+ else if ("select" in move)
118
+ select(row);
119
+ else if ("expandSiblings" in move)
120
+ setExpanded(rows.filter((x) => x.parent === row.parent && x.hasChildren).map((x) => x.value), true);
121
+ else if ("typeAhead" in move)
122
+ typeAhead(move.typeAhead);
123
+ };
124
+ const caption = b.text(node.label);
125
+ const listStyle = virtual ? { paddingTop: start * geometry.rowHeight, paddingBottom: (rows.length - end) * geometry.rowHeight } : undefined;
126
+ const list = h("ul", { role: "tree", class: "pxd-tree-list", "aria-labelledby": captionId, "aria-multiselectable": selection === "multiple" ? true : undefined, style: listStyle, onKeydown: onKeyDown }, ...rows.slice(start, end).map((row, offset) => {
127
+ const i = start + offset;
128
+ const rowSelected = selectable ? isSelected(row.value) : undefined;
129
+ return h("li", {
130
+ key: row.key,
131
+ role: "treeitem",
132
+ class: `pxd-tree-item${rowSelected ? " pxd-tree-item-selected" : ""}`,
133
+ style: { "--polyxd-tree-depth": row.level - 1 },
134
+ "data-index": i,
135
+ tabindex: i === focusIndex ? "0" : "-1",
136
+ "aria-level": row.level,
137
+ "aria-setsize": row.setsize,
138
+ "aria-posinset": row.posinset,
139
+ "aria-expanded": row.hasChildren ? row.expanded : undefined,
140
+ "aria-selected": rowSelected,
141
+ onFocus: (e) => {
142
+ if (e.target === e.currentTarget)
143
+ setFocusKey(row.key);
144
+ },
145
+ onClick: (e) => {
146
+ e.stopPropagation();
147
+ focusRow(i);
148
+ if (selectable)
149
+ select(row);
150
+ else if (row.hasChildren)
151
+ toggle(row);
152
+ },
153
+ onDblclick: (e) => {
154
+ e.stopPropagation();
155
+ if (node.action)
156
+ r.dispatch(node.action, row.scope, node.id);
157
+ else if (row.hasChildren)
158
+ toggle(row);
159
+ },
160
+ }, h("div", { class: "pxd-tree-row" }, row.hasChildren
161
+ ? h("button", {
162
+ type: "button",
163
+ class: `pxd-tree-expander${row.expanded ? " pxd-tree-expander-open" : ""}`,
164
+ tabindex: "-1",
165
+ "aria-hidden": "true",
166
+ onClick: (e) => {
167
+ e.stopPropagation();
168
+ focusRow(i);
169
+ toggle(row);
170
+ },
171
+ onDblclick: (e) => e.stopPropagation(),
172
+ }, Icon("chevronRight", 16))
173
+ : h("span", { class: "pxd-tree-expander pxd-tree-expander-leaf", "aria-hidden": "true" }), h("span", { class: "pxd-tree-text" }, row.label), row.detail !== undefined && h("span", { class: "pxd-tree-detail" }, row.detail)));
174
+ }));
175
+ return h("div", { class: "pxd-tree", ...ctx.a11y(node) }, h("div", { class: "pxd-tree-caption", id: captionId }, caption), virtual ? h("div", { class: "pxd-tree-viewport", onScroll: (e) => setGeometry({ ...geometry, scrollTop: e.currentTarget.scrollTop }) }, list) : list);
176
+ }
177
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/components/tree.ts"],"names":[],"mappings":"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"}
package/dist/dom.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * A small virtual DOM: components describe elements, the patcher keeps the real ones in step.
3
+ * It exists so a re-render after every keystroke leaves the element someone is typing in alone
4
+ * (identity, focus and caret survive), the way a React tree does, without a framework.
5
+ */
6
+ export type Props = Record<string, unknown>;
7
+ export interface VNode {
8
+ tag: string;
9
+ props: Props;
10
+ children: VChild[];
11
+ key?: string | number;
12
+ }
13
+ /** A host element the renderer adopts as it is (a Frame's outlet, a host component's output). */
14
+ export interface Adopted {
15
+ dom: Element;
16
+ key?: string | number;
17
+ }
18
+ export type VChild = VNode | Adopted | string | number | null | undefined | false | VChild[];
19
+ export declare function h(tag: string, props: Props | null, ...children: VChild[]): VNode;
20
+ /** A real element placed in the tree as it is; its inside is the host's business. */
21
+ export declare const adopt: (dom: Element, key?: string | number) => Adopted;
22
+ /** Renders children into a container, patching what is already there. */
23
+ export declare function render(container: Element, children: VChild[]): void;
24
+ /** Takes everything down, calling refs so observers and dialogs are released. */
25
+ export declare function unmount(container: Element): void;
package/dist/dom.js ADDED
@@ -0,0 +1,211 @@
1
+ /**
2
+ * A small virtual DOM: components describe elements, the patcher keeps the real ones in step.
3
+ * It exists so a re-render after every keystroke leaves the element someone is typing in alone
4
+ * (identity, focus and caret survive), the way a React tree does, without a framework.
5
+ */
6
+ const SVG_NS = "http://www.w3.org/2000/svg";
7
+ const SVG_TAGS = new Set(["svg", "path", "circle", "rect", "line", "polyline", "polygon", "g", "text"]);
8
+ /** Set as properties, so a controlled input shows the value the document holds. */
9
+ const PROPERTIES = new Set(["value", "checked", "selected", "indeterminate", "textContent"]);
10
+ /** Set as attributes even though the element has a property of that name (form controls read these from the markup). */
11
+ const ATTRIBUTES = new Set(["list", "form", "type", "autocomplete", "for", "role", "tabindex", "lang", "dir", "translate", "spellcheck", "autocapitalize", "autocorrect", "inputmode", "enterkeyhint", "colspan", "rowspan", "scope", "title", "width", "height", "size", "min", "max", "step", "pattern", "placeholder", "maxlength", "minlength", "accept", "alt", "src", "href", "rel", "poster", "controls", "name", "contenteditable", "draggable", "autofocus"]);
12
+ export function h(tag, props, ...children) {
13
+ const p = props ?? {};
14
+ return { tag, props: p, children, key: p.key };
15
+ }
16
+ /** A real element placed in the tree as it is; its inside is the host's business. */
17
+ export const adopt = (dom, key) => ({ dom, key });
18
+ const isAdopted = (v) => !!v && typeof v === "object" && "dom" in v;
19
+ function flatten(children, out = []) {
20
+ for (const c of children) {
21
+ if (c === null || c === undefined || c === false)
22
+ continue;
23
+ if (Array.isArray(c))
24
+ flatten(c, out);
25
+ else if (typeof c === "number")
26
+ out.push(String(c));
27
+ else
28
+ out.push(c);
29
+ }
30
+ return out;
31
+ }
32
+ function setStyle(el, value, previous) {
33
+ if (typeof value === "string") {
34
+ el.style.cssText = value;
35
+ return;
36
+ }
37
+ const next = (value ?? {});
38
+ const prev = (typeof previous === "object" && previous) || {};
39
+ for (const k of Object.keys(prev))
40
+ if (!(k in next))
41
+ k.startsWith("--") ? el.style.removeProperty(k) : (el.style[k] = "");
42
+ for (const [k, v] of Object.entries(next)) {
43
+ if (v === undefined || v === null)
44
+ k.startsWith("--") ? el.style.removeProperty(k) : (el.style[k] = "");
45
+ else if (k.startsWith("--"))
46
+ el.style.setProperty(k, String(v));
47
+ else
48
+ el.style[k] = typeof v === "number" && !/^(opacity|zIndex|flex|lineHeight|fontWeight|order)$/.test(k) ? `${v}px` : String(v);
49
+ }
50
+ }
51
+ function setProp(el, name, value, previous, svg) {
52
+ if (name === "key" || name === "children")
53
+ return;
54
+ if (name === "ref") {
55
+ el.__ref = value;
56
+ return;
57
+ }
58
+ if (name.startsWith("on") && (typeof value === "function" || value === undefined)) {
59
+ const event = name.slice(2).toLowerCase();
60
+ const on = (el.__on ??= {});
61
+ if (value && !on[event])
62
+ el.addEventListener(event, (e) => el.__on?.[event]?.(e));
63
+ if (value)
64
+ on[event] = value;
65
+ else
66
+ delete on[event];
67
+ return;
68
+ }
69
+ if (name === "style")
70
+ return setStyle(el, value, previous);
71
+ if (name === "class" || name === "className") {
72
+ const v = value === undefined || value === null || value === false ? "" : String(value);
73
+ if (svg)
74
+ v ? el.setAttribute("class", v) : el.removeAttribute("class");
75
+ else if (el.className !== v)
76
+ el.className = v;
77
+ return;
78
+ }
79
+ const lower = name.toLowerCase();
80
+ if (!svg && PROPERTIES.has(name)) {
81
+ const v = value === undefined || value === null ? (typeof el[name] === "boolean" ? false : "") : value;
82
+ if (el[name] !== v)
83
+ el[name] = v;
84
+ return;
85
+ }
86
+ if (!svg && !name.includes("-") && !ATTRIBUTES.has(lower) && name in el && typeof el[name] !== "function" && typeof el[name] === "boolean") {
87
+ // disabled, hidden, required, multiple, open, readOnly…: the property mirrors the attribute.
88
+ el[name] = Boolean(value);
89
+ return;
90
+ }
91
+ // An ARIA state that is false is still a state ("aria-checked=false"); any other false attribute is absent.
92
+ if (value === undefined || value === null || (value === false && !name.startsWith("aria-")))
93
+ el.removeAttribute(lower === "classname" ? "class" : name);
94
+ else
95
+ el.setAttribute(name, value === true ? (name.startsWith("aria-") || name === "draggable" || name === "contenteditable" ? "true" : "") : String(value));
96
+ }
97
+ function create(v, svg) {
98
+ if (typeof v === "string") {
99
+ const text = document.createTextNode(v);
100
+ text.__vnode = v;
101
+ return text;
102
+ }
103
+ if (isAdopted(v)) {
104
+ v.dom.__vnode = v;
105
+ return v.dom;
106
+ }
107
+ const isSvg = svg || SVG_TAGS.has(v.tag);
108
+ const el = (isSvg ? document.createElementNS(SVG_NS, v.tag) : document.createElement(v.tag));
109
+ for (const [k, val] of Object.entries(v.props))
110
+ setProp(el, k, val, undefined, isSvg);
111
+ for (const c of flatten(v.children))
112
+ el.appendChild(create(c, isSvg));
113
+ el.__vnode = v;
114
+ return el;
115
+ }
116
+ /** Called once the element is in the document, so a ref may measure it or open it modally. */
117
+ function mounted(node) {
118
+ const el = node;
119
+ if (el.nodeType !== 1)
120
+ return;
121
+ el.__ref?.(el);
122
+ for (const c of Array.from(el.childNodes))
123
+ if (!c.__vnode || !isAdopted(c.__vnode))
124
+ mounted(c);
125
+ }
126
+ function unmounted(node) {
127
+ const el = node;
128
+ if (el.nodeType !== 1)
129
+ return;
130
+ if (isAdopted(el.__vnode))
131
+ return;
132
+ el.__ref?.(null);
133
+ for (const c of Array.from(el.childNodes))
134
+ unmounted(c);
135
+ }
136
+ const keyOf = (v) => (v && typeof v === "object" ? v.key : undefined);
137
+ const sameKind = (a, b) => a !== undefined && typeof a === typeof b && (typeof a === "string" || (isAdopted(a) ? isAdopted(b) && a.dom === b.dom : !isAdopted(b) && a.tag === b.tag && keyOf(a) === keyOf(b)));
138
+ /** Brings an existing element in line with a new description of the same kind. */
139
+ function update(node, next, svg) {
140
+ const el = node;
141
+ const prev = el.__vnode;
142
+ if (typeof next === "string") {
143
+ if (node.textContent !== next)
144
+ node.textContent = next;
145
+ el.__vnode = next;
146
+ return;
147
+ }
148
+ if (isAdopted(next))
149
+ return;
150
+ const previous = prev?.props ?? {};
151
+ const isSvg = svg || SVG_TAGS.has(next.tag);
152
+ for (const k of Object.keys(previous))
153
+ if (!(k in next.props))
154
+ setProp(el, k, undefined, previous[k], isSvg);
155
+ for (const [k, val] of Object.entries(next.props))
156
+ if (k === "style" || k === "ref" || previous[k] !== val)
157
+ setProp(el, k, val, previous[k], isSvg);
158
+ el.__vnode = next;
159
+ reconcile(el, flatten(next.children), isSvg);
160
+ }
161
+ /** Keyed reconciliation of a parent's children: matched by key, else by position and kind. */
162
+ function reconcile(parent, next, svg) {
163
+ const old = Array.from(parent.childNodes);
164
+ const byKey = new Map();
165
+ for (const o of old) {
166
+ const k = keyOf(o.__vnode);
167
+ if (k !== undefined)
168
+ byKey.set(k, o);
169
+ }
170
+ const used = new Set();
171
+ let cursor = old[0] ?? null;
172
+ for (const n of next) {
173
+ const k = keyOf(n);
174
+ let match;
175
+ if (k !== undefined)
176
+ match = byKey.get(k);
177
+ else if (cursor && !used.has(cursor) && keyOf(cursor.__vnode) === undefined && sameKind(cursor.__vnode, n))
178
+ match = cursor;
179
+ if (match && sameKind(match.__vnode, n)) {
180
+ used.add(match);
181
+ if (match !== cursor)
182
+ parent.insertBefore(match, cursor);
183
+ else
184
+ cursor = cursor.nextSibling ?? null;
185
+ update(match, n, svg);
186
+ }
187
+ else {
188
+ const made = create(n, svg);
189
+ parent.insertBefore(made, cursor);
190
+ mounted(made);
191
+ }
192
+ }
193
+ for (const o of old) {
194
+ if (used.has(o))
195
+ continue;
196
+ unmounted(o);
197
+ o.remove();
198
+ }
199
+ }
200
+ /** Renders children into a container, patching what is already there. */
201
+ export function render(container, children) {
202
+ reconcile(container, flatten(children), false);
203
+ }
204
+ /** Takes everything down, calling refs so observers and dialogs are released. */
205
+ export function unmount(container) {
206
+ for (const c of Array.from(container.childNodes)) {
207
+ unmounted(c);
208
+ c.remove();
209
+ }
210
+ }
211
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * <polyxd-surface> and <polyxd-frame>: custom elements around the renderer. No shadow DOM, so the
3
+ * stylesheet and the themes apply as they are, scoped by data-pxd-theme on the surface. The
4
+ * document and data are properties; the string settings are also attributes; what the surface
5
+ * sends is dispatched as DOM events (polyxd-action, polyxd-datachange, polyxd-dismiss) as well as
6
+ * the on* callback properties.
7
+ */
8
+ import type { ActionEvent, Data, UIDocument } from "@polyxd/core";
9
+ import { type Density, type HostComponent, type Mode, type SurfaceProps } from "./renderer.ts";
10
+ import type { ComponentRenderer } from "./components/index.ts";
11
+ export interface PolyxdEvents {
12
+ "polyxd-action": CustomEvent<ActionEvent>;
13
+ "polyxd-datachange": CustomEvent<Data>;
14
+ "polyxd-dismiss": CustomEvent<void>;
15
+ }
16
+ /** The properties shared by both elements. */
17
+ export declare class PolyxdSurfaceElement extends HTMLElement {
18
+ #private;
19
+ static get observedAttributes(): ("density" | "disclosure" | "locale" | "mode" | "theme")[];
20
+ onAction: ((event: ActionEvent) => void) | null;
21
+ onDataChange: ((data: Data) => void) | null;
22
+ onDismiss: (() => void) | null;
23
+ get document(): UIDocument | null;
24
+ set document(doc: UIDocument | null);
25
+ get data(): Data | undefined;
26
+ set data(data: Data | undefined);
27
+ get derive(): SurfaceProps["derive"];
28
+ set derive(fn: SurfaceProps["derive"]);
29
+ get resolveMedia(): SurfaceProps["resolveMedia"];
30
+ set resolveMedia(fn: SurfaceProps["resolveMedia"]);
31
+ get components(): Record<string, ComponentRenderer | HostComponent> | undefined;
32
+ set components(map: Record<string, ComponentRenderer | HostComponent> | undefined);
33
+ get theme(): string | undefined;
34
+ set theme(v: string | undefined);
35
+ get mode(): Mode | undefined;
36
+ set mode(v: Mode | undefined);
37
+ get density(): Density | undefined;
38
+ set density(v: Density | undefined);
39
+ get locale(): string | undefined;
40
+ set locale(v: string | undefined);
41
+ get disclosure(): "progressive" | "show-everything" | undefined;
42
+ set disclosure(v: "progressive" | "show-everything" | undefined);
43
+ /** The current data, as the surface holds it (inputs write here). */
44
+ get surfaceData(): Data | undefined;
45
+ connectedCallback(): void;
46
+ disconnectedCallback(): void;
47
+ attributeChangedCallback(): void;
48
+ /** What the renderer is given: subclasses add the frame's props. */
49
+ protected props(): SurfaceProps | null;
50
+ /** Redraws now rather than on the next tick (tests and hosts that measure right away). */
51
+ flush(): void;
52
+ }
53
+ /**
54
+ * Renders a shell document (surface.kind "shell": a Frame with an Outlet) around the host's
55
+ * current screen: the element's light-DOM children at connection time, or the `outlet` property.
56
+ * `current` marks the navigation item and titles the page; `loading` shows a skeleton.
57
+ */
58
+ export declare class PolyxdFrameElement extends PolyxdSurfaceElement {
59
+ #private;
60
+ get outlet(): Element | null;
61
+ set outlet(el: Element | null);
62
+ get current(): {
63
+ key?: string;
64
+ title?: string;
65
+ } | undefined;
66
+ set current(v: {
67
+ key?: string;
68
+ title?: string;
69
+ } | undefined);
70
+ get loading(): boolean;
71
+ set loading(v: boolean);
72
+ connectedCallback(): void;
73
+ private flushSoon;
74
+ protected props(): SurfaceProps | null;
75
+ }
76
+ /** Registers both elements once; safe to call again. */
77
+ export declare function defineElements(): void;
78
+ export interface Mounted {
79
+ update: (props: Partial<SurfaceProps>) => void;
80
+ unmount: () => void;
81
+ readonly data: Data;
82
+ }
83
+ /**
84
+ * Renders a document into any element without the custom elements (hosts whose DOM is owned by
85
+ * something else). Returns a handle to update the props or take it down.
86
+ */
87
+ export declare function mount(el: HTMLElement, props: SurfaceProps): Mounted;