* feat: Implement CRDT-based layout system for Vue nodes
Major refactor to solve snap-back issues and create single source of truth for node positions:
- Add Yjs-based CRDT layout store for conflict-free position management
- Implement layout mutations service with clean API
- Create Vue composables for layout access and node dragging
- Add one-way sync from layout store to LiteGraph
- Disable LiteGraph dragging when Vue nodes mode is enabled
- Add z-index management with bring-to-front on node interaction
- Add comprehensive TypeScript types for layout system
- Include unit tests for layout store operations
- Update documentation to reflect CRDT architecture
This provides a solid foundation for both single-user performance and future real-time collaboration features.
Co-Authored-By: Claude <noreply@anthropic.com>
* style: Apply linter fixes to layout system
* fix: Remove unnecessary README files and revert services README
- Remove unnecessary types/README.md file
- Revert unrelated changes to services/README.md
- Keep only relevant documentation for the layout system implementation
These were issues identified during PR review that needed to be addressed.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: Clean up layout store and implement proper CRDT operations
- Created dedicated layoutOperations.ts with production-grade CRDT interfaces
- Integrated existing QuadTree spatial index instead of simple cache
- Split composables into separate files (useLayout, useNodeLayout, useLayoutSync)
- Cleaned up operation handlers using specific types instead of Extract
- Added proper operation interfaces with type guards and extensibility
- Updated all type references to use new operation structure
The layout store now properly uses the existing QuadTree infrastructure for
efficient spatial queries and follows CRDT best practices with well-defined
operation interfaces.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: Extract services and split composables for better organization
- Created SpatialIndexManager to handle QuadTree operations separately
- Added LayoutAdapter interface for CRDT abstraction (Yjs, mock implementations)
- Split GraphNodeManager into focused composables:
- useNodeWidgets: Widget state and callback management
- useNodeChangeDetection: RAF-based geometry change detection
- useNodeState: Node visibility and reactive state management
- Extracted constants for magic numbers and configuration values
- Updated layout store to use SpatialIndexManager and constants
This improves code organization, testability, and makes it easier to swap
CRDT implementations or mock services for testing.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add node slots to layout tree
* Revert "Add node slots to layout tree"
This reverts commit 460493a620.
* Remove slots from layoutTypes
* Totally not scuffed renderer and adapter
* Revert "Totally not scuffed renderer and adapter"
This reverts commit 2b9d83efb8.
* Revert "Remove slots from layoutTypes"
This reverts commit 18f78ff786.
* Reapply "Add node slots to layout tree"
This reverts commit 236fecb549.
* Revert "Add node slots to layout tree"
This reverts commit 460493a620.
* docs: Replace architecture docs with comprehensive ADR
- Add ADR-0002 for CRDT-based layout system decision
- Follow established ADR template with persuasive reasoning
- Include performance benefits, collaboration readiness, and architectural advantages
- Update ADR index
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>
* nx: Initialize nx
https://nx.dev/getting-started/adding-to-existing
* fix: Migrator ordering issue for vitest scripts
* nit: trailing newline
* deps: Updated select dependencies to fix Storybook with pnpm
* fix: Add explicit knip entry point for current workspace
...since it's not inferred from the script now.
* migration: npm to pnpm
Step 1, package and lockfile
* migration: npm to pnpm
Step 2: docs / LLM instructions
* migration: npm to pnpm
Step 3: More documentation updates
* migration: npm to pnpm
Step 4: Even more documentation
* migration: npm to pnpm
Step 5: GitHub Actions
* migration: npm to pnpm
Step 6: PNPM installation in actions. This merge is going to be painful.
* migration: npm to pnpm
Unignore and add pnpm lockfile.
* migration: npm to pnpm
package-lock.json -> pnpm-lock.yaml
* migration: explicit @primeuix/styled, move glob to prod deps
* migration: more explicit deps required by the importmap plugin and vite
* fix: missed merge artifact
* fix: Make sure pnpm is available to install wrangler
* migration: pnpm for dev-release.yaml
* migration: new setup action version
Won't work until that is updated and a new release is cut.
* migration: Playwright needs uuid
* migration: Add explicit deps for lobehub
* chore(version-bump.yaml): change cache from npm to pnpm to optimize package management and improve build performance
* migration: install pnpm in version-bump action
---------
Co-authored-by: snomiao <snomiao@gmail.com>
* Add support for custom iconify using tailwind plugin
- Register svgs from custom icons folder
- Update existing custom icons to remove padding
- Swap component icons for classes in sidebar tabs
- Update browse templates in menu to use custom icon
* Add basic check for custom SVG icons
* Remove unused iconify packages
- Enable caching for prettier and knip commands to improve CI performance
- Add no-cache variants for consistency with existing lint scripts
- Exclude generated type files from prettier formatting
- Add .prettiercache to .gitignore for proper cache management
Follows the same optimization pattern as ESLint caching from PR #4926.
* [feat] Add Storybook setup and NodePreview story
- Install and configure Storybook v9.1.1 for Vue 3
- Set up Storybook configuration with Vite integration
- Add Pinia store support for Storybook environment
- Create comprehensive NodePreview.stories.ts with multiple node examples:
- KSampler node (complex node with multiple inputs/outputs)
- CLIP Text Encode node (simple text input node)
- VAE Decode node (image processing node)
- Example with long markdown description
- Configure project paths and aliases for Storybook
- Stories demonstrate various ComfyUI node types with realistic mock data
- Update tsconfig.eslint.json to include Storybook files
- Fix ESLint issues with imports and number precision
- Add Storybook ESLint plugin configuration
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Improve Storybook configuration and setup
- Add comprehensive PrimeVue theme setup with ComfyUI preset
- Configure proper Vue app setup with Pinia stores, i18n, and services
- Remove unused onboarding addon from Storybook dependencies
- Improve Vite configuration with better chunking and alias resolution
- Add proper CSS imports and styling for ComfyUI components
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [docs] Add comprehensive Storybook documentation
- Add README.md explaining Storybook usage, benefits, and comparison with other tools
- Add CLAUDE.md with development guidelines for working with Storybook
- Include best practices, troubleshooting tips, and integration notes
- Address PR review feedback for better developer onboarding
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [refactor] Remove ts-expect-error comment from Storybook preview
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [bugfix] Fix TypeScript errors in Load3D components and GLTF test
- Fix type mismatches in Load3DScene eventConfig by casting string values to proper enum types (MaterialMode, CameraType, UpDirection)
- Fix Uint8Array vs ArrayBuffer type issues in GLTF test by using .buffer property
- Remove unused @ts-expect-error comment in Rectangle.ts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Add Chromatic GitHub Action for Storybook visual testing
- Add automated visual regression testing for Storybook components
- Configure workflow to run on main branch and PRs
- Auto-accept changes on main branch for baseline updates
- Uses build-storybook script for optimized builds
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [docs] Add Chromatic documentation to Storybook README
- Document Chromatic visual testing integration
- Add information about automated testing workflow
- Include best practices for visual regression testing
- Explain how to view and manage test results
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(chromatic.yaml): restrict push branches to main only for better workflow management
* [feat] Rebase branch onto main and update Storybook configuration
- Rebase sno-storybook branch onto origin/main with latest changes
- Update .storybook/main.ts with additional plugins and component configuration
- Add icons and component resolvers for Storybook support
- Update .gitignore with new entries
- Regenerate package-lock.json after rebase conflicts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [bugfix] Fix TypeScript errors in SubgraphNode type checking
Add proper type validation for subgraph node selection before calling
SubgraphNode-specific methods. This prevents undefined values from being
passed to functions expecting SubgraphNode parameters.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(vite.config.mts): correct path alias for src directory to ensure proper resolution in the project
refactor(vite.config.mts): adjust templates proxy configuration for better readability and maintainability
* [feat] Remove bun.lock as it's now ignored
* [bugfix] Fix Storybook builder require() error by converting main.ts to main.mjs
- Convert .storybook/main.ts to main.mjs to resolve ES module compatibility
- Use dynamic imports instead of static imports to avoid require() errors
- Add .storybook directory to tsconfig.json includes
- Storybook build and dev server now work correctly
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(storybook): replace main.mjs with main.ts for improved type safety and maintainability
fix(storybook): remove unused import map plugins in Storybook configuration to prevent potential issues
fix(storybook): update color palette store initialization to streamline code and improve readability
* [feat] Optimize Chromatic workflow with automated PR status comments
- Replace complex GitHub Script actions with edumserrano/find-create-or-update-comment@v3
- Add comprehensive PR comments showing Storybook build progress and results
- Include build metrics: components, stories, visual changes, and errors
- Add direct links to Chromatic builds and Storybook previews
- Reduce workflow complexity by ~60 lines while maintaining functionality
- Use native GitHub Actions expressions for cleaner maintainability
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(chromatic.yaml): move permissions section inside the chromatic-deployment job for better organization and clarity
* [fix] Resolve Vite CJS deprecation warning in Storybook config
- Use dynamic import for mergeConfig to avoid CJS build warning
- Replace static import with dynamic import in viteFinal function
- Maintain type safety with separate type import
- Fixes "The CJS build of Vite's Node API is deprecated" warning
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(chromatic.yaml): change edit-mode from replace to append to preserve existing comments in pull request
* [fix] Replace __dirname with process.cwd() in Storybook config
__dirname is not available in all environments. Using process.cwd()
provides better compatibility and resolves path issues in Storybook.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feature: storybook-setting (#5088)
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jin Yi <jin12cc@gmail.com>
- Created .git-blame-ignore-revs file to exclude mass formatting commits
- Added automatic git config in package.json prepare script
- Excluded litegraph migration formatting commit (10k+ line changes)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>