@dfosco/storyboard-react 4.2.0-beta.27 → 4.2.0-beta.28

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/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dfosco/storyboard-react",
3
- "version": "4.2.0-beta.27",
3
+ "version": "4.2.0-beta.28",
4
4
  "type": "module",
5
5
  "dependencies": {
6
6
  "@base-ui/react": "^1.4.0",
7
- "@dfosco/storyboard-core": "4.2.0-beta.27",
8
- "@dfosco/tiny-canvas": "4.2.0-beta.27",
7
+ "@dfosco/storyboard-core": "4.2.0-beta.28",
8
+ "@dfosco/tiny-canvas": "4.2.0-beta.28",
9
9
  "@neodrag/react": "^2.3.1",
10
10
  "@radix-ui/react-dialog": "^1.1.15",
11
11
  "@radix-ui/react-visually-hidden": "^1.2.4",
@@ -533,6 +533,15 @@ function deepMergeBuild(target, source) {
533
533
  const tv = target[key]
534
534
  if (sv && typeof sv === 'object' && !Array.isArray(sv) && tv && typeof tv === 'object' && !Array.isArray(tv)) {
535
535
  result[key] = deepMergeBuild(tv, sv)
536
+ } else if (Array.isArray(sv) && Array.isArray(tv) && sv.length > 0 && tv.length > 0 && sv[0]?.id && tv[0]?.id) {
537
+ // Id-based array merge: override matching entries by id, keep the rest, append new ones
538
+ const targetMap = new Map(tv.map(item => [item.id, item]))
539
+ for (const item of sv) {
540
+ targetMap.set(item.id, item.id && targetMap.has(item.id)
541
+ ? deepMergeBuild(targetMap.get(item.id), item)
542
+ : item)
543
+ }
544
+ result[key] = [...targetMap.values()]
536
545
  } else {
537
546
  result[key] = sv
538
547
  }