@derivesome/tree 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.package.json.~undo-tree~ +4 -0
  2. package/.tsconfig.json.~undo-tree~ +4 -0
  3. package/dist/cjs/brands.d.ts +3 -0
  4. package/dist/cjs/brands.d.ts.map +1 -0
  5. package/dist/cjs/brands.js +5 -0
  6. package/dist/cjs/brands.js.map +1 -0
  7. package/dist/cjs/context.d.ts +28 -0
  8. package/dist/cjs/context.d.ts.map +1 -0
  9. package/dist/cjs/context.js +48 -0
  10. package/dist/cjs/context.js.map +1 -0
  11. package/dist/cjs/index.d.ts +6 -0
  12. package/dist/cjs/index.d.ts.map +1 -0
  13. package/dist/cjs/index.js +22 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/mount.d.ts +6 -0
  16. package/dist/cjs/mount.d.ts.map +1 -0
  17. package/dist/cjs/mount.js +209 -0
  18. package/dist/cjs/mount.js.map +1 -0
  19. package/dist/cjs/props.d.ts +12 -0
  20. package/dist/cjs/props.d.ts.map +1 -0
  21. package/dist/cjs/props.js +80 -0
  22. package/dist/cjs/props.js.map +1 -0
  23. package/dist/cjs/renderer.d.ts +29 -0
  24. package/dist/cjs/renderer.d.ts.map +1 -0
  25. package/dist/cjs/renderer.js +3 -0
  26. package/dist/cjs/renderer.js.map +1 -0
  27. package/dist/cjs/tree-node-like.d.ts +8 -0
  28. package/dist/cjs/tree-node-like.d.ts.map +1 -0
  29. package/dist/cjs/tree-node-like.js +4 -0
  30. package/dist/cjs/tree-node-like.js.map +1 -0
  31. package/dist/cjs/tree.d.ts +46 -0
  32. package/dist/cjs/tree.d.ts.map +1 -0
  33. package/dist/cjs/tree.js +154 -0
  34. package/dist/cjs/tree.js.map +1 -0
  35. package/dist/cjs/velement.d.ts +185 -0
  36. package/dist/cjs/velement.d.ts.map +1 -0
  37. package/dist/cjs/velement.js +874 -0
  38. package/dist/cjs/velement.js.map +1 -0
  39. package/dist/esm/brands.d.ts +3 -0
  40. package/dist/esm/brands.d.ts.map +1 -0
  41. package/dist/esm/brands.js +5 -0
  42. package/dist/esm/brands.js.map +1 -0
  43. package/dist/esm/context.d.ts +28 -0
  44. package/dist/esm/context.d.ts.map +1 -0
  45. package/dist/esm/context.js +48 -0
  46. package/dist/esm/context.js.map +1 -0
  47. package/dist/esm/index.d.ts +6 -0
  48. package/dist/esm/index.d.ts.map +1 -0
  49. package/dist/esm/index.js +22 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/dist/esm/mount.d.ts +6 -0
  52. package/dist/esm/mount.d.ts.map +1 -0
  53. package/dist/esm/mount.js +209 -0
  54. package/dist/esm/mount.js.map +1 -0
  55. package/dist/esm/props.d.ts +12 -0
  56. package/dist/esm/props.d.ts.map +1 -0
  57. package/dist/esm/props.js +80 -0
  58. package/dist/esm/props.js.map +1 -0
  59. package/dist/esm/renderer.d.ts +29 -0
  60. package/dist/esm/renderer.d.ts.map +1 -0
  61. package/dist/esm/renderer.js +3 -0
  62. package/dist/esm/renderer.js.map +1 -0
  63. package/dist/esm/tree-node-like.d.ts +8 -0
  64. package/dist/esm/tree-node-like.d.ts.map +1 -0
  65. package/dist/esm/tree-node-like.js +4 -0
  66. package/dist/esm/tree-node-like.js.map +1 -0
  67. package/dist/esm/tree.d.ts +46 -0
  68. package/dist/esm/tree.d.ts.map +1 -0
  69. package/dist/esm/tree.js +154 -0
  70. package/dist/esm/tree.js.map +1 -0
  71. package/dist/esm/velement.d.ts +185 -0
  72. package/dist/esm/velement.d.ts.map +1 -0
  73. package/dist/esm/velement.js +874 -0
  74. package/dist/esm/velement.js.map +1 -0
  75. package/package.json +46 -0
  76. package/package.json~ +52 -0
  77. package/src/#mount.test.ts# +372 -0
  78. package/src/.brands.ts.~undo-tree~ +6 -0
  79. package/src/.context.ts.~undo-tree~ +6 -0
  80. package/src/.index.ts.~undo-tree~ +11 -0
  81. package/src/.mount.test.ts.~undo-tree~ +438 -0
  82. package/src/.mount.ts.~undo-tree~ +70 -0
  83. package/src/.node-like.ts.~undo-tree~ +8 -0
  84. package/src/.props.ts.~undo-tree~ +125 -0
  85. package/src/.renderer.ts.~undo-tree~ +18 -0
  86. package/src/.tree-node-like.ts.~undo-tree~ +12 -0
  87. package/src/.tree.ts.~undo-tree~ +46 -0
  88. package/src/.velement.ts.~undo-tree~ +1739 -0
  89. package/src/brands.ts +2 -0
  90. package/src/brands.ts~ +0 -0
  91. package/src/context.ts +61 -0
  92. package/src/context.ts~ +0 -0
  93. package/src/index.ts +5 -0
  94. package/src/index.ts~ +4 -0
  95. package/src/mount.test.ts +405 -0
  96. package/src/mount.test.ts~ +375 -0
  97. package/src/mount.ts +332 -0
  98. package/src/mount.ts~ +306 -0
  99. package/src/node-like.ts~ +0 -0
  100. package/src/props.ts +99 -0
  101. package/src/props.ts~ +86 -0
  102. package/src/renderer.ts +37 -0
  103. package/src/renderer.ts~ +37 -0
  104. package/src/tree-node-like.ts +8 -0
  105. package/src/tree-node-like.ts~ +6 -0
  106. package/src/tree.ts +226 -0
  107. package/src/tree.ts~ +227 -0
  108. package/src/velement.ts +990 -0
  109. package/src/velement.ts~ +966 -0
  110. package/tsconfig.cjs.json +10 -0
  111. package/tsconfig.esm.json +10 -0
  112. package/tsconfig.json +23 -0
  113. package/tsconfig.json~ +23 -0
@@ -0,0 +1,4 @@
1
+ (undo-tree-save-format-version . 1)
2
+ "40232511b5ba9b2a829c54447ba790ae17600d4f"
3
+ [nil current nil nil (27050 60412 218251 247000) 0 nil]
4
+ nil
@@ -0,0 +1,4 @@
1
+ (undo-tree-save-format-version . 1)
2
+ "5dfcee92883c344f72a7bfaf5b02948157519b4b"
3
+ [nil current nil nil (27050 60416 36488 947000) 0 nil]
4
+ nil
@@ -0,0 +1,3 @@
1
+ export declare const TreeNodeBrand: "TreeNode";
2
+ export type TreeNodeBrand = typeof TreeNodeBrand;
3
+ //# sourceMappingURL=brands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brands.d.ts","sourceRoot":"","sources":["../../src/brands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,EAAG,UAAmB,CAAC;AACjD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TreeNodeBrand = void 0;
4
+ exports.TreeNodeBrand = "TreeNode";
5
+ //# sourceMappingURL=brands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brands.js","sourceRoot":"","sources":["../../src/brands.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,UAAmB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Stack } from "@derivesome/core";
2
+ export declare const TreeScope: {
3
+ new (): {
4
+ cleanups: Set<() => void>;
5
+ };
6
+ };
7
+ export type TreeScope = InstanceType<typeof TreeScope>;
8
+ export declare const TreeContext: {
9
+ new (): {};
10
+ scopes: Stack<TreeScope>;
11
+ get scope(): TreeScope;
12
+ push(): TreeScope;
13
+ pop(): void;
14
+ scoped<T>(fn: (scope: TreeScope) => T): T;
15
+ };
16
+ export type TreeContext = InstanceType<typeof TreeContext>;
17
+ /**
18
+ * Register a teardown callback for the currently-mounting component.
19
+ * Must be called synchronously during component setup.
20
+ */
21
+ export declare function onCleanup(fn: () => void): void;
22
+ /**
23
+ * Run `fn` inside a cleanup-collection scope.
24
+ * Returns `[result, dispose]` where `dispose()` calls every `onCleanup`
25
+ * registered during `fn`'s execution.
26
+ */
27
+ export declare function withCleanupScope<T>(fn: () => T): [result: T, dispose: () => void];
28
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,SAAS;;kBAER,GAAG,CAAC,MAAM,IAAI,CAAC;;CAG5B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC;AAEvD,eAAO,MAAM,WAAW;;YAEL,KAAK,CAAC,SAAS,CAAC;iBAEX,SAAS;YAId,SAAS;;WAUV,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC;CAQnD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAKlC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TreeContext = exports.TreeScope = void 0;
4
+ exports.onCleanup = onCleanup;
5
+ exports.withCleanupScope = withCleanupScope;
6
+ const core_1 = require("@derivesome/core");
7
+ exports.TreeScope = (0, core_1.makeGlobalPrefixed)(class TreeScope {
8
+ cleanups = new Set();
9
+ }, "TreeScope");
10
+ exports.TreeContext = (0, core_1.makeGlobalPrefixed)(class TreeContext {
11
+ static scopes = new core_1.Stack([new exports.TreeScope()]);
12
+ static get scope() {
13
+ return this.scopes.current;
14
+ }
15
+ static push() {
16
+ const scope = new exports.TreeScope();
17
+ this.scopes.push(scope);
18
+ return scope;
19
+ }
20
+ static pop() {
21
+ this.scopes.pop();
22
+ }
23
+ static scoped(fn) {
24
+ const scope = this.push();
25
+ const ret = fn(scope);
26
+ this.pop();
27
+ return ret;
28
+ }
29
+ }, "TreeContext");
30
+ /**
31
+ * Register a teardown callback for the currently-mounting component.
32
+ * Must be called synchronously during component setup.
33
+ */
34
+ function onCleanup(fn) {
35
+ exports.TreeContext.scope.cleanups.add(fn);
36
+ }
37
+ /**
38
+ * Run `fn` inside a cleanup-collection scope.
39
+ * Returns `[result, dispose]` where `dispose()` calls every `onCleanup`
40
+ * registered during `fn`'s execution.
41
+ */
42
+ function withCleanupScope(fn) {
43
+ return exports.TreeContext.scoped((scope) => {
44
+ const result = fn();
45
+ return [result, () => scope.cleanups.forEach((c) => c())];
46
+ });
47
+ }
48
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":";;;AA4CA,8BAEC;AAOD,4CAOC;AA5DD,2CAA6D;AAEhD,QAAA,SAAS,GAAG,IAAA,yBAAkB,EACzC,MAAM,SAAS;IACb,QAAQ,GAAoB,IAAI,GAAG,EAAE,CAAC;CACvC,EACD,WAAW,CACZ,CAAC;AAGW,QAAA,WAAW,GAAG,IAAA,yBAAkB,EAC3C,MAAM,WAAW;IACf,MAAM,CAAC,MAAM,GAAqB,IAAI,YAAK,CAAC,CAAC,IAAI,iBAAS,EAAE,CAAC,CAAC,CAAC;IAE/D,MAAM,KAAK,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,IAAI;QACT,MAAM,KAAK,GAAG,IAAI,iBAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,GAAG;QACR,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,MAAM,CAAI,EAA2B;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;CACF,EACD,aAAa,CACd,CAAC;AAIF;;;GAGG;AACH,SAAgB,SAAS,CAAC,EAAc;IACtC,mBAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAC9B,EAAW;IAEX,OAAO,mBAAW,CAAC,MAAM,CAAmC,CAAC,KAAK,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./tree";
2
+ export * from "./renderer";
3
+ export * from "./context";
4
+ export * from "./mount";
5
+ export * from "./props";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./tree"), exports);
18
+ __exportStar(require("./renderer"), exports);
19
+ __exportStar(require("./context"), exports);
20
+ __exportStar(require("./mount"), exports);
21
+ __exportStar(require("./props"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,6CAA2B;AAC3B,4CAA0B;AAC1B,0CAAwB;AACxB,0CAAwB"}
@@ -0,0 +1,6 @@
1
+ import { Renderer } from "./renderer";
2
+ import { TreeNode } from "./tree";
3
+ type Cleanup = () => void;
4
+ export declare function mount<N>(node: TreeNode, renderer: Renderer<N>, parent: N): Cleanup;
5
+ export {};
6
+ //# sourceMappingURL=mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/mount.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAEL,QAAQ,EAMT,MAAM,QAAQ,CAAC;AAGhB,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAqT1B,wBAAgB,KAAK,CAAC,CAAC,EACrB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,CAAC,GACR,OAAO,CAIT"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mount = mount;
4
+ const core_1 = require("@derivesome/core");
5
+ const context_1 = require("./context");
6
+ const tree_1 = require("./tree");
7
+ const props_1 = require("./props");
8
+ const noop = () => { };
9
+ const createMountContext = () => ({
10
+ forwardedProps: null,
11
+ });
12
+ function isEventKey(key) {
13
+ return key.length > 2 && key.startsWith("on") && /^[A-Z]/.test(key[2]);
14
+ }
15
+ function applyProp(renderer, el, key, value) {
16
+ if (value === null || value === undefined || value === false) {
17
+ renderer.removeProp(el, key);
18
+ }
19
+ else {
20
+ renderer.setProp(el, key, value);
21
+ }
22
+ }
23
+ function setupProp(renderer, el, key, value) {
24
+ if (key === "children")
25
+ return null;
26
+ if (key === "ref")
27
+ return null;
28
+ if ((0, core_1.isReference)(value)) {
29
+ const r = value;
30
+ applyProp(renderer, el, key, r.peek());
31
+ return r.observe((val) => applyProp(renderer, el, key, val));
32
+ }
33
+ if (Array.isArray(value)) {
34
+ const cleanups = value
35
+ .map((x) => setupProp(renderer, el, key, x))
36
+ .filter((v) => v !== null);
37
+ return () => {
38
+ cleanups.forEach((fn) => fn());
39
+ };
40
+ }
41
+ if (typeof value === "function" && !isEventKey(key)) {
42
+ // Computed prop — wrap in derived so dependency tracking works
43
+ const d = (0, core_1.derived)(value);
44
+ return d.observe((val) => applyProp(renderer, el, key, val), {
45
+ immediate: true,
46
+ });
47
+ }
48
+ // Static value or event handler
49
+ applyProp(renderer, el, key, value);
50
+ return null;
51
+ }
52
+ function mountElement(ctx, node, renderer, parent, before) {
53
+ const props = ctx.forwardedProps
54
+ ? (0, props_1.forwardProps)(node.props, ctx.forwardedProps)
55
+ : node.props;
56
+ const el = renderer.createElement(node.tag);
57
+ const cleanups = [];
58
+ for (const [key, value] of Object.entries(props)) {
59
+ const cleanup = setupProp(renderer, el, key, value);
60
+ if (cleanup)
61
+ cleanups.push(cleanup);
62
+ }
63
+ cleanups.push(mountChildren({ ...ctx, forwardedProps: null }, node.children, renderer, el, null));
64
+ renderer.insertBefore(parent, el, before);
65
+ if (typeof props["ref"] === "function") {
66
+ props["ref"](el);
67
+ }
68
+ return () => {
69
+ cleanups.forEach((c) => c());
70
+ renderer.removeChild(parent, el);
71
+ };
72
+ }
73
+ function mountList(ctx, node, renderer, parent, before) {
74
+ const startMarker = renderer.createMarker("each");
75
+ const endMarker = renderer.createMarker("/each");
76
+ renderer.insertBefore(parent, startMarker, before);
77
+ renderer.insertBefore(parent, endMarker, before);
78
+ const itemMap = new Map();
79
+ const update = (list) => {
80
+ const newKeys = list.map((item, i) => {
81
+ const k = item.props.key;
82
+ return typeof k === "string" || typeof k === "number" ? k : i;
83
+ });
84
+ const newKeySet = new Set(newKeys);
85
+ // Remove items that dropped out of the list
86
+ for (const [key, state] of itemMap) {
87
+ if (!newKeySet.has(key)) {
88
+ state.cleanup();
89
+ renderer.removeChild(parent, state.itemStart);
90
+ renderer.removeChild(parent, state.itemEnd);
91
+ itemMap.delete(key);
92
+ }
93
+ }
94
+ // Create newly-appeared items (appended before endMarker for now; reordered below)
95
+ for (let i = 0; i < list.length; i++) {
96
+ const key = newKeys[i];
97
+ const item = list[i];
98
+ if (!itemMap.has(key)) {
99
+ const itemStart = renderer.createMarker(`[${String(key)}]`);
100
+ const itemEnd = renderer.createMarker(`[/${String(key)}]`);
101
+ renderer.insertBefore(parent, itemStart, endMarker);
102
+ renderer.insertBefore(parent, itemEnd, endMarker);
103
+ const cleanup = mountNode(ctx, item, renderer, parent, itemEnd);
104
+ itemMap.set(key, { itemStart, itemEnd, cleanup, node: item });
105
+ }
106
+ else {
107
+ // Index-based keys (no explicit key prop) mean the same position may
108
+ // now hold different content. Remount so the DOM stays in sync.
109
+ const isIndexKey = key === i;
110
+ if (isIndexKey) {
111
+ const state = itemMap.get(key);
112
+ if (state.node !== item) {
113
+ state.cleanup();
114
+ state.cleanup = mountNode(ctx, item, renderer, parent, state.itemEnd);
115
+ state.node = item;
116
+ }
117
+ }
118
+ }
119
+ }
120
+ // Reorder to match the new key sequence.
121
+ // Process from the end so we can use each item's start marker as the
122
+ // insertion cursor for the preceding item.
123
+ let cursor = endMarker;
124
+ for (let i = newKeys.length - 1; i >= 0; i--) {
125
+ const key = newKeys[i];
126
+ const state = itemMap.get(key);
127
+ renderer.moveRange(parent, state.itemStart, state.itemEnd, cursor);
128
+ cursor = state.itemStart;
129
+ }
130
+ };
131
+ const unsub = node.items.observe(update, { immediate: true });
132
+ return () => {
133
+ unsub();
134
+ for (const [, state] of itemMap) {
135
+ state.cleanup();
136
+ renderer.removeChild(parent, state.itemStart);
137
+ renderer.removeChild(parent, state.itemEnd);
138
+ }
139
+ itemMap.clear();
140
+ renderer.removeChild(parent, startMarker);
141
+ renderer.removeChild(parent, endMarker);
142
+ };
143
+ }
144
+ function resolveText(content) {
145
+ if (typeof content === "boolean")
146
+ return "";
147
+ if ((0, core_1.isReference)(content))
148
+ return String(content.peek());
149
+ if (typeof content === "function")
150
+ return String(content());
151
+ return String(content);
152
+ }
153
+ function mountValue(_ctx, node, renderer, parent, before) {
154
+ const domText = renderer.createText(resolveText(node.value));
155
+ renderer.insertBefore(parent, domText, before);
156
+ let unsub = null;
157
+ const content = node.value;
158
+ if ((0, core_1.isReference)(content)) {
159
+ unsub = content.observe((val) => {
160
+ renderer.setText(domText, typeof val === "boolean" ? "" : String(val));
161
+ });
162
+ }
163
+ else if (typeof content === "function") {
164
+ const d = (0, core_1.derived)(content);
165
+ unsub = d.observe((val) => {
166
+ renderer.setText(domText, typeof val === "boolean" ? "" : String(val));
167
+ });
168
+ }
169
+ return () => {
170
+ unsub?.();
171
+ renderer.removeChild(parent, domText);
172
+ };
173
+ }
174
+ function mountFn(ctx, node, renderer, parent, before) {
175
+ return context_1.TreeContext.scoped(() => {
176
+ const [childNode, scopeCleanup] = (0, context_1.withCleanupScope)(() => tree_1.tnu.normalizeOne(node.fn(node.props)));
177
+ const mountCleanup = mountNode({ ...ctx, forwardedProps: (0, props_1.forwardProps)({}, node.props) }, childNode, renderer, parent, before);
178
+ return () => {
179
+ mountCleanup();
180
+ scopeCleanup();
181
+ };
182
+ });
183
+ }
184
+ function mountVoid(_ctx, _node, _renderer, _parent, _before) {
185
+ return noop;
186
+ }
187
+ function mountChildren(ctx, children, renderer, parent, before) {
188
+ const cleanups = children.map((child) => mountNode(ctx, child, renderer, parent, before));
189
+ return () => cleanups.forEach((c) => c());
190
+ }
191
+ function mountNode(ctx, node, renderer, parent, before) {
192
+ switch (node.type) {
193
+ case "element":
194
+ return mountElement(ctx, node, renderer, parent, before);
195
+ case "list":
196
+ return mountList(ctx, node, renderer, parent, before);
197
+ case "value":
198
+ return mountValue(ctx, node, renderer, parent, before);
199
+ case "function":
200
+ return mountFn(ctx, node, renderer, parent, before);
201
+ case "void":
202
+ return mountVoid(ctx, node, renderer, parent, before);
203
+ }
204
+ }
205
+ function mount(node, renderer, parent) {
206
+ const ctx = createMountContext();
207
+ return mountNode(ctx, node, renderer, parent, null);
208
+ }
209
+ //# sourceMappingURL=mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.js","sourceRoot":"","sources":["../../src/mount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { LooseDict } from "@derivesome/core";
2
+ export type TreeNodeProps = LooseDict & {
3
+ children?: unknown;
4
+ style?: unknown;
5
+ id?: unknown;
6
+ key?: string | number;
7
+ };
8
+ export declare const FORWARDED_PROPS: Set<string>;
9
+ export declare const isForwardedProp: (key: string) => boolean;
10
+ export declare const mergeProps: (a: TreeNodeProps, b: TreeNodeProps) => TreeNodeProps;
11
+ export declare const forwardProps: (a: TreeNodeProps, b: TreeNodeProps) => TreeNodeProps;
12
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/props.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAGV,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,GAAG,CAAC,MAAM,CAKtC,CAAC;AAEH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,OAK7C,CAAC;AAqCF,eAAO,MAAM,UAAU,GACrB,GAAG,aAAa,EAChB,GAAG,aAAa,KACf,aAYF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,GAAG,aAAa,EAChB,GAAG,aAAa,KACf,aAcF,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.forwardProps = exports.mergeProps = exports.isForwardedProp = exports.FORWARDED_PROPS = void 0;
4
+ const core_1 = require("@derivesome/core");
5
+ exports.FORWARDED_PROPS = new Set([
6
+ "class",
7
+ "style",
8
+ "key",
9
+ "id",
10
+ ]);
11
+ const isForwardedProp = (key) => {
12
+ if (exports.FORWARDED_PROPS.has(key))
13
+ return true;
14
+ // event handlers
15
+ if (key.length > 2 && key.startsWith("on"))
16
+ return true;
17
+ return false;
18
+ };
19
+ exports.isForwardedProp = isForwardedProp;
20
+ const mergeProp = (a, b, key) => {
21
+ if (typeof a === "undefined")
22
+ return b;
23
+ if (typeof b === "undefined")
24
+ return a;
25
+ if (a === null && b !== null)
26
+ return b;
27
+ if (b === null && a !== null)
28
+ return a;
29
+ if (key === "children")
30
+ return a;
31
+ if (Array.isArray(a) && Array.isArray(b)) {
32
+ const z = (0, core_1.zipMax)(a, b);
33
+ return (0, core_1.unique)(z.map(([x, y]) => mergeProp(x, y, key)));
34
+ }
35
+ if ((0, core_1.isReference)(a) && (0, core_1.isReference)(b)) {
36
+ return (0, core_1.derived)(() => mergeProp(a.get(), b.get(), key));
37
+ }
38
+ if (typeof a === "function" && typeof b === "function") {
39
+ return (...args) => mergeProp(a(...args), b(...args), key);
40
+ }
41
+ if (key === "class") {
42
+ if (typeof a === "string" && typeof b === "string") {
43
+ return (0, core_1.unique)([a, b]).join(" ").trim();
44
+ }
45
+ else if (Array.isArray(a) && typeof b === "string") {
46
+ if (a.every((v) => typeof v === "string") || a.length <= 0) {
47
+ return (0, core_1.unique)([...a, b]);
48
+ }
49
+ }
50
+ else if (typeof a === "string" && Array.isArray(b)) {
51
+ if (b.every((v) => typeof v === "string") || b.length <= 0) {
52
+ return (0, core_1.unique)([a, ...b]);
53
+ }
54
+ }
55
+ }
56
+ return a ?? b;
57
+ };
58
+ const mergeProps = (a, b) => {
59
+ const merged = { ...a };
60
+ const keys = (0, core_1.unique)([...Object.keys(a), ...Object.keys(b)]);
61
+ for (const k of keys) {
62
+ const valueA = a[k];
63
+ const valueB = b[k];
64
+ merged[k] = mergeProp(valueA, valueB, k);
65
+ }
66
+ return merged;
67
+ };
68
+ exports.mergeProps = mergeProps;
69
+ const forwardProps = (a, b) => {
70
+ const merged = { ...a };
71
+ const keys = (0, core_1.unique)([...Object.keys(a), ...Object.keys(b)]).filter((x) => (0, exports.isForwardedProp)(x));
72
+ for (const k of keys) {
73
+ const valueA = a[k];
74
+ const valueB = b[k];
75
+ merged[k] = mergeProp(valueA, valueB, k);
76
+ }
77
+ return merged;
78
+ };
79
+ exports.forwardProps = forwardProps;
80
+ //# sourceMappingURL=props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../src/props.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface Renderer<N> {
2
+ /** Create a native element node for the given tag */
3
+ createElement(tag: string): N;
4
+ /** Create a native text node */
5
+ createText(content: string): N;
6
+ /** Create a native text node */
7
+ createComment(content: string): N;
8
+ /** Create an inert marker node used as anchors for dynamic ranges */
9
+ createMarker(name?: string): N;
10
+ /** Insert `child` before `before` in `parent`, or append if `before` is null */
11
+ insertBefore(parent: N, child: N, before: N | null): void;
12
+ /** Remove `child` from `parent` */
13
+ removeChild(parent: N, child: N): void;
14
+ /** Update a text node's string content */
15
+ setText(node: N, content: string): void;
16
+ /** Set a property or attribute on an element */
17
+ setProp(node: N, key: string, value: unknown): void;
18
+ /** Remove a property or attribute from an element */
19
+ removeProp(node: N, key: string): void;
20
+ /**
21
+ * Move a contiguous range of sibling nodes — from `startMarker` through
22
+ * `endMarker` inclusive, along with everything between them — to immediately
23
+ * before `before` in `parent`. If `before` is null, appends to `parent`.
24
+ *
25
+ * Used by the `list` reconciler to reorder keyed items without unmounting.
26
+ */
27
+ moveRange(parent: N, startMarker: N, endMarker: N, before: N | null): void;
28
+ }
29
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,qDAAqD;IACrD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;IAE9B,gCAAgC;IAChC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;IAE/B,gCAAgC;IAChC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC;IAElC,qEAAqE;IACrE,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAE/B,gFAAgF;IAChF,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1D,mCAAmC;IACnC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAEvC,0CAA0C;IAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,gDAAgD;IAChD,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAEpD,qDAAqD;IACrD,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CAC5E"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { TreeNodeBrand } from "./brands";
2
+ import { TreeNodeProps } from "./props";
3
+ export type TreeNodeLike = {
4
+ type: string;
5
+ [TreeNodeBrand]: true;
6
+ props: TreeNodeProps;
7
+ };
8
+ //# sourceMappingURL=tree-node-like.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-node-like.d.ts","sourceRoot":"","sources":["../../src/tree-node-like.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const brands_1 = require("./brands");
4
+ //# sourceMappingURL=tree-node-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-node-like.js","sourceRoot":"","sources":["../../src/tree-node-like.ts"],"names":[],"mappings":";;AAAA,qCAAyC"}
@@ -0,0 +1,46 @@
1
+ import { Reference } from "@derivesome/core";
2
+ import { TreeNodeBrand } from "./brands";
3
+ import { TreeNodeProps } from "./props";
4
+ export type TreeNodeFn<T extends TreeNodeProps = TreeNodeProps> = (props: TreeNodeProps & T) => unknown;
5
+ export type Component<T extends TreeNodeProps = TreeNodeProps> = TreeNodeFn<T>;
6
+ export interface TreeNodeBase<Type extends string> {
7
+ type: Type;
8
+ props: TreeNodeProps;
9
+ [TreeNodeBrand]: true;
10
+ }
11
+ export interface TreeNodeElement extends TreeNodeBase<"element"> {
12
+ tag: string;
13
+ children: TreeNode[];
14
+ }
15
+ export interface TreeNodeValue extends TreeNodeBase<"value"> {
16
+ value: unknown;
17
+ }
18
+ export interface TreeNodeVoid extends TreeNodeBase<"void"> {
19
+ }
20
+ export interface TreeNodeFunction<P extends TreeNodeProps = TreeNodeProps> extends TreeNodeBase<"function"> {
21
+ fn: TreeNodeFn<P>;
22
+ }
23
+ export interface TreeNodeList<T = any> extends TreeNodeBase<"list"> {
24
+ props: Omit<TreeNodeProps, "children"> & {
25
+ children: Reference<T[]>;
26
+ };
27
+ items: Reference<TreeNode[]>;
28
+ map: (item: T, idx: number) => TreeNode;
29
+ }
30
+ export type TreeNode = TreeNodeElement | TreeNodeValue | TreeNodeVoid | TreeNodeFunction | TreeNodeList;
31
+ export declare function isTreeNode(x: unknown): x is TreeNode;
32
+ export declare namespace tn {
33
+ function none(): TreeNodeVoid;
34
+ function list<T>(items: Reference<T[]> | T[], map?: (item: T, idx: number) => TreeNode): TreeNodeList;
35
+ function value(v: unknown): TreeNodeValue;
36
+ function element(tag: string, props: TreeNodeProps): TreeNodeElement;
37
+ function fn(fun: TreeNodeFn, props?: TreeNodeProps): TreeNodeFunction;
38
+ }
39
+ export declare namespace tnu {
40
+ const normalizeOne: (x: unknown) => TreeNode;
41
+ const normalizeChildren: (x: unknown) => TreeNode[];
42
+ const assertGetKey: (x: TreeNode) => string | number;
43
+ }
44
+ export declare function createNode(tag: string, props?: TreeNodeProps | null, ...children: unknown[]): TreeNodeElement;
45
+ export declare function createNode<P extends TreeNodeProps>(tag: TreeNodeFn<P>, props?: P | null, ...children: unknown[]): TreeNodeFunction;
46
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/tree.ts"],"names":[],"mappings":"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"}