diff --git a/package-lock.json b/package-lock.json index 68badf40816..ba181e2bbfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -137,6 +137,7 @@ "rimraf": "^6.1.2", "rollup": "^4.54.0", "rollup-plugin-clear": "^2.0.7", + "shadow-dom-testing-library": "^1.13.1", "storage-mock": "^2.1.0", "storybook": "10.1.11", "stylelint": "^16.26.1", @@ -28955,6 +28956,20 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "node_modules/shadow-dom-testing-library": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/shadow-dom-testing-library/-/shadow-dom-testing-library-1.13.1.tgz", + "integrity": "sha512-X73VDI3KumYeYuz/C2yjn4/1bsUN68JleYI3NwFJUDa+5fWhO//s+02gdxdetY+mVRYZosVokkkmIhdzjABnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14", + "npm": ">= 7" + }, + "peerDependencies": { + "@testing-library/dom": ">= 8" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -53551,6 +53566,12 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "shadow-dom-testing-library": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/shadow-dom-testing-library/-/shadow-dom-testing-library-1.13.1.tgz", + "integrity": "sha512-X73VDI3KumYeYuz/C2yjn4/1bsUN68JleYI3NwFJUDa+5fWhO//s+02gdxdetY+mVRYZosVokkkmIhdzjABnmQ==", + "dev": true + }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", diff --git a/package.json b/package.json index 1eb5637ae43..6c67ee7b1f0 100644 --- a/package.json +++ b/package.json @@ -166,6 +166,7 @@ "rimraf": "^6.1.2", "rollup": "^4.54.0", "rollup-plugin-clear": "^2.0.7", + "shadow-dom-testing-library": "^1.13.1", "storage-mock": "^2.1.0", "storybook": "10.1.11", "stylelint": "^16.26.1", diff --git a/src/collapse/collapse-content.tsx b/src/collapse/collapse-content.tsx index a087ec2b13e..da691d2e3c3 100644 --- a/src/collapse/collapse-content.tsx +++ b/src/collapse/collapse-content.tsx @@ -2,7 +2,6 @@ import React, {useState, useEffect, useRef, useContext, type PropsWithChildren} import classNames from 'classnames'; import dataTests from '../global/data-tests'; -import {getRect} from '../global/dom'; import {toPx} from './utils'; import CollapseContext from './collapse-context'; import {COLLAPSE_CONTENT_TEST_ID, COLLAPSE_CONTENT_CONTAINER_TEST_ID} from './consts'; @@ -60,13 +59,19 @@ export const CollapseContent: React.FC> = ({ } useEffect(() => { - if (contentRef.current) { - const observer = new ResizeObserver(() => { - setContentHeight(getRect(contentRef.current).height); - }); + const observer = new ResizeObserver(([entry]) => { + if (entry.target.isConnected) { + setContentHeight(entry.contentRect.height); + } + }); + if (contentRef.current) { observer.observe(contentRef.current); } + + return () => { + observer.disconnect(); + }; }, []); const calculatedDuration = duration + contentHeight * DURATION_FACTOR; diff --git a/src/collapse/collapse.stories.tsx b/src/collapse/collapse.stories.tsx index 34af304be11..bc34d4b5025 100644 --- a/src/collapse/collapse.stories.tsx +++ b/src/collapse/collapse.stories.tsx @@ -7,6 +7,7 @@ import LoaderInline from '../loader-inline/loader-inline'; import Collapse from './collapse'; import CollapseContent from './collapse-content'; import CollapseControl from './collapse-control'; +import {createShadowRootStyleSheet, ShadowRootWrap} from './shadow-root-test-helpers'; import styles from './collapse.stories.css'; @@ -84,11 +85,11 @@ export const WithIcon = () => ( {(collapsed: boolean) => - (collapsed ? ( + collapsed ? (