Skip to content

fix: centralize iOS safe area and refactor list components - #47

Merged
chriswritescode-dev merged 10 commits into
chriswritescode-dev:mainfrom
justcarlson:fix/ios-safe-area-insets
Jan 4, 2026
Merged

chriswritescode-dev merged 10 commits into
chriswritescode-dev:mainfrom
justcarlson:fix/ios-safe-area-insets

Conversation

@justcarlson

@justcarlson justcarlson commented Jan 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Centralizes iOS safe area handling with new Header component
  • Extracts reusable ListToolbar for search/select/delete UI
  • Cleans up unused layout components

Changes

iOS Safe Area

  • New Header compound component with sticky positioning and pt-safe handling
  • Fixed missing safe area padding on RepoDetail and Workspace pages

ListToolbar Component

  • Extracted reusable toolbar from SessionList and RepoList
  • Search input, Select All button, Delete button with count
  • Mobile: single delete icon that deletes selected items (or all if none selected)
  • Cancel now clears selection in both lists

Cleanup

  • Removed unused Header.tsx, RepoDetailHeader.tsx, SessionDetailHeader.tsx
  • Removed unused App.css
  • Simplified dialog components

justcarlson and others added 10 commits January 3, 2026 23:56
- Add pt-safe CSS utility class for safe-area-inset-top
- Create FullscreenSheet component with built-in safe-area support
- Add fullscreen prop to DialogContent for fullscreen dialogs
- Update FileBrowserSheet to use FullscreenSheet
- Update MobileFilePreviewModal to use FullscreenSheet
- Add pt-safe to SettingsDialog mobile view

Fixes status bar overlap on iOS devices with notch/Dynamic Island
- Header.tsx (main repos page)
- SessionDetailHeader.tsx (session page)
- Add PageHeader component with pt-safe, sticky, z-10, border-b styling
- Add TDD test infrastructure (vitest config, testing-library, jsdom)
- Refactor Header, SessionDetailHeader, RepoDetailHeader, Workspace to use PageHeader
- Fix missing pt-safe on RepoDetailHeader and Workspace pages
- All header safe area styling now has single fix point
- GitChangesSheet, FilePreviewDialog: add fullscreen prop
- ModelSelectDialog, RepoMcpDialog: add pt-safe class
- EditSessionTitleDialog: add pt-safe on mobile
Dialogs need top-0 positioning on mobile for pt-safe to work.
Centered dialogs don't benefit from safe area padding.
- Fullscreen on mobile with pt-safe, centered on desktop
- Simplifies large dialog styling
- Convert pt-safe/pb-safe to @Utility directives with iOS 11 fallback
- Use inline styles on DialogContent for reliable safe-area padding
- Position close button with calc(env(safe-area-inset-top) + 1rem)
- Add 10 tests for DialogContent safe-area behavior
- Add ListToolbar component for search/select all/delete UI
- Add Header compound component (Header.Root, Header.Title, etc.)
- Update SessionList and RepoList to use ListToolbar
- Mobile delete: deletes selected or all if none selected
- Cancel delete now clears selection
- Remove unused layout components
@chriswritescode-dev chriswritescode-dev changed the title fix: centralize iOS safe area with PageHeader component fix: centralize iOS safe area and refactor list components Jan 4, 2026
@chriswritescode-dev
chriswritescode-dev merged commit cd9a552 into chriswritescode-dev:main Jan 4, 2026
1 check passed
CloudyAasim pushed a commit to CloudyAasim/opencode-manager that referenced this pull request Oct 1, 2026
…escode-dev#47)

* fix: add iOS safe-area-inset-top support for fullscreen overlays

- Add pt-safe CSS utility class for safe-area-inset-top
- Create FullscreenSheet component with built-in safe-area support
- Add fullscreen prop to DialogContent for fullscreen dialogs
- Update FileBrowserSheet to use FullscreenSheet
- Update MobileFilePreviewModal to use FullscreenSheet
- Add pt-safe to SettingsDialog mobile view

Fixes status bar overlap on iOS devices with notch/Dynamic Island

* fix: add pt-safe to main page headers

- Header.tsx (main repos page)
- SessionDetailHeader.tsx (session page)

* docs: add TDD refactoring plan for iOS safe area

* remove plan file from repo

* refactor: centralize iOS safe area handling with PageHeader component

- Add PageHeader component with pt-safe, sticky, z-10, border-b styling
- Add TDD test infrastructure (vitest config, testing-library, jsdom)
- Refactor Header, SessionDetailHeader, RepoDetailHeader, Workspace to use PageHeader
- Fix missing pt-safe on RepoDetailHeader and Workspace pages
- All header safe area styling now has single fix point

* fix: add pt-safe to remaining fullscreen dialogs and sheets

- GitChangesSheet, FilePreviewDialog: add fullscreen prop
- ModelSelectDialog, RepoMcpDialog: add pt-safe class
- EditSessionTitleDialog: add pt-safe on mobile

* fix: use mobile-first positioning for large dialogs

Dialogs need top-0 positioning on mobile for pt-safe to work.
Centered dialogs don't benefit from safe area padding.

* fix: add mobileFullscreen prop to DialogContent

- Fullscreen on mobile with pt-safe, centered on desktop
- Simplifies large dialog styling

* fix: use inline styles for iOS safe area to fix CSS cascade issues

- Convert pt-safe/pb-safe to @Utility directives with iOS 11 fallback
- Use inline styles on DialogContent for reliable safe-area padding
- Position close button with calc(env(safe-area-inset-top) + 1rem)
- Add 10 tests for DialogContent safe-area behavior

* refactor: extract ListToolbar and Header components for reuse

- Add ListToolbar component for search/select all/delete UI
- Add Header compound component (Header.Root, Header.Title, etc.)
- Update SessionList and RepoList to use ListToolbar
- Mobile delete: deletes selected or all if none selected
- Cancel delete now clears selection
- Remove unused layout components

---------

Co-authored-by: Chris Scott <99081550+chriswritescode-dev@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants