fix(ui): Prevent unintended text selection and improve component behavior (#5077)

This commit is contained in:
Alireza 2025-05-28 22:41:15 -04:00 committed by GitHub
parent 773d6edaf7
commit c6327acdc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 73 additions and 32 deletions

View File

@ -2,6 +2,11 @@
width: 100%;
height: 100%; /* MUST have `height` to prevent resize infinite loop */
position: relative;
/* Prevent text selection on the entire viewport wrapper */
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
.cornerstone-viewport-element {
@ -16,4 +21,26 @@
/* Prevents the entire page from getting larger
when the magnify tool is near the sides/corners of the page */
overflow: hidden;
/* Prevent text selection on the viewport element */
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
/* Prevent text selection on overlay elements */
.noselect {
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
/* Ensure all elements within viewport wrapper prevent text selection */
.viewport-wrapper * {
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}

View File

@ -343,7 +343,9 @@ const OHIFCornerstoneViewport = React.memo(
data-viewportId={viewportId}
ref={el => {
elementRef.current = el;
if (el) viewportRef.register(el);
if (el) {
viewportRef.register(el);
}
}}
></div>
<CornerstoneOverlays

View File

@ -3,6 +3,12 @@
--ol-foreground-color: #000000;
--ol-subtle-foreground-color: #000;
--ol-subtle-background-color: rgba(78, 78, 78, 0.5);
/* Prevent text selection on the entire viewer to avoid interference with annotations */
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.DicomMicroscopyViewer .ol-box {

View File

@ -70,8 +70,14 @@ const CinePlayer: React.FC<CinePlayerProps> = ({
);
return (
<div className={`absolute top-10 left-1/2 z-50 -translate-x-1/2 ${className}`}>
<div className={'bg-muted inline-flex select-none items-center gap-2 rounded-md px-2 py-2'}>
<div
className={`pointer-events-none absolute top-10 left-1/2 z-50 -translate-x-1/2 ${className}`}
>
<div
className={
'bg-muted pointer-events-auto inline-flex select-none items-center gap-2 rounded-md px-2 py-2'
}
>
<Button
variant="ghost"
size="icon"
@ -167,7 +173,7 @@ const CinePlayer: React.FC<CinePlayerProps> = ({
step={1}
value={dynamicInfo.dimensionGroupNumber}
onChange={val => handleDimensionGroupNumberChange(val as number)}
className="mt-3 w-full"
className="pointer-events-auto mt-3 w-full"
>
<Numeric.SingleRange showNumberInput={false} />
</Numeric.Container>

View File

@ -1393,10 +1393,10 @@
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
"@cornerstonejs/adapters@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.15.1.tgz#b55e51ff0105ded60d2c45eeefe0b8bd4ce63cbc"
integrity sha512-nwUPk2SXukPkkKrpzAOIOMI0lNqwTl1euI1iTLP1DB1gt8r2wy1V1vYu7+TVT9CfifhfJ+yrJnYCo1VwqnnPDA==
"@cornerstonejs/adapters@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-3.17.0.tgz#9930e0b99ba021110189ecb66676af9782a8cc87"
integrity sha512-66NR7beM3KSTqdjg5PKkfGaWVvXoPPyJzAYt98pAv8cjauxJtD8bBGk7iVRck8S8Y47QsucufEIDdLFwe7dmuA==
dependencies:
"@babel/runtime-corejs2" "^7.17.8"
buffer "^6.0.3"
@ -1404,10 +1404,10 @@
gl-matrix "^3.4.3"
ndarray "^1.0.19"
"@cornerstonejs/ai@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-3.15.1.tgz#61f31a6108ef9172c602d10eb4ed67568dfe328b"
integrity sha512-rFcS8Hcu7Bjr+BLYMR8Y0m/eno+ynEE3Wd2gM48VNV5pXQ4HfjbA4kl7r4JyZKqyPZYgV2Api42v0vKLeSSZ6g==
"@cornerstonejs/ai@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/ai/-/ai-3.17.0.tgz#7c34e648d57bf829f1866fe163487e24733cf8ae"
integrity sha512-r4iu/Gdml3S9y96LPVEGEo/AxW/t8d0K6b26B7PoczNidbvwD3d6vDoiCss74XwJxSSYAd7W+8yWeJVaK+Dy6w==
dependencies:
"@babel/runtime-corejs2" "^7.17.8"
buffer "^6.0.3"
@ -1443,20 +1443,20 @@
resolved "https://registry.yarnpkg.com/@cornerstonejs/codec-openjph/-/codec-openjph-2.4.5.tgz#8690b61a86fa53ef38a70eee9d665a79229517c0"
integrity sha512-MZCUy8VG0VG5Nl1l58+g+kH3LujAzLYTfJqkwpWI2gjSrGXnP6lgwyy4GmPRZWVoS40/B1LDNALK905cNWm+sg==
"@cornerstonejs/core@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.15.1.tgz#a856ea98973b30acf5071563c039425a73a958ea"
integrity sha512-yXYjNyAlbKOfx6Xjd2xXnRuFrOCEHRP3yC6SQDywp8/WJ4aIiIXqU8Hgxht+/22UDjjoe5DcF2H+d5yX6SZLMg==
"@cornerstonejs/core@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-3.17.0.tgz#ca71c9e0c20a35f15c96840147015d7aaf9228ad"
integrity sha512-H03pzBzIwbl1ZPGpSkmTYtDiivp2XfN6/LhxLHYjEjzFsjSxqWVUnMHMTaXoB6IjKuInYusDmjtTHMt4O/WCXw==
dependencies:
"@kitware/vtk.js" "32.12.1"
comlink "^4.4.1"
gl-matrix "^3.4.3"
loglevel "^1.9.2"
"@cornerstonejs/dicom-image-loader@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.15.1.tgz#5fa30aeb1824e4875564454cc16c6dc6a943ab70"
integrity sha512-/L2pL8121Vx4OgCw4R5ZxLLfZbBSGTItWASFDeImlT9jI++KHnOpVQRugYHChMj4dHb45yX8dAify+AhSMNkXg==
"@cornerstonejs/dicom-image-loader@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-3.17.0.tgz#c4e27f4ed84fbb7758a1cef46dac653470cb1693"
integrity sha512-CwmWCyNBz2a9J2J9NF1xs57qNKj35u4bZZE1dTBYcbL4BNY8qJRx89rePVVhf/SCa1m97fzB5LLi3hpw9oagwg==
dependencies:
"@cornerstonejs/codec-charls" "^1.2.3"
"@cornerstonejs/codec-libjpeg-turbo-8bit" "^1.2.2"
@ -1468,25 +1468,25 @@
pako "^2.0.4"
uuid "^9.0.0"
"@cornerstonejs/labelmap-interpolation@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-3.15.1.tgz#948e6cebb68264e87ddca0e44308cbcee3abd804"
integrity sha512-94zxc91G9V+Dp3dodqSVde5ia9sUZNaP7Eud3Tsyej4unu4frIIx2/fRGVNSdq3pLNM7MT0KLfGeut+I7S3cHQ==
"@cornerstonejs/labelmap-interpolation@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/labelmap-interpolation/-/labelmap-interpolation-3.17.0.tgz#53127d53c616e3bcffc38419a320481696d0e2fb"
integrity sha512-2NhFQqFu91HF1G+enf95dvN9Bn/F6BzKqQMt3SBjbqpwSEoBEdqfDOUUWFBTPNxR3UUYCGoJsZKdP7WQvKWtXA==
dependencies:
"@itk-wasm/morphological-contour-interpolation" "1.1.0"
itk-wasm "1.0.0-b.165"
"@cornerstonejs/polymorphic-segmentation@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-3.15.1.tgz#b6bea5e93d5b3a02a0aa0ce0fbd3175e6f7a90da"
integrity sha512-C/A/SLhOkUi0I7yXkWwu96LhaajQSIcMZX6kmU2KEuBIwRNZ2oaZm4vDF2srTJZtxKeJ/gaD0BJEn5LJFYHFfw==
"@cornerstonejs/polymorphic-segmentation@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/polymorphic-segmentation/-/polymorphic-segmentation-3.17.0.tgz#877d83701b287ac8de949dd6295cc33e3b2dc7ab"
integrity sha512-TEUUlWfi330+Vo2XQCLKyVGCrmvJ4V8/asUEHaZbXleGDW7h8aklZZOPJ2iqi/QDcuoet3KZD62HUNg12VK+LA==
dependencies:
"@icr/polyseg-wasm" "0.4.0"
"@cornerstonejs/tools@^3.15.1":
version "3.15.1"
resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.15.1.tgz#db9f3ffeaa507fa234434328c0d58069cfe60e0b"
integrity sha512-QyowzqiitrwFomZGKvIeAbVMpjlzPjOOiMkLZUAGoSvLCBCjS9zDZFtnZ33cRgIqzVrzmVFWAn1Fi3fzqugQZQ==
"@cornerstonejs/tools@^3.15.6":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-3.17.0.tgz#a4aac1e69367b28c31e34be1f9d96d8300ff45a0"
integrity sha512-4ODnbORYhWxRGtW7Fq7ZOIG70GvwN+hcV04sZ6yq7/iOYibUo2IFFSUowSYcGSkzDSQRc2UtxQPYuwIjpuHqsQ==
dependencies:
"@types/offscreencanvas" "2019.7.3"
comlink "^4.4.1"