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 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
- let elements = [];
1309
- let elementMap = /* @__PURE__ */ new Map();
1310
- return new Observable((subscriber) => {
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
- const subscription = isArraySignal(itemsSubject) ? itemsSubject.observable.subscribe((change) => {
1313
- if (change.type === "init" || change.type === "reset") {
1314
- elements.forEach((el) => el.destroy());
1315
- elements = [];
1316
- elementMap.clear();
1317
- const items = itemsSubject();
1318
- if (items) {
1319
- items.forEach((item, index) => {
1320
- const element = createElementFn(item, index);
1321
- if (element) {
1322
- elements.push(element);
1323
- elementMap.set(index, element);
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
- } else if (change.type === "add" && change.index !== void 0) {
1328
- const newElements = change.items.map((item, i) => {
1329
- const element = createElementFn(item, change.index + i);
1330
- if (element) {
1331
- elementMap.set(change.index + i, element);
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
- return element;
1334
- }).filter((el) => el !== null);
1335
- elements.splice(change.index, 0, ...newElements);
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
- elements.push(element);
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
- } else if (change.type === "add" && change.key && change.value !== void 0) {
1363
- const element = createElementFn(change.value, key);
1364
- if (element) {
1365
- elements.push(element);
1366
- elementMap.set(key, element);
1367
- }
1368
- } else if (change.type === "remove" && change.key) {
1369
- const index = elements.findIndex((el) => elementMap.get(key) === el);
1370
- if (index !== -1) {
1371
- const [removed] = elements.splice(index, 1);
1372
- removed.destroy();
1373
- elementMap.delete(key);
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
- } else if (change.type === "update" && change.key && change.value !== void 0) {
1376
- const index = elements.findIndex((el) => elementMap.get(key) === el);
1377
- if (index !== -1) {
1378
- const oldElement = elements[index];
1379
- oldElement.destroy();
1380
- const newElement = createElementFn(change.value, key);
1381
- if (newElement) {
1382
- elements[index] = newElement;
1383
- elementMap.set(key, newElement);
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
- subscriber.next({
1388
- elements
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) {