- 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>
- 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>
- 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>
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>
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>
- Remove fixed width, position, and border on mobile
- Use 100% width when onItemClick is provided (mobile context)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>