- Replace raw strings with useMessages hook in BoardColumn and BoardComponentSelect
- Show WebsiteControls on edit screen so users can test filters
- Disable board body editing until a website is selected
- Scope website select to team websites when editing a team board
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows users to select and inject analytics components into board cells.
Includes component registry, renderer, selector modal with category
menu, config fields for MetricsTable, and live preview. Also scopes
website select to team websites when editing a team board.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Board creation from team context was not passing teamId to the API,
causing boards to be saved as personal boards instead of team boards.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create UserButton component at bottom of SideNav with Settings, Language,
Theme, Admin, and Logout menu items
- Move Settings/Logout/Admin/Docs/Support out of NavButton into UserButton
- Remove LanguageButton and ThemeButton from SideNav bottom
- Refactor NavButton into TeamsButton with simplified team switching
- Simplify WebsiteNav and move TeamsButton to App top bar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
12 batch translation scripts covering all language families: East Asian, Romance,
Germanic, Nordic, Slavic, Other European, South/Southeast Asian, Tamil, Sinhala,
Urdu, and Burmese. Remaining untranslated keys are intentional loanwords (URL, UTM,
SMS, etc.) and en-GB which is intentionally identical to en-US.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These keys existed in messages.ts but were missing from the JSON files,
previously relying on react-intl defaultMessage fallback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rewrite messages.ts to plain string key maps (remove MessageDescriptor)
- Rewrite useMessages hook to expose t from useTranslations() directly
- Rename formatMessage → t across 193 consumer files
- Replace custom FormattedMessage component with next-intl t.rich()
- Update 52 language files to use rich text tags (<b>, <a>)
- Remove all direct imports from @/components/messages in favor of useMessages()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove invalid 3rd parameter from GET handler and parse report type from
query params instead. Pass teamId to WebsiteSelect in BoardEditHeader so
it shows team websites in team context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrate i18n from react-intl to next-intl, eliminating the formatjs
compilation pipeline. Translation files now live as nested JSON in
public/intl/messages/ (single source of truth), removing the duplicated
src/lang/ directory and the copy/compile build steps. The useMessages()
hook API is preserved so all 195+ consumer components are unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Journey component, global.css, and variables.css all referenced old
CSS custom properties (--base-color-*, --primary-color, --text-base)
that no longer exist in @umami/react-zen. Mapped them to the new
variable names and removed the dead variables.css file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract BoardRow, BoardColumn, BoardViewHeader, BoardEditHeader, and
boardConstants into separate files. Remove 9 console.log statements
from BoardBody and BoardProvider.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move sidebar rendering logic into WebsiteNav with isCollapsed prop so
SideNav uses WebsiteNav directly instead of duplicating code. Add
overflow hidden to prevent horizontal scrollbar during expand transition.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fall back to queried website name when local state hasn't been set yet,
since useState only captures the initial value which is undefined before
the query resolves.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the separate 240px WebsiteNav sidebar with website navigation
integrated into the main SideNav. When a websiteId is active, SideNav
shows a back arrow, WebsiteSelect dropdown, and grouped nav items
instead of the main links. Extract shared useWebsiteNavItems hook used
by both SideNav and WebsiteNav (still used by MobileNav).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove unnecessary wrapper Row around DateFilter and set min-width
on the date picker popover to 200px.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show NavButton text whenever sidebar is not collapsed, not only on
pages without sub-navigation. Also remove unused Sidebar component.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace render function children with mapped ListItem elements and remove
the unsupported items prop across all Select instances.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename SideMenu to NavMenu with visible group title labels and selected item highlighting
- Update react-zen to 0.242.0 and fix responsive breakpoints (xs -> base)
- Style floating tooltips with inverted background across WorldMap, charts, and WeeklyTraffic
- Add CSS variables for primary color and use IconLabel consistently
- Remove stray console.log from LoadingPanel
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
/boards/[id] is now view mode (read-only) with an edit button.
/boards/[id]/edit is edit mode with save and cancel buttons.
Save navigates back to view, cancel discards changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>