feat: add CLI Viewer Page with multi-pane layout and state management

- Implemented the CliViewerPage component for displaying CLI outputs in a configurable multi-pane layout.
- Integrated Zustand for state management, allowing for dynamic layout changes and tab management.
- Added layout options: single, split horizontal, split vertical, and 2x2 grid.
- Created viewerStore for managing layout, panes, and tabs, including actions for adding/removing panes and tabs.
- Added CoordinatorPage barrel export for easier imports.
This commit is contained in:
catlog22
2026-02-03 17:28:26 +08:00
parent b63e254f36
commit 37ba849e75
101 changed files with 10422 additions and 1145 deletions

213
ccw/package-lock.json generated
View File

@@ -7,6 +7,7 @@
"": {
"name": "ccw-monorepo",
"version": "1.0.0",
"license": "MIT",
"workspaces": [
"frontend",
"docs-site"
@@ -15,8 +16,8 @@
"concurrently": "^9.1.2"
},
"engines": {
"node": ">=18.0",
"npm": ">=9.0"
"node": ">=18.0.0",
"npm": ">=9.0.0"
}
},
"docs-site": {
@@ -8149,10 +8150,6 @@
"node": ">=0.10.0"
}
},
"docs-site/node_modules/fast-deep-equal": {
"version": "3.1.3",
"license": "MIT"
},
"docs-site/node_modules/fast-glob": {
"version": "3.3.3",
"license": "MIT",
@@ -9563,10 +9560,6 @@
"@sideway/pinpoint": "^2.0.0"
}
},
"docs-site/node_modules/js-tokens": {
"version": "4.0.0",
"license": "MIT"
},
"docs-site/node_modules/js-yaml": {
"version": "4.1.1",
"license": "MIT",
@@ -9768,10 +9761,6 @@
"version": "4.17.23",
"license": "MIT"
},
"docs-site/node_modules/lodash.debounce": {
"version": "4.0.8",
"license": "MIT"
},
"docs-site/node_modules/lodash.memoize": {
"version": "4.1.2",
"license": "MIT"
@@ -9788,16 +9777,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"docs-site/node_modules/loose-envify": {
"version": "1.4.0",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"docs-site/node_modules/lower-case": {
"version": "2.0.2",
"license": "MIT",
@@ -14135,27 +14114,6 @@
"node": ">=0.10.0"
}
},
"docs-site/node_modules/react": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"docs-site/node_modules/react-dom": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
},
"peerDependencies": {
"react": "^18.3.1"
}
},
"docs-site/node_modules/react-fast-compare": {
"version": "3.2.2",
"license": "MIT"
@@ -14821,13 +14779,6 @@
"node": ">=11.0.0"
}
},
"docs-site/node_modules/scheduler": {
"version": "0.23.2",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"docs-site/node_modules/schema-dts": {
"version": "1.1.5",
"license": "Apache-2.0"
@@ -16794,6 +16745,7 @@
"@radix-ui/react-tooltip": "^1.1.0",
"@tanstack/react-query": "^5.60.0",
"@xyflow/react": "^12.10.0",
"allotment": "^1.20.5",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"highlight.js": "^11.11.1",
@@ -21016,10 +20968,6 @@
"jiti": "bin/jiti.js"
}
},
"frontend/node_modules/js-tokens": {
"version": "4.0.0",
"license": "MIT"
},
"frontend/node_modules/jsdom": {
"version": "25.0.1",
"dev": true,
@@ -21109,16 +21057,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"frontend/node_modules/loose-envify": {
"version": "1.4.0",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"frontend/node_modules/loupe": {
"version": "3.2.1",
"dev": true,
@@ -22526,27 +22464,6 @@
"version": "4.0.3",
"license": "MIT"
},
"frontend/node_modules/react": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"frontend/node_modules/react-dom": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
},
"peerDependencies": {
"react": "^18.3.1"
}
},
"frontend/node_modules/react-draggable": {
"version": "4.5.0",
"license": "MIT",
@@ -23136,13 +23053,6 @@
"node": ">=v12.22.7"
}
},
"frontend/node_modules/scheduler": {
"version": "0.23.2",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"frontend/node_modules/semver": {
"version": "6.3.1",
"dev": true,
@@ -24788,6 +24698,24 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/allotment": {
"version": "1.20.5",
"resolved": "https://registry.npmjs.org/allotment/-/allotment-1.20.5.tgz",
"integrity": "sha512-7i4NT7ieXEyAd5lBrXmE7WHz/e7hRuo97+j+TwrPE85ha6kyFURoc76nom0dWSZ1pTKVEAMJy/+f3/Isfu/41A==",
"license": "MIT",
"dependencies": {
"classnames": "^2.3.0",
"eventemitter3": "^5.0.0",
"fast-deep-equal": "^3.1.3",
"lodash.clamp": "^4.0.0",
"lodash.debounce": "^4.0.0",
"usehooks-ts": "^3.1.1"
},
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -24848,6 +24776,12 @@
"node": ">=8"
}
},
"node_modules/classnames": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
"license": "MIT"
},
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -24922,6 +24856,18 @@
"node": ">=6"
}
},
"node_modules/eventemitter3": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
"integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
"license": "MIT"
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -24950,6 +24896,61 @@
"node": ">=8"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"license": "MIT"
},
"node_modules/lodash.clamp": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/lodash.clamp/-/lodash.clamp-4.0.3.tgz",
"integrity": "sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg==",
"license": "MIT"
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
},
"peerDependencies": {
"react": "^18.3.1"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -24968,6 +24969,15 @@
"tslib": "^2.1.0"
}
},
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
"integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"node_modules/shell-quote": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
@@ -25037,6 +25047,21 @@
"dev": true,
"license": "0BSD"
},
"node_modules/usehooks-ts": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz",
"integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==",
"license": "MIT",
"dependencies": {
"lodash.debounce": "^4.0.8"
},
"engines": {
"node": ">=16.15.0"
},
"peerDependencies": {
"react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc"
}
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",