@flighthq/node 0.3.0-next.906.07cea63 → 0.3.1-next.209.43ef1bc
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/dist/boundsRectangle.d.ts +11 -0
- package/dist/boundsRectangle.d.ts.map +1 -1
- package/dist/boundsRectangle.js +50 -4
- package/dist/boundsRectangle.js.map +1 -1
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/hasBoundsRectangle.d.ts +1 -1
- package/dist/hasBoundsRectangle.d.ts.map +1 -1
- package/dist/hasBoundsRectangle.js +1 -0
- package/dist/hasBoundsRectangle.js.map +1 -1
- package/dist/hierarchy.d.ts.map +1 -1
- package/dist/hierarchy.js +19 -3
- package/dist/hierarchy.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2 -0
- package/dist/node.js.map +1 -1
- package/dist/nodeOrderList.d.ts +88 -0
- package/dist/nodeOrderList.d.ts.map +1 -0
- package/dist/nodeOrderList.js +250 -0
- package/dist/nodeOrderList.js.map +1 -0
- package/dist/revision.d.ts +3 -1
- package/dist/revision.d.ts.map +1 -1
- package/dist/revision.js +8 -1
- package/dist/revision.js.map +1 -1
- package/dist/stageFit.d.ts.map +1 -1
- package/dist/stageFit.js +0 -2
- package/dist/stageFit.js.map +1 -1
- package/dist/traversal.d.ts +1 -1
- package/dist/traversal.d.ts.map +1 -1
- package/dist/traversal.js +1 -1
- package/dist/traversal.js.map +1 -1
- package/package.json +9 -7
- package/src/boundsRectangle.test.ts +58 -0
- package/src/hasBoundsRectangle.test.ts +8 -0
- package/src/hierarchy.test.ts +75 -1
- package/src/nodeOrderList.test.ts +617 -0
- package/src/revision.test.ts +25 -0
- package/src/traversal.test.ts +0 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { emitSignal } from '@flighthq/signals/contract';
|
|
2
|
+
import { getNodeRuntime } from './node';
|
|
3
|
+
/**
|
|
4
|
+
* Appends one entry to the list's valid window. Capacity past `entryCount` is reused, so a list
|
|
5
|
+
* refilled every frame allocates only while it is growing. This does not check whether `node` is
|
|
6
|
+
* already entered — it is the O(1) bulk-fill verb. Use setNodeOrderListEntry to re-key a node that may
|
|
7
|
+
* already be present; a node entered twice resolves to its last entry.
|
|
8
|
+
*/
|
|
9
|
+
export function addNodeOrderListEntry(list, node, sortKey) {
|
|
10
|
+
const entryCount = list.entryCount;
|
|
11
|
+
if (entryCount < list.nodes.length) {
|
|
12
|
+
list.nodes[entryCount] = node;
|
|
13
|
+
list.sortKeys[entryCount] = sortKey;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
list.nodes.push(node);
|
|
17
|
+
list.sortKeys.push(sortKey);
|
|
18
|
+
}
|
|
19
|
+
list.entryCount = entryCount + 1;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reorders `target`'s children so the list's members sit in ascending sort-key order, and does nothing
|
|
23
|
+
* else. This owns order, never membership: members are permuted among the slots they already occupy, so
|
|
24
|
+
* a child the list does not name never moves, not by one index. Entries that are not currently children
|
|
25
|
+
* of `target` — including ones attached to a different parent — are ignored rather than attached, which
|
|
26
|
+
* makes the call a no-op once the caller has detached every member.
|
|
27
|
+
*
|
|
28
|
+
* Because slots are preserved rather than compacted, a foreign child sitting between two members stays
|
|
29
|
+
* between them; no sort key moves a member past it. Contiguity comes from parenting, relative order
|
|
30
|
+
* from the list.
|
|
31
|
+
*
|
|
32
|
+
* Children are written in place rather than routed through setNodeChildIndex: every member is already a
|
|
33
|
+
* child of `target`, so no parent pointer or parentReferenceId changes, and the whole permutation stamps
|
|
34
|
+
* `childrenId` once instead of once per moved node.
|
|
35
|
+
*/
|
|
36
|
+
export function applyNodeOrderList(target, list) {
|
|
37
|
+
const targetRuntime = getNodeRuntime(target);
|
|
38
|
+
const children = targetRuntime.children;
|
|
39
|
+
if (children === null || list.entryCount === 0)
|
|
40
|
+
return;
|
|
41
|
+
const listIndex = _listIndex;
|
|
42
|
+
const members = _members;
|
|
43
|
+
const slots = _slots;
|
|
44
|
+
listIndex.clear();
|
|
45
|
+
members.length = 0;
|
|
46
|
+
slots.length = 0;
|
|
47
|
+
// A node entered more than once resolves to its last entry, since the later set overwrites.
|
|
48
|
+
for (let i = 0; i < list.entryCount; i++)
|
|
49
|
+
listIndex.set(list.nodes[i], i);
|
|
50
|
+
for (let i = 0; i < children.length; i++) {
|
|
51
|
+
if (!listIndex.has(children[i]))
|
|
52
|
+
continue;
|
|
53
|
+
members.push(children[i]);
|
|
54
|
+
slots.push(i);
|
|
55
|
+
}
|
|
56
|
+
// Fewer than two members present cannot be a reordering, whatever their sort keys say.
|
|
57
|
+
if (members.length < 2) {
|
|
58
|
+
listIndex.clear();
|
|
59
|
+
members.length = 0;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const sortKeys = list.sortKeys;
|
|
63
|
+
members.sort((a, b) => {
|
|
64
|
+
const ai = listIndex.get(a);
|
|
65
|
+
const bi = listIndex.get(b);
|
|
66
|
+
// Equal sort keys keep the order the entries were added in, so a tie is resolved by the list rather
|
|
67
|
+
// than by whatever order the children happened to already be in. Breaking the tie explicitly also
|
|
68
|
+
// frees the C port from needing its sort to be stable, and it is the mechanism the *Above/*Below
|
|
69
|
+
// verbs place with — they assign an equal key and rely on entry position to separate the two.
|
|
70
|
+
return sortKeys[ai] !== sortKeys[bi] ? sortKeys[ai] - sortKeys[bi] : ai - bi;
|
|
71
|
+
});
|
|
72
|
+
let moved = false;
|
|
73
|
+
for (let i = 0; i < slots.length; i++) {
|
|
74
|
+
const slot = slots[i];
|
|
75
|
+
if (children[slot] === members[i])
|
|
76
|
+
continue;
|
|
77
|
+
children[slot] = members[i];
|
|
78
|
+
moved = true;
|
|
79
|
+
}
|
|
80
|
+
// Released before the signal, so a handler that applies another list is not reading this call's
|
|
81
|
+
// scratch out from under it.
|
|
82
|
+
listIndex.clear();
|
|
83
|
+
members.length = 0;
|
|
84
|
+
if (!moved)
|
|
85
|
+
return;
|
|
86
|
+
targetRuntime.childrenId = (targetRuntime.childrenId + 1) >>> 0;
|
|
87
|
+
const targetSignals = targetRuntime.nodeSignals;
|
|
88
|
+
if (targetSignals !== null)
|
|
89
|
+
emitSignal(targetSignals.onChildrenOrderChanged);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Empties the valid window without releasing capacity, so the next fill reuses the arrays. Entries past
|
|
93
|
+
* `entryCount` keep their node references; use disposeNodeOrderList to drop them.
|
|
94
|
+
*/
|
|
95
|
+
export function clearNodeOrderList(list) {
|
|
96
|
+
list.entryCount = 0;
|
|
97
|
+
}
|
|
98
|
+
export function createNodeOrderList() {
|
|
99
|
+
return { entryCount: 0, nodes: [], sortKeys: [] };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Empties the list and releases its node references, so a long-lived list stops holding nodes reachable.
|
|
103
|
+
* The list stays usable; this is the teardown counterpart to clearNodeOrderList, which deliberately
|
|
104
|
+
* retains both capacity and the references past the window for reuse.
|
|
105
|
+
*/
|
|
106
|
+
export function disposeNodeOrderList(list) {
|
|
107
|
+
list.entryCount = 0;
|
|
108
|
+
list.nodes.length = 0;
|
|
109
|
+
list.sortKeys.length = 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calls `callback` for each entry in the order the entries were added, which is not the order they
|
|
113
|
+
* resolve to. Stops early if `callback` returns `false`.
|
|
114
|
+
*/
|
|
115
|
+
export function forEachNodeOrderListEntry(list, callback) {
|
|
116
|
+
for (let i = 0; i < list.entryCount; i++) {
|
|
117
|
+
if (callback(list.nodes[i], list.sortKeys[i], i) === false)
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Returns the sort key `node` is entered with, or `null` when it has no entry. Null rather than -1
|
|
123
|
+
* because every finite number, negative included, is a legal sort key.
|
|
124
|
+
*/
|
|
125
|
+
export function getNodeOrderListEntrySortKey(list, node) {
|
|
126
|
+
const index = findNodeOrderListEntryIndex(list, node);
|
|
127
|
+
return index === -1 ? null : list.sortKeys[index];
|
|
128
|
+
}
|
|
129
|
+
export function hasNodeOrderListEntry(list, node) {
|
|
130
|
+
return findNodeOrderListEntryIndex(list, node) !== -1;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Removes `node`'s entry, returning whether one was found. Entries after it shift down rather than
|
|
134
|
+
* being back-filled from the end: entry position breaks ties between equal sort keys, so preserving it
|
|
135
|
+
* is part of the contract, not an implementation detail.
|
|
136
|
+
*/
|
|
137
|
+
export function removeNodeOrderListEntry(list, node) {
|
|
138
|
+
const index = findNodeOrderListEntryIndex(list, node);
|
|
139
|
+
if (index === -1)
|
|
140
|
+
return false;
|
|
141
|
+
removeNodeOrderListEntryAtIndex(list, index);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Enters `node` at `sortKey`, replacing its existing entry in place if it has one. This is the verb for
|
|
146
|
+
* incremental re-keying: unlike addNodeOrderListEntry it never grows the list with a second entry for
|
|
147
|
+
* the same node, at the cost of a scan.
|
|
148
|
+
*/
|
|
149
|
+
export function setNodeOrderListEntry(list, node, sortKey) {
|
|
150
|
+
const index = findNodeOrderListEntryIndex(list, node);
|
|
151
|
+
if (index === -1) {
|
|
152
|
+
addNodeOrderListEntry(list, node, sortKey);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
list.sortKeys[index] = sortKey;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Enters `node` so it resolves immediately above `target` — drawn after it, in front of it. Does
|
|
159
|
+
* nothing when `target` has no entry, since there is nothing to be above.
|
|
160
|
+
*
|
|
161
|
+
* Placement is exact rather than a midpoint between neighbouring keys: `node` takes `target`'s own sort
|
|
162
|
+
* key and its entry is positioned just after `target`'s, so the equal-key tie-break separates the two.
|
|
163
|
+
* That holds however tightly packed the surrounding keys are, and repeated placement never exhausts
|
|
164
|
+
* float precision the way bisection does.
|
|
165
|
+
*/
|
|
166
|
+
export function setNodeOrderListEntryAbove(list, node, target) {
|
|
167
|
+
insertNodeOrderListEntryBeside(list, node, target, 1);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Enters `node` so it resolves immediately below `target` — drawn before it, behind it. Does nothing
|
|
171
|
+
* when `target` has no entry. The mirror of setNodeOrderListEntryAbove, placing `node`'s entry just
|
|
172
|
+
* before `target`'s at the same sort key.
|
|
173
|
+
*/
|
|
174
|
+
export function setNodeOrderListEntryBelow(list, node, target) {
|
|
175
|
+
insertNodeOrderListEntryBeside(list, node, target, 0);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Refills the list from `source`'s current children, each entered at its own child index. This is the
|
|
179
|
+
* inverse of applyNodeOrderList: capture what is there, edit it with the *Above/*Below/swap verbs, then
|
|
180
|
+
* apply it back. Any previous contents are discarded.
|
|
181
|
+
*/
|
|
182
|
+
export function setNodeOrderListFromNodeChildren(list, source) {
|
|
183
|
+
list.entryCount = 0;
|
|
184
|
+
const children = getNodeRuntime(source).children;
|
|
185
|
+
if (children === null)
|
|
186
|
+
return;
|
|
187
|
+
for (let i = 0; i < children.length; i++) {
|
|
188
|
+
addNodeOrderListEntry(list, children[i], i);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Exchanges the sort keys of two entered nodes, the way a display list swaps two depths. Does nothing
|
|
193
|
+
* unless both nodes have entries. Entry positions are left alone, so a tie between the two resolves the
|
|
194
|
+
* same way afterwards as before.
|
|
195
|
+
*/
|
|
196
|
+
export function swapNodeOrderListEntries(list, nodeA, nodeB) {
|
|
197
|
+
const indexA = findNodeOrderListEntryIndex(list, nodeA);
|
|
198
|
+
if (indexA === -1)
|
|
199
|
+
return;
|
|
200
|
+
const indexB = findNodeOrderListEntryIndex(list, nodeB);
|
|
201
|
+
if (indexB === -1)
|
|
202
|
+
return;
|
|
203
|
+
const sortKeyA = list.sortKeys[indexA];
|
|
204
|
+
list.sortKeys[indexA] = list.sortKeys[indexB];
|
|
205
|
+
list.sortKeys[indexB] = sortKeyA;
|
|
206
|
+
}
|
|
207
|
+
function findNodeOrderListEntryIndex(list, node) {
|
|
208
|
+
// Scans backwards so a node entered more than once reports the entry that wins at apply time.
|
|
209
|
+
for (let i = list.entryCount - 1; i >= 0; i--) {
|
|
210
|
+
if (list.nodes[i] === node)
|
|
211
|
+
return i;
|
|
212
|
+
}
|
|
213
|
+
return -1;
|
|
214
|
+
}
|
|
215
|
+
// Shared by the Above (offset 1) and Below (offset 0) verbs: `node` takes `target`'s sort key and its
|
|
216
|
+
// entry lands on the named side of `target`'s. An existing entry for `node` is removed first, so
|
|
217
|
+
// re-placing a node already in the list moves it rather than duplicating it.
|
|
218
|
+
function insertNodeOrderListEntryBeside(list, node, target, offset) {
|
|
219
|
+
if (node === target)
|
|
220
|
+
return;
|
|
221
|
+
const existing = findNodeOrderListEntryIndex(list, node);
|
|
222
|
+
if (existing !== -1)
|
|
223
|
+
removeNodeOrderListEntryAtIndex(list, existing);
|
|
224
|
+
const targetIndex = findNodeOrderListEntryIndex(list, target);
|
|
225
|
+
if (targetIndex === -1)
|
|
226
|
+
return;
|
|
227
|
+
const sortKey = list.sortKeys[targetIndex];
|
|
228
|
+
const at = targetIndex + offset;
|
|
229
|
+
addNodeOrderListEntry(list, node, sortKey);
|
|
230
|
+
for (let i = list.entryCount - 1; i > at; i--) {
|
|
231
|
+
list.nodes[i] = list.nodes[i - 1];
|
|
232
|
+
list.sortKeys[i] = list.sortKeys[i - 1];
|
|
233
|
+
}
|
|
234
|
+
list.nodes[at] = node;
|
|
235
|
+
list.sortKeys[at] = sortKey;
|
|
236
|
+
}
|
|
237
|
+
function removeNodeOrderListEntryAtIndex(list, index) {
|
|
238
|
+
const last = list.entryCount - 1;
|
|
239
|
+
for (let i = index; i < last; i++) {
|
|
240
|
+
list.nodes[i] = list.nodes[i + 1];
|
|
241
|
+
list.sortKeys[i] = list.sortKeys[i + 1];
|
|
242
|
+
}
|
|
243
|
+
list.entryCount = last;
|
|
244
|
+
}
|
|
245
|
+
// Scratch reused across applyNodeOrderList calls so a per-frame apply allocates nothing. Cleared on
|
|
246
|
+
// every exit path, including before the order-changed signal fires, so a reentrant apply starts clean.
|
|
247
|
+
const _listIndex = new Map();
|
|
248
|
+
const _members = [];
|
|
249
|
+
const _slots = [];
|
|
250
|
+
//# sourceMappingURL=nodeOrderList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeOrderList.js","sourceRoot":"","sources":["../src/nodeOrderList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAUxD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA2B,EAC3B,IAAkB,EAClB,OAAe;IAEf,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,IAAqC;IAErC,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAwB,CAAC;IACpE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO;IAEvD,MAAM,SAAS,GAAG,UAAU,CAAC;IAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjB,4FAA4F;IAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;QAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,uFAAuF;IACvF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC;QACtC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC;QACtC,oGAAoG;QACpG,kGAAkG;QAClG,iGAAiG;QACjG,8FAA8F;QAC9F,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;YAAE,SAAS;QAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAiB,CAAC;QAC5C,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAED,gGAAgG;IAChG,6BAA6B;IAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,aAAa,CAAC,UAAU,GAAG,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC;IAChD,IAAI,aAAa,KAAK,IAAI;QAAE,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAqC,IAA2B;IAChG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAqC,IAA2B;IAClG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAqC,EACrC,QAA2C;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK;YAAE,OAAO;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAqC,EACrC,IAA4B;IAE5B,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAqC,EACrC,IAA4B;IAE5B,OAAO,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAA2B,EAC3B,IAA4B;IAE5B,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,+BAA+B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA2B,EAC3B,IAAkB,EAClB,OAAe;IAEf,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAA2B,EAC3B,IAAkB,EAClB,MAA8B;IAE9B,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAA2B,EAC3B,IAAkB,EAClB,MAA8B;IAE9B,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC9C,IAA2B,EAC3B,MAA8B;IAE9B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAiB,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAA2B,EAC3B,KAA6B,EAC7B,KAA6B;IAE7B,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO;IAC1B,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;AACnC,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAqC,EACrC,IAA4B;IAE5B,8FAA8F;IAC9F,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,sGAAsG;AACtG,iGAAiG;AACjG,6EAA6E;AAC7E,SAAS,8BAA8B,CACrC,IAA2B,EAC3B,IAAkB,EAClB,MAA8B,EAC9B,MAAc;IAEd,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO;IAC5B,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,+BAA+B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,OAAO;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,WAAW,GAAG,MAAM,CAAC;IAChC,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AAC9B,CAAC;AAED,SAAS,+BAA+B,CAAwB,IAA2B,EAAE,KAAa;IACxG,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC9C,MAAM,QAAQ,GAAc,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAa,EAAE,CAAC"}
|
package/dist/revision.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Node, NodeRuntime } from '@flighthq/types/contract';
|
|
2
2
|
export declare function computeNodeWorldTransformRevision<Traits extends object>(runtime: NodeRuntime<Traits>, parentRuntime?: Readonly<NodeRuntime<Traits>>): void;
|
|
3
3
|
export declare function getNodeAppearanceRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
4
|
+
export declare function getNodeChildrenRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
4
5
|
export declare function getNodeLocalBoundsRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
5
6
|
export declare function getNodeLocalContentRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
6
7
|
export declare function getNodeLocalTransformRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
8
|
+
export declare function getNodeParentReferenceRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
7
9
|
export declare function getNodeWorldTransformRevision<Traits extends object>(source: Readonly<Node<Traits>>): number;
|
|
8
10
|
/**
|
|
9
11
|
* Target node's rendered content changed — the general direct-mutation companion. After mutating a
|
|
@@ -29,7 +31,7 @@ export declare function invalidateNodeLocalBounds<Traits extends object>(target:
|
|
|
29
31
|
*/
|
|
30
32
|
export declare function invalidateNodeLocalContent<Traits extends object>(target: Node<Traits>): void;
|
|
31
33
|
/**
|
|
32
|
-
* Target object's own transform (x, y, rotation, scaleX, scaleY) changed.
|
|
34
|
+
* Target object's own transform (x, y, rotation, scaleX, scaleY, skewX, skewY, or pivot) changed.
|
|
33
35
|
*/
|
|
34
36
|
export declare function invalidateNodeLocalTransform<Traits extends object>(target: Node<Traits>): void;
|
|
35
37
|
/**
|
package/dist/revision.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUlE,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,MAAM,EACrE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAC5C,IAAI,CAON;AAED,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAEvG;AAED,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAExG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAEzG;AAED,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAE3G;AAED,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAE3G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAGnF;AAED,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAOhF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG1F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG5F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG9F;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUlE,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,MAAM,EACrE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAC5C,IAAI,CAON;AAED,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAEvG;AAED,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAErG;AAED,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAExG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAEzG;AAED,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAE3G;AAED,wBAAgB,8BAA8B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAE5G;AAED,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAE3G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAGnF;AAED,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAOhF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG1F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG5F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAG9F;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAI/F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAI3F"}
|
package/dist/revision.js
CHANGED
|
@@ -17,6 +17,9 @@ export function computeNodeWorldTransformRevision(runtime, parentRuntime) {
|
|
|
17
17
|
export function getNodeAppearanceRevision(source) {
|
|
18
18
|
return getNodeRuntime(source).appearanceId;
|
|
19
19
|
}
|
|
20
|
+
export function getNodeChildrenRevision(source) {
|
|
21
|
+
return getNodeRuntime(source).childrenId;
|
|
22
|
+
}
|
|
20
23
|
export function getNodeLocalBoundsRevision(source) {
|
|
21
24
|
return getNodeRuntime(source).localBoundsId;
|
|
22
25
|
}
|
|
@@ -26,6 +29,9 @@ export function getNodeLocalContentRevision(source) {
|
|
|
26
29
|
export function getNodeLocalTransformRevision(source) {
|
|
27
30
|
return getNodeRuntime(source).localTransformId;
|
|
28
31
|
}
|
|
32
|
+
export function getNodeParentReferenceRevision(source) {
|
|
33
|
+
return getNodeRuntime(source).parentReferenceId;
|
|
34
|
+
}
|
|
29
35
|
export function getNodeWorldTransformRevision(source) {
|
|
30
36
|
return getNodeRuntime(source).worldTransformId;
|
|
31
37
|
}
|
|
@@ -72,7 +78,7 @@ export function invalidateNodeLocalContent(target) {
|
|
|
72
78
|
runtime.localContentId = (runtime.localContentId + 1) >>> 0;
|
|
73
79
|
}
|
|
74
80
|
/**
|
|
75
|
-
* Target object's own transform (x, y, rotation, scaleX, scaleY) changed.
|
|
81
|
+
* Target object's own transform (x, y, rotation, scaleX, scaleY, skewX, skewY, or pivot) changed.
|
|
76
82
|
*/
|
|
77
83
|
export function invalidateNodeLocalTransform(target) {
|
|
78
84
|
const runtime = getNodeRuntime(target);
|
|
@@ -83,6 +89,7 @@ export function invalidateNodeLocalTransform(target) {
|
|
|
83
89
|
*/
|
|
84
90
|
export function invalidateNodeParentReference(target) {
|
|
85
91
|
const runtime = getNodeRuntime(target);
|
|
92
|
+
runtime.parentReferenceId = (runtime.parentReferenceId + 1) >>> 0;
|
|
86
93
|
runtime.worldTransformUsingParentTransformId = -1;
|
|
87
94
|
}
|
|
88
95
|
/**
|
package/dist/revision.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision.js","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"revision.js","sourceRoot":"","sources":["../src/revision.ts"],"names":[],"mappings":"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"}
|
package/dist/stageFit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stageFit.d.ts","sourceRoot":"","sources":["../src/stageFit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stageFit.d.ts","sourceRoot":"","sources":["../src/stageFit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,UAAU,EAEV,iBAAiB,EACjB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAInH;AAGD,wBAAgB,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAIrH;AAGD,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAGD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAMD,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EAC3E,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,IAAI,CA6CN"}
|
package/dist/stageFit.js
CHANGED
|
@@ -35,12 +35,10 @@ export function computeScene2DFitTransform(out, scene2d, viewWidth, viewHeight)
|
|
|
35
35
|
let contentWidth = 0;
|
|
36
36
|
let contentHeight = 0;
|
|
37
37
|
if (scene2d.root !== null) {
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
38
|
const runtime = getNodeRuntime(scene2d.root);
|
|
40
39
|
if (runtime?.computeLocalBoundsRectangle !== undefined) {
|
|
41
40
|
_tempRectangle.width = 0;
|
|
42
41
|
_tempRectangle.height = 0;
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
42
|
runtime.computeLocalBoundsRectangle(_tempRectangle, scene2d.root);
|
|
45
43
|
contentWidth = _tempRectangle.width;
|
|
46
44
|
contentHeight = _tempRectangle.height;
|
package/dist/stageFit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stageFit.js","sourceRoot":"","sources":["../src/stageFit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"stageFit.js","sourceRoot":"","sources":["../src/stageFit.ts"],"names":[],"mappings":"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"}
|
package/dist/traversal.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare function findNodeByName<Traits extends object = NodeTraits>(sourc
|
|
|
16
16
|
* Walks upward from `source` toward the root, calling `callback` for each ancestor. If `callback`
|
|
17
17
|
* returns `false`, the walk stops early. The source node itself is not visited.
|
|
18
18
|
*/
|
|
19
|
-
export declare function forEachNodeAncestor<Traits extends object = NodeTraits>(source: Readonly<Node<Traits>>, callback: (node: Node<Traits>) => boolean): void;
|
|
19
|
+
export declare function forEachNodeAncestor<Traits extends object = NodeTraits>(source: Readonly<Node<Traits>>, callback: (node: Node<Traits>) => boolean | void): void;
|
|
20
20
|
/**
|
|
21
21
|
* Calls `callback` for every descendant of `source` in depth-first pre-order. Unlike
|
|
22
22
|
* `walkNodeDescendants`, this variant never stops early — every descendant is visited regardless
|
package/dist/traversal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKhG;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,EACzE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,MAAM,GAChD,MAAM,GAAG,IAAI,CAAC;AACjB,wBAAgB,QAAQ,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACzD,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,GACzC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAgBzB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EAC/D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAEvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACpE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"traversal.d.ts","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKhG;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,EACzE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,MAAM,GAChD,MAAM,GAAG,IAAI,CAAC;AACjB,wBAAgB,QAAQ,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACzD,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,GACzC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAgBzB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EAC/D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAEvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACpE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,IAAI,GAC/C,IAAI,CAMN;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACtE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,GACrC,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EAChE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAC7B,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAI3B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAQvG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACnE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAQvB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACvE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAQvB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,GAAG,UAAU,EACpE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC9B,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACnC,OAAO,CAST"}
|
package/dist/traversal.js
CHANGED
|
@@ -29,7 +29,7 @@ export function findNodeByName(source, name) {
|
|
|
29
29
|
export function forEachNodeAncestor(source, callback) {
|
|
30
30
|
let current = getNodeParent(source);
|
|
31
31
|
while (current !== null) {
|
|
32
|
-
if (
|
|
32
|
+
if (callback(current) === false)
|
|
33
33
|
return;
|
|
34
34
|
current = getNodeParent(current);
|
|
35
35
|
}
|
package/dist/traversal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traversal.js","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAexC,MAAM,UAAU,QAAQ,CACtB,MAA8B,EAC9B,SAA0C;IAE1C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAiB,CAAC;QAC1C,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,KAAuB,CAAC;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA8B,EAC9B,IAAY;IAEZ,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"traversal.js","sourceRoot":"","sources":["../src/traversal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/node",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1-next.209.43ef1bc",
|
|
4
|
+
"author": "Joshua Granick and other contributors",
|
|
5
|
+
"license": "MIT",
|
|
4
6
|
"repository": {
|
|
5
7
|
"type": "git",
|
|
6
8
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,12 +38,12 @@
|
|
|
36
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
39
|
},
|
|
38
40
|
"dependencies": {
|
|
39
|
-
"@flighthq/adjustments": "0.3.
|
|
40
|
-
"@flighthq/entity": "0.3.
|
|
41
|
-
"@flighthq/geometry": "0.3.
|
|
42
|
-
"@flighthq/materials": "0.3.
|
|
43
|
-
"@flighthq/signals": "0.3.
|
|
44
|
-
"@flighthq/types": "0.3.
|
|
41
|
+
"@flighthq/adjustments": "0.3.1-next.209.43ef1bc",
|
|
42
|
+
"@flighthq/entity": "0.3.1-next.209.43ef1bc",
|
|
43
|
+
"@flighthq/geometry": "0.3.1-next.209.43ef1bc",
|
|
44
|
+
"@flighthq/materials": "0.3.1-next.209.43ef1bc",
|
|
45
|
+
"@flighthq/signals": "0.3.1-next.209.43ef1bc",
|
|
46
|
+
"@flighthq/types": "0.3.1-next.209.43ef1bc"
|
|
45
47
|
},
|
|
46
48
|
"devDependencies": {
|
|
47
49
|
"typescript": "^5.3.0"
|
|
@@ -26,6 +26,7 @@ import type {
|
|
|
26
26
|
|
|
27
27
|
import {
|
|
28
28
|
computeNodeBoundsRectangle,
|
|
29
|
+
computeNodeRootLocalBoundsRectangle,
|
|
29
30
|
ensureNodeLocalBoundsRectangle,
|
|
30
31
|
ensureNodeParentBoundsRectangle,
|
|
31
32
|
ensureNodeWorldBoundsRectangle,
|
|
@@ -159,7 +160,64 @@ describe('computeNodeBoundsRectangle', () => {
|
|
|
159
160
|
});
|
|
160
161
|
});
|
|
161
162
|
|
|
163
|
+
describe('computeNodeRootLocalBoundsRectangle', () => {
|
|
164
|
+
it('ignores the detached root transform while preserving negative local extents', () => {
|
|
165
|
+
const root = createTestNode();
|
|
166
|
+
root.x = 120;
|
|
167
|
+
root.y = -35;
|
|
168
|
+
root.rotation = 37;
|
|
169
|
+
root.scaleX = 2;
|
|
170
|
+
root.scaleY = 0.5;
|
|
171
|
+
setRectangle(getNodeLocalBoundsRectangle(root), -10, -5, 30, 20);
|
|
172
|
+
|
|
173
|
+
const out = createRectangle();
|
|
174
|
+
computeNodeRootLocalBoundsRectangle(out, root);
|
|
175
|
+
|
|
176
|
+
expect(out).toMatchObject({ x: -10, y: -5, width: 30, height: 20 });
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('composes nested transforms relative to an identity root', () => {
|
|
180
|
+
const root = createTestNode();
|
|
181
|
+
const child = createTestNode();
|
|
182
|
+
root.x = 500;
|
|
183
|
+
root.rotation = 90;
|
|
184
|
+
child.x = 20;
|
|
185
|
+
child.y = 3;
|
|
186
|
+
child.scaleX = 2;
|
|
187
|
+
child.scaleY = 3;
|
|
188
|
+
setRectangle(getNodeLocalBoundsRectangle(root), 0, 0, 10, 10);
|
|
189
|
+
setRectangle(getNodeLocalBoundsRectangle(child), -5, -2, 4, 8);
|
|
190
|
+
addNodeChild(root, child);
|
|
191
|
+
|
|
192
|
+
const out = createRectangle();
|
|
193
|
+
computeNodeRootLocalBoundsRectangle(out, root);
|
|
194
|
+
|
|
195
|
+
expect(out.x).toBeCloseTo(0);
|
|
196
|
+
expect(out.y).toBeCloseTo(-3);
|
|
197
|
+
expect(out.width).toBeCloseTo(18);
|
|
198
|
+
expect(out.height).toBeCloseTo(24);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
162
202
|
describe('ensureNodeLocalBoundsRectangle', () => {
|
|
203
|
+
it('recalculates when the kind-owned validity hook rejects an unchanged revision', () => {
|
|
204
|
+
const object = createTestNode();
|
|
205
|
+
const runtime = getEntityRuntime(object);
|
|
206
|
+
let input = { width: 10 };
|
|
207
|
+
let stampedInput = input;
|
|
208
|
+
runtime.computeLocalBoundsRectangle = (out: Rectangle) => {
|
|
209
|
+
out.width = input.width;
|
|
210
|
+
stampedInput = input;
|
|
211
|
+
};
|
|
212
|
+
runtime.isLocalBoundsRectangleValid = () => stampedInput === input;
|
|
213
|
+
ensureNodeLocalBoundsRectangle(object);
|
|
214
|
+
|
|
215
|
+
input = { width: 20 };
|
|
216
|
+
ensureNodeLocalBoundsRectangle(object);
|
|
217
|
+
|
|
218
|
+
expect(runtime.localBoundsRectangle?.width).toBe(20);
|
|
219
|
+
});
|
|
220
|
+
|
|
163
221
|
it('should ensure localBoundsRectangle is defined', () => {
|
|
164
222
|
const object = createTestNode();
|
|
165
223
|
const runtime = getEntityRuntime(object);
|
|
@@ -34,6 +34,14 @@ describe('initBoundsRectangleRuntimeTrait', () => {
|
|
|
34
34
|
expect(runtime.localBoundsRectangle).toBeNull();
|
|
35
35
|
expect(runtime.worldBoundsRectangle).toBeNull();
|
|
36
36
|
expect(runtime.computeLocalBoundsRectangle).toStrictEqual(defaultComputeLocalBoundsRectangle);
|
|
37
|
+
expect(runtime.isLocalBoundsRectangleValid).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('installs a kind-owned local-bounds validity hook', () => {
|
|
41
|
+
const isLocalBoundsRectangleValid = vi.fn(() => true);
|
|
42
|
+
initBoundsRectangleRuntimeTrait(runtime, { isLocalBoundsRectangleValid });
|
|
43
|
+
|
|
44
|
+
expect(runtime.isLocalBoundsRectangleValid).toBe(isLocalBoundsRectangleValid);
|
|
37
45
|
});
|
|
38
46
|
});
|
|
39
47
|
|