Commit Graph
200 Commits
Author SHA1 Message Date
Hiren Kangad 7b2fcfd6a8 refboard: add native image copy and export renderer 2026-03-13 15:48:12 +05:30
Hiren Kangad ae9b1ecefe refboard: avoid eager extract fallback for canvas snapshots 2026-03-13 15:36:12 +05:30
Hiren Kangad 80ec4808e8 refboard: await clipboard writes before copy success 2026-03-13 15:33:37 +05:30
Hiren Kangad 3dd110f491 refboard: restore clipboard copy and native paste flows 2026-03-13 15:30:23 +05:30
Hiren Kangad e9e0c25491 refboard: standardize clipboard copy on rendered canvas 2026-03-13 15:27:41 +05:30
Hiren Kangad cd8207e984 refboard: capture board previews from rendered canvas 2026-03-13 15:23:08 +05:30
Hiren Kangad c21a0c386d refboard: add corner rotation grips 2026-03-13 15:10:45 +05:30
Hiren Kangad 8d34d42377 refboard: preserve center when rotating items 2026-03-13 15:05:54 +05:30
Hiren Kangad 98fb7be77e refboard: add visible rotate controls 2026-03-13 15:01:25 +05:30
Hiren Kangad cb59fbb150 fix(crop): fix editor positioning for flipped images with asymmetric crops
The crop editor (getImageEditorGeometry) was anchoring on a view-space
point that maps differently in cropped vs uncropped local space when
flipped. For asymmetric crops + flip, the full image would appear
shifted from where the visible image was — the user saw the image
"jump" when entering crop mode.

Fix: anchor on the container's local origin instead. In the cropped
sprite, local (0,0) corresponds to source pixel (srcRect.x, srcRect.y).
Position the editor so that same source pixel maps to the same world
point in both cropped and uncropped states. This works correctly for
all flip/rotation/crop combinations.
2026-03-13 14:54:36 +05:30
Hiren Kangad 21a724c0f4 fix: address code review findings from crop/text commit
- Fix crop confirm anchor drift for rotated images by using crop corner
  world point instead of AABB min in useCanvasSetup.ts
- Document ungroup shear limitation for non-uniform scale + rotation
- Add 6 integration tests covering crop confirm and ungroup paths
2026-03-13 13:47:14 +05:30
Hiren Kangad 9a4edd90c7 refboard: complete image geometry rework — consumer adoption + tests
- Fix grouping.ts ungroup: transform display position (with flip
  compensation) through group transform, then back-calculate canonical
  data.x/y. Fixes visual jump for flipped images in rotated groups.
- Fix clipboard.ts + export.ts resolution estimation: account for
  scale when computing effective rendered width for texture ratio.
- Add imageTransforms.test.ts: 32 unit tests covering source rect,
  visible local rect, display transform, display geometry, editor
  geometry anchor preservation, crop rect round-trips, coordinate
  conversions, negative scale normalization, and world bounds invariants.
- Add vitest as dev dependency with "test" script.
- Include canonical geometry layer (imageTransforms.ts) and crop
  session rewrite (CropOverlay.ts) from prior work.
- Add image geometry rework plan document.
2026-03-13 13:37:42 +05:30
Hiren Kangad c874e34577 refboard: export cropped images from visible frame 2026-03-13 13:05:31 +05:30
Hiren Kangad 407fa82915 refboard: fix flipped image crop coordinate mapping 2026-03-13 13:03:37 +05:30
Hiren Kangad cd9db8816c refboard: cull images by visible bounds 2026-03-13 12:59:20 +05:30
Hiren Kangad dc283124d7 refboard: centralize image visible frame transforms 2026-03-13 12:58:29 +05:30
Hiren Kangad 768de39463 refboard: use full image geometry in crop mode 2026-03-13 12:50:13 +05:30
Hiren Kangad ddd395444d refboard: resize images from visible bounds 2026-03-13 12:46:48 +05:30
Hiren Kangad 50dbb4e0cf refboard: anchor crop apply to selected region 2026-03-13 12:42:16 +05:30
Hiren Kangad 267deefc10 refboard: preserve image position when applying crop 2026-03-13 12:39:24 +05:30
Hiren Kangad 18c968b54f refboard: fix cropped image offset transforms 2026-03-13 12:36:57 +05:30
Hiren Kangad 4dc338cdb6 refboard: rebase cropped image rendering to visible frame 2026-03-13 12:33:03 +05:30
Hiren Kangad f6a937f598 refboard: use visible bounds for image layout ops 2026-03-13 12:25:29 +05:30
Hiren Kangad 5c13def2d2 refboard: improve crop preview and cropped bounds focus 2026-03-13 12:15:22 +05:30
Hiren Kangad 4f8e3984b2 refboard: fix crop pointer coordinate mapping 2026-03-13 12:04:57 +05:30
Hiren Kangad c78325227f refboard: drive crop drag from DOM pointer events 2026-03-13 11:57:26 +05:30
Hiren Kangad 421ad176d4 refboard: align crop drag handling with transform box 2026-03-13 11:48:13 +05:30
Hiren Kangad e1b97d52f8 refboard: route crop drag events through viewport 2026-03-13 11:41:03 +05:30
Hiren Kangad 8e23c3e884 refboard: hide transform box during crop mode 2026-03-13 11:37:03 +05:30
Hiren Kangad f978153a83 fix: improve text sharpness on zoom with tighter buckets and reliable init
Fix text staying blurry on zoom by ensuring the first setZoomBucket call
always applies (PixiJS v8 defaults to auto-resolution which skipped the
initial bucket=1 assignment), listening on both 'moved' and 'zoomed'
viewport events, and tightening bucket thresholds from 6 to 9 levels.
2026-03-13 11:33:57 +05:30
Hiren Kangad 470693266e refboard: stabilize crop interaction bounds 2026-03-13 11:31:18 +05:30
Hiren Kangad accbe2e0f3 fix(markdown): polish editor UX — side panel, overlay sync, paste segregation
- Move markdown editor from canvas overlay to side panel (70% width)
  for better performance and editing experience
- Add @blocknote/mantine for full BlockNoteView with default UI components
- Fix socket reconnect loop caused by unstable pasteOpts object reference
  (memoize with useMemo)
- Add ResizeObserver to markdown overlay cards for automatic height sync
- Call mdOverlay.refreshAll() on every canvas change so overlays track
  pack/grid/arrange/save operations
- Paste goes to BlockNote editor when contentEditable is focused
- Simplify toolbar: single color picker (accent + auto-derived bg),
  title/name field, width presets S/M/L
- Guard normalize/flip operations to skip markdown and sticky items
- Fix title not updating on card preview (pass name prop, bump revision)
- Fix preview not refreshing after editor save (revision counter + overlay refresh)
2026-03-13 11:21:28 +05:30
Hiren Kangad a7579a9ff5 refboard: add manual board preview refresh button 2026-03-13 11:21:28 +05:30
Hiren Kangad b350951bf1 refboard: merge crop mode polish with markdown editor 2026-03-13 11:21:28 +05:30
Hiren Kangad 04d499b755 fix(markdown): address code review findings — updateItem, height measurement, CSS injection, paste fallback, resize sprite update 2026-03-13 11:21:28 +05:30
Hiren Kangad dfdfd07a1d feat(markdown): add contextual toolbar for background color, accent color, and width presets 2026-03-13 11:21:28 +05:30
Hiren Kangad aa3112a5bc feat(markdown): add paste detection with PasteChoicePopup for text/markdown/image
Simplify Ctrl+V shortcut to only handle recent internal copies, letting
native paste events flow to setupPaste for external clipboard content.
Extend setupPaste with text/HTML detection and popup callbacks. Wire
PasteChoicePopup in Editor.tsx with markdown (turndown HTML-to-MD),
plain text, and image paste choices.
2026-03-13 11:21:28 +05:30
Hiren Kangad 375e7adc4a feat(markdown): add PasteChoicePopup component for paste-as choice 2026-03-13 11:21:28 +05:30
Hiren Kangad 11fc3c6d8e feat(markdown): horizontal-only resize with ResizeConstraint enum in TransformBox 2026-03-13 11:21:28 +05:30
Hiren Kangad b1163c3232 feat(markdown): integrate undo/redo for edit mode and checkbox toggles 2026-03-13 11:21:28 +05:30
Hiren Kangad 6118193f19 feat(markdown): add MARKDOWN tool, toolbar button, and m/6 shortcuts 2026-03-13 11:21:28 +05:30
Hiren Kangad 2d5396ef09 feat(markdown): add double-click → edit mode via SelectionManager callback 2026-03-13 11:21:27 +05:30
Hiren Kangad 02597abc9d fix: suppress canvas shortcuts when contenteditable is focused (BlockNote) 2026-03-13 11:21:27 +05:30
Hiren Kangad 2cede1ae95 feat(markdown): add MarkdownEditView with lazy BlockNote editor + dark theme styles 2026-03-13 11:21:27 +05:30
Hiren Kangad 10135463b1 feat(markdown): wire MarkdownOverlay into canvas lifecycle with React portals 2026-03-13 11:21:27 +05:30
Hiren Kangad ced187bbd3 feat(markdown): add MarkdownReadView component with dark theme and checkbox toggling 2026-03-13 11:21:27 +05:30
Hiren Kangad 0d40b2b973 feat(markdown): add MarkdownOverlay DOM overlay manager 2026-03-13 11:21:27 +05:30
Hiren Kangad de527954da feat(markdown): add MarkdownSprite and register in SceneManager
Creates MarkdownSprite (Graphics-only background rect with header bar)
and wires it into SceneManager._createItem() under case 'markdown'.
2026-03-13 11:21:27 +05:30
Hiren Kangad f989a8111b feat(markdown): add markdownDefaults module with constants and extractTitle 2026-03-13 11:21:27 +05:30
Hiren Kangad 50c34a409f feat(markdown): add MarkdownObject type to scene format 2026-03-13 11:21:27 +05:30