Phase 3 - Undo/Redo System: - Create generic useUndoRedo hook with configurable options - Add localStorage persistence for per-study history (max 30 steps) - Create useSpecUndoRedo hook integrating with useSpecStore - Add useUndoRedoKeyboard hook for Ctrl+Z/Ctrl+Y shortcuts - Add undo/redo buttons to canvas header with tooltips - Debounced history recording (1s delay after changes) Phase 4 - Monaco Code Editor: - Create CodeEditorPanel component with Monaco editor - Add Python syntax highlighting and auto-completion - Include pyNastran/OP2 specific completions - Add Claude AI code generation integration (placeholder) - Include code validation/run functionality - Show output variables preview section - Add copy-to-clipboard and generation prompt UI Dependencies: - Add @monaco-editor/react package Technical: - All TypeScript checks pass - All 15 unit tests pass - Production build successful
72 lines
2.2 KiB
JSON
72 lines
2.2 KiB
JSON
{
|
|
"name": "atomizer-dashboard-frontend",
|
|
"private": true,
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc && vite build",
|
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
"preview": "vite preview",
|
|
"test": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:coverage": "vitest --coverage",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:ui": "playwright test --ui"
|
|
},
|
|
"dependencies": {
|
|
"@monaco-editor/react": "^4.7.0",
|
|
"@nivo/core": "^0.99.0",
|
|
"@nivo/parallel-coordinates": "^0.99.0",
|
|
"@react-three/drei": "^10.7.7",
|
|
"@react-three/fiber": "^9.4.0",
|
|
"@tanstack/react-query": "^5.90.10",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/three": "^0.181.0",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"@xterm/addon-web-links": "^0.11.0",
|
|
"clsx": "^2.1.1",
|
|
"katex": "^0.16.25",
|
|
"lucide-react": "^0.554.0",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router-dom": "^6.20.0",
|
|
"react-syntax-highlighter": "^16.1.0",
|
|
"react-use-websocket": "^4.13.0",
|
|
"reactflow": "^11.11.4",
|
|
"recharts": "^2.10.3",
|
|
"rehype-katex": "^7.0.1",
|
|
"remark-gfm": "^4.0.1",
|
|
"remark-math": "^6.0.0",
|
|
"tailwind-merge": "^3.4.0",
|
|
"three": "^0.181.2",
|
|
"xterm": "^5.3.0",
|
|
"zustand": "^5.0.10"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.57.0",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/react": "^18.2.43",
|
|
"@types/react-dom": "^18.2.17",
|
|
"@typescript-eslint/eslint-plugin": "^6.14.0",
|
|
"@typescript-eslint/parser": "^6.14.0",
|
|
"@vitejs/plugin-react": "^4.2.1",
|
|
"@vitest/coverage-v8": "^4.0.17",
|
|
"@vitest/ui": "^4.0.17",
|
|
"autoprefixer": "^10.4.16",
|
|
"eslint": "^8.55.0",
|
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
"eslint-plugin-react-refresh": "^0.4.5",
|
|
"jsdom": "^27.4.0",
|
|
"postcss": "^8.4.32",
|
|
"tailwindcss": "^3.3.6",
|
|
"typescript": "^5.2.2",
|
|
"vite": "^5.0.8",
|
|
"vitest": "^4.0.17"
|
|
}
|
|
}
|