Commit Graph

8 Commits

Author SHA1 Message Date
lucaronin
2c8befab93 fix: make backlinks update reactively when wikilinks are added or removed
Backlinks previously relied on scanning allContent (raw markdown), which
was empty in Tauri mode until notes were explicitly saved. Now outgoing
wikilink targets are extracted during Rust vault scan and stored on
VaultEntry. The frontend useBacklinks hook uses this indexed data, and
outgoingLinks update in real-time on content change.

- Add extract_outgoing_links() in Rust parsing + outgoing_links field on VaultEntry
- Add extractOutgoingLinks() TypeScript utility for real-time updates
- Rewrite useBacklinks to use outgoingLinks instead of scanning raw content
- Add cache version invalidation to force rescan on format change
- Extract useEditorSaveWithLinks hook to keep App.tsx under code health threshold

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 18:07:04 +01:00
Luca Rossi
e55e4b6fd0 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
lucaronin
dd9b306100 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
4c6a0d4606 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
31f794180e test: add migration and type-field parsing tests
Rust (9 new tests):
- test_parse_type_field: 'type:' in YAML maps to is_a field
- test_parse_type_field_takes_precedence_over_is_a: 'type' wins over 'Is A'
- test_parse_legacy_is_a_still_works: backward compat for 'Is A:'
- test_parse_snake_case_is_a_still_works: backward compat for 'is_a:'
- test_migrate_file_is_a_to_type: single-file migration
- test_migrate_file_quoted_is_a_to_type: handles "Is A" variant
- test_migrate_file_preserves_existing_type: type: takes precedence
- test_migrate_file_no_change_needed: skip already-migrated files
- test_migrate_vault: vault-wide migration counts correctly

Frontend (2 new tests):
- frontmatterToEntryPatch maps 'type' key to isA field
- DynamicPropertiesPanel skips is_a/Is A/type from property list

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:34:22 +01:00
lucaronin
4438e9c4ef fix: hide is_a/Is A from editable properties (already shown as TypeRow)
The is_a frontmatter key was appearing both as the TypeRow badge and
as a regular editable property. Added both 'is_a' and 'Is A' variants
to SKIP_KEYS to prevent duplication (snake_case used in mock data,
space-separated used in real vault YAML).

Added test verifying is_a is skipped when TypeRow is present.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:35:50 +01:00
lucaronin
d2b97a2c38 feat: distinguish editable from read-only properties in inspector
Split the Properties panel into two visually distinct sections:

1. **Properties** (editable): frontmatter properties with interactive
   hover background, cursor pointer, and click-to-edit. Includes Type
   row, Status, Owner, tags, and all user-defined properties.

2. **Info** (read-only): derived metadata shown below a border
   separator with an "Info" header. Uses muted color (--text-muted)
   with no hover states or click interaction. Includes:
   - Modified date
   - Created date (new)
   - Word count
   - File size (new, formatted as B/KB/MB)

Product decisions:
- Info section uses --text-muted for both labels and values (more
  dimmed than the --muted-foreground used by editable labels)
- Editable rows get rounded hover:bg-muted on the full row
- Type row stays at top of Properties as an identity element
- Added Created date and file Size to give more useful metadata

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:19:57 +01:00
lucaronin
e1cdd86ab2 test: add component tests — StatusBar, CommitDialog, DiffView, QuickOpenPalette, ResizeHandle, CreateNoteDialog, EditableValue, TypeCustomizePopover, DynamicPropertiesPanel, InspectorPanels
251 tests covering:
- StatusBar: note count, vault menu interactions
- CommitDialog: file count badge, submit via click/Cmd+Enter, validation
- DiffView: line rendering, color coding, line numbers
- QuickOpenPalette: search, sorting, fuzzy filtering, keyboard navigation
- ResizeHandle: drag with rAF batching, delta accumulation, cursor reset
- CreateNoteDialog: title input, submit, validation, defaultType
- EditableValue: view/edit modes, Enter/Escape/blur, TagPillList CRUD
- TypeCustomizePopover: resolveIcon, color/icon selection
- DynamicPropertiesPanel: properties, status pills, boolean toggle, tags,
  add property form, value coercion, delete
- InspectorPanels: relationships, backlinks, git history, navigation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 12:02:44 +01:00