v0.14.0
2026-04-01
Bugs
- [x] Users Online UI seems to be out of sync. I had 3 people connected to the campaign, but it was only showing 2 in the Users Online UI. This could be a socket issue or a frontend state management issue. All 3 were able to see chat messages and moving tokens, so the socket connection was presumably active.
- [x] Which token is impersonated is supposed to persist to localStorage, but when I hard reload the site, I'm never impersonating anyone
System
- [x] When the user changes a System trait that is inherited by the campaign, the campaign's copy of that trait should update to match the new System value, unless the campaign has overridden that trait with a custom value. For instance, if the user changes the "HP" property in the System, then all campaigns that inherit that property and haven't overridden it should reflect that change. But if a campaign has overridden "HP" with a custom value, then changing the System's "HP" shouldn't affect that campaign's "HP". This logic applies to all traits, including properties, actions, damage types, etc.
- [x] System editor will no longer use the DataGrid component. It should reuse components in the Campaign editor for the same traits, such as PropertyEditor for properties, ActionEditor for actions, etc.
Map
Mini-Initiative UI
- [x] The mini-initiative UI is currently limiting itself to only 1 past and 1 future turn. There is plenty of room on the left sidebar for more. It should use all available space, between the bottom of the PlayTopBar and the top of the CurrentTokenBar, and show as many past and future turns as can fit in that space, with the current turn at the center.
- [x] The current token whose turn it is has a gold outline, but it isn't very distinct. Make the outline thicker, with an additional black outline for visibility against light backgrounds, with more padding between the token and the outline. Also, the outline should be circular, not square.
SelectedToken UI
- [x] The new selected token UI, which uses the same layout as CurrentTokenBar but in reverse, is correctly showing selected tokens when impersonating. But when not impersonating, selecting a token doesn't spawn this UI. This UI should always show when a token is selected, regardless of impersonation status.
- [x] Don't show keybinding badges for actions in the selected token UI. This keyboard shortcuts should only work for impersonated tokens.
- [x] Swap the vertical tabs for the main area of the hover container, so that the tabs are just to the left of the portrait, and the tab area is to the left of that. This is only for the right-side selected token UI.
- [x] The container that appears on hover is animating in from the left, from the same origin point as the left-mounted CurrentTokenBar. It should animate in from the right instead.
CurrentTokenBar
- [x] With the new design of this component in 0.13.0, the End Turn button is now in the wrong place. Move it directly above the CurrentTokenBar portrait.
- [x] The old design had a standard height, which the token art matched, but the portrait art would overflow. Given the new design, the height of the overall component should match the height of whatever artwork is shown, with no overflow. The actual height of portrait and token art should not change.
- [x] This element has a resizing handle above the top-center of the component. However, the component is mostly invisible when not hovered, so the handler is floating in space. Move this handler to the top center of the portrait/token art. Do the same for the selected token UI's resize handle.
- [x] The bars are showing a % value, but they are supposed to show actual values. I think this is because the definition of a bar is a function that returns a value between 0 and 1 inclusive, so the UI doesn't know which properties to show.
- Update the Bar data model as such:
- A bar can have 0, 1, or many associated properties.
- The bar has a required type, from "Function", "Fraction", "Reducer".
- Update the Bar editor UI(s):
- For each bar, the user can see and edit the bar's type.
- For type Function, use the existing UI.
- For type Fraction, show two dropdowns to select the numerator and denominator properties from the token's properties. The value of the bar is then
token.properties[numerator] / token.properties[denominator]. - For type Reducer, show two dropdowns to select the base value, and a value to subtract from it (e.g. "HP" and "Damage"). The value of the bar is then
token.properties[base] - token.properties[reducer].
- Update the logic for showing bars (CurrentTokenBar, tokens on the map, etc):
- Use the appropriate logic based on the bar's type, as described above
- When a numeric value is visible (e.g. CurrentTokenBar), show the values based on bar type:
- Function: percentage
- Fraction: "current/maximum" (e.g. "31/60")
- Reducer: "effective current value / effective maximum value" (e.g. "29/60" if HP is 60 and Damage is 31)
- For bars with a color scale, compute the fraction for all types, so the color scale will be correct.
- Update the Bar data model as such:
Mobile Experience
- [x] In mobile, the UI for selected tokens is a full-screen takeover. When the user clicks an action with targeting, they do enter targeting mode, but the selected token UI doesn't disappear. They can close it with the X button, and targeting mode is still enabled so they can select a target. But a better UX would be to auto close the selected token UI when they click an action that requires targeting.
Chat Log
- [x] Whenever a new chat message is posted (by the current user or by someone else connected), if the chat log is open, scroll so that the new message is visible at the bottom.
- [x] When the chat log is first opened (such as on page load), scroll to the bottom so the most recent messages are visible.
- [x] The bottom section of the chat log, with the message input, chat settings button, microphone button, and dice roller, should be fixed, always visible at the bottom, rather than being able to be scrolled out of view.