amitwh
9eb1fe0f00
test(renderer): add ResizeObserver polyfill to test setup (required for slider/shadcn components)
2026-06-05 17:23:59 +05:30
amitwh
3344b2aea9
feat(renderer): add shadcn slider primitive
2026-06-05 17:23:13 +05:30
amitwh
6b23e5ef60
feat(renderer): add shadcn switch primitive
2026-06-05 17:18:19 +05:30
amitwh
221598c91b
feat(renderer): add shadcn checkbox primitive
2026-06-05 17:13:49 +05:30
amitwh
d8ee743fb1
feat(renderer): add shadcn textarea primitive
2026-06-05 17:09:59 +05:30
amitwh
66e2b56221
feat(renderer): add shadcn input primitive
2026-06-05 17:06:36 +05:30
amitwh
d22d616727
feat(renderer): add shadcn label primitive
2026-06-05 17:03:10 +05:30
Amit Haridas
813582aa8d
feat(renderer): command store persists userBindings (Phase 6)
...
- add userBindings map (commandId -> combo string)
- setUserBinding / clearUserBinding / getUserBinding actions
- persist middleware with partialize: handlers are runtime-only,
userBindings are serialized
- TDD: 7 persistence tests + existing 10 command-store tests still pass
- 162/162 total tests pass
2026-06-05 16:02:26 +05:30
Amit Haridas
b1e16af62d
feat(renderer): AppHeader wired to command store
...
- toggle sidebar/preview buttons dispatch through command store
- new 'shortcuts.show' command (Keyboard icon, opens shortcuts panel later)
- AppHeader.test.tsx updated: registers matching commands in beforeEach
- integration test fixed: 'Open folder' button now matches 2 (toolbar + sidebar)
- 155/155 tests pass
2026-06-05 16:00:58 +05:30
Amit Haridas
487ce2ad45
feat(renderer): Toolbar wired to command store
...
- 5 functional buttons: Open file, Open folder, Save, Toggle sidebar, Toggle preview
- each dispatches via useCommandStore
- aria-pressed on toggle buttons reflects app store state
- formatting buttons (bold, italic, etc.) stay disabled (Phase 9)
- toolbar now has role='toolbar' and aria-label
- TDD: 9 component tests
2026-06-05 15:58:21 +05:30
Amit Haridas
1717b2e8c0
feat(renderer): register menu commands in AppShell (Phase 6 wiring)
...
- useRegisterMenuCommands: registers file.open, file.save, file.closeTab,
tab.next, tab.prev, view.toggleSidebar, view.togglePreview in command store
- useBridgeNativeMenu: useMenuAction for 13 native-menu channels
(file-save, toggle-preview, load-template-menu, etc.)
- AppShell calls both on mount
- integration test mock extended to include ipc.menu.on
- 145/145 tests pass (was 105)
2026-06-05 15:56:32 +05:30
Amit Haridas
cdd370c62d
feat(renderer): useMenuAction hook (native menu IPC -> command store)
...
- bridge between main-process menu events and the command dispatcher
- optional transform: convert raw IPC payload to command args
- extends ipc.ts with ipc.menu.on() helper
- TDD: 5 unit tests covering subscription, payload transform, no-op, unmount
2026-06-05 15:53:37 +05:30
Amit Haridas
6df21ace35
feat(renderer): useShortcut hook (generic key combo binding)
...
- 'mod+s' / 'mod+shift+s' / 'Tab' / etc.
- mod = meta (Mac) or ctrl (others)
- suppresses when <input>/<textarea>/contentEditable focused
- preventDefault on match
- TDD: 15 unit tests covering parser, match, suppression, unmount
2026-06-05 15:51:35 +05:30
Amit Haridas
c93747c476
feat(renderer): command store (action registry for menu/shortcut/toolbar)
...
- useCommandStore: register/unregister/registerMany/dispatch/get
- keyed by id (e.g. 'file.open', 'view.toggleSidebar')
- TDD: 10 unit tests covering register, dispatch, unregister, batch
- foundation for Phase 6 native menu + toolbar wiring
2026-06-05 15:49:45 +05:30
amitwh
5e5bab3da9
feat(renderer): persist last-opened folder (mc-file-store) + restore on mount
2026-06-05 15:36:59 +05:30
amitwh
ce2bf62d42
feat(renderer): drag-to-reorder tabs (dnd-kit)
2026-06-05 15:34:25 +05:30
amitwh
6da98c3a54
feat(renderer): keyboard shortcuts for file ops (open, save, close, next/prev tab)
2026-06-05 15:32:55 +05:30
amitwh
3598d06240
feat(preload): add file.list, file.pickFolder, file.pickFile convenience methods
2026-06-05 15:13:16 +05:30
amitwh
650c266945
feat(renderer): TabBar wired to file store (dirty dot, close, active highlight)
...
- Renders tabs from useFileStore.openTabs with title + dirty dot + close button
- Uses Zustand selectors for granular re-renders
- Active tab highlighted with aria-current and accent background
- Close button stops propagation; does not trigger tab activation
- Horizontal scroll on overflow, h-9 fixed bar with border
- Empty state preserved when no tabs open
Tests: 6 cases (empty, render, highlight, click-switch, click-close, dirty indicator)
- 75 total tests (was 70, gained 5 new)
- All pass
- Build: succeeds
Amit Haridas
2026-06-05 15:03:01 +05:30
amitwh
05bbb9f86b
feat(renderer): Sidebar, FileTree, Outline components wired into AppShell
2026-06-05 14:59:15 +05:30
amitwh
77c8e05fa5
feat(renderer): shadcn collapsible, scroll-area, context-menu primitives
2026-06-05 14:54:31 +05:30
amitwh
17f318dd75
fix(renderer): drop redundant ternary, add loadChildren idempotence test
2026-06-05 14:50:56 +05:30
amitwh
fa5a46d5ac
feat(renderer): file store with FileNode tree, openTabs, lazy loadChildren
2026-06-05 14:42:08 +05:30
amitwh
a4201acad9
feat(renderer): wire PreviewPane into AppShell
2026-06-05 13:15:47 +05:30
amitwh
0b5af04a6a
feat(renderer): PreviewPane tracks scroll ratio
2026-06-05 13:14:50 +05:30
amitwh
2d6f909b0e
feat(renderer): useScrollSync hook (60fps throttling, ratio calc)
2026-06-05 13:13:37 +05:30
amitwh
8624257c1f
feat(renderer): editor buffer content feeds preview store (300ms debounce)
2026-06-05 13:09:34 +05:30
amitwh
b75f436aaa
feat(renderer): PreviewPane with empty state and MarkdownRenderer
2026-06-05 13:07:55 +05:30
amitwh
559d09cad9
feat(renderer): preview store with 300ms debounced source
2026-06-05 13:04:39 +05:30
amitwh
5ad582ec3e
feat(renderer): MarkdownRenderer with mermaid code re-extraction from source
2026-06-05 13:03:32 +05:30
amitwh
d02f896167
feat(renderer): MermaidLazy (loads mermaid on first use, error UI)
2026-06-05 13:01:24 +05:30
amitwh
f34775ce53
feat(renderer): markdown lib (marked + DOMPurify + mermaid placeholders)
2026-06-05 12:56:31 +05:30
amitwh
5d6a55dd09
feat(renderer): StatusBar reads from editor store (word count, cursor pos)
2026-06-05 12:49:16 +05:30
amitwh
0e80e37d9d
feat(renderer): wire EditorPane into AppShell
2026-06-05 12:46:13 +05:30
amitwh
9a7e994224
feat(renderer): EditorPane with empty state and CodeMirror rendering
2026-06-05 12:42:25 +05:30
amitwh
3effacf816
feat(renderer): CodeMirror 6 editor wrapper with markdown, themes, keymaps
2026-06-05 12:38:09 +05:30
amitwh
1be10f9ae5
feat(renderer): CodeMirror light theme with brand-aware syntax colors
2026-06-05 12:25:31 +05:30
amitwh
4c0b7d6e84
feat(renderer): editor store with buffers, dirty state, cursor (immer)
2026-06-05 12:21:48 +05:30
amitwh
db04ea5854
feat(renderer): App.tsx renders AppShell
2026-06-05 12:11:01 +05:30
amitwh
567726022c
feat(renderer): AppShell with resizable panes, sidebar/preview toggle, persisted sizes
2026-06-05 12:02:35 +05:30
amitwh
1999a7716e
feat(renderer): StatusBar placeholder (word count wired in Phase 3)
2026-06-05 11:53:34 +05:30
amitwh
16e071ae5e
feat(renderer): Breadcrumb placeholder (wired in Phase 5)
2026-06-05 11:50:45 +05:30
amitwh
7ecf54ceb0
feat(renderer): Toolbar skeleton with formatting buttons
2026-06-05 11:48:26 +05:30
amitwh
95e2f45f1f
feat(renderer): TabBar skeleton (no tabs yet — wired in Phase 5)
2026-06-05 11:45:33 +05:30
amitwh
7fbbd60525
feat(renderer): AppHeader with sidebar/preview toggles + theme toggle
2026-06-05 11:40:54 +05:30
amitwh
c715bb354c
feat(renderer): install shadcn resizable primitive
2026-06-05 11:35:02 +05:30
amitwh
6525de7667
feat(renderer): add useAppStore with sidebar/preview/zen/pane-sizes
2026-06-05 11:30:25 +05:30
amitwh
a2c1d0c11a
feat(renderer): wire App.tsx shell with theme provider and top-bar
2026-06-05 10:19:36 +05:30
amitwh
e0d6315204
feat(renderer): add next-themes provider + theme toggle (sun/moon)
2026-06-05 10:17:38 +05:30
amitwh
68ff7d076a
feat(renderer): install shadcn button primitive with tests
2026-06-05 10:13:31 +05:30