4 Commits
Author SHA1 Message Date
Immac f8f4633785 feat: single-item ZIP export/import with per-item collision prompts
Frontend (client-side):
- Add JSZip dependency for ZIP creation/parsing
- StyleCard: export style as ZIP with image in images/styles/
- MixCard: export mix as ZIP with referenced styles + all images
- main.tsx: client-side ZIP parsing for small mix imports
  - Detect name collisions with existing library
  - Prompt user per conflicting item (OK=replace, Cancel=rename)
  - Rewrite JSON client-side before upload

Backend (complementary/alternative):
- Add import_mode (replace/merge) and duplicate_policy (rename/replace/skip)
- _merge_data(): comprehensive merge with ID remapping, conflict resolution
- _apply_import(): orchestrates import with validation and summary
- POST /api/data: accepts import params, returns detailed summary
- POST /api/restore.zip: accepts mode/policy query params, uses merge logic
- Summary includes: added/conflicted styles and mixes (max 10 each)
2026-03-09 20:54:42 -06:00
Immac dcfcb057eb feat: use react-resizable-panels for resizable section dividers 2026-03-01 22:49:39 -06:00
Immac afea741829 fix: add @types/node and enable node types in tsconfig.node.json 2026-03-01 17:51:35 -06:00
Immac 921524bb80 Step 5: scaffold ui/ (React+Vite), verified build outputs to dist/immac_style_mixer/ 2026-03-01 17:02:02 -06:00