v0.9.0
2026-03-09
-
[x] Implement a "soft delete" functionality for all entities (campaigns, maps, characters, tokens, etc). When an entity is deleted, it is not permanently removed from the database. Instead, it is marked as deleted with a timestamp.
- Deleted entities are hidden from normal UI views, but can be accessed through a "Deleted Items" view in the respective list pages (Campaigns, Characters, Maps). In the "Deleted Items" view, users can see all deleted entities, with information about when they were deleted and by whom. Users can choose to permanently delete an entity from this view, which removes it from the database entirely, or restore it, which unmarks it as deleted and makes it visible again in the normal UI views.
- A process runs periodically to permanently delete entities that have been in the deleted state for more than 30 days, to prevent the database from being cluttered with old deleted items.
- Deleting a map should also soft delete all associated tokens and drawings on that map, but not the characters linked to those tokens, or tokens on any other map. This kind of "cascaded soft delete" should be reversible as well, so restoring a deleted map also restores the tokens and drawings that were deleted along with it.
-
[ ] Add 'delete campaign' functionality to the campaign list and campaign detail pages, with a confirmation modal to prevent accidental deletion. Only the campaign owner should have access to this functionality. Deleting a campaign should delete all associated maps, characters, tokens, etc, and this should be noted in the confirmation modal.
-
[x] Add fine-tuning controls to Edit Grid (+/- 0.1 pixels)
-
[x] Add 'edit grid' to the context menu when right-clicking on the map
-
[x] When two tokens are in the same square, clicking the stack is selecting the bottom token, not the top
-
[x] Add 'send to front', 'send to back', 'bring forward', and 'send backward' options for tokens in the token context menu, which changes the z-index of the token relative to other tokens.
-
[x] Allow bars to have color scales (e.g. green to red based on percentage) in addition to just a color.
-
[x] Allow bars to specify 'top' or 'bottom' position relative to the token.
-
[x] Render bars as arcs around the top (or bottom) 25% of the token's circumference, slightly offset, like an "eyebrow" or "mustache", rather than as straight rectangles.
-
[x] Add a feature to the Edit Grid modal, where the user can draw a square on the map, and the pixel size of the square they drew becomes the grid size. Thus, drawing a 50x50 square sets the grid size to 50px.
-
[x] In Edit Grid mode, click-dragging on the map will move the x/y offset of the grid in real time, allowing the user to align the grid with the background. Mousewheel while focused on the grid will adjust the grid size in real time, allowing the user to find the correct grid size by adjusting it while looking at how well it lines up with the background. No mouseevents will penetrate to the token/bg layers below while the modal is open.
-
[x] Restore "Switch Map" feature (in the Map menu), which allows the user to switch to a different map in the same campaign by selecting a map from the submenu.
-
[x] When the user uses Generate A Monster, and it proceeds to the Create Token modal, pre-select "Google Image Search" as the token art source, and pre-fill the search query with the monster's name and fire off the search. This way the user can click just once to pick token art for the generated monster, which should speed up the workflow significantly.
-
[x] All dropdowns in the Generate Monster modal are behind the modal or otherwise not visible. There should be app-wide constants for z-index for various UI elements (modal dropdowns, modals, top nav, top nav submenus, level 2 nav, main content, etc).
-
[x] In the Token menu and the map right-click context menu, add "Import Party", which imports all characters in a specified party; besides being a batch process, otherwise works exactly as Import Character does for individual characters, but instead of popping up the Add Token modal for each one, it assumes defaults and just inserts all presumptively, moving tokens to ensure they aren't all stacked on top of each other relative to the x/y coord of the action. If done from the menu, insert them starting in the grid square the camera is looking at.
-
[x] When a token is selected, ctrl-C (or cmd-C on mac) will copy the token, and ctrl-V (or cmd-V on mac) will paste a duplicate of the token (same properties, actions, etc). If the token's name is, for example, "ghoul", the pasted token would be "ghoul 1". If that token is copied and pasted again, the next one would be "ghoul 2", and so on.
-
[x] When right-clicking a token on the map, there is a "copy" option that does the same thing as ctrl-C or cmd-C.
-
[x] When right-clicking on the map, there is a "paste" option that does the same thing as ctrl-V or cmd-V, pasting a copy of the most recently copied token at the location of the right-click.
-
[x] When right-clicking on the token, there is a "duplicate" option that immediately creates a copy of the token and places it with a slight offset so that it's not directly on top of the original token.
-
[x] The context UI that appears when multiple tokens are selected is currently aligned to the left edge of the viewport. It needs to move to the right to align with the right edge of the main nav.
-
[x] In the context UI that appears when multiple tokens are selected, add a 'facing' dropdown that allows the user to set the facing of all selected tokens at once.
-
[x] When right-clicking on a token on the map, only show context menu items that pertain to a token: Edit Token, Copy, Duplicate, View Character Sheet, Impersonate, Conditions, Set Facing, Delete Token.
-
[x] When impersonating a token, if that token was the current selected token, deselect it.
-
[x] Add the 'View Character Sheet' button which opens the character sheet modal to the Token Context sidebar. This functionality currently exists in CurrentTokenBar.
-
[x] In the token context menu (right-click on token on map), add 'View Character Sheet' which opens the character sheet view modal (existing functionality in CurrentTokenBar). This should only be shown if the token is linked to a character.
-
[x] When tokens linked to characters in the same party are on the same map, anyone impersonating one of those tokens can see the new Party UI:
- In the upper left of the map pane (to the right of any open left sidebar), there is a UI showing the party members.
- Each element shows the token image, name, HP, and conditions of that party member.
- The elements are stacked vertically.
- The impersonated token is always the first one (on top).
- Right-clicking the element of a party member shows the same context menu for that token as if the user had right-clicked the token on the map.
- Double-clicking the element of a party member centers the camera on that token.
- Single-clicking the element of a party member makes that member the current selected token.
-
[x] Facing arrow should be invisible when not set (rotation defaults to null; only shown when explicitly set)
-
[x] Facing arrows only display for tokens layer (not background or map objects)
-
[x] Shift+mousewheel changes facing of selected tokens in real time
-
[x] Persist layout preferences (sidebar panel state survives page reloads)
-
[x] Mobile context bar (with chat) now visible on all routes at small screen widths, fixing chat disappearing bug
-
[x] Soft delete column migrations for PostgreSQL (production database compatibility)