owenkaplinsky commited on
Commit
94902a1
·
1 Parent(s): 9d3e452

Add tabs and AI chat

Browse files
package-lock.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "name": "agent-blockly",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {}
6
+ }
project/package-lock.json CHANGED
@@ -9,10 +9,13 @@
9
  "version": "1.0.0",
10
  "license": "Apache-2.0",
11
  "dependencies": {
 
 
12
  "@blockly/toolbox-search": "^3.0.2",
13
- "blockly": "^11.0.0"
14
  },
15
  "devDependencies": {
 
16
  "css-loader": "^6.7.1",
17
  "html-webpack-plugin": "^5.5.0",
18
  "source-map-loader": "^4.0.1",
@@ -34,6 +37,28 @@
34
  "lru-cache": "^10.4.3"
35
  }
36
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  "node_modules/@blockly/toolbox-search": {
38
  "version": "3.0.2",
39
  "resolved": "https://registry.npmjs.org/@blockly/toolbox-search/-/toolbox-search-3.0.2.tgz",
@@ -747,6 +772,21 @@
747
  "node": ">=8"
748
  }
749
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
750
  "node_modules/anymatch": {
751
  "version": "3.1.3",
752
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -766,11 +806,6 @@
766
  "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
767
  "dev": true
768
  },
769
- "node_modules/asynckit": {
770
- "version": "0.4.0",
771
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
772
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
773
- },
774
  "node_modules/balanced-match": {
775
  "version": "1.0.2",
776
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -805,11 +840,11 @@
805
  }
806
  },
807
  "node_modules/blockly": {
808
- "version": "11.2.2",
809
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.2.2.tgz",
810
- "integrity": "sha512-YJW9jMz4qoBXzOOUqxWBOHL35QhOOTAg2a6sVAFJh+/uNTXW0z506JS7qkqZI4PQ9fnUhDqmhF8a0qWSTL1tjg==",
811
  "dependencies": {
812
- "jsdom": "25.0.1"
813
  },
814
  "engines": {
815
  "node": ">=18"
@@ -956,6 +991,7 @@
956
  "version": "1.0.2",
957
  "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
958
  "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
 
959
  "dependencies": {
960
  "es-errors": "^1.3.0",
961
  "function-bind": "^1.1.2"
@@ -1010,6 +1046,34 @@
1010
  }
1011
  ]
1012
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1013
  "node_modules/chokidar": {
1014
  "version": "3.6.0",
1015
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -1055,6 +1119,20 @@
1055
  "node": ">= 10.0"
1056
  }
1057
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1058
  "node_modules/clone-deep": {
1059
  "version": "4.0.1",
1060
  "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -1069,23 +1147,30 @@
1069
  "node": ">=6"
1070
  }
1071
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1072
  "node_modules/colorette": {
1073
  "version": "2.0.20",
1074
  "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
1075
  "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
1076
  "dev": true
1077
  },
1078
- "node_modules/combined-stream": {
1079
- "version": "1.0.8",
1080
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1081
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1082
- "dependencies": {
1083
- "delayed-stream": "~1.0.0"
1084
- },
1085
- "engines": {
1086
- "node": ">= 0.8"
1087
- }
1088
- },
1089
  "node_modules/commander": {
1090
  "version": "8.3.0",
1091
  "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@@ -1146,6 +1231,30 @@
1146
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1147
  "dev": true
1148
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
  "node_modules/connect-history-api-fallback": {
1150
  "version": "2.0.0",
1151
  "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
@@ -1298,11 +1407,6 @@
1298
  "node": ">=18"
1299
  }
1300
  },
1301
- "node_modules/cssstyle/node_modules/rrweb-cssom": {
1302
- "version": "0.8.0",
1303
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
1304
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="
1305
- },
1306
  "node_modules/data-urls": {
1307
  "version": "5.0.0",
1308
  "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
@@ -1357,14 +1461,6 @@
1357
  "node": ">=8"
1358
  }
1359
  },
1360
- "node_modules/delayed-stream": {
1361
- "version": "1.0.0",
1362
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1363
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1364
- "engines": {
1365
- "node": ">=0.4.0"
1366
- }
1367
- },
1368
  "node_modules/depd": {
1369
  "version": "2.0.0",
1370
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -1489,6 +1585,7 @@
1489
  "version": "1.0.1",
1490
  "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1491
  "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
 
1492
  "dependencies": {
1493
  "call-bind-apply-helpers": "^1.0.1",
1494
  "es-errors": "^1.3.0",
@@ -1510,6 +1607,12 @@
1510
  "integrity": "sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==",
1511
  "dev": true
1512
  },
 
 
 
 
 
 
1513
  "node_modules/encodeurl": {
1514
  "version": "2.0.0",
1515
  "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -1559,6 +1662,7 @@
1559
  "version": "1.0.1",
1560
  "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1561
  "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
 
1562
  "engines": {
1563
  "node": ">= 0.4"
1564
  }
@@ -1567,6 +1671,7 @@
1567
  "version": "1.3.0",
1568
  "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1569
  "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
 
1570
  "engines": {
1571
  "node": ">= 0.4"
1572
  }
@@ -1581,6 +1686,7 @@
1581
  "version": "1.1.1",
1582
  "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1583
  "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
 
1584
  "dependencies": {
1585
  "es-errors": "^1.3.0"
1586
  },
@@ -1588,20 +1694,6 @@
1588
  "node": ">= 0.4"
1589
  }
1590
  },
1591
- "node_modules/es-set-tostringtag": {
1592
- "version": "2.1.0",
1593
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
1594
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
1595
- "dependencies": {
1596
- "es-errors": "^1.3.0",
1597
- "get-intrinsic": "^1.2.6",
1598
- "has-tostringtag": "^1.0.2",
1599
- "hasown": "^2.0.2"
1600
- },
1601
- "engines": {
1602
- "node": ">= 0.4"
1603
- }
1604
- },
1605
  "node_modules/escalade": {
1606
  "version": "3.2.0",
1607
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -1898,21 +1990,6 @@
1898
  }
1899
  }
1900
  },
1901
- "node_modules/form-data": {
1902
- "version": "4.0.4",
1903
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
1904
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
1905
- "dependencies": {
1906
- "asynckit": "^0.4.0",
1907
- "combined-stream": "^1.0.8",
1908
- "es-set-tostringtag": "^2.1.0",
1909
- "hasown": "^2.0.2",
1910
- "mime-types": "^2.1.12"
1911
- },
1912
- "engines": {
1913
- "node": ">= 6"
1914
- }
1915
- },
1916
  "node_modules/forwarded": {
1917
  "version": "0.2.0",
1918
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -1961,14 +2038,25 @@
1961
  "version": "1.1.2",
1962
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1963
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 
1964
  "funding": {
1965
  "url": "https://github.com/sponsors/ljharb"
1966
  }
1967
  },
 
 
 
 
 
 
 
 
 
1968
  "node_modules/get-intrinsic": {
1969
  "version": "1.3.0",
1970
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
1971
  "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
 
1972
  "dependencies": {
1973
  "call-bind-apply-helpers": "^1.0.2",
1974
  "es-define-property": "^1.0.1",
@@ -1992,6 +2080,7 @@
1992
  "version": "1.0.1",
1993
  "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1994
  "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
 
1995
  "dependencies": {
1996
  "dunder-proto": "^1.0.1",
1997
  "es-object-atoms": "^1.0.0"
@@ -2055,6 +2144,7 @@
2055
  "version": "1.2.0",
2056
  "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2057
  "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
 
2058
  "engines": {
2059
  "node": ">= 0.4"
2060
  },
@@ -2087,20 +2177,7 @@
2087
  "version": "1.1.0",
2088
  "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
2089
  "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
2090
- "engines": {
2091
- "node": ">= 0.4"
2092
- },
2093
- "funding": {
2094
- "url": "https://github.com/sponsors/ljharb"
2095
- }
2096
- },
2097
- "node_modules/has-tostringtag": {
2098
- "version": "1.0.2",
2099
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
2100
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
2101
- "dependencies": {
2102
- "has-symbols": "^1.0.3"
2103
- },
2104
  "engines": {
2105
  "node": ">= 0.4"
2106
  },
@@ -2112,6 +2189,7 @@
2112
  "version": "2.0.2",
2113
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
2114
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
 
2115
  "dependencies": {
2116
  "function-bind": "^1.1.2"
2117
  },
@@ -2505,6 +2583,15 @@
2505
  "node": ">=0.10.0"
2506
  }
2507
  },
 
 
 
 
 
 
 
 
 
2508
  "node_modules/is-glob": {
2509
  "version": "4.0.3",
2510
  "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -2615,29 +2702,28 @@
2615
  }
2616
  },
2617
  "node_modules/jsdom": {
2618
- "version": "25.0.1",
2619
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
2620
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
2621
  "dependencies": {
2622
- "cssstyle": "^4.1.0",
2623
  "data-urls": "^5.0.0",
2624
- "decimal.js": "^10.4.3",
2625
- "form-data": "^4.0.0",
2626
  "html-encoding-sniffer": "^4.0.0",
2627
  "http-proxy-agent": "^7.0.2",
2628
- "https-proxy-agent": "^7.0.5",
2629
  "is-potential-custom-element-name": "^1.0.1",
2630
- "nwsapi": "^2.2.12",
2631
- "parse5": "^7.1.2",
2632
- "rrweb-cssom": "^0.7.1",
2633
  "saxes": "^6.0.0",
2634
  "symbol-tree": "^3.2.4",
2635
- "tough-cookie": "^5.0.0",
2636
  "w3c-xmlserializer": "^5.0.0",
2637
  "webidl-conversions": "^7.0.0",
2638
  "whatwg-encoding": "^3.1.1",
2639
  "whatwg-mimetype": "^4.0.0",
2640
- "whatwg-url": "^14.0.0",
2641
  "ws": "^8.18.0",
2642
  "xml-name-validator": "^5.0.0"
2643
  },
@@ -2645,7 +2731,7 @@
2645
  "node": ">=18"
2646
  },
2647
  "peerDependencies": {
2648
- "canvas": "^2.11.2"
2649
  },
2650
  "peerDependenciesMeta": {
2651
  "canvas": {
@@ -2733,6 +2819,7 @@
2733
  "version": "1.1.0",
2734
  "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
2735
  "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
 
2736
  "engines": {
2737
  "node": ">= 0.4"
2738
  }
@@ -2811,6 +2898,7 @@
2811
  "version": "1.52.0",
2812
  "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2813
  "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
 
2814
  "engines": {
2815
  "node": ">= 0.6"
2816
  }
@@ -2819,6 +2907,7 @@
2819
  "version": "2.1.35",
2820
  "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2821
  "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
 
2822
  "dependencies": {
2823
  "mime-db": "1.52.0"
2824
  },
@@ -3477,6 +3566,15 @@
3477
  "strip-ansi": "^6.0.1"
3478
  }
3479
  },
 
 
 
 
 
 
 
 
 
3480
  "node_modules/require-from-string": {
3481
  "version": "2.0.2",
3482
  "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -3559,9 +3657,18 @@
3559
  }
3560
  },
3561
  "node_modules/rrweb-cssom": {
3562
- "version": "0.7.1",
3563
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
3564
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="
 
 
 
 
 
 
 
 
 
3565
  },
3566
  "node_modules/safe-buffer": {
3567
  "version": "5.2.1",
@@ -4035,6 +4142,20 @@
4035
  "safe-buffer": "~5.2.0"
4036
  }
4037
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4038
  "node_modules/strip-ansi": {
4039
  "version": "6.0.1",
4040
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -4240,6 +4361,15 @@
4240
  "node": ">=18"
4241
  }
4242
  },
 
 
 
 
 
 
 
 
 
4243
  "node_modules/tslib": {
4244
  "version": "2.8.1",
4245
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -4668,6 +4798,23 @@
4668
  "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
4669
  "dev": true
4670
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4671
  "node_modules/wrappy": {
4672
  "version": "1.0.2",
4673
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -4706,6 +4853,42 @@
4706
  "version": "2.2.0",
4707
  "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
4708
  "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4709
  }
4710
  }
4711
  }
 
9
  "version": "1.0.0",
10
  "license": "Apache-2.0",
11
  "dependencies": {
12
+ "@blockly/field-multilineinput": "^6.0.3",
13
+ "@blockly/theme-dark": "^8.0.1",
14
  "@blockly/toolbox-search": "^3.0.2",
15
+ "blockly": "^12.0.0"
16
  },
17
  "devDependencies": {
18
+ "concurrently": "^9.2.1",
19
  "css-loader": "^6.7.1",
20
  "html-webpack-plugin": "^5.5.0",
21
  "source-map-loader": "^4.0.1",
 
37
  "lru-cache": "^10.4.3"
38
  }
39
  },
40
+ "node_modules/@blockly/field-multilineinput": {
41
+ "version": "6.0.3",
42
+ "resolved": "https://registry.npmjs.org/@blockly/field-multilineinput/-/field-multilineinput-6.0.3.tgz",
43
+ "integrity": "sha512-xZqPRyFiXB8yoNW3wMDkQ7ZIZajlFGZ/HIo2yjsQ0P6t9vwfEQcG/1X/cZUGRakqGHnE+q5ziEg7VKYvSh+tJQ==",
44
+ "engines": {
45
+ "node": ">=8.0.0"
46
+ },
47
+ "peerDependencies": {
48
+ "blockly": "^12.0.0"
49
+ }
50
+ },
51
+ "node_modules/@blockly/theme-dark": {
52
+ "version": "8.0.1",
53
+ "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-8.0.1.tgz",
54
+ "integrity": "sha512-0Di3WIUwCVQw7jK9myUf/J+4oHLADWc8YxeF40KQgGsyulVrVnYipwtBolj+wxq2xjxIkqgvctAN3BdvM4mynA==",
55
+ "engines": {
56
+ "node": ">=8.17.0"
57
+ },
58
+ "peerDependencies": {
59
+ "blockly": "^12.0.0"
60
+ }
61
+ },
62
  "node_modules/@blockly/toolbox-search": {
63
  "version": "3.0.2",
64
  "resolved": "https://registry.npmjs.org/@blockly/toolbox-search/-/toolbox-search-3.0.2.tgz",
 
772
  "node": ">=8"
773
  }
774
  },
775
+ "node_modules/ansi-styles": {
776
+ "version": "4.3.0",
777
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
778
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
779
+ "dev": true,
780
+ "dependencies": {
781
+ "color-convert": "^2.0.1"
782
+ },
783
+ "engines": {
784
+ "node": ">=8"
785
+ },
786
+ "funding": {
787
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
788
+ }
789
+ },
790
  "node_modules/anymatch": {
791
  "version": "3.1.3",
792
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
 
806
  "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
807
  "dev": true
808
  },
 
 
 
 
 
809
  "node_modules/balanced-match": {
810
  "version": "1.0.2",
811
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 
840
  }
841
  },
842
  "node_modules/blockly": {
843
+ "version": "12.0.0",
844
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0.tgz",
845
+ "integrity": "sha512-CrwxGjbgCh/zGg46VTlp26NYblSi/82n4VFsamyW5b4W6t3HXaf/b3CbMuu4/YnFvqlyJs+8zR4OKNTbIc28EA==",
846
  "dependencies": {
847
+ "jsdom": "26.1.0"
848
  },
849
  "engines": {
850
  "node": ">=18"
 
991
  "version": "1.0.2",
992
  "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
993
  "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
994
+ "dev": true,
995
  "dependencies": {
996
  "es-errors": "^1.3.0",
997
  "function-bind": "^1.1.2"
 
1046
  }
1047
  ]
1048
  },
1049
+ "node_modules/chalk": {
1050
+ "version": "4.1.2",
1051
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1052
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1053
+ "dev": true,
1054
+ "dependencies": {
1055
+ "ansi-styles": "^4.1.0",
1056
+ "supports-color": "^7.1.0"
1057
+ },
1058
+ "engines": {
1059
+ "node": ">=10"
1060
+ },
1061
+ "funding": {
1062
+ "url": "https://github.com/chalk/chalk?sponsor=1"
1063
+ }
1064
+ },
1065
+ "node_modules/chalk/node_modules/supports-color": {
1066
+ "version": "7.2.0",
1067
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1068
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1069
+ "dev": true,
1070
+ "dependencies": {
1071
+ "has-flag": "^4.0.0"
1072
+ },
1073
+ "engines": {
1074
+ "node": ">=8"
1075
+ }
1076
+ },
1077
  "node_modules/chokidar": {
1078
  "version": "3.6.0",
1079
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
 
1119
  "node": ">= 10.0"
1120
  }
1121
  },
1122
+ "node_modules/cliui": {
1123
+ "version": "8.0.1",
1124
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
1125
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
1126
+ "dev": true,
1127
+ "dependencies": {
1128
+ "string-width": "^4.2.0",
1129
+ "strip-ansi": "^6.0.1",
1130
+ "wrap-ansi": "^7.0.0"
1131
+ },
1132
+ "engines": {
1133
+ "node": ">=12"
1134
+ }
1135
+ },
1136
  "node_modules/clone-deep": {
1137
  "version": "4.0.1",
1138
  "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
 
1147
  "node": ">=6"
1148
  }
1149
  },
1150
+ "node_modules/color-convert": {
1151
+ "version": "2.0.1",
1152
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1153
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1154
+ "dev": true,
1155
+ "dependencies": {
1156
+ "color-name": "~1.1.4"
1157
+ },
1158
+ "engines": {
1159
+ "node": ">=7.0.0"
1160
+ }
1161
+ },
1162
+ "node_modules/color-name": {
1163
+ "version": "1.1.4",
1164
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1165
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1166
+ "dev": true
1167
+ },
1168
  "node_modules/colorette": {
1169
  "version": "2.0.20",
1170
  "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
1171
  "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
1172
  "dev": true
1173
  },
 
 
 
 
 
 
 
 
 
 
 
1174
  "node_modules/commander": {
1175
  "version": "8.3.0",
1176
  "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
 
1231
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1232
  "dev": true
1233
  },
1234
+ "node_modules/concurrently": {
1235
+ "version": "9.2.1",
1236
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
1237
+ "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
1238
+ "dev": true,
1239
+ "dependencies": {
1240
+ "chalk": "4.1.2",
1241
+ "rxjs": "7.8.2",
1242
+ "shell-quote": "1.8.3",
1243
+ "supports-color": "8.1.1",
1244
+ "tree-kill": "1.2.2",
1245
+ "yargs": "17.7.2"
1246
+ },
1247
+ "bin": {
1248
+ "conc": "dist/bin/concurrently.js",
1249
+ "concurrently": "dist/bin/concurrently.js"
1250
+ },
1251
+ "engines": {
1252
+ "node": ">=18"
1253
+ },
1254
+ "funding": {
1255
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
1256
+ }
1257
+ },
1258
  "node_modules/connect-history-api-fallback": {
1259
  "version": "2.0.0",
1260
  "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
 
1407
  "node": ">=18"
1408
  }
1409
  },
 
 
 
 
 
1410
  "node_modules/data-urls": {
1411
  "version": "5.0.0",
1412
  "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
 
1461
  "node": ">=8"
1462
  }
1463
  },
 
 
 
 
 
 
 
 
1464
  "node_modules/depd": {
1465
  "version": "2.0.0",
1466
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 
1585
  "version": "1.0.1",
1586
  "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1587
  "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1588
+ "dev": true,
1589
  "dependencies": {
1590
  "call-bind-apply-helpers": "^1.0.1",
1591
  "es-errors": "^1.3.0",
 
1607
  "integrity": "sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==",
1608
  "dev": true
1609
  },
1610
+ "node_modules/emoji-regex": {
1611
+ "version": "8.0.0",
1612
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1613
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1614
+ "dev": true
1615
+ },
1616
  "node_modules/encodeurl": {
1617
  "version": "2.0.0",
1618
  "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
 
1662
  "version": "1.0.1",
1663
  "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1664
  "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
1665
+ "dev": true,
1666
  "engines": {
1667
  "node": ">= 0.4"
1668
  }
 
1671
  "version": "1.3.0",
1672
  "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1673
  "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1674
+ "dev": true,
1675
  "engines": {
1676
  "node": ">= 0.4"
1677
  }
 
1686
  "version": "1.1.1",
1687
  "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1688
  "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1689
+ "dev": true,
1690
  "dependencies": {
1691
  "es-errors": "^1.3.0"
1692
  },
 
1694
  "node": ">= 0.4"
1695
  }
1696
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1697
  "node_modules/escalade": {
1698
  "version": "3.2.0",
1699
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
 
1990
  }
1991
  }
1992
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1993
  "node_modules/forwarded": {
1994
  "version": "0.2.0",
1995
  "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
 
2038
  "version": "1.1.2",
2039
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2040
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2041
+ "dev": true,
2042
  "funding": {
2043
  "url": "https://github.com/sponsors/ljharb"
2044
  }
2045
  },
2046
+ "node_modules/get-caller-file": {
2047
+ "version": "2.0.5",
2048
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
2049
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
2050
+ "dev": true,
2051
+ "engines": {
2052
+ "node": "6.* || 8.* || >= 10.*"
2053
+ }
2054
+ },
2055
  "node_modules/get-intrinsic": {
2056
  "version": "1.3.0",
2057
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
2058
  "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
2059
+ "dev": true,
2060
  "dependencies": {
2061
  "call-bind-apply-helpers": "^1.0.2",
2062
  "es-define-property": "^1.0.1",
 
2080
  "version": "1.0.1",
2081
  "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
2082
  "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
2083
+ "dev": true,
2084
  "dependencies": {
2085
  "dunder-proto": "^1.0.1",
2086
  "es-object-atoms": "^1.0.0"
 
2144
  "version": "1.2.0",
2145
  "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2146
  "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
2147
+ "dev": true,
2148
  "engines": {
2149
  "node": ">= 0.4"
2150
  },
 
2177
  "version": "1.1.0",
2178
  "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
2179
  "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
2180
+ "dev": true,
 
 
 
 
 
 
 
 
 
 
 
 
 
2181
  "engines": {
2182
  "node": ">= 0.4"
2183
  },
 
2189
  "version": "2.0.2",
2190
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
2191
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
2192
+ "dev": true,
2193
  "dependencies": {
2194
  "function-bind": "^1.1.2"
2195
  },
 
2583
  "node": ">=0.10.0"
2584
  }
2585
  },
2586
+ "node_modules/is-fullwidth-code-point": {
2587
+ "version": "3.0.0",
2588
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2589
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2590
+ "dev": true,
2591
+ "engines": {
2592
+ "node": ">=8"
2593
+ }
2594
+ },
2595
  "node_modules/is-glob": {
2596
  "version": "4.0.3",
2597
  "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
 
2702
  }
2703
  },
2704
  "node_modules/jsdom": {
2705
+ "version": "26.1.0",
2706
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
2707
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
2708
  "dependencies": {
2709
+ "cssstyle": "^4.2.1",
2710
  "data-urls": "^5.0.0",
2711
+ "decimal.js": "^10.5.0",
 
2712
  "html-encoding-sniffer": "^4.0.0",
2713
  "http-proxy-agent": "^7.0.2",
2714
+ "https-proxy-agent": "^7.0.6",
2715
  "is-potential-custom-element-name": "^1.0.1",
2716
+ "nwsapi": "^2.2.16",
2717
+ "parse5": "^7.2.1",
2718
+ "rrweb-cssom": "^0.8.0",
2719
  "saxes": "^6.0.0",
2720
  "symbol-tree": "^3.2.4",
2721
+ "tough-cookie": "^5.1.1",
2722
  "w3c-xmlserializer": "^5.0.0",
2723
  "webidl-conversions": "^7.0.0",
2724
  "whatwg-encoding": "^3.1.1",
2725
  "whatwg-mimetype": "^4.0.0",
2726
+ "whatwg-url": "^14.1.1",
2727
  "ws": "^8.18.0",
2728
  "xml-name-validator": "^5.0.0"
2729
  },
 
2731
  "node": ">=18"
2732
  },
2733
  "peerDependencies": {
2734
+ "canvas": "^3.0.0"
2735
  },
2736
  "peerDependenciesMeta": {
2737
  "canvas": {
 
2819
  "version": "1.1.0",
2820
  "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
2821
  "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
2822
+ "dev": true,
2823
  "engines": {
2824
  "node": ">= 0.4"
2825
  }
 
2898
  "version": "1.52.0",
2899
  "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2900
  "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2901
+ "dev": true,
2902
  "engines": {
2903
  "node": ">= 0.6"
2904
  }
 
2907
  "version": "2.1.35",
2908
  "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2909
  "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2910
+ "dev": true,
2911
  "dependencies": {
2912
  "mime-db": "1.52.0"
2913
  },
 
3566
  "strip-ansi": "^6.0.1"
3567
  }
3568
  },
3569
+ "node_modules/require-directory": {
3570
+ "version": "2.1.1",
3571
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
3572
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
3573
+ "dev": true,
3574
+ "engines": {
3575
+ "node": ">=0.10.0"
3576
+ }
3577
+ },
3578
  "node_modules/require-from-string": {
3579
  "version": "2.0.2",
3580
  "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
 
3657
  }
3658
  },
3659
  "node_modules/rrweb-cssom": {
3660
+ "version": "0.8.0",
3661
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
3662
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="
3663
+ },
3664
+ "node_modules/rxjs": {
3665
+ "version": "7.8.2",
3666
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
3667
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
3668
+ "dev": true,
3669
+ "dependencies": {
3670
+ "tslib": "^2.1.0"
3671
+ }
3672
  },
3673
  "node_modules/safe-buffer": {
3674
  "version": "5.2.1",
 
4142
  "safe-buffer": "~5.2.0"
4143
  }
4144
  },
4145
+ "node_modules/string-width": {
4146
+ "version": "4.2.3",
4147
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4148
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4149
+ "dev": true,
4150
+ "dependencies": {
4151
+ "emoji-regex": "^8.0.0",
4152
+ "is-fullwidth-code-point": "^3.0.0",
4153
+ "strip-ansi": "^6.0.1"
4154
+ },
4155
+ "engines": {
4156
+ "node": ">=8"
4157
+ }
4158
+ },
4159
  "node_modules/strip-ansi": {
4160
  "version": "6.0.1",
4161
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
 
4361
  "node": ">=18"
4362
  }
4363
  },
4364
+ "node_modules/tree-kill": {
4365
+ "version": "1.2.2",
4366
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
4367
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
4368
+ "dev": true,
4369
+ "bin": {
4370
+ "tree-kill": "cli.js"
4371
+ }
4372
+ },
4373
  "node_modules/tslib": {
4374
  "version": "2.8.1",
4375
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
 
4798
  "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
4799
  "dev": true
4800
  },
4801
+ "node_modules/wrap-ansi": {
4802
+ "version": "7.0.0",
4803
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
4804
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
4805
+ "dev": true,
4806
+ "dependencies": {
4807
+ "ansi-styles": "^4.0.0",
4808
+ "string-width": "^4.1.0",
4809
+ "strip-ansi": "^6.0.0"
4810
+ },
4811
+ "engines": {
4812
+ "node": ">=10"
4813
+ },
4814
+ "funding": {
4815
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
4816
+ }
4817
+ },
4818
  "node_modules/wrappy": {
4819
  "version": "1.0.2",
4820
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 
4853
  "version": "2.2.0",
4854
  "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
4855
  "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
4856
+ },
4857
+ "node_modules/y18n": {
4858
+ "version": "5.0.8",
4859
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
4860
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
4861
+ "dev": true,
4862
+ "engines": {
4863
+ "node": ">=10"
4864
+ }
4865
+ },
4866
+ "node_modules/yargs": {
4867
+ "version": "17.7.2",
4868
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
4869
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
4870
+ "dev": true,
4871
+ "dependencies": {
4872
+ "cliui": "^8.0.1",
4873
+ "escalade": "^3.1.1",
4874
+ "get-caller-file": "^2.0.5",
4875
+ "require-directory": "^2.1.1",
4876
+ "string-width": "^4.2.3",
4877
+ "y18n": "^5.0.5",
4878
+ "yargs-parser": "^21.1.1"
4879
+ },
4880
+ "engines": {
4881
+ "node": ">=12"
4882
+ }
4883
+ },
4884
+ "node_modules/yargs-parser": {
4885
+ "version": "21.1.1",
4886
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
4887
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
4888
+ "dev": true,
4889
+ "engines": {
4890
+ "node": ">=12"
4891
+ }
4892
  }
4893
  }
4894
  }
project/package.json CHANGED
@@ -15,6 +15,7 @@
15
  "author": "",
16
  "license": "Apache-2.0",
17
  "devDependencies": {
 
18
  "css-loader": "^6.7.1",
19
  "html-webpack-plugin": "^5.5.0",
20
  "source-map-loader": "^4.0.1",
@@ -24,7 +25,9 @@
24
  "webpack-dev-server": "^4.11.1"
25
  },
26
  "dependencies": {
 
 
27
  "@blockly/toolbox-search": "^3.0.2",
28
- "blockly": "^11.0.0"
29
  }
30
  }
 
15
  "author": "",
16
  "license": "Apache-2.0",
17
  "devDependencies": {
18
+ "concurrently": "^9.2.1",
19
  "css-loader": "^6.7.1",
20
  "html-webpack-plugin": "^5.5.0",
21
  "source-map-loader": "^4.0.1",
 
25
  "webpack-dev-server": "^4.11.1"
26
  },
27
  "dependencies": {
28
+ "@blockly/field-multilineinput": "^6.0.3",
29
+ "@blockly/theme-dark": "^8.0.1",
30
  "@blockly/toolbox-search": "^3.0.2",
31
+ "blockly": "^12.0.0"
32
  }
33
  }
project/src/index.css CHANGED
@@ -174,18 +174,60 @@ body {
174
  cursor: col-resize;
175
  }
176
 
177
- /* --- Add dark grey padding around Gradio + Code --- */
178
  #outputPane {
179
  flex: 0 0 30%;
180
  background: #2c2c2c;
181
  /* dark grey background around both sections */
182
- padding: 16px;
183
- /* padding around the inside */
184
- gap: 16px;
185
- /* space between iframe and code */
186
  display: flex;
187
  flex-direction: column;
188
  box-sizing: border-box;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  }
190
 
191
  /* Add matching background to the Gradio frame container */
@@ -194,6 +236,8 @@ body {
194
  border: none;
195
  flex: 0 0 50%;
196
  box-sizing: border-box;
 
 
197
  }
198
 
199
  /* Slightly inset the Gradio iframe */
@@ -206,7 +250,8 @@ body {
206
  }
207
 
208
  /* Style the code area with matching margin and contrast */
209
- #generatedCode {
 
210
  background: #1f1f1f;
211
  color: #e0e7ff;
212
  border-radius: 6px;
 
174
  cursor: col-resize;
175
  }
176
 
177
+ /* Add dark grey padding around Gradio + Code --- */
178
  #outputPane {
179
  flex: 0 0 30%;
180
  background: #2c2c2c;
181
  /* dark grey background around both sections */
 
 
 
 
182
  display: flex;
183
  flex-direction: column;
184
  box-sizing: border-box;
185
+ overflow: hidden;
186
+ }
187
+
188
+ /* --- Tab Bar --- */
189
+ #tabBar {
190
+ display: flex;
191
+ background: #1f1f1f;
192
+ border-bottom: 2px solid #e5e7eb;
193
+ flex-shrink: 0;
194
+ }
195
+
196
+ .tab {
197
+ padding: 12px 20px;
198
+ cursor: pointer;
199
+ font-size: 14px;
200
+ font-weight: 500;
201
+ color: #999;
202
+ background: #1f1f1f;
203
+ border: none;
204
+ transition: all 0.2s ease;
205
+ border-bottom: 3px solid transparent;
206
+ margin-bottom: -2px;
207
+ }
208
+
209
+ .tab:hover {
210
+ color: #ccc;
211
+ }
212
+
213
+ .tab.active {
214
+ color: #6366f1;
215
+ border-bottom-color: #6366f1;
216
+ }
217
+
218
+ /* --- Tab Content --- */
219
+ .tabContent {
220
+ display: none;
221
+ flex: 1;
222
+ flex-direction: column;
223
+ padding: 16px;
224
+ gap: 16px;
225
+ overflow: hidden;
226
+ box-sizing: border-box;
227
+ }
228
+
229
+ .tabContent.active {
230
+ display: flex;
231
  }
232
 
233
  /* Add matching background to the Gradio frame container */
 
236
  border: none;
237
  flex: 0 0 50%;
238
  box-sizing: border-box;
239
+ border-radius: 6px;
240
+ overflow: hidden;
241
  }
242
 
243
  /* Slightly inset the Gradio iframe */
 
250
  }
251
 
252
  /* Style the code area with matching margin and contrast */
253
+ #generatedCode,
254
+ #aichatCode {
255
  background: #1f1f1f;
256
  color: #e0e7ff;
257
  border-radius: 6px;
project/src/index.html CHANGED
@@ -51,17 +51,44 @@
51
 
52
  <div id="pageContainer">
53
  <div id="outputPane">
54
- <div id="chatContainer">
55
- <iframe src="http://127.0.0.1:7860" style="width: 100%; height: 100%; border: none;"></iframe>
 
 
 
 
 
 
 
 
 
 
 
56
  </div>
57
- <div class="verticalResizer"></div>
58
- <pre id="generatedCode"><code></code></pre>
59
  </div>
60
  <div class="resizer"></div>
61
  <div id="blocklyDiv"></div>
62
  </div>
63
 
64
  <script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  // Horizontal resizer (output pane vs blockly)
66
  const resizer = document.querySelector('.resizer');
67
  const outputPane = document.getElementById('outputPane');
 
51
 
52
  <div id="pageContainer">
53
  <div id="outputPane">
54
+ <div id="tabBar">
55
+ <div class="tab active" data-tab="development">Development</div>
56
+ <div class="tab" data-tab="aichat">AI Chat</div>
57
+ </div>
58
+ <div id="developmentTab" class="tabContent active">
59
+ <div id="chatContainer">
60
+ <iframe src="http://127.0.0.1:7860" style="width: 100%; height: 100%; border: none;"></iframe>
61
+ </div>
62
+ <div class="verticalResizer"></div>
63
+ <pre id="generatedCode"><code></code></pre>
64
+ </div>
65
+ <div id="aichatTab" class="tabContent">
66
+ <pre id="aichatCode"><code></code></pre>
67
  </div>
 
 
68
  </div>
69
  <div class="resizer"></div>
70
  <div id="blocklyDiv"></div>
71
  </div>
72
 
73
  <script>
74
+ // Tab switching functionality
75
+ const tabs = document.querySelectorAll('.tab');
76
+ const tabContents = document.querySelectorAll('.tabContent');
77
+
78
+ tabs.forEach(tab => {
79
+ tab.addEventListener('click', () => {
80
+ const tabName = tab.getAttribute('data-tab');
81
+
82
+ // Remove active class from all tabs and contents
83
+ tabs.forEach(t => t.classList.remove('active'));
84
+ tabContents.forEach(content => content.classList.remove('active'));
85
+
86
+ // Add active class to clicked tab and corresponding content
87
+ tab.classList.add('active');
88
+ document.getElementById(tabName + 'Tab').classList.add('active');
89
+ });
90
+ });
91
+
92
  // Horizontal resizer (output pane vs blockly)
93
  const resizer = document.querySelector('.resizer');
94
  const outputPane = document.getElementById('outputPane');