feat(shared-ui, todo): BottomStack notification system + PillNav bottomOffset

- Add NotificationBar shared component for in-stack notifications
- Add BottomNotification type and top snippet slot to BottomStack
- Add bottomOffset prop to PillNavigationProps for flexible positioning
- Remove pillNavCollapsed from todo settings (PillNav now always visible,
  toggled by layout FAB that hides all bottom bars)
- Replace floating GuestRegistrationNudge with integrated NotificationBar

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-01 21:32:35 +02:00
parent c81b636f2f
commit 4f8c3d680c
3 changed files with 4 additions and 16 deletions

View file

@ -74,7 +74,6 @@ export interface TodoAppSettings extends Record<string, unknown> {
immersiveModeEnabled: boolean;
// Navigation UI
pillNavCollapsed: boolean;
filterStripCollapsed: boolean;
// View layout
@ -124,7 +123,6 @@ const DEFAULT_SETTINGS: TodoAppSettings = {
immersiveModeEnabled: false,
// Navigation UI
pillNavCollapsed: true, // PillNav hidden by default, shown via FAB
filterStripCollapsed: false, // FilterStrip shown by default when PillNav is visible
// View layout
@ -219,9 +217,6 @@ export const todoSettings = {
get immersiveModeEnabled() {
return baseStore.settings.immersiveModeEnabled;
},
get pillNavCollapsed() {
return baseStore.settings.pillNavCollapsed;
},
get filterStripCollapsed() {
return baseStore.settings.filterStripCollapsed;
},
@ -239,16 +234,7 @@ export const todoSettings = {
},
// Toggle methods
togglePillNav() {
baseStore.update({ pillNavCollapsed: !baseStore.settings.pillNavCollapsed });
},
toggleFilterStrip() {
baseStore.update({ filterStripCollapsed: !baseStore.settings.filterStripCollapsed });
},
showPillNav() {
baseStore.update({ pillNavCollapsed: false });
},
hidePillNav() {
baseStore.update({ pillNavCollapsed: true });
},
};

View file

@ -234,8 +234,8 @@ export type {
} from './toast';
// Bottom Stack
export { BottomStack, MinimizedTabs } from './bottom-stack';
export type { MinimizedPage, MinimizedTabsCallbacks } from './bottom-stack';
export { BottomStack, MinimizedTabs, NotificationBar } from './bottom-stack';
export type { MinimizedPage, MinimizedTabsCallbacks, BottomNotification } from './bottom-stack';
// Actions
export { focusTrap } from './actions';

View file

@ -171,6 +171,8 @@ export interface PillNavigationProps {
prependElements?: PillNavElement[];
/** Additional elements to show after nav items (tab groups, dividers) */
elements?: PillNavElement[];
/** Bottom offset from viewport bottom (default: '0px'). Use to position above other fixed bars. */
bottomOffset?: string;
}
export interface NavItem {