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
phase-4-preview
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
d81d8c28d2
test(renderer): remove non-existent html property from preview-store reset
2026-06-05 13:07:06 +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)
phase-3-editor
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
phase-2-shell
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
phase-1-foundation
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
amitwh
67b57eae78
feat(renderer): add motion preset transitions for modals/sidebar/toasts
2026-06-05 09:37:49 +05:30
amitwh
301c51ac84
test(renderer): add failing test for motion presets
2026-06-05 09:36:18 +05:30
amitwh
904ffbdd5b
feat(renderer): implement typed IPC wrapper with IpcResult discriminated union
2026-06-05 09:34:19 +05:30
amitwh
ea383783ec
test(renderer): add failing test for ipc wrapper + IpcResult types
2026-06-05 09:25:02 +05:30
amitwh
e758a81c4c
feat(renderer): implement cn() helper for tailwind-merge + clsx
2026-06-05 09:23:30 +05:30
amitwh
ea0f3f93bf
test(renderer): add failing test for cn() helper + vitest config
2026-06-05 09:20:04 +05:30
amitwh
188e73d7c1
feat(renderer): configure shadcn/ui, extend design tokens for glassy aesthetic
2026-06-05 09:13:52 +05:30
amitwh
8265e4ff88
chore(deps): add shadcn/ui ecosystem, motion, zustand+immer, test stack
2026-06-05 09:01:45 +05:30
amitwh
8a8671b128
docs(plan): add React UI redesign implementation plan (10 vertical slices)
...
- Phase 1: Foundation (shadcn, deps, lib utils, motion presets, theme)
- Phase 2: App shell + resizable panes
- Phase 3: Editor (CodeMirror 6 + immer store)
- Phase 4: Preview (marked + KaTeX + mermaid + scroll sync)
- Phase 5: File tree + tabs
- Phase 6: Native menus + toolbar
- Phase 7: Modals (export, settings, about, confirm)
- Phase 8: Toasts (sonner)
- Phase 9: Advanced tools (zen, repl, ascii, table, print, word)
- Phase 10: Polish + delete legacy renderer
Phases 1-4 are fully fleshed out (60+ TDD tasks with working code).
Phases 5-9 are sketched with the same TDD pattern; detailed
steps will be expanded at execution time following the conventions
established in Phases 1-4.
design/react-ui-redesign/plan-v1
2026-06-05 08:52:03 +05:30
amitwh
3646dc29c6
docs(spec): fix spec self-review issues (typo, drag-vs-resize, lazy-load ambiguity)
design/react-ui-redesign/v1.0
2026-06-05 08:27:33 +05:30
amitwh
a999f598cc
docs(spec): add React + shadcn/ui UI redesign design spec
...
Brainstormed via superpowers:brainstorming. Locks in:
- Full feature parity with legacy renderer
- Polished + Glassy (Raycast/Arc) visual style
- IDE-style layout with draggable divider
- shadcn/ui + Motion (Framer Motion) + Zustand stack
- A/B/D modal patterns (no command palette)
- 10-phase vertical-slice implementation plan
2026-06-05 08:26:02 +05:30
amitwh
7a396f64a6
feat(renderer): setup React, Vite, Tailwind CSS and Zustand state management
2026-06-03 23:23:59 +05:30
amitwh
88e9a5290d
fix(renderer): add ensureEditor fallback and fix pandoc export path
...
1. Source editor blank: Added ensureEditor() method with try-catch that
lazily creates the CodeMirror editor when setEditorContent is called
if the initial DOMContentLoaded creation failed or was skipped.
Replaced inline createEditor calls in createTabElements and
DOMContentLoaded with ensureEditor().
2. Export via pandoc failing: runPandocCmd parsed the full path
/bin/linux/pandoc as the command, then prepended it to args because
parsed.command !== 'pandoc'. This caused pandoc to receive its own
binary path as the first input file. Fix: use path.basename() to
check if the command ends with 'pandoc' (or 'pandoc.exe').
Amit Haridas
v4.4.2-stable
2026-06-03 20:44:00 +05:30
amitwh
fff15d8d3e
fix(renderer): add window.electronAPI shim and update CSP for KaTeX
...
The main window uses nodeIntegration without preload, so window.electronAPI
was undefined. This caused the DOMContentLoaded handler to crash at:
await window.electronAPI.getAppVersion()
which prevented the CodeMirror editor from being created (blank source
window) and stopped renderer-ready from being sent (broken menu/options).
Fixes:
1. Add window.electronAPI shim at top of renderer.js wrapping ipcRenderer.
2. Update CSP meta tag to allow KaTeX CDN (style-src, script-src, font-src).
Amit Haridas
2026-06-03 15:37:20 +05:30
amitwh
c574d77c20
fix(renderer): remove let ModalManager to prevent SyntaxError on load
...
ModalManager.js is loaded via <script> tag in index.html, which
declares class ModalManager in the global script scope. renderer.js
was then doing 'let ModalManager;' which caused:
SyntaxError: Identifier 'ModalManager' has already been declared
This prevented renderer.js from executing at all, breaking tabs,
editor, file open, and preview rendering.
Fix: conditionally require ModalManager only if undefined, without
re-declaring. In sloppy mode this safely assigns to the existing global.
Amit Haridas
2026-06-03 15:25:22 +05:30
amitwh
272215f9af
fix(renderer): prevent welcome screen from overwriting opened markdown files
...
The welcome tab setup awaited getAppVersion() inside DOMContentLoaded.
While yielding, the renderer-ready timeout fired, file-opened was processed,
and openFile rendered the markdown. When the welcome setup resumed, it
overwrote tab.content and preview.innerHTML with the welcome screen,
leaving the preview blank.
Fix: only show the welcome screen if the tab is still empty (no filePath
and no content) when the async setup resumes.
Amit Haridas
2026-06-03 15:14:41 +05:30
amitwh
0192590567
fix(renderer): add missing closing brace for redo IPC handler
...
The ipcRenderer.on('redo') callback was missing its closing });
introduced in a9e05d2 , causing SyntaxError: Unexpected end of input.
Amit Haridas
2026-06-03 14:36:59 +05:30
amitwh
96df5652d6
fix: resolve list-directory IPC handler closing brace syntax error
2026-05-26 11:39:57 +05:30
amitwh
a9e05d2c0f
feat: implement Custom Preview CSS, Reveal.js options, Large File Mode, and Interactive PDF Thumbnail Sidebar
2026-05-25 23:11:47 +05:30