Skip to content

feat: Add content overlay and status bar overlay mode for condensed layout#1545

Draft
jjbeckman13 wants to merge 6 commits into
masterfrom
feat/content-overlay
Draft

feat: Add content overlay and status bar overlay mode for condensed layout#1545
jjbeckman13 wants to merge 6 commits into
masterfrom
feat/content-overlay

Conversation

@jjbeckman13

@jjbeckman13 jjbeckman13 commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a content overlay and status bar overlay mode to StandardLayout, enabling parent applications to iframe an AppUI child app and seamlessly place their own UI components over a reserved transparent zone.

Motivation

Portal applications have the need to overlay their own header, toolbar, or navigation components on top of the viewport area without conflicting with the AppUI widget panel layout. This PR provides first-class support for that pattern.

Changes

Core Library (@itwin/appui-react)

  • StandardLayout.tsx — New optional contentOverlay (ReactNode) and statusBarOverlay (boolean) props on the internal layout component. When contentOverlay is provided, it renders inside .nz-centerArea above the viewport. When statusBarOverlay is true, the status bar renders between widget panels (overlaying the viewport) instead of as a full-width grid row.

  • StandardLayout.scss — Added .nz-statusBarOverlay styles with:

    • Transparent background on the docked bar
    • Per-item rounded pill backgrounds (--iui-color-background + --iui-border-radius-1)
    • Configurable spacing/padding with left offset to clear the iTwin.js viewport watermark
    • Bottom margin to float above the viewport edge
  • ConfigurableUiContent.tsx — Exposed statusBarOverlay in the public ConfigurableUiContext so consuming apps can enable it declaratively.

  • Frontstage.tsx — Reads statusBarOverlay from context and passes it through to StandardLayout.

Test App

  • ContentOverlayFrontstage.tsx — New frontstage demonstrating the overlay pattern:

    • OverlaySpacer component posts its bounding rect to window.parent via postMessage
    • Listens for appui-set-overlay-mode messages to toggle overlay mode without iframe reload
    • Includes sample status bar items (coordinates, units, connection status)
  • parent-app.html — Full demo of the parent portal pattern:

    • Normal mode: header + left nav + embedded iframe
    • Full-screen mode: hides chrome, iframe fills viewport, parent overlays its toolbar via postMessage-reported coordinates
    • Toggle via icon button — no iframe src reload, uses message passing

How It Works

┌─────────────────────────────────────────┐
│  Parent App (portal)                    │
│  ┌───────────────────────────────────┐  │
│  │ iframe (AppUI child)              │  │
│  │  ┌─────────────────────────────┐  │  │
│  │  │ .nz-centerArea              │  │  │
│  │  │  ┌──────────────────────┐   │  │  │
│  │  │  │ contentOverlay spacer│◄──┼──┼──┼── posts rect to parent
│  │  │  └──────────────────────┘   │  │  │
│  │  │  viewport                   │  │  │
│  │  │  ┌──────────────────────┐   │  │  │
│  │  │  │ statusBarOverlay     │   │  │  │
│  │  │  └──────────────────────┘   │  │  │
│  │  └─────────────────────────────┘  │  │
│  └───────────────────────────────────┘  │
│  ┌───────────────────────────────────┐  │
│  │ Overlay bar (positioned via rect) │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘

Demo

2026-04-30_15-45-04.mp4

Testing

  1. Run the test-app: pnpm --filter test-app dev
  2. Open http://localhost:3000/parent-app.html
  3. Click the expand icon in the header to enter full-screen overlay mode
  4. Observe: parent toolbar overlays the reserved spacer, status bar items appear as floating pills over the viewport
  5. Click the collapse icon to exit back to normal layout

jjbeckman13 and others added 3 commits April 28, 2026 13:48
…unication

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <copilot@github.com>
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@jjbeckman13 jjbeckman13 changed the title feat: Add content overlay and status bar overlay mode for iframe embedding feat: Add content overlay and status bar overlay mode for condensed layout Apr 30, 2026
Add bottom tool widget composers and update frontstage configuration

- Introduced BottomContentToolWidgetComposer and BottomViewToolWidgetComposer for bottom-left and bottom-right tool areas.
- Updated FrontstageConfig to include bottomContentManipulation and bottomViewNavigation properties.
- Enhanced ToolbarComposer to support bottom tool usage.
- Modified Toolbars and WidgetPanelsToolbars to render new bottom tool areas.
- Added corresponding styles in Toolbars.scss for bottom tool layout.
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