Commit graph

170 commits

Author SHA1 Message Date
isaprettycoolguy@protonmail.com
84bcd76bd5 fix: legend swatch shows pattern at readable density (1.3.1)
Bumps the faction-legend swatch and shrinks the pattern tile so the
pattern is legible at swatch-size rather than showing just 1-2 tile
repeats.

- On-screen legend: hex 28 → 32 px, pattern tile scaled by swatch/96
  with a 4 px floor — yields ~6 repeats across the swatch.
- PNG legend: swatch fontSize*1.1 → fontSize*1.7, lineHeight floored
  at swatch+4 so rows don't overlap; pattern shrunk by the same ratio.
- renderHexPreview gains an optional patternScaleMultiplier param so
  callers (legend, palette, future small-swatch contexts) can shrink
  the pattern without touching the user's scale slider value.

Also bundles the prior 1.3.0 follow-up fixes (hex-shaped on-map-scale
preview, palette tile refresh-on-save, thin outline default + slider)
since those were committed locally on top of 1.3.0.
2026-06-17 12:33:00 -04:00
isaprettycoolguy@protonmail.com
06bb93c91d fix: overlay pattern editor — hex preview, palette refresh, thin outline
Three refinements to the 1.3.0 overlay pattern editor based on user
feedback:

- Preview: was a 120×36 rect at the pattern's own scale. Now a hex
  polygon at the live on-map hex size (read from .duckmage-hex,
  falling back to 96 px), in the configured orientation — so the
  preview shows exactly what the overlay will look like on the map.

- Palette tiles: were never updating on Save because the picker
  re-read style from the metadata cache, which lags Obsidian's
  frontmatter write by a tick. The editor's onSaved callback now
  passes the new OverlayStyle directly, so the picker renders from
  the editor's in-memory state and updates immediately.

- Outline width: was hardcoded to gapPx*2+2 (often 14-22 px), which
  made overlay borders read as solid blobs. Now per-overlay,
  defaulting to 1.5 px, with a slider (0-20, step 0.5) in the editor.
  Persisted as faction-outline-width / region-outline-width
  frontmatter keys. Crank it up to recover the old thick-blob look.
2026-06-17 12:22:28 -04:00
isaprettycoolguy@protonmail.com
f9e292c5f0 feat: faction & region overlay patterns (1.3.0)
Adds per-overlay pattern fills so factions and regions can be visually
distinguished when they overlap (issue #25). Each faction note and each
region note now carries a pattern, scale, and opacity in its
frontmatter, edited via the existing FactionEditor / GeoRegionEditor
modals (dropdown + sliders + live preview swatch).

Pattern set (10 total): solid (the existing flat fill, default),
diagonal stripes ↗ / ↖, crosshatch, polka dots, grid, zigzag,
triangles, scales, checker.

On screen: SVG <pattern> defs are deduped per (key,color,scale) and
referenced from each overlay path's fill. Stroke stays solid color so
blob boundaries remain crisp. Per-overlay opacity replaces the
hardcoded 0.45 group opacity.

PNG export: mirrored via Canvas patterns built from an offscreen tile
per (key,color,scale), cached for the render pass.

Backwards compatible — overlays without the new frontmatter keys fall
back to solid + 0.45 opacity, matching pre-1.3.0 behavior.
2026-06-17 11:53:04 -04:00
isaprettycoolguy@protonmail.com
d12cf38ceb fix: pin HexEditorModal to viewport on open (1.2.3)
makeDraggable previously used position: absolute with top/left 50%, which
relies on the nearest positioned ancestor being .modal-container. Any
plugin or theme that establishes a CSS containing block on an ancestor
(via transform/will-change/filter/contain) silently re-roots the modal
against that inner element, so it opens partway off-screen — as
reported in hexmaker#26.

Switch to position: fixed and compute the centered top/left in JS
against window.innerWidth/innerHeight, clamped 8px inside the viewport.
position: fixed bypasses most ancestor-containing-block issues; the JS
clamp catches the remaining edge cases (transformed ancestors that also
hijack fixed positioning).

Drag listeners now bind to modalEl.ownerDocument so dragging works
correctly inside popout windows.
2026-06-17 10:26:30 -04:00
isaprettycoolguy@protonmail.com
ce869324fc feat: coord placement setting + terrain tables in onboarding (1.2.2)
Setup wizard now generates the terrain description/encounter tables and
roller-link preamble as part of Step 3, so freshly onboarded vaults have
the full table scaffolding ready to use.

New "Coordinate placement" setting (top/middle/bottom, default bottom)
controls where the x_y label sits inside each hex, addressing
hexmaker#22 — keeps the label from clashing with a centered terrain
icon.
2026-06-16 10:34:57 -04:00
isaprettycoolguy@protonmail.com
1fa2153bf1 chore: address obsidianmd lint and popout-window compat (1.2.1)
- Sentence-case: rephrase "GM" → "Game master"; remove disable comments;
  autofixer lowercases "🎲 Open tables view" / "← Back" to comply
- no-static-styles-assignment: dynamic colors now use CSS custom properties
  (--duckmage-bg / --duckmage-border-color / --duckmage-fg) consumed by
  existing classes; static positions moved to small modifier classes
  (duckmage-rt-roll-btn-spaced, duckmage-wf-steps-list, etc.); terrain
  toolbar uses is-terrain-preview / is-eyedropper-active toggles;
  createIconEl uses new duckmage-masked-icon class
- Popout-window compat: setTimeout / clearTimeout / requestAnimationFrame
  → window.X; document.X → activeDocument.X across all view/modal files
- Unnecessary `as ArrayBuffer`: replace `data.buffer.slice(...) as ArrayBuffer`
  with `new ArrayBuffer + Uint8Array.set` — gets a real ArrayBuffer without
  the assertion (also avoids ArrayBufferLike narrowing)
- Deprecated SettingTab.display(): extract body into private renderSettings();
  display() and post-action refresh both call it
- eslint.config: add activeDocument + activeWindow to globals so the renamed
  identifiers don't trip no-undef

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 23:04:11 -04:00
isaprettycoolguy@protonmail.com
6aa885b5b2 feat: export module — PDF/Markdown for notes, hexes, maps, tables, workflows (1.2.0)
Adds a unified export pipeline under src/export/ with exporters for single notes,
structured hexes, maps (with reference table), random tables, and workflows
(with rolled samples). PDF rendering reuses Obsidian's MarkdownRenderer + theme
CSS; map PNG/PDF goes through a dedicated canvas renderer.

UI surface:
- "Export" tab in MapModal (PNG/PDF with overlay + size options)
- "Export" link in HexEditorModal + HexExportModal
- "Export PDF/Markdown" links in RandomTableView header
- "Export…" button in WorkflowEditorModal + WorkflowExportModal
- Commands: export current note (PDF/MD), current hex, current workflow
- File-menu items on any .md file: Export to PDF / Markdown

Other:
- New `exportFolder` setting (defaults to {worldFolder}/exports)
- hexGeometry: add hexSize / hexCenter / hexPolygonPoints / gridBoundingBox
- HexTableView + HexEditorModal: first-wins on duplicate palette names
  (matches HexMapView's .find() behaviour)
- Tests: unit + integration suites for all exporters; sim-vault fixture

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 20:46:41 -04:00
isaprettycoolguy@protonmail.com
0f910233ee 1.1.15
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 09:16:19 -04:00
isaprettycoolguy@protonmail.com
62f65c741f 1.1.14
feat: Ctrl/Cmd+click hex to open submap in new tab

When no drawing tool is active, Ctrl+click (Cmd+click on Mac) on a hex
with a linked submap opens that submap in a new Obsidian tab. Regular
left-click navigation (same tab) is unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 19:59:48 -04:00
isaprettycoolguy@protonmail.com
910d425040 1.1.13
feat: tabbed Maps modal; faction hover tooltip; map starting coordinates; default map/submap sizes in settings

- Maps modal refactored into three tabs: Maps (switch/delete), Properties (rename, terrain theme), New map (labeled fields, size presets)
- Faction overlay hover shows each faction on its own line with color swatch via custom floating tooltip div
- New map and submap creation accept starting X/Y coordinates; hex filenames and labels both reflect the chosen origin (gridOffset initialized accordingly)
- Map switching via modal now goes through switchToMap so viewport save/restore applies correctly
- Added defaultNewMapCols/Rows and defaultSubmapCols/Rows settings; new-map forms pre-fill from these

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 19:43:50 -04:00
isaprettycoolguy@protonmail.com
f825e8a37d 1.1.12 2026-05-26 18:33:27 -04:00
isaprettycoolguy@protonmail.com
64810344cb feat: open submap from context menu; auto-fit grid on first visit; fix back-nav viewport
- Right-click context menu shows "Open submap: <name>" when the hex has
  a duckmage-submap link; clicking calls navigateToMap so Back works.
- switchToMap now saves/restores per-map viewport (zoom, panX, panY,
  fontSize). First visit to a map fits the full grid into view via
  fitGridToView(); subsequent visits restore the last-known position.
- fitGridToView resets the baked font-size before measuring so the
  scale calculation is always relative to the base font size.
- Fix: navigating Back was landing off-map because bakeZoom() encodes
  the visual zoom into viewportEl.style.fontSize and resets this.zoom=1.
  Saving/restoring fontSize alongside zoom/pan prevents the submap's
  baked scale from bleeding into the parent map's viewport.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:33:26 -04:00
isaprettycoolguy@protonmail.com
6f9c759850 1.1.11 2026-05-25 16:09:43 -04:00
isaprettycoolguy@protonmail.com
0683363d60 fix: clear duckmage-submap references when a map is deleted
When deleteMap runs, scan all markdown files for duckmage-submap
frontmatter pointing at the deleted map and null them out via
setSubmapInFile. Uses the metadata cache for the filter so no
extra file reads are needed for non-matching files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 16:07:11 -04:00
isaprettycoolguy@protonmail.com
bad258acc9 1.1.10 2026-05-25 15:58:36 -04:00
isaprettycoolguy@protonmail.com
14345a4a42 fix: clickable internal links in token note preview
Wire up delegated click handler on the rendered markdown container so
.internal-link anchors (produced by MarkdownRenderer) open the target
note in a new tab via openLinkText. Previously the links rendered
visually but did nothing on click.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 15:58:22 -04:00
isaprettycoolguy@protonmail.com
41872b28e4 feat: undo/redo for icon, faction, region tools; token stacking offsets
- Undo/redo now covers all paint tool types: terrain (existing), icon
  override, faction link paint/erase, and region paint/erase. Each
  stroke is committed on mouseup using the same Map-per-stroke pattern
  as terrain.
- Fix: undoing an icon override now restores the underlying terrain icon
  (previously left the hex blank).
- Fix: "Remove icon override" context menu item now calls renderGrid so
  the icon disappears immediately without a reload.
- Multiple tokens on the same hex now spread out using preset offset
  patterns (2=left/right, 3=triangle, 4=2×2, 5=pentagon, 6+=ring) so
  all tokens are visible with slight overlap. Spread radius scales with
  hex size.
- Hovered token rises above stacked siblings via z-index on :hover.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 15:55:04 -04:00
isaprettycoolguy@protonmail.com
d2909abdb3 docs: update README for 1.1.9
- "Regions" → "Maps" throughout (map management, data model path)
- add submap linking, map terrain theme, Back button
- add Link submap to drawing tools table with erase-mode note
- update Random Tables panel description (folder tree, filter behaviour)
- update overlay panel: list all toggles; note pencil/layers panel icons
- update source layout (FolderTree, MapModal, SubmapPickerModal, HexSidePanel, etc.)
- tighten Getting Started and Settings table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 15:15:01 -04:00
isaprettycoolguy@protonmail.com
8214294c5e 1.1.9
- folder tree view in link-table modal (collapsed by default, filter expands all)
- shared renderFolderTree utility; RandomTableView refactored to use it
- submap picker: filterable list replaces combo-dropdown; terrain theme swatch per map
- map terrain theme: per-map terrainType field drives submap center-dot color and swatch in switch-map list
- erase mode for paths/factions/regions: "Remove" tile + enters erase immediately
- submap link tool: blip animation on hex after linking
- hex map view header updates to active map name on switch
- fix: link-table modal scopes folder tree to tablesFolder only (was leaking vault-wide folders)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 12:49:41 -04:00
isaprettycoolguy@protonmail.com
244739d951 1.1.8
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:14:48 -04:00
isaprettycoolguy@protonmail.com
8078b37215 feat: right-click context menu for all painter tools; remove map mode button
Single right-click while any drawing tool is active now opens a context
menu with "Switch <toolname>" (where applicable) and "Exit tool", replacing
the old double-right-click-to-exit gesture and the "↩ map mode" toolbar
button that caused layout shift (fixes #17).

New PainterContextMenu class is designed for subclass extension via
extraOptions() — individual tools can inject additional items later.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:14:32 -04:00
isaprettycoolguy@protonmail.com
fd91fba26f fix: sync manifest.json and versions.json to 1.1.7 2026-05-23 14:38:09 -04:00
isaprettycoolguy@protonmail.com
a6b18dec9f 1.1.7 2026-05-23 14:30:52 -04:00
isaprettycoolguy@protonmail.com
2f4e368add pin modal button row to bottom via margin-top:auto
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 14:28:27 -04:00
isaprettycoolguy@protonmail.com
937751319d increase min-height of draggable modals to 420px
Prevents MapLinkModal and SubmapPickerModal from being too short to show
the combo dropdown without triggering a scroll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 14:26:22 -04:00
isaprettycoolguy@protonmail.com
83cd8e2da0 fix combo dropdown scroll: suppress modal-content overflow while open
position:fixed failed because Obsidian's modal CSS animation sets transform on
.modal, making fixed children position relative to it (not the viewport).
Instead, toggle .duckmage-combo-open on .modal-content (overflow-y:visible)
while the dropdown is open so the absolute-positioned dropdown doesn't trigger
the scroll container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 12:42:04 -04:00
isaprettycoolguy@protonmail.com
ff8479c59c fix combo dropdown: position:fixed escapes modal scroll, blank inputs in map modals
- Combo dropdown now uses position:fixed with JS-calculated viewport coords so it
  never causes the modal's overflow-y:auto container to scroll
- MapLinkModal: map filter and link text both start blank; link text auto-fills
  on map selection only if still empty
- SubmapPickerModal: focus opens all maps (blank query)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 12:35:34 -04:00
isaprettycoolguy@protonmail.com
31d3256192 add submap links: link hex to another map, centre-dot nav, back button, map link insert
- Right-click hex → "Link submap" writes duckmage-submap frontmatter
- Hex flower shows centre dot (hidden when no link) that navigates into the submap
- Centre dot centering is orientation-aware (flat-top top:24px, pointy-top top:20px)
- ← Back button appears next to map dropdown (via flex nav group) after submap drill-in
- "Insert map link" editor context menu inserts obsidian://duckmage-openmap URI
- Map rename updates all duckmage-submap references via updateSubmapReferences()
- HexEditorOptions refactored: onNavigate/onModalClose/onSwitchMap in options object
- 10 new tests for submap frontmatter helpers and rename propagation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 12:29:22 -04:00
isaprettycoolguy@protonmail.com
a23a98b982 add token layer: place, edit, and inspect tokens on the hex map
- Tokens placed per-hex link to vault notes; support circle/square shape,
  sm/md/lg size, fill color, optional border color, icon, and description
- TokenInfoModal shows note content (formatted via MarkdownRenderer, images
  included) with jump-to-hex, open-note, edit, and two-step remove actions
- Edit flow reopens TokenModal pre-filled; proxy notes handle multiple tokens
  referencing the same source note
- Icon picker replaced with scrollable palette grid (2-row cap, drag-to-reorder,
  hide/show) in both HexEditorModal and TokenModal; order persisted in settings
- Token layer toggle added to layers menu (default on)
- Fix metadata-cache race on token delete (wasToken check prevents missed updates)
- Token preview rendered inline in TokenModal title row; real-time color preview
  via native input event on color pickers
- Bump version to 1.1.6

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:26:20 -04:00
isaprettycoolguy@protonmail.com
924c8629b6 bump version to 1.1.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 03:52:10 -04:00
isaprettycoolguy@protonmail.com
b84bc1811c fix !important in shrink button styles; raise selector specificity instead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 03:51:47 -04:00
isaprettycoolguy@protonmail.com
fb98acbbaf bump version to 1.1.4; fix zoom pixelation, brush size reset, shrink rows/cols, icon folder onboarding
- Fix map pixelation on zoom: bake CSS scale() into viewport font-size after
  scroll wheel settles so the DOM renders natively at the zoomed resolution
  instead of upscaling a compositor bitmap; redraw SVG overlays after bake
- Fix terrain brush size persisting when switching to icon tool: reset
  paintBrushSize to 1 on icon mode entry
- Add shrink (−) buttons paired with each expand (+) button: fade in on hover,
  positioned to the right for top/bottom and below for left/right; clicking a
  clean row/col shrinks immediately and trashes the hex notes; clicking a dirty
  row/col shows a red OK? confirm state (3 s timeout) before deleting
- Fix stale terrain showing after delete+re-expand: pass null terrain/icon
  overrides for newly-added edge hexes so cached frontmatter from deleted files
  cannot bleed through
- Add iconsFolder to onboarding wizard folder generation step

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 03:38:01 -04:00
isaprettycoolguy@protonmail.com
b5dd942dc7 add sync awareness: onExternalSettingsChange + auto-register maps from vault
- Override onExternalSettingsChange() so Obsidian Sync delivering a new
  data.json from another device immediately reloads settings and refreshes
  all open HexMapView and HexTableView instances — no manual restart needed
- Add autoRegisterMapsFromVault() on startup: scans hexFolder subfolders and
  registers any that are missing from settings.maps, inferring grid size and
  offset from the x_y.md filenames. Handles the case where data.json arrives
  stale or empty but the vault folders already exist (e.g. sync timing, first
  install on a new device)

Closes #4

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 18:35:38 -04:00
isaprettycoolguy@protonmail.com
469cc56894 refine map delete UX: always-visible X, block last-map deletion, no red wash
- Replace hover-fade "Delete" button with a fixed 20×20px ✕ button always
  visible in each map row
- Hide the ✕ entirely when only one map remains (deletion blocked)
- Remove red background from confirmation row; use muted text instead

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:00:02 -04:00
isaprettycoolguy@protonmail.com
8ad991dc11 bump version to 1.1.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:51:24 -04:00
isaprettycoolguy@protonmail.com
891434b36f add delete map button with confirmation to MapModal
Each map row in the switch-map list now shows a "Delete" button (visible on
hover). Clicking it enters an inline confirmation state showing the map name
and a warning that hex notes will be trashed. Confirming calls
fileManager.trashFile() on the hex folder (if it exists), removes the map
entry from settings, reassigns defaultMap/activeMapName to the next available
map, saves, and re-renders. Cancelling returns to normal without changes.

Fixes #3 — map entries left dangling after manual folder deletion are now
cleanly removable through the UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:51:03 -04:00
isaprettycoolguy@protonmail.com
683ef17ec1 add first-install setup wizard; bump to 1.1.0
- New SetupWizardView (ItemView): 4-step welcome → folders → map → done
- Wizard auto-opens on first install (setupComplete/setupDismissed flags)
- Folder step creates all world subfolders and ensures hex template exists
- Map step creates the first hex grid; done step shows recommended next steps
- "Open hex map" from done step opens map with terrain picker + toolbar open
- Re-run wizard button added to settings tab
- Fix: loadAvailableIcons() now runs inside onLayoutReady (vault readiness)
- Fix: migrateHexFilesToDefaultRegion() no longer creates world/hexes/default
  on fresh installs — scans candidates first, early-returns if none found
- Fix: loadHexTemplate() falls back to built-in default instead of returning null
- Fix: terrain toolbar button re-opens picker when clicked while active

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:39:01 -04:00
isaprettycoolguy@protonmail.com
48024ae137 bump version to 1.0.29
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 15:24:52 -04:00
isaprettycoolguy@protonmail.com
2af3b68f8f fix portal warnings: CSS !important, duplicate selectors, hex color, README title
styles.css:
- Remove all !important declarations by increasing selector specificity instead:
  - terrain icon hide: fix competing rule with :not(.duckmage-hide-terrain-icons)
    so the fallback only shows when terrain icons are not already hidden
  - modal size: .modal.duckmage-editor-modal-drag beats Obsidian's .modal rule
  - error border: input.duckmage-input-error beats attribute selectors
  - hidden row: tr.duckmage-row-hidden beats UA table-row default
  - copy cell padding: .duckmage-random-table prefix beats table td defaults
- Merge duplicate .duckmage-icon-option (add position:relative to original)
- Remove duplicate .duckmage-rt-folder-header (first declaration already has
  display:flex and align-items:center)
- Expand #fff to #ffffff

README.md:
- Change title from "Hexmaker" to "Hexmap World Creator" to match manifest.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 15:06:16 -04:00
isaprettycoolguy@protonmail.com
f3fe8de36b update README to match current feature set
- Add faction overlay, region overlay, and GM layer (all shipped, all absent from docs)
- Add Quests and Factions to hex editor link sections list
- Add Faction, Region, and Table Link rows to drawing tools table
- Add Overlays and GM layer sections in the detailed Features block
- Add Quests, Factions, and Workflows folder rows to Settings table
- Fix hex orientation default: pointy → flat
- Fix manual install URL: obsidian-hexmaker → hexmaker
- Drop the stale `### encounters` text section from the Hex notes table
- Add Quests and Factions rows to the Hex notes sections table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 14:37:17 -04:00
isaprettycoolguy@protonmail.com
6c4ef36239 add artifact attestation for main.js and styles.css
Attests build provenance via actions/attest-build-provenance@v2 for both
release assets, addressing the Obsidian portal security recommendation.
Requires id-token:write and attestations:write permissions (added).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 14:31:39 -04:00
isaprettycoolguy@protonmail.com
6a85426571 fix release workflow: skip tag push if tag exists, bump Node to lts/*
Prevented exit-128 crash when a fix commit pushes to master at the same
version — the workflow now checks for an existing remote tag before
attempting to push one, so the release step can still create the GitHub
release even if the tag is already there.

Also updated both workflows from node-version 20.x to lts/* ahead of the
GitHub-enforced Node 24 migration deadline (2026-06-02).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 14:26:12 -04:00
isaprettycoolguy@protonmail.com
96eef77ffa fix Obsidian reviewer lint errors; add lint to rebuild flow; bump to 1.0.28
- Remove unnecessary type assertions in IconPickerModal (createEl("input") already returns HTMLInputElement)
- Fix sentence-case violation: "Remove GM icon" → "Remove icon" in HexEditorModal tooltip
- Annotate frontmatter["region"] accesses as unknown to satisfy no-unsafe-assignment
- Wire npm run lint into /rebuild command so issues are caught locally before submission
- Document no-unnecessary-type-assertion and mid-sentence acronym patterns in /lint guidance

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 08:49:51 -04:00
isaprettycoolguy@protonmail.com
e7019aaca4 bump version 2026-05-10 17:11:01 -04:00
isaprettycoolguy@protonmail.com
d91ea4eb57 add initial gm layer pass 2026-05-10 16:22:38 -04:00
isaprettycoolguy@protonmail.com
31f9bbe0d8 fix up faction overlay and add legend, add region overlay, add region encounter tables 2026-05-10 09:10:15 -04:00
isaprettycoolguy@protonmail.com
90d2496fc3 add and enhance faction overlay. 2026-05-09 20:49:23 -04:00
isaprettycoolguy@protonmail.com
efc9d637cf change region name to maps 2026-05-09 19:27:43 -04:00
isaprettycoolguy@protonmail.com
31a6730cd1 prevent duplicate terrain names on rename; hide system-table filter checkboxes; version bump to 1.0.26
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 10:09:24 -04:00
isaprettycoolguy@protonmail.com
dc8d64faab remove stale Debug comment from TerrainPickerModal refresh button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 09:50:52 -04:00