canvasengine 2.0.0-beta.10 → 2.0.0-beta.12
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/index.js +119 -73
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/Viewport.ts +1 -1
- package/src/directives/ViewportFollow.ts +1 -1
- package/src/engine/reactive.ts +125 -78
package/dist/index.js
CHANGED
|
@@ -967,7 +967,7 @@ var ViewportFollow = class extends Directive {
|
|
|
967
967
|
if (!viewport) {
|
|
968
968
|
throw error("ViewportFollow directive requires a Viewport component to be mounted in the same context");
|
|
969
969
|
}
|
|
970
|
-
viewport.follow(element.componentInstance);
|
|
970
|
+
if (viewportFollow) viewport.follow(element.componentInstance);
|
|
971
971
|
}
|
|
972
972
|
onUpdate(props) {
|
|
973
973
|
}
|
|
@@ -1112,6 +1112,7 @@ import { isSignal as isSignal2 } from "@signe/reactive";
|
|
|
1112
1112
|
import {
|
|
1113
1113
|
Observable,
|
|
1114
1114
|
Subject,
|
|
1115
|
+
defer,
|
|
1115
1116
|
from,
|
|
1116
1117
|
map,
|
|
1117
1118
|
of
|
|
@@ -1305,90 +1306,135 @@ function createComponent(tag, props) {
|
|
|
1305
1306
|
return element;
|
|
1306
1307
|
}
|
|
1307
1308
|
function loop(itemsSubject, createElementFn) {
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1309
|
+
return defer(() => {
|
|
1310
|
+
let elements = [];
|
|
1311
|
+
let elementMap = /* @__PURE__ */ new Map();
|
|
1312
|
+
let isFirstSubscription = true;
|
|
1311
1313
|
const isArraySignal = (signal7) => Array.isArray(signal7());
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
items
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1314
|
+
return new Observable((subscriber) => {
|
|
1315
|
+
const subscription = isArraySignal(itemsSubject) ? itemsSubject.observable.subscribe((change) => {
|
|
1316
|
+
if (isFirstSubscription) {
|
|
1317
|
+
isFirstSubscription = false;
|
|
1318
|
+
elements.forEach((el) => el.destroy());
|
|
1319
|
+
elements = [];
|
|
1320
|
+
elementMap.clear();
|
|
1321
|
+
const items = itemsSubject();
|
|
1322
|
+
if (items) {
|
|
1323
|
+
items.forEach((item, index) => {
|
|
1324
|
+
const element = createElementFn(item, index);
|
|
1325
|
+
if (element) {
|
|
1326
|
+
elements.push(element);
|
|
1327
|
+
elementMap.set(index, element);
|
|
1328
|
+
}
|
|
1329
|
+
});
|
|
1330
|
+
}
|
|
1331
|
+
subscriber.next({
|
|
1332
|
+
elements: [...elements]
|
|
1325
1333
|
});
|
|
1334
|
+
return;
|
|
1326
1335
|
}
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1336
|
+
if (change.type === "init" || change.type === "reset") {
|
|
1337
|
+
elements.forEach((el) => el.destroy());
|
|
1338
|
+
elements = [];
|
|
1339
|
+
elementMap.clear();
|
|
1340
|
+
const items = itemsSubject();
|
|
1341
|
+
if (items) {
|
|
1342
|
+
items.forEach((item, index) => {
|
|
1343
|
+
const element = createElementFn(item, index);
|
|
1344
|
+
if (element) {
|
|
1345
|
+
elements.push(element);
|
|
1346
|
+
elementMap.set(index, element);
|
|
1347
|
+
}
|
|
1348
|
+
});
|
|
1332
1349
|
}
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
} else if (change.type === "remove" && change.index !== void 0) {
|
|
1337
|
-
const removed = elements.splice(change.index, 1);
|
|
1338
|
-
removed.forEach((el) => {
|
|
1339
|
-
el.destroy();
|
|
1340
|
-
elementMap.delete(change.index);
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
|
-
subscriber.next({
|
|
1344
|
-
elements
|
|
1345
|
-
});
|
|
1346
|
-
}) : itemsSubject.observable.subscribe((change) => {
|
|
1347
|
-
const key = change.key;
|
|
1348
|
-
if (change.type === "init" || change.type === "reset") {
|
|
1349
|
-
elements.forEach((el) => el.destroy());
|
|
1350
|
-
elements = [];
|
|
1351
|
-
elementMap.clear();
|
|
1352
|
-
const items = itemsSubject();
|
|
1353
|
-
if (items) {
|
|
1354
|
-
Object.entries(items).forEach(([key2, value]) => {
|
|
1355
|
-
const element = createElementFn(value, key2);
|
|
1350
|
+
} else if (change.type === "add" && change.index !== void 0) {
|
|
1351
|
+
const newElements = change.items.map((item, i) => {
|
|
1352
|
+
const element = createElementFn(item, change.index + i);
|
|
1356
1353
|
if (element) {
|
|
1357
|
-
|
|
1358
|
-
elementMap.set(key2, element);
|
|
1354
|
+
elementMap.set(change.index + i, element);
|
|
1359
1355
|
}
|
|
1356
|
+
return element;
|
|
1357
|
+
}).filter((el) => el !== null);
|
|
1358
|
+
elements.splice(change.index, 0, ...newElements);
|
|
1359
|
+
} else if (change.type === "remove" && change.index !== void 0) {
|
|
1360
|
+
const removed = elements.splice(change.index, 1);
|
|
1361
|
+
removed.forEach((el) => {
|
|
1362
|
+
el.destroy();
|
|
1363
|
+
elementMap.delete(change.index);
|
|
1360
1364
|
});
|
|
1361
1365
|
}
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1366
|
+
subscriber.next({
|
|
1367
|
+
elements: [...elements]
|
|
1368
|
+
// Create a new array to ensure change detection
|
|
1369
|
+
});
|
|
1370
|
+
}) : itemsSubject.observable.subscribe((change) => {
|
|
1371
|
+
const key = change.key;
|
|
1372
|
+
if (isFirstSubscription) {
|
|
1373
|
+
isFirstSubscription = false;
|
|
1374
|
+
elements.forEach((el) => el.destroy());
|
|
1375
|
+
elements = [];
|
|
1376
|
+
elementMap.clear();
|
|
1377
|
+
const items = itemsSubject();
|
|
1378
|
+
if (items) {
|
|
1379
|
+
Object.entries(items).forEach(([key2, value]) => {
|
|
1380
|
+
const element = createElementFn(value, key2);
|
|
1381
|
+
if (element) {
|
|
1382
|
+
elements.push(element);
|
|
1383
|
+
elementMap.set(key2, element);
|
|
1384
|
+
}
|
|
1385
|
+
});
|
|
1386
|
+
}
|
|
1387
|
+
subscriber.next({
|
|
1388
|
+
elements: [...elements]
|
|
1389
|
+
});
|
|
1390
|
+
return;
|
|
1374
1391
|
}
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1392
|
+
if (change.type === "init" || change.type === "reset") {
|
|
1393
|
+
elements.forEach((el) => el.destroy());
|
|
1394
|
+
elements = [];
|
|
1395
|
+
elementMap.clear();
|
|
1396
|
+
const items = itemsSubject();
|
|
1397
|
+
if (items) {
|
|
1398
|
+
Object.entries(items).forEach(([key2, value]) => {
|
|
1399
|
+
const element = createElementFn(value, key2);
|
|
1400
|
+
if (element) {
|
|
1401
|
+
elements.push(element);
|
|
1402
|
+
elementMap.set(key2, element);
|
|
1403
|
+
}
|
|
1404
|
+
});
|
|
1405
|
+
}
|
|
1406
|
+
} else if (change.type === "add" && change.key && change.value !== void 0) {
|
|
1407
|
+
const element = createElementFn(change.value, key);
|
|
1408
|
+
if (element) {
|
|
1409
|
+
elements.push(element);
|
|
1410
|
+
elementMap.set(key, element);
|
|
1411
|
+
}
|
|
1412
|
+
} else if (change.type === "remove" && change.key) {
|
|
1413
|
+
const index = elements.findIndex((el) => elementMap.get(key) === el);
|
|
1414
|
+
if (index !== -1) {
|
|
1415
|
+
const [removed] = elements.splice(index, 1);
|
|
1416
|
+
removed.destroy();
|
|
1417
|
+
elementMap.delete(key);
|
|
1418
|
+
}
|
|
1419
|
+
} else if (change.type === "update" && change.key && change.value !== void 0) {
|
|
1420
|
+
const index = elements.findIndex((el) => elementMap.get(key) === el);
|
|
1421
|
+
if (index !== -1) {
|
|
1422
|
+
const oldElement = elements[index];
|
|
1423
|
+
oldElement.destroy();
|
|
1424
|
+
const newElement = createElementFn(change.value, key);
|
|
1425
|
+
if (newElement) {
|
|
1426
|
+
elements[index] = newElement;
|
|
1427
|
+
elementMap.set(key, newElement);
|
|
1428
|
+
}
|
|
1384
1429
|
}
|
|
1385
1430
|
}
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1431
|
+
subscriber.next({
|
|
1432
|
+
elements: [...elements]
|
|
1433
|
+
// Create a new array to ensure change detection
|
|
1434
|
+
});
|
|
1389
1435
|
});
|
|
1436
|
+
return subscription;
|
|
1390
1437
|
});
|
|
1391
|
-
return subscription;
|
|
1392
1438
|
});
|
|
1393
1439
|
}
|
|
1394
1440
|
function cond(condition, createElementFn) {
|
|
@@ -2978,7 +3024,7 @@ var CanvasViewport = class extends DisplayObject(PixiViewport) {
|
|
|
2978
3024
|
this.worldHeight = props.worldHeight;
|
|
2979
3025
|
}
|
|
2980
3026
|
if (props.clamp) {
|
|
2981
|
-
this.clamp(props.clamp);
|
|
3027
|
+
this.clamp(props.clamp.value ?? props.clamp);
|
|
2982
3028
|
}
|
|
2983
3029
|
if (props.wheel) {
|
|
2984
3030
|
if (props.wheel === true) {
|