43 Commits

Author SHA1 Message Date
olivier e8ba4cd2ad release v1.7.0: redesigned calendar with coloured system indicators v1.7.0 2026-09-08 10:18:43 -04:00
olivier 5a9b7bfff8 docs: describe calendar indicator defaults and autocomplete 2026-09-07 21:53:03 -04:00
olivier 72a61e49ee fix: default calendar to system indicators
Use coloured system markers by default, preserve configured colours through settings migration, expose all template fields through native vault-path autocomplete, and remove the redundant Calendar heading.
2026-09-07 21:52:34 -04:00
olivier 069456799e feat: add coloured calendar system indicators
Add a selectable single-dot or per-system indicator mode. Date systems now carry configurable colours; results are cached per displayed month and invalidated when paths/settings change. Refine calendar hierarchy, spacing, hover, and today states.
2026-09-07 21:43:21 -04:00
olivier 12209155dc release v1.6.0: add calendar date systems v1.6.0 2026-09-07 21:34:32 -04:00
olivier e027ac4a9e fix: let Templater own date-system templates
Leave the default Journal and Meeting systems without a raw Waypoint template so Templater folder triggers own interactive rendering. Their fallback frontmatter now matches the journal and meeting types. Document the required folder-trigger setup and selected-date filename contract.
2026-09-07 21:33:03 -04:00
olivier 26a1a481ac feat: add date systems menu to calendar days
Right-clicking a calendar day now lists every configured date-prefixed note system. Journal notes are singletons; {title} formats support multiple notes per date, such as meetings.\n\nAdds default Journal and Meeting systems, configurable settings UI, safe filename/title handling, one shared dated-note creation path, and a compiled menu smoke test fixture in the test vault.
2026-09-07 21:07:18 -04:00
olivier b617c275eb release v1.5.2: crash, data-loss, and race-condition fixes v1.5.2 2026-09-07 20:30:05 -04:00
olivier bb842b55b4 chore: sync stale lockfile version (1.0.0 -> 1.5.1)
Written by a clean npm install; no dependency changes.
2026-09-07 20:22:43 -04:00
olivier 0eb529e604 chore: rebuild bundle 2026-09-07 20:22:33 -04:00
olivier ece066caf8 fix: pointer cursor on clickables, 'No icon' is a real button
styles.css used cursor: var(--cursor) in 10 places and the icon modal in 2
more. Obsidian defines --cursor as 'default', so nothing in the plugin ever
showed a pointer — the old 'correct cursor on hover' todo never actually
worked. Use var(--cursor-link, pointer): themeable, pointer by default.
cursor: grab on separators/spacers is left alone.

'No icon' was a bare accent-coloured span in the status row. It commits a
value and closes, exactly like Save, so it is now a real button in the
modal button container, left-aligned via margin-right: auto to read as a
secondary action. Also adds the missing trailing newline to styles.css.
2026-09-07 20:22:29 -04:00
olivier b064a64142 fix: create missing period folders and explain failures
Clicking a week/month/quarter/year in a vault whose configured folder does
not exist yet failed with a generic 'Failed to create X note: <raw error>',
because vault.create refuses to create parent folders. Create the folder
(and any missing ancestors) first, then report what actually went wrong.

- Every failure path now names the offending path and the reason, and points
  at the relevant settings section; diagnostic notices stay up for 10s.
- A configured-but-missing template used to fall back to basic frontmatter
  silently; the creation notice now says the template was not found.
- The unreachable !date.isValid() branch after detectPeriodType is gone; the
  'not a periodic note' notice now lists the configured formats it expected.
2026-09-07 20:22:29 -04:00
olivier ec3ad7d384 style: transparent nav buttons, tighter calendar breadcrumb
Drops the default button background/shadow from the header 'more', calendar
nav and Today buttons, and tightens breadcrumb spacing so Q/month/year read
as inline links rather than buttons.
2026-09-07 20:18:30 -04:00
olivier d22b53253e chore: rebuild bundle
Regenerated main.js from the fixed sources (this is what BRAT and manual
installs ship). The bare 'monday' global reference is gone from the bundle.
2026-09-07 20:04:01 -04:00
olivier 61c191505e docs: correct claims contradicted by the source, extend QA checklist
DOCUMENTATION.md said recent files were in-memory only and lost on vault
close, while the code persists them under waypointData.recentFiles; the
WaypointData/RecentFilesSettings/WaypointSettings snippets were also missing
real fields. Fix those, describe the new behaviour (single-writer saves,
settings-driven period detection, O(1) basename lookups, folder-aware rename
remapping, unified openPeriodNote, typechecked build), and trim Known
Limitations to the two still true (full-DOM redraw, CDN icon dependency).

QA.md: restate the 'No icon' case and add coverage for week-number
middle-click and for moving a folder that contains bookmarked files.
2026-09-07 20:04:01 -04:00
olivier c5282dbdef build: gate builds on tsc, fix lib floor, correct minAppVersion
The build only ran esbuild, which strips types without checking them — that
is how the week-number ReferenceError shipped. Add a typecheck script and run
it before bundling. It is invoked as 'node node_modules/typescript/bin/tsc'
rather than a bare 'tsc' because this repo's node_modules/.bin entries are
Linux-style symlinks with no Windows .cmd shims, matching how the existing
scripts already call 'node esbuild.config.mjs' directly.

- tsconfig lib gains ES2017 so Object.entries resolves (was TS2550 plus
  cascading TS7031 implicit-any errors); strictness untouched.
- manifest minAppVersion 0.16.3 -> 1.4.4: the plugin calls setTooltip(), added
  in API 1.4.4, so every declared-supported version below that threw
  TypeError on render.
- settings-tab: type plugin as WaypointPlugin via a type-only import (no
  runtime cycle) to drop the (this.plugin as any).saveSettings() cast, and
  make the slider helper generic instead of obj: any. No UI change.
- Add the MIT LICENSE file that package.json and the About tab already claim.
2026-09-07 20:03:53 -04:00
olivier dc9e4c3200 fix: week-number middle-click crash and 'No icon' never clearing
- Middle-clicking a calendar week number threw ReferenceError: monday is not
  defined (shipped in v1.5.1) — the variable was declared inside the click
  closure and read from the sibling mousedown handler. Hoist it to weekStart.
- promptIcon guarded on if (iconName), so the picker's 'No icon' link
  submitting '' was silently dropped and the old icon stayed. '' is a valid
  value; always apply it.
- renderCalendar scanned vault.getFiles() per day cell (up to 42 full vault
  scans per render); use the O(1) plugin.hasNoteForDate().
- Collapse ~180 lines of triplicated drag listeners into one
  attachBookmarkDragHandlers(); replace (el as any).__dropAbove/__dropInto
  stashing with a typed WeakMap; drop the getLeaf(x as any) casts.
- dragManager.dragFile was called twice per dragstart; call it once behind a
  single narrowly-typed accessor.
- Cache the Lucide catalog per session instead of refetching the CDN on every
  picker open; normalize IconSuggestModal to the file's const/arrow style.
2026-09-07 20:03:45 -04:00
olivier 6a1a044566 fix: folder renames no longer destroy bookmarks, plus data.json save race
- onRename remapped paths by exact equality only, so files inside a moved
  folder kept stale paths and the view then permanently deleted their
  bookmarks on next click. Add pure remapRenamedPath() (path-utils.ts,
  obsidian-free so it is unit-testable) and remap recentFiles + the whole
  bookmark tree, folder moves included.
- saveSettings/saveWaypointData each did loadData -> mutate one key ->
  saveData, so two concurrent saves carried a stale snapshot of the other
  key and one silently reverted the other. Both now delegate to persistAll(),
  which writes both keys from memory through a promise-chain mutex.
- data.json is read once in onload instead of twice; period sub-objects are
  deep-merged so old configs pick up new fields.
- detectPeriodType now derives from the configured nameFormat with strict
  moment parsing instead of hardcoded regexes, so custom formats work.
- Merge openPeriodNoteInLeaf into openPeriodNote(period, date, leaf?); stop
  double-appending .md to templateFile; type the caught error as unknown.
- hasNoteForDate is synchronous and O(1) over a maintained basename Set;
  delete dead getNotesForDate.
- Implement the previously dead omittedTags filter and the no-op
  updateOn: 'file-edit' mode (vault modify event).
2026-09-07 20:03:36 -04:00
olivier 3c7b6741f5 fix: calendar disappeared for existing users
Shallow Object.assign on settings meant filterTags (new in 1.5.0) was
undefined for anyone with prior saved settings. Accessing .length on
undefined threw, killing the entire redraw before calendar could render.

- Defensive fallback: filterTags || []
- Deep merge on loadSettings for recentFiles, calendar, display
v1.5.1
2026-06-22 10:18:37 -04:00
olivier abf4d6ccf7 feat: configurable filter tags for recent files
New 'Filter tags' setting in Recent Files tab. Enter tag names one per line
to pin specific tags as filter pills. Leave empty to auto-detect from
frontmatter 'type' property (existing behavior).
v1.5.0
2026-06-22 10:15:54 -04:00
olivier 141121878f feat: add About tab to settings with version and plugin description v1.4.1 2026-06-22 10:07:22 -04:00
olivier 6a89660cf4 release v1.4.1 2026-06-22 10:01:47 -04:00
olivier 44c2dd2abc fix: enforce recent files limit when maxItems setting changes
The limit was only applied on file-open and plugin load, not when the user
changed the maxItems setting in the settings tab. Now enforceRecentFilesLimit()
is called on every settings change via the onSettingsChange callback.
v1.4.0
2026-06-22 10:00:45 -04:00
olivier 49c8da9863 feat: persistent recent files history + fix limit enforcement + fix settings data loss
- Recent files are now persisted to disk and survive restarts
- Max items limit is applied on load (in case setting was reduced)
- Omitted paths regex filtering is now wired up in addToRecentFiles
- Fixed saveAndRefresh() overwriting entire plugin data on settings change
- Debounced disk writes (300ms) to avoid excessive saves on rapid opens
2026-06-21 22:36:03 -04:00
olivier 993017f669 release v1.3.0: chevron right, tabbed settings, drag-into, display customization v1.3.0 2026-06-12 14:54:28 -04:00
olivier e0c3deee86 fix: drag onto file makes dragged item a child of that file
Dragging B onto A:
  ▶ File A
      File B

A becomes the parent, B becomes its child. No new group created.
2026-06-12 14:52:04 -04:00
olivier 7331a455ad fix: drag-to-create parent group is now an empty container
When dragging B onto A, the result is now:
- New Group (empty, no file)
  - File A
  - File B

Previously the group inherited A's file, creating a self-referencing parent.
2026-06-12 14:50:48 -04:00
olivier 7a5be506e0 feat: drag onto file bookmark creates parent note + fix calendar layout
Drag-and-drop:
- Dropping a bookmark onto a file bookmark (middle zone) creates a new
  parent note group containing both items
- Dropping onto a group still moves into the group as before
- All file/group bookmarks now accept drops (3-zone behavior)

Calendar:
- Fixed broken table layout caused by display:flex on td elements
- Uses vertical-align:middle instead for cell content centering
- Calendar cells still have configurable height via CSS variable
2026-06-12 13:18:25 -04:00
olivier 765c6f3b47 feat: chevron on right + tabbed settings + display customization
View:
- Chevron moved from left side to right side of bookmark rows
- Display settings applied as CSS variables on the view element

Settings:
- Tabbed UI with 4 tabs: Calendar, Periodic Notes, Recent Files, Display
- Display tab: row size, row spacing, indent size, font size, icon size, calendar cell size
- All settings use sliders with live preview and dynamic tooltips
- Reset to defaults button

CSS:
- Bookmark items use CSS variables (--wp-row-size, --wp-row-spacing, etc.)
- Calendar cells use --wp-cal-cell-size for configurable height
- Settings tab styling with active indicator
2026-06-12 12:56:27 -04:00
olivier 846726a5c7 docs: mark all todo items as done 2026-06-11 11:18:33 -04:00
olivier e92903a7aa feat: recent files type filter + calendar middle-click + calendar spacing
Recent files:
- Type filter bar with pill tags above the list
- Scans frontmatter 'type' property of each recent file
- Click a pill to filter, click again or 'all' to clear
- Active pill shows accent color

Calendar:
- Middle-click on day/week/quarter/month/year opens in new tab
- openPeriodNoteInLeaf() method for leaf-targeted opening
- More spacing: taller day cells, more padding, wider margins

Bookmarks:
- Right-click on recent file → 'Add to bookmarks' option
2026-06-11 11:16:17 -04:00
olivier 7bf1223673 style: improve calendar spacing — more room and height
- Day cell padding: 3px → 6px vertical
- Header/cell padding: 2px → 4px vertical
- Breadcrumb padding: 2px → 4px vertical
- Top row margin-bottom: 6px → 10px
- Line-height: 1.6 on calendar cells
2026-06-11 10:49:55 -04:00
olivier a36c8ab6f4 feat: add bookmark from recent files + calendar middle-click
- Recent files right-click now has 'Add to bookmarks' option
- Calendar: middle-click on day/week/quarter/month/year opens in new tab
- Added openPeriodNoteInLeaf() method for opening period notes in a specific leaf
2026-06-11 10:46:57 -04:00
olivier eeb6059fe5 feat: drag-and-drop into groups/parent notes + fix ⋯ button styling
Drag-and-drop:
- 3-zone drop indicator for groups and parent notes (files with children):
  top 25% = drop above, middle 50% = drop into, bottom 25% = drop below
- 2-zone for regular files/separators/spacers (unchanged)
- 'Drop into' shows background highlight instead of border line
- Circular reference guard: can't drop a group into itself or descendants

⋯ button:
- No visible button chrome when not hovered (no border, no background)
- Subtle opacity (0.6) at rest, full opacity on hover
- Hover shows text color change only, no background highlight
2026-06-10 21:53:22 -04:00
olivier 2e8ac7047f refactor: simplify bookmark menus — visible ⋯ button, flat context menus
Header:
- Replace hidden right-click with visible ⋯ button (more-horizontal icon)
- Menu: Add current file / Add as parent note / New group / separator / Add spacer

File bookmark right-click (5 items, flat):
  Open in new tab / Rename / Change icon / Remove

Group/parent note right-click (7 items max, flat):
  Open in new tab (only if linked) / Rename / Change icon / Expand|Collapse /
  Add child bookmark / Add child note / New sub-group / Remove

Separator/Spacer right-click (1 item):
  Remove

Removed dead code: insertAdjacent, collectGroups, collectDescendantIds,
moveBookmarkToGroup — all moving is now drag-and-drop only
2026-06-10 21:45:16 -04:00
olivier a692dc9a34 docs: add QA checklist for bookmark features 2026-06-10 20:20:27 -04:00
olivier 6978401613 feat: improved icon search — matches Lucide tags/keywords
The icon picker now searches against the Lucide tags.json keyword list,
not just the icon name. Searching 'meeting' now finds 'calendar',
'red-heart' finds 'heart', etc. Tags are loaded alongside icon names
from the CDN with fallback.
2026-06-10 20:19:57 -04:00
olivier 3c4fc2d91c feat: parent notes (file bookmarks with children) + no default icon
- File bookmarks can now have children, rendered with a chevron
- Group bookmarks can have an associated filePath; clicking opens the file,
  clicking chevron toggles collapse
- 'Add as parent note' option in header context menu creates a group
  with the current file linked
- 'Add child note' option in group context menu creates a sub-group
  with the current file linked (parent note pattern)
- Default icon changed from 'file'/'folder' to '' (no icon)
- Chevron click always toggles collapse regardless of type
2026-06-10 20:19:01 -04:00
olivier 4278507ae2 feat: middle-click + mod-click on bookmarks opens in new tab
- File bookmarks: middle-click opens in new tab, mod+click opens in new leaf
- Group bookmarks: middle-click opens group's linked file in new tab,
  mod+click opens group's linked file (click still toggles collapse)
2026-06-10 20:16:17 -04:00
olivier 99a3ea80ae new 2026-06-10 20:14:30 -04:00
olivier cb09ec0e83 bump to v1.2.0, rename plugin to Waypoint Sidebar v1.2.0 2026-06-10 15:42:13 -04:00
olivier a4714f6fa8 Add period note commands with hotkeys and next/prev navigation
- Add 5 'Go to' commands with default hotkeys:
  Ctrl+Shift+Alt+D/W/M/Q/Y for daily/weekly/monthly/quarterly/yearly
- Add 10 navigation commands (next/prev) for each period type
- Add detectPeriodType() and navigatePeriodNote() helpers
- Bump version to 1.1.0
v1.1.0
2026-06-08 12:32:21 -04:00
olivier fbdc42b4a3 Initial commit: Waypoint Obsidian plugin with calendar, recent files, and bookmarks v1.0.0 2026-06-03 20:26:23 -04:00