diff --git a/packages/react/src/PageLayout/PageLayout.test.tsx b/packages/react/src/PageLayout/PageLayout.test.tsx
index 52bc50c9874..3f3155c0c42 100644
--- a/packages/react/src/PageLayout/PageLayout.test.tsx
+++ b/packages/react/src/PageLayout/PageLayout.test.tsx
@@ -259,6 +259,69 @@ describe('PageLayout', async () => {
fireEvent.lostPointerCapture(divider, {pointerId: 1})
expect(pane!.style.willChange).toBe('')
})
+
+ it('should set contain-intrinsic-size during pointer drag', async () => {
+ const {container} = render(
+
+
+
+
+
+
+
+ ,
+ )
+
+ const pane = container.querySelector('[class*="Pane"][data-resizable]')
+ const contentWrapper = container.querySelector('[class*="ContentWrapper"]')
+ const divider = await screen.findByRole('slider')
+
+ // Before drag - no contain-intrinsic-size
+ expect(pane!.style.containIntrinsicSize).toBe('')
+ expect(contentWrapper!.style.containIntrinsicSize).toBe('')
+
+ // Start drag - contain-intrinsic-size should be set with auto keyword
+ fireEvent.pointerDown(divider, {clientX: 300, clientY: 200, pointerId: 1})
+ expect(pane!.style.containIntrinsicSize).toMatch(/^auto \d+(\.\d+)?px auto \d+(\.\d+)?px$/)
+ expect(contentWrapper!.style.containIntrinsicSize).toMatch(/^auto \d+(\.\d+)?px auto \d+(\.\d+)?px$/)
+
+ // End drag - contain-intrinsic-size should be removed
+ fireEvent.lostPointerCapture(divider, {pointerId: 1})
+ expect(pane!.style.containIntrinsicSize).toBe('')
+ expect(contentWrapper!.style.containIntrinsicSize).toBe('')
+ })
+
+ it('should set contain-intrinsic-size during keyboard resize', async () => {
+ const {container} = render(
+
+
+
+
+
+
+
+ ,
+ )
+
+ const pane = container.querySelector('[class*="Pane"][data-resizable]')
+ const contentWrapper = container.querySelector('[class*="ContentWrapper"]')
+ const divider = await screen.findByRole('slider')
+
+ // Before interaction - no contain-intrinsic-size
+ expect(pane!.style.containIntrinsicSize).toBe('')
+ expect(contentWrapper!.style.containIntrinsicSize).toBe('')
+
+ // Start keyboard resize - should set with auto keyword
+ fireEvent.focus(divider)
+ fireEvent.keyDown(divider, {key: 'ArrowRight'})
+ expect(pane!.style.containIntrinsicSize).toMatch(/^auto \d+(\.\d+)?px auto \d+(\.\d+)?px$/)
+ expect(contentWrapper!.style.containIntrinsicSize).toMatch(/^auto \d+(\.\d+)?px auto \d+(\.\d+)?px$/)
+
+ // End keyboard resize - contain-intrinsic-size should be removed
+ fireEvent.keyUp(divider, {key: 'ArrowRight'})
+ expect(pane!.style.containIntrinsicSize).toBe('')
+ expect(contentWrapper!.style.containIntrinsicSize).toBe('')
+ })
})
describe('PageLayout.Content', () => {
diff --git a/packages/react/src/PageLayout/paneUtils.ts b/packages/react/src/PageLayout/paneUtils.ts
index a33f8bbc010..b812be58b35 100644
--- a/packages/react/src/PageLayout/paneUtils.ts
+++ b/packages/react/src/PageLayout/paneUtils.ts
@@ -15,6 +15,18 @@ export function setDraggingStyles({handle, pane, contentWrapper}: DraggingStyles
handle?.style.setProperty('--draggable-handle--drag-opacity', '1')
handle?.style.setProperty('--draggable-handle--transition', 'none')
+ // Capture current dimensions and set contain-intrinsic-size BEFORE setting data-dragging
+ // This ensures the element maintains its size when content-visibility: auto is applied
+ // Use 'auto' for width since it changes during drag, allowing browser to track actual size
+ if (pane) {
+ const rect = pane.getBoundingClientRect()
+ pane.style.setProperty('contain-intrinsic-size', `auto ${rect.width}px auto ${rect.height}px`)
+ }
+ if (contentWrapper) {
+ const rect = contentWrapper.getBoundingClientRect()
+ contentWrapper.style.setProperty('contain-intrinsic-size', `auto ${rect.width}px auto ${rect.height}px`)
+ }
+
// Set attribute for CSS containment (O(1) direct selector, not descendant)
pane?.setAttribute(DATA_DRAGGING_ATTR, 'true')
contentWrapper?.setAttribute(DATA_DRAGGING_ATTR, 'true')
@@ -28,4 +40,8 @@ export function removeDraggingStyles({handle, pane, contentWrapper}: DraggingSty
pane?.removeAttribute(DATA_DRAGGING_ATTR)
contentWrapper?.removeAttribute(DATA_DRAGGING_ATTR)
+
+ // Remove contain-intrinsic-size after removing data-dragging
+ pane?.style.removeProperty('contain-intrinsic-size')
+ contentWrapper?.style.removeProperty('contain-intrinsic-size')
}