shiveshnavin commited on
Commit
721c5b3
·
1 Parent(s): fbc78ad

Add Graph

Browse files
common-utils CHANGED
@@ -1 +1 @@
1
- Subproject commit b2d2695d5cabff0d20053b98b82adb16c4c0e9c6
 
1
+ Subproject commit f1739ad2ffd9922ce3a0115ecfe03c7e46022638
package-lock.json CHANGED
@@ -30,6 +30,7 @@
30
  "firebase-admin": "^11.9.0",
31
  "firebase-functions": "^4.4.1",
32
  "fs-extra": "^11.1.1",
 
33
  "i": "^0.3.7",
34
  "lodash": "^4.17.21",
35
  "lottie-web": "^5.12.2",
@@ -39,6 +40,7 @@
39
  "puppeteer": "^21.3.6",
40
  "react": "^18.0.0",
41
  "react-dom": "^18.0.0",
 
42
  "remotion": "4.0.19",
43
  "remotion-animated": "^2.0.0",
44
  "remotion-transition-series": "^0.0.10",
@@ -4512,6 +4514,102 @@
4512
  "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
4513
  "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
4514
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4515
  "node_modules/@remotion/bundler": {
4516
  "version": "4.0.19",
4517
  "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.19.tgz",
@@ -4877,6 +4975,228 @@
4877
  "@types/node": "*"
4878
  }
4879
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4880
  "node_modules/@types/eslint": {
4881
  "version": "8.44.1",
4882
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz",
@@ -4929,6 +5249,11 @@
4929
  "@types/node": "*"
4930
  }
4931
  },
 
 
 
 
 
4932
  "node_modules/@types/glob": {
4933
  "version": "8.1.0",
4934
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
@@ -6545,6 +6870,11 @@
6545
  "resolved": "https://registry.npmjs.org/clarg/-/clarg-0.0.4.tgz",
6546
  "integrity": "sha512-SZ3fE0m3MpngjwCyuHNIPgNZ+2EOCEzHtDRP/Y+zlRdP1mQntNKeTjRdtYouxaqV9Lx/BVbrZXIXgOnRwyosDg=="
6547
  },
 
 
 
 
 
6548
  "node_modules/clean-stack": {
6549
  "version": "2.2.0",
6550
  "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -7041,6 +7371,102 @@
7041
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
7042
  "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
7043
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7044
  "node_modules/dashdash": {
7045
  "version": "1.14.1",
7046
  "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -9241,6 +9667,29 @@
9241
  "url": "https://github.com/sponsors/sindresorhus"
9242
  }
9243
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9244
  "node_modules/google-auth-library": {
9245
  "version": "8.9.0",
9246
  "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz",
@@ -17246,6 +17695,23 @@
17246
  "node": ">=0.10.0"
17247
  }
17248
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17249
  "node_modules/read-cache": {
17250
  "version": "1.0.0",
17251
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -19194,6 +19660,14 @@
19194
  "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
19195
  "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
19196
  },
 
 
 
 
 
 
 
 
19197
  "node_modules/utf8-byte-length": {
19198
  "version": "1.0.4",
19199
  "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
@@ -19639,6 +20113,33 @@
19639
  "funding": {
19640
  "url": "https://github.com/sponsors/colinhacks"
19641
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19642
  }
19643
  },
19644
  "dependencies": {
@@ -22493,6 +22994,78 @@
22493
  "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
22494
  "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
22495
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22496
  "@remotion/bundler": {
22497
  "version": "4.0.19",
22498
  "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.19.tgz",
@@ -22756,6 +23329,228 @@
22756
  "@types/node": "*"
22757
  }
22758
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22759
  "@types/eslint": {
22760
  "version": "8.44.1",
22761
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz",
@@ -22808,6 +23603,11 @@
22808
  "@types/node": "*"
22809
  }
22810
  },
 
 
 
 
 
22811
  "@types/glob": {
22812
  "version": "8.1.0",
22813
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
@@ -24009,6 +24809,11 @@
24009
  "resolved": "https://registry.npmjs.org/clarg/-/clarg-0.0.4.tgz",
24010
  "integrity": "sha512-SZ3fE0m3MpngjwCyuHNIPgNZ+2EOCEzHtDRP/Y+zlRdP1mQntNKeTjRdtYouxaqV9Lx/BVbrZXIXgOnRwyosDg=="
24011
  },
 
 
 
 
 
24012
  "clean-stack": {
24013
  "version": "2.2.0",
24014
  "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -24376,6 +25181,72 @@
24376
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
24377
  "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
24378
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24379
  "dashdash": {
24380
  "version": "1.14.1",
24381
  "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -26047,6 +26918,27 @@
26047
  "slash": "^3.0.0"
26048
  }
26049
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26050
  "google-auth-library": {
26051
  "version": "8.9.0",
26052
  "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz",
@@ -31612,6 +32504,19 @@
31612
  "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz",
31613
  "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ=="
31614
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
31615
  "read-cache": {
31616
  "version": "1.0.0",
31617
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -33063,6 +33968,12 @@
33063
  "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
33064
  "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
33065
  },
 
 
 
 
 
 
33066
  "utf8-byte-length": {
33067
  "version": "1.0.4",
33068
  "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
@@ -33389,6 +34300,14 @@
33389
  "version": "3.21.4",
33390
  "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
33391
  "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw=="
 
 
 
 
 
 
 
 
33392
  }
33393
  }
33394
  }
 
30
  "firebase-admin": "^11.9.0",
31
  "firebase-functions": "^4.4.1",
32
  "fs-extra": "^11.1.1",
33
+ "gojs-react": "^1.1.2",
34
  "i": "^0.3.7",
35
  "lodash": "^4.17.21",
36
  "lottie-web": "^5.12.2",
 
40
  "puppeteer": "^21.3.6",
41
  "react": "^18.0.0",
42
  "react-dom": "^18.0.0",
43
+ "reactflow": "^11.9.4",
44
  "remotion": "4.0.19",
45
  "remotion-animated": "^2.0.0",
46
  "remotion-transition-series": "^0.0.10",
 
4514
  "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
4515
  "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
4516
  },
4517
+ "node_modules/@reactflow/background": {
4518
+ "version": "11.3.4",
4519
+ "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.4.tgz",
4520
+ "integrity": "sha512-bgwvqWxF09chwmdkyClpYEMaewBspdwjgLbbFlLf4SpWPFMYyuvCBQrcISsvy/EDEWO9i3Uj9ktgGAhvtSQsmA==",
4521
+ "dependencies": {
4522
+ "@reactflow/core": "11.9.4",
4523
+ "classcat": "^5.0.3",
4524
+ "zustand": "^4.4.1"
4525
+ },
4526
+ "peerDependencies": {
4527
+ "react": ">=17",
4528
+ "react-dom": ">=17"
4529
+ }
4530
+ },
4531
+ "node_modules/@reactflow/controls": {
4532
+ "version": "11.2.4",
4533
+ "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.4.tgz",
4534
+ "integrity": "sha512-x6e5p9iHjC6gd+4SoZ3DOOp0F1MefGKQ8hT6yPVdqxfo1+rV2WhrWvrX/MCoEu12Dp7457LdLfa0giy3aho8tQ==",
4535
+ "dependencies": {
4536
+ "@reactflow/core": "11.9.4",
4537
+ "classcat": "^5.0.3",
4538
+ "zustand": "^4.4.1"
4539
+ },
4540
+ "peerDependencies": {
4541
+ "react": ">=17",
4542
+ "react-dom": ">=17"
4543
+ }
4544
+ },
4545
+ "node_modules/@reactflow/core": {
4546
+ "version": "11.9.4",
4547
+ "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.9.4.tgz",
4548
+ "integrity": "sha512-Ko7nKPOYalwDTTbRHi2+QXDiidSAcpUzGN3G+0B+QysLZkcaPCkpkMjjHiDC4c/Z1BJBzs1FRJg/T6BXaBnYkg==",
4549
+ "dependencies": {
4550
+ "@types/d3": "^7.4.0",
4551
+ "@types/d3-drag": "^3.0.1",
4552
+ "@types/d3-selection": "^3.0.3",
4553
+ "@types/d3-zoom": "^3.0.1",
4554
+ "classcat": "^5.0.3",
4555
+ "d3-drag": "^3.0.0",
4556
+ "d3-selection": "^3.0.0",
4557
+ "d3-zoom": "^3.0.0",
4558
+ "zustand": "^4.4.1"
4559
+ },
4560
+ "peerDependencies": {
4561
+ "react": ">=17",
4562
+ "react-dom": ">=17"
4563
+ }
4564
+ },
4565
+ "node_modules/@reactflow/minimap": {
4566
+ "version": "11.7.4",
4567
+ "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.4.tgz",
4568
+ "integrity": "sha512-Jo1R+uDey9IV7O2s3m0gK2+cZpg9M8hq2EZJb3NGfOSzMAPhj3mby0fNJIgTzycreuht0TpA51c2YfjGI3YIOw==",
4569
+ "dependencies": {
4570
+ "@reactflow/core": "11.9.4",
4571
+ "@types/d3-selection": "^3.0.3",
4572
+ "@types/d3-zoom": "^3.0.1",
4573
+ "classcat": "^5.0.3",
4574
+ "d3-selection": "^3.0.0",
4575
+ "d3-zoom": "^3.0.0",
4576
+ "zustand": "^4.4.1"
4577
+ },
4578
+ "peerDependencies": {
4579
+ "react": ">=17",
4580
+ "react-dom": ">=17"
4581
+ }
4582
+ },
4583
+ "node_modules/@reactflow/node-resizer": {
4584
+ "version": "2.2.4",
4585
+ "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.4.tgz",
4586
+ "integrity": "sha512-+p271/hAsM5M1+RQTWW/02pbNkCHeGXwxGimIlL1tMIagyuko0NX2vOz2B8jxJnPKlF09Wj18BcXBNUm3nDcSg==",
4587
+ "dependencies": {
4588
+ "@reactflow/core": "11.9.4",
4589
+ "classcat": "^5.0.4",
4590
+ "d3-drag": "^3.0.0",
4591
+ "d3-selection": "^3.0.0",
4592
+ "zustand": "^4.4.1"
4593
+ },
4594
+ "peerDependencies": {
4595
+ "react": ">=17",
4596
+ "react-dom": ">=17"
4597
+ }
4598
+ },
4599
+ "node_modules/@reactflow/node-toolbar": {
4600
+ "version": "1.3.4",
4601
+ "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.4.tgz",
4602
+ "integrity": "sha512-TfcmpXHRBb2mUfzKGjburiU6FWqRME9pPFs1OwIC1z5e9BjupQhNDEKEk8XHi7PKL/mAiDfwuGXaM1BVVFuPqw==",
4603
+ "dependencies": {
4604
+ "@reactflow/core": "11.9.4",
4605
+ "classcat": "^5.0.3",
4606
+ "zustand": "^4.4.1"
4607
+ },
4608
+ "peerDependencies": {
4609
+ "react": ">=17",
4610
+ "react-dom": ">=17"
4611
+ }
4612
+ },
4613
  "node_modules/@remotion/bundler": {
4614
  "version": "4.0.19",
4615
  "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.19.tgz",
 
4975
  "@types/node": "*"
4976
  }
4977
  },
4978
+ "node_modules/@types/d3": {
4979
+ "version": "7.4.2",
4980
+ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.2.tgz",
4981
+ "integrity": "sha512-Y4g2Yb30ZJmmtqAJTqMRaqXwRawfvpdpVmyEYEcyGNhrQI/Zvkq3k7yE1tdN07aFSmNBfvmegMQ9Fe2qy9ZMhw==",
4982
+ "dependencies": {
4983
+ "@types/d3-array": "*",
4984
+ "@types/d3-axis": "*",
4985
+ "@types/d3-brush": "*",
4986
+ "@types/d3-chord": "*",
4987
+ "@types/d3-color": "*",
4988
+ "@types/d3-contour": "*",
4989
+ "@types/d3-delaunay": "*",
4990
+ "@types/d3-dispatch": "*",
4991
+ "@types/d3-drag": "*",
4992
+ "@types/d3-dsv": "*",
4993
+ "@types/d3-ease": "*",
4994
+ "@types/d3-fetch": "*",
4995
+ "@types/d3-force": "*",
4996
+ "@types/d3-format": "*",
4997
+ "@types/d3-geo": "*",
4998
+ "@types/d3-hierarchy": "*",
4999
+ "@types/d3-interpolate": "*",
5000
+ "@types/d3-path": "*",
5001
+ "@types/d3-polygon": "*",
5002
+ "@types/d3-quadtree": "*",
5003
+ "@types/d3-random": "*",
5004
+ "@types/d3-scale": "*",
5005
+ "@types/d3-scale-chromatic": "*",
5006
+ "@types/d3-selection": "*",
5007
+ "@types/d3-shape": "*",
5008
+ "@types/d3-time": "*",
5009
+ "@types/d3-time-format": "*",
5010
+ "@types/d3-timer": "*",
5011
+ "@types/d3-transition": "*",
5012
+ "@types/d3-zoom": "*"
5013
+ }
5014
+ },
5015
+ "node_modules/@types/d3-array": {
5016
+ "version": "3.0.9",
5017
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.9.tgz",
5018
+ "integrity": "sha512-mZowFN3p64ajCJJ4riVYlOjNlBJv3hctgAY01pjw3qTnJePD8s9DZmYDzhHKvzfCYvdjwylkU38+Vdt7Cu2FDA=="
5019
+ },
5020
+ "node_modules/@types/d3-axis": {
5021
+ "version": "3.0.5",
5022
+ "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.5.tgz",
5023
+ "integrity": "sha512-ufDAV3SQzju+uB3Jlty7SUb/jMigjpIlvDDcSGvGmmO6OT/sNO93UE0dRzwWOZeBLzrLSA0CQM4bf3iq1std3A==",
5024
+ "dependencies": {
5025
+ "@types/d3-selection": "*"
5026
+ }
5027
+ },
5028
+ "node_modules/@types/d3-brush": {
5029
+ "version": "3.0.5",
5030
+ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.5.tgz",
5031
+ "integrity": "sha512-JROQXZNq1X6QdWstESDUv1VilwZ2hBCQnWB91yal+5yZvYwGQvYsGCjrkHGfKK/8/AcX1JnERmpQzdDDuLRUsA==",
5032
+ "dependencies": {
5033
+ "@types/d3-selection": "*"
5034
+ }
5035
+ },
5036
+ "node_modules/@types/d3-chord": {
5037
+ "version": "3.0.5",
5038
+ "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.5.tgz",
5039
+ "integrity": "sha512-rs26AIhJjtc+XLR4YQU8IjPTLOlDVO4PR1y+pVFYEHzKh2tE5tYz3MF4QV6iz7HboXQEaYpJQt8dH9uUkne8yA=="
5040
+ },
5041
+ "node_modules/@types/d3-color": {
5042
+ "version": "3.1.2",
5043
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.2.tgz",
5044
+ "integrity": "sha512-At+Ski7dL8Bs58E8g8vPcFJc8tGcaC12Z4m07+p41+DRqnZQcAlp3NfYjLrhNYv+zEyQitU1CUxXNjqUyf+c0g=="
5045
+ },
5046
+ "node_modules/@types/d3-contour": {
5047
+ "version": "3.0.5",
5048
+ "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.5.tgz",
5049
+ "integrity": "sha512-wLvjwdOQVd1NL1IcW90CCt1VtpeZ3V20p/OTXlkT8uAiprrJnq2PNNnRNe1QCez4U9aMU29Z14zpJQVLW1+Lcg==",
5050
+ "dependencies": {
5051
+ "@types/d3-array": "*",
5052
+ "@types/geojson": "*"
5053
+ }
5054
+ },
5055
+ "node_modules/@types/d3-delaunay": {
5056
+ "version": "6.0.3",
5057
+ "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.3.tgz",
5058
+ "integrity": "sha512-+Lf5NPKZ4JBC9tbudVkKceQXRxU3jJs0el9aKQvinMtdnFSOG84eVXyhCNgIFuXNQO3iIcYs7sgzN359FEOZnQ=="
5059
+ },
5060
+ "node_modules/@types/d3-dispatch": {
5061
+ "version": "3.0.5",
5062
+ "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.5.tgz",
5063
+ "integrity": "sha512-hxvq2kc+9hydVppo21JCGfcM0tLTh1DXnG3MLN0KlxsNZJH4bsdl1iXDuWtXFpWWlBrCMwSqlnoLPDxNAZU3Bg=="
5064
+ },
5065
+ "node_modules/@types/d3-drag": {
5066
+ "version": "3.0.5",
5067
+ "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.5.tgz",
5068
+ "integrity": "sha512-arHyAGvO0NEGGPCU2jTb31TlXeSxwty1bIxr5wOFOCVqVjgriXloLWXoRp39Oa0Y/qXxcAVMIonAWLrtLxUZAQ==",
5069
+ "dependencies": {
5070
+ "@types/d3-selection": "*"
5071
+ }
5072
+ },
5073
+ "node_modules/@types/d3-dsv": {
5074
+ "version": "3.0.5",
5075
+ "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.5.tgz",
5076
+ "integrity": "sha512-73WZR3QFOaSRVz9iOrebTbTnbo7xjcgS/i0Cq5zy0jMXPO3v/JbkTD3Zqii1eYE6v4EJ78g5VP407rm+p8fdlA=="
5077
+ },
5078
+ "node_modules/@types/d3-ease": {
5079
+ "version": "3.0.1",
5080
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.1.tgz",
5081
+ "integrity": "sha512-VZofjpEt8HWv3nxUAosj5o/+4JflnJ7Bbv07k17VO3T2WRuzGdZeookfaF60iVh5RdhVG49LE5w6LIshVUC6rg=="
5082
+ },
5083
+ "node_modules/@types/d3-fetch": {
5084
+ "version": "3.0.5",
5085
+ "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.5.tgz",
5086
+ "integrity": "sha512-Rc8pb6H0RRLpAV2hEXduykUgcDUOhjSLTLmCIeo6ejzgs4SaITh/EteMb3p5Env3Hqjsqw0fCksyqopHHzMkMg==",
5087
+ "dependencies": {
5088
+ "@types/d3-dsv": "*"
5089
+ }
5090
+ },
5091
+ "node_modules/@types/d3-force": {
5092
+ "version": "3.0.7",
5093
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.7.tgz",
5094
+ "integrity": "sha512-rsok4CEvPLyVWRPsFiBhanJc3up03H/EARVz4d8soPh8drv82YMuAckYy4yv8g4/81JwCng5U5/o9aj9d0T6bQ=="
5095
+ },
5096
+ "node_modules/@types/d3-format": {
5097
+ "version": "3.0.3",
5098
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.3.tgz",
5099
+ "integrity": "sha512-kxuLXSAEJykTeL/EI3tUiEfGqru7PRdqEy099YBnqFl+fF167UVSB4+wntlZv86ZdoYf0DHjsRHnTIm8kcH7qw=="
5100
+ },
5101
+ "node_modules/@types/d3-geo": {
5102
+ "version": "3.0.6",
5103
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.6.tgz",
5104
+ "integrity": "sha512-wblAES3b+C3hvp4VakwECEKtHquT/xc6K4HOna95LM1j1fd7s7WmU4V+JMQZfKhNCMkV2vWD+ZUgY2Uj6gqfuA==",
5105
+ "dependencies": {
5106
+ "@types/geojson": "*"
5107
+ }
5108
+ },
5109
+ "node_modules/@types/d3-hierarchy": {
5110
+ "version": "3.1.5",
5111
+ "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.5.tgz",
5112
+ "integrity": "sha512-DEcBUj1IL3WyPLDlh4m2nsNXnMLITXM5Vwcu4G85yJHtf2cVGPBjgky3L11WBnT+ayHKf06Tchk5mY1eGmd4WQ=="
5113
+ },
5114
+ "node_modules/@types/d3-interpolate": {
5115
+ "version": "3.0.3",
5116
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.3.tgz",
5117
+ "integrity": "sha512-6OZ2EIB4lLj+8cUY7I/Cgn9Q+hLdA4DjJHYOQDiHL0SzqS1K9DL5xIOVBSIHgF+tiuO9MU1D36qvdIvRDRPh+Q==",
5118
+ "dependencies": {
5119
+ "@types/d3-color": "*"
5120
+ }
5121
+ },
5122
+ "node_modules/@types/d3-path": {
5123
+ "version": "3.0.1",
5124
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.1.tgz",
5125
+ "integrity": "sha512-blRhp7ki7pVznM8k6lk5iUU9paDbVRVq+/xpf0RRgSJn5gr6SE7RcFtxooYGMBOc1RZiGyqRpVdu5AD0z0ooMA=="
5126
+ },
5127
+ "node_modules/@types/d3-polygon": {
5128
+ "version": "3.0.1",
5129
+ "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.1.tgz",
5130
+ "integrity": "sha512-nrcWPk7B9qs6xnpq60Cls44zm9eDmFAv65qi/N/emh/oftnG6uYz49aIS0mdFaGeJxVN8H3pHneMuZMV8EwFdw=="
5131
+ },
5132
+ "node_modules/@types/d3-quadtree": {
5133
+ "version": "3.0.4",
5134
+ "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.4.tgz",
5135
+ "integrity": "sha512-B725MopFDIOQ6njFbeOxIEf42HVO2Xv+FmcxQISdOKErvLbFqWz3Riu+OWujUYoogreqqyHBHcGGL/JzzXQYsw=="
5136
+ },
5137
+ "node_modules/@types/d3-random": {
5138
+ "version": "3.0.2",
5139
+ "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.2.tgz",
5140
+ "integrity": "sha512-8QhsqkKs6mymAZMrg3ZFXPxKA34rdgp3ZrtB8o6mhFsKAd1gOvR1gocWnca+kmXypQdwgnzKm9gZE2Uw8NjjKw=="
5141
+ },
5142
+ "node_modules/@types/d3-scale": {
5143
+ "version": "4.0.6",
5144
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.6.tgz",
5145
+ "integrity": "sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==",
5146
+ "dependencies": {
5147
+ "@types/d3-time": "*"
5148
+ }
5149
+ },
5150
+ "node_modules/@types/d3-scale-chromatic": {
5151
+ "version": "3.0.1",
5152
+ "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.1.tgz",
5153
+ "integrity": "sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w=="
5154
+ },
5155
+ "node_modules/@types/d3-selection": {
5156
+ "version": "3.0.8",
5157
+ "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.8.tgz",
5158
+ "integrity": "sha512-pxCZUfQyedq/DIlPXIR5wE1mIH37omOdx1yxRudL3KZ4AC+156jMjOv1z5RVlGq62f8WX2kyO0hTVgEx627QFg=="
5159
+ },
5160
+ "node_modules/@types/d3-shape": {
5161
+ "version": "3.1.4",
5162
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.4.tgz",
5163
+ "integrity": "sha512-M2/xsWPsjaZc5ifMKp1EBp0gqJG0eO/zlldJNOC85Y/5DGsBQ49gDkRJ2h5GY7ZVD6KUumvZWsylSbvTaJTqKg==",
5164
+ "dependencies": {
5165
+ "@types/d3-path": "*"
5166
+ }
5167
+ },
5168
+ "node_modules/@types/d3-time": {
5169
+ "version": "3.0.2",
5170
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.2.tgz",
5171
+ "integrity": "sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg=="
5172
+ },
5173
+ "node_modules/@types/d3-time-format": {
5174
+ "version": "4.0.2",
5175
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.2.tgz",
5176
+ "integrity": "sha512-wr08C1Gh77qaN8JIkrn5Rz/bdt5M9bdEqFmEOcYhUSq2t2sHvLTBfb4XAtGB3D4hm0ubj50NXWWXoXyp5tPXDg=="
5177
+ },
5178
+ "node_modules/@types/d3-timer": {
5179
+ "version": "3.0.1",
5180
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.1.tgz",
5181
+ "integrity": "sha512-GGTvzKccVEhxmRfJEB6zhY9ieT4UhGVUIQaBzFpUO9OXy2ycAlnPCSJLzmGGgqt3KVjqN3QCQB4g1rsZnHsWhg=="
5182
+ },
5183
+ "node_modules/@types/d3-transition": {
5184
+ "version": "3.0.6",
5185
+ "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.6.tgz",
5186
+ "integrity": "sha512-K0To23B5UxNwFtKORnS5JoNYvw/DnknU5MzhHIS9czJ/lTqFFDeU6w9lArOdoTl0cZFNdNrMJSFCbRCEHccH2w==",
5187
+ "dependencies": {
5188
+ "@types/d3-selection": "*"
5189
+ }
5190
+ },
5191
+ "node_modules/@types/d3-zoom": {
5192
+ "version": "3.0.6",
5193
+ "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.6.tgz",
5194
+ "integrity": "sha512-dGZQaXEu7aNcCL71LPpjB58IjoQNM9oDPfQuMUJ7N/fbkcIWGX2PnmUWO1jPJ+RLbZBpRUggJUX8twKRvo2hKQ==",
5195
+ "dependencies": {
5196
+ "@types/d3-interpolate": "*",
5197
+ "@types/d3-selection": "*"
5198
+ }
5199
+ },
5200
  "node_modules/@types/eslint": {
5201
  "version": "8.44.1",
5202
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz",
 
5249
  "@types/node": "*"
5250
  }
5251
  },
5252
+ "node_modules/@types/geojson": {
5253
+ "version": "7946.0.12",
5254
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.12.tgz",
5255
+ "integrity": "sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA=="
5256
+ },
5257
  "node_modules/@types/glob": {
5258
  "version": "8.1.0",
5259
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
 
6870
  "resolved": "https://registry.npmjs.org/clarg/-/clarg-0.0.4.tgz",
6871
  "integrity": "sha512-SZ3fE0m3MpngjwCyuHNIPgNZ+2EOCEzHtDRP/Y+zlRdP1mQntNKeTjRdtYouxaqV9Lx/BVbrZXIXgOnRwyosDg=="
6872
  },
6873
+ "node_modules/classcat": {
6874
+ "version": "5.0.4",
6875
+ "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz",
6876
+ "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g=="
6877
+ },
6878
  "node_modules/clean-stack": {
6879
  "version": "2.2.0",
6880
  "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
 
7371
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
7372
  "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
7373
  },
7374
+ "node_modules/d3-color": {
7375
+ "version": "3.1.0",
7376
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
7377
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
7378
+ "engines": {
7379
+ "node": ">=12"
7380
+ }
7381
+ },
7382
+ "node_modules/d3-dispatch": {
7383
+ "version": "3.0.1",
7384
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
7385
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
7386
+ "engines": {
7387
+ "node": ">=12"
7388
+ }
7389
+ },
7390
+ "node_modules/d3-drag": {
7391
+ "version": "3.0.0",
7392
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
7393
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
7394
+ "dependencies": {
7395
+ "d3-dispatch": "1 - 3",
7396
+ "d3-selection": "3"
7397
+ },
7398
+ "engines": {
7399
+ "node": ">=12"
7400
+ }
7401
+ },
7402
+ "node_modules/d3-ease": {
7403
+ "version": "3.0.1",
7404
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
7405
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
7406
+ "engines": {
7407
+ "node": ">=12"
7408
+ }
7409
+ },
7410
+ "node_modules/d3-interpolate": {
7411
+ "version": "3.0.1",
7412
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
7413
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
7414
+ "dependencies": {
7415
+ "d3-color": "1 - 3"
7416
+ },
7417
+ "engines": {
7418
+ "node": ">=12"
7419
+ }
7420
+ },
7421
+ "node_modules/d3-selection": {
7422
+ "version": "3.0.0",
7423
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
7424
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
7425
+ "engines": {
7426
+ "node": ">=12"
7427
+ }
7428
+ },
7429
+ "node_modules/d3-timer": {
7430
+ "version": "3.0.1",
7431
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
7432
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
7433
+ "engines": {
7434
+ "node": ">=12"
7435
+ }
7436
+ },
7437
+ "node_modules/d3-transition": {
7438
+ "version": "3.0.1",
7439
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
7440
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
7441
+ "dependencies": {
7442
+ "d3-color": "1 - 3",
7443
+ "d3-dispatch": "1 - 3",
7444
+ "d3-ease": "1 - 3",
7445
+ "d3-interpolate": "1 - 3",
7446
+ "d3-timer": "1 - 3"
7447
+ },
7448
+ "engines": {
7449
+ "node": ">=12"
7450
+ },
7451
+ "peerDependencies": {
7452
+ "d3-selection": "2 - 3"
7453
+ }
7454
+ },
7455
+ "node_modules/d3-zoom": {
7456
+ "version": "3.0.0",
7457
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
7458
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
7459
+ "dependencies": {
7460
+ "d3-dispatch": "1 - 3",
7461
+ "d3-drag": "2 - 3",
7462
+ "d3-interpolate": "1 - 3",
7463
+ "d3-selection": "2 - 3",
7464
+ "d3-transition": "2 - 3"
7465
+ },
7466
+ "engines": {
7467
+ "node": ">=12"
7468
+ }
7469
+ },
7470
  "node_modules/dashdash": {
7471
  "version": "1.14.1",
7472
  "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
 
9667
  "url": "https://github.com/sponsors/sindresorhus"
9668
  }
9669
  },
9670
+ "node_modules/gojs": {
9671
+ "version": "2.3.11",
9672
+ "resolved": "https://registry.npmjs.org/gojs/-/gojs-2.3.11.tgz",
9673
+ "integrity": "sha512-Sdl61fI50m8pnTz0BCv7Yp1qMJ0pvCus84I0ELL+qOD+HS/V7/CrTmxNW0bLAA/yXvgbuB1wVWOcXphtcXURUA==",
9674
+ "peer": true
9675
+ },
9676
+ "node_modules/gojs-react": {
9677
+ "version": "1.1.2",
9678
+ "resolved": "https://registry.npmjs.org/gojs-react/-/gojs-react-1.1.2.tgz",
9679
+ "integrity": "sha512-Er01X0eSYNAdeaR072tivLrmeKKRy062Vjk5/5F/5PhJ17aCNU+XYx/M5jYe9y2ugbSkYDf9IYB7rsOamHdcgA==",
9680
+ "dependencies": {
9681
+ "tslib": "~2.5.0"
9682
+ },
9683
+ "peerDependencies": {
9684
+ "gojs": ">=2.1.22",
9685
+ "react": ">=16.0.0"
9686
+ }
9687
+ },
9688
+ "node_modules/gojs-react/node_modules/tslib": {
9689
+ "version": "2.5.3",
9690
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
9691
+ "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w=="
9692
+ },
9693
  "node_modules/google-auth-library": {
9694
  "version": "8.9.0",
9695
  "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz",
 
17695
  "node": ">=0.10.0"
17696
  }
17697
  },
17698
+ "node_modules/reactflow": {
17699
+ "version": "11.9.4",
17700
+ "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.9.4.tgz",
17701
+ "integrity": "sha512-IHAKBkJngNvU9y1vZ5Nw9rvA3Z+zc9geTgQQIi9qq9Y9knGLlDDr9KfsjbFMew9AycAAgVg8TvBEakF4IT5lqg==",
17702
+ "dependencies": {
17703
+ "@reactflow/background": "11.3.4",
17704
+ "@reactflow/controls": "11.2.4",
17705
+ "@reactflow/core": "11.9.4",
17706
+ "@reactflow/minimap": "11.7.4",
17707
+ "@reactflow/node-resizer": "2.2.4",
17708
+ "@reactflow/node-toolbar": "1.3.4"
17709
+ },
17710
+ "peerDependencies": {
17711
+ "react": ">=17",
17712
+ "react-dom": ">=17"
17713
+ }
17714
+ },
17715
  "node_modules/read-cache": {
17716
  "version": "1.0.0",
17717
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
19660
  "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
19661
  "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
19662
  },
19663
+ "node_modules/use-sync-external-store": {
19664
+ "version": "1.2.0",
19665
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
19666
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
19667
+ "peerDependencies": {
19668
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
19669
+ }
19670
+ },
19671
  "node_modules/utf8-byte-length": {
19672
  "version": "1.0.4",
19673
  "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
 
20113
  "funding": {
20114
  "url": "https://github.com/sponsors/colinhacks"
20115
  }
20116
+ },
20117
+ "node_modules/zustand": {
20118
+ "version": "4.4.4",
20119
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.4.tgz",
20120
+ "integrity": "sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==",
20121
+ "dependencies": {
20122
+ "use-sync-external-store": "1.2.0"
20123
+ },
20124
+ "engines": {
20125
+ "node": ">=12.7.0"
20126
+ },
20127
+ "peerDependencies": {
20128
+ "@types/react": ">=16.8",
20129
+ "immer": ">=9.0",
20130
+ "react": ">=16.8"
20131
+ },
20132
+ "peerDependenciesMeta": {
20133
+ "@types/react": {
20134
+ "optional": true
20135
+ },
20136
+ "immer": {
20137
+ "optional": true
20138
+ },
20139
+ "react": {
20140
+ "optional": true
20141
+ }
20142
+ }
20143
  }
20144
  },
20145
  "dependencies": {
 
22994
  "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
22995
  "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
22996
  },
22997
+ "@reactflow/background": {
22998
+ "version": "11.3.4",
22999
+ "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.4.tgz",
23000
+ "integrity": "sha512-bgwvqWxF09chwmdkyClpYEMaewBspdwjgLbbFlLf4SpWPFMYyuvCBQrcISsvy/EDEWO9i3Uj9ktgGAhvtSQsmA==",
23001
+ "requires": {
23002
+ "@reactflow/core": "11.9.4",
23003
+ "classcat": "^5.0.3",
23004
+ "zustand": "^4.4.1"
23005
+ }
23006
+ },
23007
+ "@reactflow/controls": {
23008
+ "version": "11.2.4",
23009
+ "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.4.tgz",
23010
+ "integrity": "sha512-x6e5p9iHjC6gd+4SoZ3DOOp0F1MefGKQ8hT6yPVdqxfo1+rV2WhrWvrX/MCoEu12Dp7457LdLfa0giy3aho8tQ==",
23011
+ "requires": {
23012
+ "@reactflow/core": "11.9.4",
23013
+ "classcat": "^5.0.3",
23014
+ "zustand": "^4.4.1"
23015
+ }
23016
+ },
23017
+ "@reactflow/core": {
23018
+ "version": "11.9.4",
23019
+ "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.9.4.tgz",
23020
+ "integrity": "sha512-Ko7nKPOYalwDTTbRHi2+QXDiidSAcpUzGN3G+0B+QysLZkcaPCkpkMjjHiDC4c/Z1BJBzs1FRJg/T6BXaBnYkg==",
23021
+ "requires": {
23022
+ "@types/d3": "^7.4.0",
23023
+ "@types/d3-drag": "^3.0.1",
23024
+ "@types/d3-selection": "^3.0.3",
23025
+ "@types/d3-zoom": "^3.0.1",
23026
+ "classcat": "^5.0.3",
23027
+ "d3-drag": "^3.0.0",
23028
+ "d3-selection": "^3.0.0",
23029
+ "d3-zoom": "^3.0.0",
23030
+ "zustand": "^4.4.1"
23031
+ }
23032
+ },
23033
+ "@reactflow/minimap": {
23034
+ "version": "11.7.4",
23035
+ "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.4.tgz",
23036
+ "integrity": "sha512-Jo1R+uDey9IV7O2s3m0gK2+cZpg9M8hq2EZJb3NGfOSzMAPhj3mby0fNJIgTzycreuht0TpA51c2YfjGI3YIOw==",
23037
+ "requires": {
23038
+ "@reactflow/core": "11.9.4",
23039
+ "@types/d3-selection": "^3.0.3",
23040
+ "@types/d3-zoom": "^3.0.1",
23041
+ "classcat": "^5.0.3",
23042
+ "d3-selection": "^3.0.0",
23043
+ "d3-zoom": "^3.0.0",
23044
+ "zustand": "^4.4.1"
23045
+ }
23046
+ },
23047
+ "@reactflow/node-resizer": {
23048
+ "version": "2.2.4",
23049
+ "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.4.tgz",
23050
+ "integrity": "sha512-+p271/hAsM5M1+RQTWW/02pbNkCHeGXwxGimIlL1tMIagyuko0NX2vOz2B8jxJnPKlF09Wj18BcXBNUm3nDcSg==",
23051
+ "requires": {
23052
+ "@reactflow/core": "11.9.4",
23053
+ "classcat": "^5.0.4",
23054
+ "d3-drag": "^3.0.0",
23055
+ "d3-selection": "^3.0.0",
23056
+ "zustand": "^4.4.1"
23057
+ }
23058
+ },
23059
+ "@reactflow/node-toolbar": {
23060
+ "version": "1.3.4",
23061
+ "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.4.tgz",
23062
+ "integrity": "sha512-TfcmpXHRBb2mUfzKGjburiU6FWqRME9pPFs1OwIC1z5e9BjupQhNDEKEk8XHi7PKL/mAiDfwuGXaM1BVVFuPqw==",
23063
+ "requires": {
23064
+ "@reactflow/core": "11.9.4",
23065
+ "classcat": "^5.0.3",
23066
+ "zustand": "^4.4.1"
23067
+ }
23068
+ },
23069
  "@remotion/bundler": {
23070
  "version": "4.0.19",
23071
  "resolved": "https://registry.npmjs.org/@remotion/bundler/-/bundler-4.0.19.tgz",
 
23329
  "@types/node": "*"
23330
  }
23331
  },
23332
+ "@types/d3": {
23333
+ "version": "7.4.2",
23334
+ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.2.tgz",
23335
+ "integrity": "sha512-Y4g2Yb30ZJmmtqAJTqMRaqXwRawfvpdpVmyEYEcyGNhrQI/Zvkq3k7yE1tdN07aFSmNBfvmegMQ9Fe2qy9ZMhw==",
23336
+ "requires": {
23337
+ "@types/d3-array": "*",
23338
+ "@types/d3-axis": "*",
23339
+ "@types/d3-brush": "*",
23340
+ "@types/d3-chord": "*",
23341
+ "@types/d3-color": "*",
23342
+ "@types/d3-contour": "*",
23343
+ "@types/d3-delaunay": "*",
23344
+ "@types/d3-dispatch": "*",
23345
+ "@types/d3-drag": "*",
23346
+ "@types/d3-dsv": "*",
23347
+ "@types/d3-ease": "*",
23348
+ "@types/d3-fetch": "*",
23349
+ "@types/d3-force": "*",
23350
+ "@types/d3-format": "*",
23351
+ "@types/d3-geo": "*",
23352
+ "@types/d3-hierarchy": "*",
23353
+ "@types/d3-interpolate": "*",
23354
+ "@types/d3-path": "*",
23355
+ "@types/d3-polygon": "*",
23356
+ "@types/d3-quadtree": "*",
23357
+ "@types/d3-random": "*",
23358
+ "@types/d3-scale": "*",
23359
+ "@types/d3-scale-chromatic": "*",
23360
+ "@types/d3-selection": "*",
23361
+ "@types/d3-shape": "*",
23362
+ "@types/d3-time": "*",
23363
+ "@types/d3-time-format": "*",
23364
+ "@types/d3-timer": "*",
23365
+ "@types/d3-transition": "*",
23366
+ "@types/d3-zoom": "*"
23367
+ }
23368
+ },
23369
+ "@types/d3-array": {
23370
+ "version": "3.0.9",
23371
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.9.tgz",
23372
+ "integrity": "sha512-mZowFN3p64ajCJJ4riVYlOjNlBJv3hctgAY01pjw3qTnJePD8s9DZmYDzhHKvzfCYvdjwylkU38+Vdt7Cu2FDA=="
23373
+ },
23374
+ "@types/d3-axis": {
23375
+ "version": "3.0.5",
23376
+ "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.5.tgz",
23377
+ "integrity": "sha512-ufDAV3SQzju+uB3Jlty7SUb/jMigjpIlvDDcSGvGmmO6OT/sNO93UE0dRzwWOZeBLzrLSA0CQM4bf3iq1std3A==",
23378
+ "requires": {
23379
+ "@types/d3-selection": "*"
23380
+ }
23381
+ },
23382
+ "@types/d3-brush": {
23383
+ "version": "3.0.5",
23384
+ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.5.tgz",
23385
+ "integrity": "sha512-JROQXZNq1X6QdWstESDUv1VilwZ2hBCQnWB91yal+5yZvYwGQvYsGCjrkHGfKK/8/AcX1JnERmpQzdDDuLRUsA==",
23386
+ "requires": {
23387
+ "@types/d3-selection": "*"
23388
+ }
23389
+ },
23390
+ "@types/d3-chord": {
23391
+ "version": "3.0.5",
23392
+ "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.5.tgz",
23393
+ "integrity": "sha512-rs26AIhJjtc+XLR4YQU8IjPTLOlDVO4PR1y+pVFYEHzKh2tE5tYz3MF4QV6iz7HboXQEaYpJQt8dH9uUkne8yA=="
23394
+ },
23395
+ "@types/d3-color": {
23396
+ "version": "3.1.2",
23397
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.2.tgz",
23398
+ "integrity": "sha512-At+Ski7dL8Bs58E8g8vPcFJc8tGcaC12Z4m07+p41+DRqnZQcAlp3NfYjLrhNYv+zEyQitU1CUxXNjqUyf+c0g=="
23399
+ },
23400
+ "@types/d3-contour": {
23401
+ "version": "3.0.5",
23402
+ "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.5.tgz",
23403
+ "integrity": "sha512-wLvjwdOQVd1NL1IcW90CCt1VtpeZ3V20p/OTXlkT8uAiprrJnq2PNNnRNe1QCez4U9aMU29Z14zpJQVLW1+Lcg==",
23404
+ "requires": {
23405
+ "@types/d3-array": "*",
23406
+ "@types/geojson": "*"
23407
+ }
23408
+ },
23409
+ "@types/d3-delaunay": {
23410
+ "version": "6.0.3",
23411
+ "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.3.tgz",
23412
+ "integrity": "sha512-+Lf5NPKZ4JBC9tbudVkKceQXRxU3jJs0el9aKQvinMtdnFSOG84eVXyhCNgIFuXNQO3iIcYs7sgzN359FEOZnQ=="
23413
+ },
23414
+ "@types/d3-dispatch": {
23415
+ "version": "3.0.5",
23416
+ "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.5.tgz",
23417
+ "integrity": "sha512-hxvq2kc+9hydVppo21JCGfcM0tLTh1DXnG3MLN0KlxsNZJH4bsdl1iXDuWtXFpWWlBrCMwSqlnoLPDxNAZU3Bg=="
23418
+ },
23419
+ "@types/d3-drag": {
23420
+ "version": "3.0.5",
23421
+ "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.5.tgz",
23422
+ "integrity": "sha512-arHyAGvO0NEGGPCU2jTb31TlXeSxwty1bIxr5wOFOCVqVjgriXloLWXoRp39Oa0Y/qXxcAVMIonAWLrtLxUZAQ==",
23423
+ "requires": {
23424
+ "@types/d3-selection": "*"
23425
+ }
23426
+ },
23427
+ "@types/d3-dsv": {
23428
+ "version": "3.0.5",
23429
+ "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.5.tgz",
23430
+ "integrity": "sha512-73WZR3QFOaSRVz9iOrebTbTnbo7xjcgS/i0Cq5zy0jMXPO3v/JbkTD3Zqii1eYE6v4EJ78g5VP407rm+p8fdlA=="
23431
+ },
23432
+ "@types/d3-ease": {
23433
+ "version": "3.0.1",
23434
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.1.tgz",
23435
+ "integrity": "sha512-VZofjpEt8HWv3nxUAosj5o/+4JflnJ7Bbv07k17VO3T2WRuzGdZeookfaF60iVh5RdhVG49LE5w6LIshVUC6rg=="
23436
+ },
23437
+ "@types/d3-fetch": {
23438
+ "version": "3.0.5",
23439
+ "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.5.tgz",
23440
+ "integrity": "sha512-Rc8pb6H0RRLpAV2hEXduykUgcDUOhjSLTLmCIeo6ejzgs4SaITh/EteMb3p5Env3Hqjsqw0fCksyqopHHzMkMg==",
23441
+ "requires": {
23442
+ "@types/d3-dsv": "*"
23443
+ }
23444
+ },
23445
+ "@types/d3-force": {
23446
+ "version": "3.0.7",
23447
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.7.tgz",
23448
+ "integrity": "sha512-rsok4CEvPLyVWRPsFiBhanJc3up03H/EARVz4d8soPh8drv82YMuAckYy4yv8g4/81JwCng5U5/o9aj9d0T6bQ=="
23449
+ },
23450
+ "@types/d3-format": {
23451
+ "version": "3.0.3",
23452
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.3.tgz",
23453
+ "integrity": "sha512-kxuLXSAEJykTeL/EI3tUiEfGqru7PRdqEy099YBnqFl+fF167UVSB4+wntlZv86ZdoYf0DHjsRHnTIm8kcH7qw=="
23454
+ },
23455
+ "@types/d3-geo": {
23456
+ "version": "3.0.6",
23457
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.6.tgz",
23458
+ "integrity": "sha512-wblAES3b+C3hvp4VakwECEKtHquT/xc6K4HOna95LM1j1fd7s7WmU4V+JMQZfKhNCMkV2vWD+ZUgY2Uj6gqfuA==",
23459
+ "requires": {
23460
+ "@types/geojson": "*"
23461
+ }
23462
+ },
23463
+ "@types/d3-hierarchy": {
23464
+ "version": "3.1.5",
23465
+ "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.5.tgz",
23466
+ "integrity": "sha512-DEcBUj1IL3WyPLDlh4m2nsNXnMLITXM5Vwcu4G85yJHtf2cVGPBjgky3L11WBnT+ayHKf06Tchk5mY1eGmd4WQ=="
23467
+ },
23468
+ "@types/d3-interpolate": {
23469
+ "version": "3.0.3",
23470
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.3.tgz",
23471
+ "integrity": "sha512-6OZ2EIB4lLj+8cUY7I/Cgn9Q+hLdA4DjJHYOQDiHL0SzqS1K9DL5xIOVBSIHgF+tiuO9MU1D36qvdIvRDRPh+Q==",
23472
+ "requires": {
23473
+ "@types/d3-color": "*"
23474
+ }
23475
+ },
23476
+ "@types/d3-path": {
23477
+ "version": "3.0.1",
23478
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.1.tgz",
23479
+ "integrity": "sha512-blRhp7ki7pVznM8k6lk5iUU9paDbVRVq+/xpf0RRgSJn5gr6SE7RcFtxooYGMBOc1RZiGyqRpVdu5AD0z0ooMA=="
23480
+ },
23481
+ "@types/d3-polygon": {
23482
+ "version": "3.0.1",
23483
+ "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.1.tgz",
23484
+ "integrity": "sha512-nrcWPk7B9qs6xnpq60Cls44zm9eDmFAv65qi/N/emh/oftnG6uYz49aIS0mdFaGeJxVN8H3pHneMuZMV8EwFdw=="
23485
+ },
23486
+ "@types/d3-quadtree": {
23487
+ "version": "3.0.4",
23488
+ "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.4.tgz",
23489
+ "integrity": "sha512-B725MopFDIOQ6njFbeOxIEf42HVO2Xv+FmcxQISdOKErvLbFqWz3Riu+OWujUYoogreqqyHBHcGGL/JzzXQYsw=="
23490
+ },
23491
+ "@types/d3-random": {
23492
+ "version": "3.0.2",
23493
+ "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.2.tgz",
23494
+ "integrity": "sha512-8QhsqkKs6mymAZMrg3ZFXPxKA34rdgp3ZrtB8o6mhFsKAd1gOvR1gocWnca+kmXypQdwgnzKm9gZE2Uw8NjjKw=="
23495
+ },
23496
+ "@types/d3-scale": {
23497
+ "version": "4.0.6",
23498
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.6.tgz",
23499
+ "integrity": "sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==",
23500
+ "requires": {
23501
+ "@types/d3-time": "*"
23502
+ }
23503
+ },
23504
+ "@types/d3-scale-chromatic": {
23505
+ "version": "3.0.1",
23506
+ "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.1.tgz",
23507
+ "integrity": "sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w=="
23508
+ },
23509
+ "@types/d3-selection": {
23510
+ "version": "3.0.8",
23511
+ "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.8.tgz",
23512
+ "integrity": "sha512-pxCZUfQyedq/DIlPXIR5wE1mIH37omOdx1yxRudL3KZ4AC+156jMjOv1z5RVlGq62f8WX2kyO0hTVgEx627QFg=="
23513
+ },
23514
+ "@types/d3-shape": {
23515
+ "version": "3.1.4",
23516
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.4.tgz",
23517
+ "integrity": "sha512-M2/xsWPsjaZc5ifMKp1EBp0gqJG0eO/zlldJNOC85Y/5DGsBQ49gDkRJ2h5GY7ZVD6KUumvZWsylSbvTaJTqKg==",
23518
+ "requires": {
23519
+ "@types/d3-path": "*"
23520
+ }
23521
+ },
23522
+ "@types/d3-time": {
23523
+ "version": "3.0.2",
23524
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.2.tgz",
23525
+ "integrity": "sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg=="
23526
+ },
23527
+ "@types/d3-time-format": {
23528
+ "version": "4.0.2",
23529
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.2.tgz",
23530
+ "integrity": "sha512-wr08C1Gh77qaN8JIkrn5Rz/bdt5M9bdEqFmEOcYhUSq2t2sHvLTBfb4XAtGB3D4hm0ubj50NXWWXoXyp5tPXDg=="
23531
+ },
23532
+ "@types/d3-timer": {
23533
+ "version": "3.0.1",
23534
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.1.tgz",
23535
+ "integrity": "sha512-GGTvzKccVEhxmRfJEB6zhY9ieT4UhGVUIQaBzFpUO9OXy2ycAlnPCSJLzmGGgqt3KVjqN3QCQB4g1rsZnHsWhg=="
23536
+ },
23537
+ "@types/d3-transition": {
23538
+ "version": "3.0.6",
23539
+ "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.6.tgz",
23540
+ "integrity": "sha512-K0To23B5UxNwFtKORnS5JoNYvw/DnknU5MzhHIS9czJ/lTqFFDeU6w9lArOdoTl0cZFNdNrMJSFCbRCEHccH2w==",
23541
+ "requires": {
23542
+ "@types/d3-selection": "*"
23543
+ }
23544
+ },
23545
+ "@types/d3-zoom": {
23546
+ "version": "3.0.6",
23547
+ "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.6.tgz",
23548
+ "integrity": "sha512-dGZQaXEu7aNcCL71LPpjB58IjoQNM9oDPfQuMUJ7N/fbkcIWGX2PnmUWO1jPJ+RLbZBpRUggJUX8twKRvo2hKQ==",
23549
+ "requires": {
23550
+ "@types/d3-interpolate": "*",
23551
+ "@types/d3-selection": "*"
23552
+ }
23553
+ },
23554
  "@types/eslint": {
23555
  "version": "8.44.1",
23556
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz",
 
23603
  "@types/node": "*"
23604
  }
23605
  },
23606
+ "@types/geojson": {
23607
+ "version": "7946.0.12",
23608
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.12.tgz",
23609
+ "integrity": "sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA=="
23610
+ },
23611
  "@types/glob": {
23612
  "version": "8.1.0",
23613
  "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
 
24809
  "resolved": "https://registry.npmjs.org/clarg/-/clarg-0.0.4.tgz",
24810
  "integrity": "sha512-SZ3fE0m3MpngjwCyuHNIPgNZ+2EOCEzHtDRP/Y+zlRdP1mQntNKeTjRdtYouxaqV9Lx/BVbrZXIXgOnRwyosDg=="
24811
  },
24812
+ "classcat": {
24813
+ "version": "5.0.4",
24814
+ "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz",
24815
+ "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g=="
24816
+ },
24817
  "clean-stack": {
24818
  "version": "2.2.0",
24819
  "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
 
25181
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
25182
  "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
25183
  },
25184
+ "d3-color": {
25185
+ "version": "3.1.0",
25186
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
25187
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
25188
+ },
25189
+ "d3-dispatch": {
25190
+ "version": "3.0.1",
25191
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
25192
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
25193
+ },
25194
+ "d3-drag": {
25195
+ "version": "3.0.0",
25196
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
25197
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
25198
+ "requires": {
25199
+ "d3-dispatch": "1 - 3",
25200
+ "d3-selection": "3"
25201
+ }
25202
+ },
25203
+ "d3-ease": {
25204
+ "version": "3.0.1",
25205
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
25206
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
25207
+ },
25208
+ "d3-interpolate": {
25209
+ "version": "3.0.1",
25210
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
25211
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
25212
+ "requires": {
25213
+ "d3-color": "1 - 3"
25214
+ }
25215
+ },
25216
+ "d3-selection": {
25217
+ "version": "3.0.0",
25218
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
25219
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
25220
+ },
25221
+ "d3-timer": {
25222
+ "version": "3.0.1",
25223
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
25224
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
25225
+ },
25226
+ "d3-transition": {
25227
+ "version": "3.0.1",
25228
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
25229
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
25230
+ "requires": {
25231
+ "d3-color": "1 - 3",
25232
+ "d3-dispatch": "1 - 3",
25233
+ "d3-ease": "1 - 3",
25234
+ "d3-interpolate": "1 - 3",
25235
+ "d3-timer": "1 - 3"
25236
+ }
25237
+ },
25238
+ "d3-zoom": {
25239
+ "version": "3.0.0",
25240
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
25241
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
25242
+ "requires": {
25243
+ "d3-dispatch": "1 - 3",
25244
+ "d3-drag": "2 - 3",
25245
+ "d3-interpolate": "1 - 3",
25246
+ "d3-selection": "2 - 3",
25247
+ "d3-transition": "2 - 3"
25248
+ }
25249
+ },
25250
  "dashdash": {
25251
  "version": "1.14.1",
25252
  "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
 
26918
  "slash": "^3.0.0"
26919
  }
26920
  },
26921
+ "gojs": {
26922
+ "version": "2.3.11",
26923
+ "resolved": "https://registry.npmjs.org/gojs/-/gojs-2.3.11.tgz",
26924
+ "integrity": "sha512-Sdl61fI50m8pnTz0BCv7Yp1qMJ0pvCus84I0ELL+qOD+HS/V7/CrTmxNW0bLAA/yXvgbuB1wVWOcXphtcXURUA==",
26925
+ "peer": true
26926
+ },
26927
+ "gojs-react": {
26928
+ "version": "1.1.2",
26929
+ "resolved": "https://registry.npmjs.org/gojs-react/-/gojs-react-1.1.2.tgz",
26930
+ "integrity": "sha512-Er01X0eSYNAdeaR072tivLrmeKKRy062Vjk5/5F/5PhJ17aCNU+XYx/M5jYe9y2ugbSkYDf9IYB7rsOamHdcgA==",
26931
+ "requires": {
26932
+ "tslib": "~2.5.0"
26933
+ },
26934
+ "dependencies": {
26935
+ "tslib": {
26936
+ "version": "2.5.3",
26937
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
26938
+ "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w=="
26939
+ }
26940
+ }
26941
+ },
26942
  "google-auth-library": {
26943
  "version": "8.9.0",
26944
  "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz",
 
32504
  "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz",
32505
  "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ=="
32506
  },
32507
+ "reactflow": {
32508
+ "version": "11.9.4",
32509
+ "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.9.4.tgz",
32510
+ "integrity": "sha512-IHAKBkJngNvU9y1vZ5Nw9rvA3Z+zc9geTgQQIi9qq9Y9knGLlDDr9KfsjbFMew9AycAAgVg8TvBEakF4IT5lqg==",
32511
+ "requires": {
32512
+ "@reactflow/background": "11.3.4",
32513
+ "@reactflow/controls": "11.2.4",
32514
+ "@reactflow/core": "11.9.4",
32515
+ "@reactflow/minimap": "11.7.4",
32516
+ "@reactflow/node-resizer": "2.2.4",
32517
+ "@reactflow/node-toolbar": "1.3.4"
32518
+ }
32519
+ },
32520
  "read-cache": {
32521
  "version": "1.0.0",
32522
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
33968
  "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
33969
  "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
33970
  },
33971
+ "use-sync-external-store": {
33972
+ "version": "1.2.0",
33973
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
33974
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
33975
+ "requires": {}
33976
+ },
33977
  "utf8-byte-length": {
33978
  "version": "1.0.4",
33979
  "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
 
34300
  "version": "3.21.4",
34301
  "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
34302
  "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw=="
34303
+ },
34304
+ "zustand": {
34305
+ "version": "4.4.4",
34306
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.4.tgz",
34307
+ "integrity": "sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==",
34308
+ "requires": {
34309
+ "use-sync-external-store": "1.2.0"
34310
+ }
34311
  }
34312
  }
34313
  }
package.json CHANGED
@@ -57,6 +57,7 @@
57
  "firebase-admin": "^11.9.0",
58
  "firebase-functions": "^4.4.1",
59
  "fs-extra": "^11.1.1",
 
60
  "i": "^0.3.7",
61
  "lodash": "^4.17.21",
62
  "lottie-web": "^5.12.2",
@@ -66,6 +67,7 @@
66
  "puppeteer": "^21.3.6",
67
  "react": "^18.0.0",
68
  "react-dom": "^18.0.0",
 
69
  "remotion": "4.0.19",
70
  "remotion-animated": "^2.0.0",
71
  "remotion-transition-series": "^0.0.10",
@@ -83,4 +85,4 @@
83
  "devDependencies": {
84
  "@types/lodash": "^4.14.199"
85
  }
86
- }
 
57
  "firebase-admin": "^11.9.0",
58
  "firebase-functions": "^4.4.1",
59
  "fs-extra": "^11.1.1",
60
+ "gojs-react": "^1.1.2",
61
  "i": "^0.3.7",
62
  "lodash": "^4.17.21",
63
  "lottie-web": "^5.12.2",
 
67
  "puppeteer": "^21.3.6",
68
  "react": "^18.0.0",
69
  "react-dom": "^18.0.0",
70
+ "reactflow": "^11.9.4",
71
  "remotion": "4.0.19",
72
  "remotion-animated": "^2.0.0",
73
  "remotion-transition-series": "^0.0.10",
 
85
  "devDependencies": {
86
  "@types/lodash": "^4.14.199"
87
  }
88
+ }
src/Compositions.tsx CHANGED
@@ -11,6 +11,7 @@ import { IGReelComposition } from './ig-reel/IGReelComposition';
11
  import { RenderUtils } from './RenderUtils';
12
  import { VideoSplash, VideoSplashSchema } from './anims/VideoSplash';
13
  import { YoutubeVideoScene } from './youtube/YoutubeVideoScene';
 
14
 
15
 
16
 
@@ -178,6 +179,21 @@ export const Compositions: React.FC = () => {
178
  })}
179
  />
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  <Composition
182
  defaultProps={{
183
  direction: 'left',
 
11
  import { RenderUtils } from './RenderUtils';
12
  import { VideoSplash, VideoSplashSchema } from './anims/VideoSplash';
13
  import { YoutubeVideoScene } from './youtube/YoutubeVideoScene';
14
+ import { LinkedinExplainerComposition } from './linkedin-video/LinkedinExplainerComposition';
15
 
16
 
17
 
 
179
  })}
180
  />
181
 
182
+ <Composition
183
+ id='LinkedinExplainerComposition'
184
+ component={LinkedinExplainerComposition}
185
+ durationInFrames={duration}
186
+ fps={fps}
187
+ width={Script.meta?.resolution?.width || 1920}
188
+ height={Script.meta?.resolution?.height || 1080}
189
+ defaultProps={Object.assign(Script, {
190
+ bgMusic: RenderUtils.getFileName(Script.bgMusic, "mp3"),
191
+ contents: contents,
192
+ intro: intro,
193
+ outro: outro
194
+ })}
195
+ />
196
+
197
  <Composition
198
  defaultProps={{
199
  direction: 'left',
src/linkedin-video/AnimGraphScene.tsx ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import ExcitedSubtitles from "../subtitles/excited_Subtitles";
2
+ import { OriginalManuscript, Transcript } from 'common-utils';
3
+ import * as go from 'gojs';
4
+ import React, { useEffect, useRef, useCallback } from 'react';
5
+ import ReactFlow, {
6
+ MiniMap,
7
+ Controls,
8
+ Background,
9
+ useNodesState,
10
+ useEdgesState,
11
+ addEdge,
12
+ } from 'reactflow';
13
+
14
+ import 'reactflow/dist/style.css';
15
+ import RemoveAttributionExample, * as Test from './Test'
16
+
17
+
18
+ export function AnimGraphScene(props: any) {
19
+
20
+ let item: Transcript = props.item
21
+
22
+ return (
23
+ <div>
24
+ <DiagramComponent />
25
+ //@ts-ignore
26
+ <ExcitedSubtitles
27
+
28
+ group={{
29
+ start: 0,
30
+ end: 200,
31
+ //@ts-ignore
32
+ words: [{
33
+ idx: 0,
34
+ word: item.imageText[0]
35
+ }]
36
+ }} />
37
+ </div>
38
+ )
39
+
40
+ }
41
+
42
+
43
+
44
+
45
+
46
+
47
+ function DiagramComponent() {
48
+ return (
49
+ <RemoveAttributionExample/>
50
+ )
51
+ }
src/linkedin-video/CustomNode.tsx ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { memo } from 'react';
2
+ import { Handle, Position } from 'reactflow';
3
+
4
+ function CustomNode({ data }) {
5
+ return (
6
+ <div className="px-4 py-2 shadow-md rounded-md bg-white border-2 border-stone-400">
7
+ <div className="flex">
8
+ <div className="rounded-full w-12 h-12 flex justify-center items-center bg-gray-100">
9
+ {data.emoji}
10
+ </div>
11
+ <div className="ml-2">
12
+ <div className="text-lg font-bold">{data.name}</div>
13
+ <div className="text-gray-500">{data.job}</div>
14
+ </div>
15
+ </div>
16
+
17
+ <Handle type="target" position={Position.Top} className="w-16 !bg-teal-500" />
18
+ <Handle type="source" position={Position.Bottom} className="w-16 !bg-teal-500" />
19
+ </div>
20
+ );
21
+ }
22
+
23
+ export default memo(CustomNode);
src/linkedin-video/LinkedinExplainerComposition.tsx ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //@ts-nocheck
2
+ import { AbsoluteFill, Audio, Easing, Img, interpolate, staticFile, useCurrentFrame } from 'remotion';
3
+ import React from 'react'
4
+ import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
+ import { Series } from "remotion";
6
+ import { IGScene } from './IGSimpleScene';
7
+ import { OriginalManuscript, Transcript } from 'common-utils';
8
+ import TransitionSeries from 'remotion-transition-series';
9
+ import { VideoSplash } from '../anims/VideoSplash';
10
+ import Transitions from '../../public/assets/transitions.json'
11
+ import { RenderUtils } from '../RenderUtils';
12
+ import { AnimGraphScene } from './AnimGraphScene';
13
+
14
+ export const LinkedinExplainerComposition: React.FC = (props: OriginalManuscript) => {
15
+ const { fontFamily } = loadFont();
16
+ let { meta, bgMusic, bgMusicDuration } = props
17
+ let transcripts: Transcript[] = props.contents
18
+ let fps = meta.fps
19
+ let frame = useCurrentFrame()
20
+
21
+ let textLen = props.transcript.length % 5
22
+ let transitions = Transitions.filter(t => t.mood?.indexOf("intro") > -1)
23
+ let startTransition = RenderUtils.randomElement(transitions, `x-${textLen}`)
24
+
25
+ let bgMusicPath = staticFile(bgMusic || '')
26
+ return (
27
+ <AbsoluteFill style={{
28
+ background: 'white'
29
+ }}>
30
+ {
31
+ bgMusic && (
32
+ <Audio loop
33
+ volume={(f) =>
34
+ interpolate(f, [0, bgMusicDuration * fps], [0.05, 0.01], { extrapolateLeft: "clamp" })
35
+ }
36
+ src={bgMusicPath} />
37
+ )
38
+ }
39
+ <TransitionSeries>
40
+ {
41
+ transcripts.map((scriptItem: Transcript, i) => {
42
+ let { durationInSeconds } = scriptItem
43
+ let durationInFrames = meta.fps * durationInSeconds
44
+
45
+ return (
46
+ <>
47
+ <TransitionSeries.Sequence durationInFrames={durationInFrames}>
48
+ <AnimGraphScene script={props} item={scriptItem} />
49
+ </TransitionSeries.Sequence>
50
+ </>
51
+ )
52
+ })
53
+ }
54
+ </TransitionSeries>
55
+
56
+ <div
57
+ style={{
58
+ width: '100%',
59
+ height: '100%'
60
+ }}
61
+ ><VideoSplash file={startTransition.file} /></div>
62
+
63
+ </AbsoluteFill >
64
+ );
65
+ };
src/linkedin-video/Shape.tsx ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ function getshape(nodeType, toggleNode, size = 20, node) {
3
+ let color = 'grey'
4
+ if (
5
+ [
6
+ 'dataElement',
7
+ 'TextDataElementNode',
8
+ 'DocumentDataElementNode',
9
+ 'GeneralDataElementNode',
10
+ ].includes(nodeType)
11
+ ) {
12
+ return <circle r={size} fill={'#007168'} x="-10" onClick={toggleNode} />
13
+ } else if (
14
+ nodeType === 'operatorNode' ||
15
+ nodeType === 'CompositeConfigurationNode' ||
16
+ nodeType === 'CompositeDataElementNode'
17
+ ) {
18
+ if (node['name'] === 'AND') {
19
+ return (
20
+ <g onClick={toggleNode}>
21
+ <circle r={size} fill={'#c16c70'} />
22
+ <line
23
+ stroke="#000"
24
+ x1={-1 * (size * 0.7)}
25
+ y1={-1 * (size * 0.7)}
26
+ x2={size * 0.7}
27
+ y2={size * 0.7}
28
+ />
29
+ <line
30
+ stroke="#000"
31
+ x1={-1 * (size * 0.7)}
32
+ y1={size * 0.7}
33
+ x2={size * 0.7}
34
+ y2={-1 * (size * 0.7)}
35
+ />
36
+ </g>
37
+ )
38
+ } else {
39
+ return (
40
+ <g onClick={toggleNode}>
41
+ <circle r={size} fill={'#ff97d1'} />
42
+ <line x1={-1 * size} y1="0" x2={size} y2="0" />
43
+ <line x1="0" y1={-1 * size} x2="0" y2={size} />
44
+ </g>
45
+ )
46
+ }
47
+ } else if (
48
+ nodeType === 'conditionNode' ||
49
+ nodeType === 'ConditionalConfigurationNode'
50
+ )
51
+ return (
52
+ <polygon
53
+ points={`-${size},0 0,-${size} ${size},0 0,${size}`}
54
+ height="20"
55
+ fill={'#009dd6'}
56
+ x="-10"
57
+ onClick={toggleNode}
58
+ />
59
+ )
60
+ else if (nodeType === 'criteria' || nodeType === 'CriteriaNode')
61
+ return (
62
+ <rect
63
+ width={size * 1.5}
64
+ height={size * 1.5}
65
+ fill={'#FFC125'}
66
+ x="-10"
67
+ onClick={toggleNode}
68
+ />
69
+ )
70
+ else if (nodeType === 'level' || nodeType === 'LevelNode')
71
+ return (
72
+ <rect
73
+ width={size * 1.5}
74
+ height={size * 1.5}
75
+ fill={'#FF8551'}
76
+ x="-10"
77
+ onClick={toggleNode}
78
+ />
79
+ )
80
+ else if (nodeType === 'process')
81
+ return (
82
+ <rect
83
+ width={size * 1.5}
84
+ height={size * 1.5}
85
+ fill={'#003087'}
86
+ x="-10"
87
+ onClick={toggleNode}
88
+ />
89
+ )
90
+ else
91
+ return (
92
+ <rect
93
+ width={size * 1.5}
94
+ height={size * 1.5}
95
+ fill={color}
96
+ x="-10"
97
+ onClick={toggleNode}
98
+ />
99
+ )
100
+ }
src/linkedin-video/Test.tsx ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useCallback } from 'react';
2
+ import ReactFlow, { useNodesState, useEdgesState, addEdge, Controls, Background } from 'reactflow';
3
+
4
+ import 'reactflow/dist/base.css';
5
+
6
+ import '../../tailwind.config.js';
7
+ import CustomNode from './CustomNode';
8
+
9
+ const nodeTypes = {
10
+ custom: CustomNode,
11
+ };
12
+
13
+ const initNodes = [
14
+ {
15
+ id: '1',
16
+ type: 'custom',
17
+ data: { name: 'Jane Doe', job: 'CEO', emoji: '😎' },
18
+ position: { x: 0, y: 50 },
19
+ },
20
+ {
21
+ id: '2',
22
+ type: 'custom',
23
+ data: { name: 'Tyler Weary', job: 'Designer', emoji: '🤓' },
24
+
25
+ position: { x: -200, y: 200 },
26
+ },
27
+ {
28
+ id: '3',
29
+ type: 'custom',
30
+ data: { name: 'Kristi Price', job: 'Developer', emoji: '🤩' },
31
+ position: { x: 200, y: 200 },
32
+ },
33
+ ];
34
+
35
+ const initEdges = [
36
+ {
37
+ id: 'e1-2',
38
+ source: '1',
39
+ target: '2',
40
+ animated:true,
41
+ style:{
42
+ stroke: "#000",
43
+ strokeWidth: "3px"
44
+ }
45
+ },
46
+ {
47
+ id: 'e1-3',
48
+ source: '1',
49
+ target: '3',
50
+ animated:true,
51
+ style:{
52
+ stroke: "#000",
53
+ strokeWidth: "3px"
54
+ }
55
+ },
56
+ ];
57
+
58
+ const Flow = () => {
59
+ const [nodes, setNodes, onNodesChange] = useNodesState(initNodes);
60
+ const [edges, setEdges, onEdgesChange] = useEdgesState(initEdges);
61
+
62
+ const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)), []);
63
+
64
+ const connectionLineStyle = { stroke: '#ffff' };
65
+ const defaultEdgeOptions = {
66
+ animated: true,
67
+ type: 'smoothstep',
68
+ };
69
+ const defaultViewport = { x: 0, y: 0, zoom: 1.5 };
70
+ const snapGrid = [25, 25];
71
+
72
+ return (
73
+ <ReactFlow
74
+ nodes={nodes}
75
+ edges={edges}
76
+ onNodesChange={onNodesChange}
77
+ onEdgesChange={onEdgesChange}
78
+ onConnect={onConnect}
79
+ nodeTypes={nodeTypes}
80
+ fitView
81
+ defaultEdgeOptions={defaultEdgeOptions}
82
+ connectionLineType="smoothstep"
83
+ snapToGrid={true}
84
+ snapGrid={snapGrid}
85
+ defaultViewport={defaultViewport}
86
+ fitView
87
+ className="bg-teal-50"
88
+ >
89
+ <Background gap={25} />
90
+ </ReactFlow>
91
+ );
92
+ };
93
+
94
+ export default Flow;
src/linkedin-video/WorkflowViz.tsx ADDED
@@ -0,0 +1,257 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useCallback, useEffect, useMemo, useState } from 'react'
2
+ import styled from '@emotion/styled'
3
+ import ReactFlow, {
4
+ Background,
5
+ MarkerType,
6
+ Position,
7
+ useNodesState,
8
+ useEdgesState,
9
+ Handle,
10
+ Controls,
11
+ MiniMap,
12
+ } from 'reactflow'
13
+ import type {
14
+ Edge,
15
+ Node,
16
+ OnConnect,
17
+ OnEdgesDelete,
18
+ OnEdgeUpdateFunc,
19
+ OnNodesDelete,
20
+ NodeDragHandler,
21
+ OnSelectionChangeFunc,
22
+ } from 'reactflow'
23
+ import { PAYPAL_THEME, Row, Col, Container } from '@paypalcorp/pp-react'
24
+ import { Box } from '@mui/material'
25
+ import { IOnboardingFormState } from '../../forms/onboarding/OnboardingForm'
26
+ import { isChoiceTask } from '../../forms/onboarding/workflow/ChoiceTaskForm'
27
+ import { isDownstreamTask } from '../../forms/onboarding/workflow/DownstreamTaskForm'
28
+ import { groupTasks, isActiveNodeTask } from './utils'
29
+ import './workflow.css'
30
+
31
+ const Root = styled(Box)`
32
+ position: relative;
33
+ overflow: scroll;
34
+ background: rgb(242, 242, 243);
35
+ height: 85vh;
36
+ width: 100%;
37
+ .react-flow__edge:hover {
38
+ opacity: 1;
39
+ }
40
+ `
41
+
42
+
43
+ const positionStep = 200
44
+ const positionBase = 100
45
+
46
+ interface IWorkflowVisualizerProps {
47
+ workflow: Pick<IOnboardingFormState['usecases'][number]['workflow'], 'nodes'>
48
+ onNodeClick?: (id: string) => void
49
+ onConnect?: OnConnect
50
+ onEdgesDelete?: OnEdgesDelete
51
+ onEdgeUpdate?: OnEdgeUpdateFunc
52
+ onNodesDelete?: OnNodesDelete
53
+ onSelectionChange?: OnSelectionChangeFunc
54
+ }
55
+
56
+ const handleStyle = { left: 10 };
57
+
58
+ function DecisionNode({ data }) {
59
+ const onChange = useCallback((evt: any) => {
60
+ console.log(evt.target.value);
61
+ }, []);
62
+
63
+ let styleCenter = {
64
+ alignitems: 'center',
65
+ justifycontent: 'center'
66
+ }
67
+ let factor = data.label.length / 4
68
+ return (
69
+ <Row >
70
+ <Handle type="target" position={Position.Left} id="a" />
71
+
72
+
73
+ <div className='diamond' style={{
74
+ margin:15,
75
+ height: `120px`,
76
+ width: `${Math.max(100, factor * 50)}px`,
77
+ lineHeight: `120px`
78
+
79
+ }}>
80
+ <svg viewBox='0 0 100 100' preserveAspectRatio='none'>
81
+ <filter id="dropshadow" height="125%" >
82
+ <feGaussianBlur in="SourceAlpha" stdDeviation="1" />
83
+ <feOffset dx="0" dy="0" result="offsetblur" />
84
+ <feMerge>
85
+ <feMergeNode />
86
+ <feMergeNode in="SourceGraphic" />
87
+ </feMerge>
88
+ </filter>
89
+ <path d='M2,50 50,2 98,50 50,98z' className='outer' />
90
+ <path d='M8,50 50,8 92,50 50,92z' className='inner' />
91
+ </svg>
92
+ {data.label}
93
+ </div>
94
+
95
+
96
+ <Handle type="source" position={Position.Right} id="b" />
97
+
98
+ </Row>
99
+ );
100
+ }
101
+
102
+
103
+
104
+ const WorkflowVisulizer: React.FC<IWorkflowVisualizerProps> = ({
105
+ workflow,
106
+ onNodeClick,
107
+ ...rest
108
+ }) => {
109
+ const [nodes, setNodes, onNodesChange] = useNodesState([])
110
+ const [edges, setEdges, onEdgesChange] = useEdgesState([])
111
+ const [nodePositions, setNodePositions] = useState<
112
+ Record<string, { x: number; y: number }>
113
+ >({})
114
+
115
+ const getNodePosition = useCallback(
116
+ (
117
+ nodeId: string,
118
+ fallbackPosition: { x: number; y: number },
119
+ ): { x: number; y: number } => {
120
+ if (nodePositions[nodeId]) {
121
+ return nodePositions[nodeId]
122
+ }
123
+ setNodePositions({ ...nodePositions, [nodeId]: fallbackPosition })
124
+ return fallbackPosition
125
+ },
126
+ [nodePositions],
127
+ )
128
+
129
+ useEffect(() => {
130
+ const workflowNodes: Node[] = []
131
+ const workflowEdges: Edge[] = []
132
+ let currentXLevel = 0
133
+
134
+ let groupedTasks = groupTasks(
135
+ workflow.nodes.filter(({ task }) => isActiveNodeTask(task)),
136
+ )
137
+ while (groupedTasks.ancestors.length > 0) {
138
+ let currentLevelContainsChoice = false
139
+ let currentYLevel = 0
140
+
141
+ // eslint-disable-next-line no-loop-func
142
+ groupedTasks.ancestors.forEach((task) => {
143
+ if (isChoiceTask(task.task)) {
144
+ currentLevelContainsChoice = true
145
+ }
146
+ workflowNodes.push({
147
+ id: task.id,
148
+ type: isChoiceTask(task.task) ? 'textUpdater' : undefined,
149
+ data: {
150
+ label: isChoiceTask(task.task) ? (task.label) :
151
+ (
152
+ <div style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>
153
+ {task.label}
154
+ </div>
155
+ )
156
+ ,
157
+ },
158
+ style: isChoiceTask(task.task) ? {} : {
159
+
160
+ borderWidth: 2,
161
+ backgroundColor: isChoiceTask(task.task)
162
+ ? PAYPAL_THEME.sysColorFeaturedMain
163
+ : (task?.label?.indexOf("Workflow Complete") > -1 ? '#32cd32' :
164
+ (task?.label == ("owners") || task?.label?.indexOf("_") > -1 )? '#00b9f0' : PAYPAL_THEME.sysColorFeaturedMain),
165
+ },
166
+ position: getNodePosition(task.id, {
167
+ x: positionBase + positionStep * currentXLevel,
168
+ y: positionBase + positionStep * currentYLevel++,
169
+ }),
170
+ sourcePosition: Position.Right,
171
+ targetPosition: Position.Left,
172
+ })
173
+
174
+ workflowEdges.push(
175
+ ...(isDownstreamTask(task.task)
176
+ ? (task.task.nextTasks.length ? task.task.nextTasks : []).map(
177
+ (nextTaskName) => ({
178
+ id: `edge-${task.id}-${nextTaskName}`,
179
+ source: task.id,
180
+ target: nextTaskName,
181
+ animated: true,
182
+ markerEnd: { type: MarkerType.ArrowClosed },
183
+ }),
184
+ )
185
+ : task.task.branches.flatMap((branch) =>
186
+ (branch.nextTasks.length ? branch.nextTasks : []).map(
187
+ (nextTaskName) => ({
188
+ id: `edge-${task.id}-${nextTaskName}`,
189
+ source: task.id,
190
+ target: nextTaskName,
191
+ data: branch,
192
+ animated: true,
193
+ markerEnd: { type: MarkerType.ArrowClosed },
194
+ label: `${branch.condition.length > 50
195
+ ? `...${branch.condition.substring(
196
+ (branch.condition.length - 50) / 2,
197
+ (branch.condition.length - 50) / 2 + 50,
198
+ )}...`
199
+ : branch.condition
200
+ }`,
201
+ labelBgPadding: [5, 10],
202
+ }),
203
+ ),
204
+ )),
205
+ )
206
+ })
207
+ if (currentLevelContainsChoice) {
208
+ currentXLevel += 2
209
+ }
210
+ currentXLevel++
211
+
212
+ groupedTasks = groupTasks(groupedTasks.descendants)
213
+ }
214
+ setNodes(workflowNodes)
215
+ setEdges(workflowEdges)
216
+ }, [workflow, setNodes, setEdges, getNodePosition])
217
+
218
+ const onNodeDragStop: NodeDragHandler = useCallback(
219
+ (_event, _node, draggedNodes) => {
220
+ const newPositions: typeof nodePositions = draggedNodes.reduce(
221
+ (agg, node) => ({ ...agg, [node.id]: node.position }),
222
+ {},
223
+ )
224
+ setNodePositions({ ...nodePositions, ...newPositions })
225
+ },
226
+ [nodePositions],
227
+ )
228
+
229
+ const nodeTypes = useMemo(() => ({ textUpdater: DecisionNode }), []);
230
+
231
+ return (
232
+ <Root
233
+ style={{ height: "90%", width: "100%" }}
234
+
235
+ >
236
+ <ReactFlow
237
+ nodeTypes={nodeTypes}
238
+ nodes={nodes}
239
+ edges={edges}
240
+ onNodesChange={onNodesChange}
241
+ onEdgesChange={onEdgesChange}
242
+ onNodeDragStop={onNodeDragStop}
243
+ onNodeClick={
244
+ onNodeClick ? (_, node) => onNodeClick(node.id) : undefined
245
+ }
246
+ {...rest}
247
+ >
248
+
249
+ <Controls />
250
+ <Background />
251
+
252
+ </ReactFlow>
253
+ </Root>
254
+ )
255
+ }
256
+
257
+ export default WorkflowVisulizer
src/linkedin-video/nodes-edges.ts ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const nodeStyle = {
2
+ color: '#0041d0',
3
+ borderColor: '#0041d0',
4
+ fontSize:'1em'
5
+ };
6
+
7
+ export const nodes = [
8
+ {
9
+ type: 'input',
10
+ id: '1',
11
+ data: { label: 'Thanks' },
12
+ position: { x: 100, y: 0 },
13
+ style: nodeStyle,
14
+ },
15
+ {
16
+ id: '2',
17
+ data: { label: 'for' },
18
+ position: { x: 0, y: 100 },
19
+ style: nodeStyle,
20
+ },
21
+ {
22
+ id: '3',
23
+ data: { label: 'using' },
24
+ position: { x: 200, y: 100 },
25
+ style: nodeStyle,
26
+ },
27
+ {
28
+ id: '4',
29
+ data: { label: 'React Flow Pro!' },
30
+ position: { x: 100, y: 200 },
31
+ style: nodeStyle,
32
+ },
33
+ ];
34
+
35
+ export const edges = [
36
+ {
37
+ id: '1->2',
38
+ source: '1',
39
+ target: '2',
40
+ animated: true,
41
+ style:{
42
+ stroke: "#000",
43
+ strokeWidth: "3px"
44
+ }
45
+ },
46
+ {
47
+ id: '1->3',
48
+ source: '1',
49
+ target: '3',
50
+ animated: true,
51
+ style:{
52
+ stroke: "#000",
53
+ strokeWidth: "3px"
54
+ }
55
+ },
56
+ {
57
+ id: '2->4',
58
+ source: '2',
59
+ target: '4',
60
+ animated: true,
61
+ style:{
62
+ stroke: "#000",
63
+ strokeWidth: "3px"
64
+ }
65
+ },
66
+ {
67
+ id: '3->4',
68
+ source: '3',
69
+ target: '4',
70
+ animated: true,
71
+ style:{
72
+ stroke: "#000",
73
+ strokeWidth: "3px"
74
+ }
75
+ },
76
+ ];
tailwind.config.js CHANGED
@@ -1,4 +1,5 @@
1
  module.exports = {
 
2
  content: ['./src/**/*.{ts,tsx}', './amins/**/*.{ts,tsx}'],
3
  theme: {
4
  extend: {},
 
1
  module.exports = {
2
+ important: true,
3
  content: ['./src/**/*.{ts,tsx}', './amins/**/*.{ts,tsx}'],
4
  theme: {
5
  extend: {},