Commit Graph

1533 Commits

Author SHA1 Message Date
Luca Rossi
08ce58b8e5 Merge pull request #57 from refactoringhq/task/properties-indent
fix: align Type row padding with other property rows in Properties panel
2026-02-25 00:02:56 +01:00
Luca Rossi
a8a72b54d2 Merge pull request #56 from refactoringhq/task/url-text-size
fix: apply text-[12px] to URL values in Properties panel
2026-02-25 00:02:53 +01:00
Luca Rossi
a24a9735c4 Merge pull request #55 from refactoringhq/task/rename-nota-vuota
fix: rename fails on empty notes — handle empty frontmatter block
2026-02-25 00:02:49 +01:00
Luca Rossi
db87806ffc Merge pull request #51 from refactoringhq/task/url-property-click-fix
fix: use Tauri opener plugin for URL property clicks
2026-02-25 00:02:46 +01:00
lucaronin
75f7e4fa4f fix: use Tauri opener plugin for URL property clicks
Replace window.open() with Tauri's opener plugin (openUrl) so that
clicking a URL property in the Properties panel opens the system
browser instead of failing silently or triggering edit mode.

- Install @tauri-apps/plugin-opener (npm + Cargo + capabilities)
- Add openExternalUrl() utility with Tauri/browser fallback
- Add stopPropagation to prevent accidental edit mode activation
- Add double-click guard (500ms debounce via ref)
- Update tests to mock openExternalUrl instead of window.open
- Add explicit test that URL click does not trigger onStartEdit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:02:09 +01:00
lucaronin
1d0e1284ed fix: debounce Cmd+N to prevent slow note creation on rapid keystrokes
- Add deduplication to handleCreateNoteImmediate to prevent rapid calls from creating multiple notes
- Use pending set to track in-flight create operations
- Tests: rapid triple-call dedup, default type, custom type
- Refs: useNoteActions, useTabManagement, useVaultLoader updated
2026-02-25 00:01:52 +01:00
lucaronin
49704bc76d fix: align Type row padding with other property rows in Properties panel
ReadOnlyType and TypeSelector containers were missing px-1.5, causing the
Type label to sit flush-left while all other property/info rows were
indented 6px.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:01:51 +01:00
lucaronin
49ebc3e71e fix: apply text-[12px] to URL values in Properties panel
The PR #43 text-size reduction missed the UrlValue component — both its
display span and edit input kept the old larger size. Align them with
the 12px used by EditableValue.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:01:50 +01:00
lucaronin
0f4484b28a fix: apply rustfmt formatting 2026-02-25 00:01:48 +01:00
lucaronin
a98b4c6aad fix: use strip_prefix instead of manual slice to satisfy clippy::manual_strip 2026-02-25 00:01:48 +01:00
lucaronin
873fb4d434 wip: fix rename for empty notes + add regression tests (uncommitted on process death) 2026-02-25 00:01:48 +01:00
lucaronin
8a08fb67a3 test: add command palette and fuzzy match tests
Tests for CommandPalette component (rendering, filtering, keyboard
navigation, grouped results, shortcuts display), useCommandRegistry
hook (contextual actions, archive toggle, git availability), fuzzyMatch
utility, and Cmd+K shortcut.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:43:58 +01:00
lucaronin
5d09e32b08 docs: add design file for flat list autocomplete UI
Shows the new flat suggestion menu layout: note titles on the left,
discrete type badges with accent colors on the right, no group headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:43:21 +01:00
lucaronin
7736d20b9f feat: replace grouped autocomplete with flat list and type badge
Switch wiki-link autocomplete from BlockNote's default grouped suggestion
menu to a custom flat list sorted by relevance. Each item shows the note
type (with its accent color) discretely on the right side. Reduce
MAX_RESULTS from 20 to 10 for a cleaner, more focused list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:42:09 +01:00
lucaronin
9bcc1776cc feat: add command palette with Cmd+K shortcut
Raycast-style command palette with fuzzy search across all app actions.
Groups commands by category (Navigation, Note, Git, View, Settings)
with keyboard shortcuts displayed inline. Contextual actions (trash,
archive, save) are only available when a note is open.

Extracts fuzzyMatch into shared utility for reuse.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:41:54 +01:00
lucaronin
576ce1f294 design: command-palette wireframes
Three frames: empty state with grouped actions, search results
with fuzzy filtering, and no-results state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:38:25 +01:00
Luca Rossi
9a5b37f602 Merge pull request #52 from refactoringhq/task/pallino-persistenza
fix: derive green pallino from git status instead of in-memory tracker
2026-02-24 23:29:01 +01:00
lucaronin
8b44ebbc22 fix: derive green pallino from git status instead of in-memory tracker
The green dot (new note indicator) was disappearing after Cmd+S because
markSaved cleared it from the in-memory newPaths set. Now resolveNoteStatus
derives "new" status from git status (untracked/added files) so the green
dot persists until the note is committed. The in-memory tracker is only
used for the brief window between note creation and first save to disk.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:15:37 +01:00
Luca Rossi
3ea175eec5 fix: deduplicate autocomplete suggestions and disambiguate same-title notes (#54)
BlockNote's SuggestionMenu uses item.title as React key, causing duplicate
rendering and broken arrow-key navigation when multiple notes share the
same title. Fix by:
- Adding path-based deduplication to filter out duplicate entries
- Disambiguating same-title notes with parent folder name (e.g. "Standup (work)")
- Deduplicating aliases within each item (filename vs entry.aliases overlap)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:12:35 +00:00
Luca Rossi
2e2224865c Merge pull request #50 from refactoringhq/task/relations-colori
fix: use type-defined colors and icons in Relations/Backlinks/ReferencedBy panels
2026-02-24 22:43:06 +01:00
Luca Rossi
7e586eccb0 fix: use type-defined colors and icons in Relations/Backlinks/ReferencedBy panels (#49)
The inspector panels were calling getTypeColor/getTypeLightColor/getTypeIcon
without passing the custom color/icon overrides from the Type entry, causing
all notes to render with the default blue color regardless of their type.

Now builds a typeEntryMap in Inspector and threads it through to all panels,
matching how NoteList correctly resolves type colors and icons.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:30:15 +00:00
lucaronin
a7abcc21b3 fix: use type-defined colors and icons in Relations/Backlinks/ReferencedBy panels
The inspector panels were calling getTypeColor/getTypeLightColor/getTypeIcon
without passing the custom color/icon overrides from the Type entry, causing
all notes to render with the default blue color regardless of their type.

Now builds a typeEntryMap in Inspector and threads it through to all panels,
matching how NoteList correctly resolves type colors and icons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:15:41 +01:00
lucaronin
d65eba8096 docs: add current state snapshot to VISION.md 2026-02-24 19:13:22 +01:00
lucaronin
45a0098f5c docs: add product vision document 2026-02-24 18:58:13 +01:00
lucaronin
99535cc0da design: merge differenzia-pallino frames into ui-design.pen 2026-02-24 17:31:58 +01:00
Luca Rossi
31d8bfb843 Merge pull request #48 from refactoringhq/task/differenzia-pallino
feat: distinguish new notes (green dot) from modified notes (orange dot)
2026-02-24 17:13:58 +01:00
lucaronin
e7e4dccd3f fix: restore modifiedFiles/changes-filter support alongside getNoteStatus
The previous commit replaced modifiedFiles with getNoteStatus, but main
had tests for the 'changes filter' view that depend on modifiedFiles.

This commit restores full backward compat:
- Both modifiedFiles and getNoteStatus props are accepted
- getNoteStatus takes precedence when provided (used by App.tsx)
- modifiedFiles automatically derives status='modified' when getNoteStatus
  is not provided (used by tests and legacy callers)
- isChangesView / 'Changes' header / changes filter all restored

NoteItem continues to use noteStatus prop (new | modified | clean),
so both green (new) and orange (modified) dots work correctly.
2026-02-24 17:02:22 +01:00
lucaronin
9a8b2d930a feat: distinguish new notes (green dot) from modified notes (orange dot)
New notes created in-session show a green dot; existing notes with
uncommitted git changes show an orange dot. Saving a new note clears
the green dot; git commit clears the orange dot.

Introduces NoteStatus type ('new' | 'modified' | 'clean'), extracts
useNewNoteTracker hook and resolveNoteStatus pure function, and adds
onNoteSaved callback to useEditorSave for clearing new-note tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 17:02:22 +01:00
lucaronin
bacd4e17a2 design: merge vista-changes frames into ui-design.pen 2026-02-24 16:01:41 +01:00
Luca Rossi
8276e4225d Merge pull request #47 from refactoringhq/task/icon-picker-sezioni
feat: expand icon picker to 290 Phosphor icons with search and scroll
2026-02-24 16:00:42 +01:00
Luca Rossi
6a63768892 Merge pull request #45 from refactoringhq/task/vista-changes
feat: Changes view — clicking N pending shows modified notes
2026-02-24 16:00:37 +01:00
Luca Rossi
49a4ba2491 Merge pull request #43 from refactoringhq/task/properties-text-size
fix: use consistent 12px text size for property values in Properties panel
2026-02-24 15:39:59 +01:00
lucaronin
e607859c5b design: icon-picker-sezioni wireframes (3 frames)
- Frame 1: Full grid view with 8 color swatches and scrollable icon grid
- Frame 2: Search filtered state (searching "book")
- Frame 3: Empty state (no matching icons)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:36:11 +01:00
lucaronin
b4201487ec feat: expand icon picker with ~290 icons, search, and scrollable grid
- Extract icon registry to src/utils/iconRegistry.ts with 290 curated Phosphor icons
- Add real-time search field that filters icons by name substring
- Show "No icons found" empty state when search yields no results
- Scrollable icon grid (240px max height) for browsing all icons
- Add teal and pink accent colors to the palette (8 total)
- Widen popover from 264px to 280px for better search field fit
- Update tests: search filtering, empty state, icon count validation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:36:11 +01:00
lucaronin
4c031bdb8b test: add tests for Changes view + design wireframes
- NoteList: 4 tests for changes filter (shows only modified, header,
  empty state, real-time update on rerender)
- StatusBar: 2 tests for onClickPending callback + accessibility
- Sidebar: 3 tests for Changes nav item visibility + click handler
- design/vista-changes.pen: 3 frames (pending notes, empty state,
  real-time update)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:32:23 +01:00
lucaronin
45b48e654c feat: add Changes view for pending modifications
Clicking "N pending" in the status bar or the "Changes" nav item in
the sidebar shows a filtered list of notes with uncommitted changes.
The view updates in real-time as files are saved or committed.

- Add 'changes' filter to SidebarSelection type
- Make StatusBar "N pending" indicator clickable
- Add "Changes" NavItem in sidebar (visible when modifiedCount > 0)
- Filter NoteList by modifiedFiles paths for changes view
- Show "No pending changes" empty state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:32:23 +01:00
lucaronin
f90bb1f701 fix: use consistent 12px text size for property values in Properties panel
Property values (dates, URLs, text) were inheriting the 14px root font
size instead of using the 12px size already applied in InfoRow and other
inspector sections. Standardize all property value and editing input
text to 12px for visual consistency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:31:40 +01:00
Luca Rossi
8a7fb09a46 Merge pull request #46 from refactoringhq/task/codescene-threshold
refactor: raise CodeScene code health threshold to 9.2
2026-02-24 15:16:38 +01:00
lucaronin
8911aad930 feat: raise CodeScene code health threshold to 9.2
The project currently scores ~9.33, so raising the CI gate from 8.45
to 9.2 prevents significant regressions while leaving headroom.
Updates both the CI workflow threshold and CLAUDE.md documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 15:06:24 +01:00
lucaronin
56ed81ccb0 design: merge url-property-click frames into ui-design.pen 2026-02-24 15:02:30 +01:00
Luca Rossi
d127ece50d Merge pull request #42 from refactoringhq/task/change-note-type
feat: editable type picker in Properties panel
2026-02-24 15:00:50 +01:00
Luca Rossi
be4e3c72ae Merge pull request #44 from refactoringhq/task/url-property-click
feat: URL properties open in browser on click, underline on hover
2026-02-24 14:55:37 +01:00
lucaronin
7219c0799f feat: make URL properties clickable with hover underline
- Add UrlValue component: click opens in browser, pencil icon for edit
- URL detection via isUrlValue() (http/https URLs + bare domains)
- URL normalization: prepends https:// to bare domains
- Malformed URLs silently ignored (no open attempt)
- Long URLs truncated visually but full URL opens on click
- Edit mode via pencil icon or keyboard (Enter/Escape/blur)
- 22 new tests covering detection, normalization, and component behavior

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:46:18 +01:00
lucaronin
5d73655875 design: url-property-click wireframes (3 frames)
Default, hover (underline + pointer), and edit mode states
for URL properties in the Inspector panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:39:08 +01:00
lucaronin
8cbf30358d design: merge relations-edit frames into ui-design.pen 2026-02-24 14:33:05 +01:00
Luca Rossi
ab87c046c2 Merge pull request #41 from refactoringhq/task/relations-edit
feat: editable relations in Inspector panel
2026-02-24 14:08:44 +01:00
lucaronin
fe55f9253d design: relations-edit wireframes (3 frames) 2026-02-24 14:02:05 +01:00
lucaronin
5d833b4203 feat: replace read-only Type field with editable dropdown selector
The Type field in the Properties panel was read-only. Now it uses a
Radix Select dropdown that lists all vault types (entries where
isA === "Type"), plus a "None" option to clear the type. Wired to
the existing onUpdateProperty('type', ...) flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:00:34 +01:00
lucaronin
1a87036087 feat: make relations editable with add/remove controls
Add remove (X) button on hover for each related note in a relationship
group, and inline add control with autocomplete to add new notes to
existing relations. Changes update frontmatter via the existing
update/delete property pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:47:30 +01:00
lucaronin
2a9a3dd2f6 fix: remove .claude-done from tracking, add to .gitignore 2026-02-24 13:40:49 +01:00