Repository: exadel-inc/esl
Pull request #2269 (2024-03-05 14:24:23)

convert Rect to immutable and update popup positioning


Patch:
diff --git a/.releaserc.yml b/.releaserc.yml
index fdd43f04b..283053a9e 100644
--- a/.releaserc.yml
+++ b/.releaserc.yml
@@ -16,9 +16,6 @@ branches:
   - name: main-next
     channel: next
     prerelease: next
-  # Maintenance branches:
-  - name: release-4.x
-    channel: 4.x
 
 # Release configuration
 plugins:
diff --git a/package-lock.json b/package-lock.json
index 6a7123cab..0ab6fe126 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,11 +25,11 @@
         "@semantic-release/commit-analyzer": "^11.1.0",
         "@semantic-release/git": "^10.0.1",
         "@semantic-release/github": "^9.2.6",
-        "@semantic-release/npm": "^11.0.3",
+        "@semantic-release/npm": "^11.0.2",
         "@semantic-release/release-notes-generator": "^12.1.0",
         "@types/jest": "^29.5.12",
-        "@typescript-eslint/eslint-plugin": "^7.1.1",
-        "@typescript-eslint/parser": "^7.1.1",
+        "@typescript-eslint/eslint-plugin": "^7.1.0",
+        "@typescript-eslint/parser": "^7.1.0",
         "chokidar-cli": "^3.0.0",
         "concurrently": "^8.2.2",
         "copyfiles": "^2.4.1",
@@ -125,7 +125,7 @@
         "@types/puppeteer": "^7.0.4",
         "jest-image-snapshot": "^6.4.0",
         "jest-puppeteer": "^10.0.1",
-        "puppeteer": "^22.4.0",
+        "puppeteer": "^22.3.0",
         "stucumber": "^0.19.0"
       }
     },
@@ -2623,9 +2623,9 @@
       }
     },
     "node_modules/@semantic-release/npm": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.3.tgz",
-      "integrity": "sha512-KUsozQGhRBAnoVg4UMZj9ep436VEGwT536/jwSqB7vcEfA6oncCUU7UIYTRdLx7GvTtqn0kBjnkfLVkcnBa2YQ==",
+      "version": "11.0.2",
+      "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.2.tgz",
+      "integrity": "sha512-owtf3RjyPvRE63iUKZ5/xO4uqjRpVQDUB9+nnXj0xwfIeM9pRl+cG+zGDzdftR4m3f2s4Wyf3SexW+kF5DFtWA==",
       "dev": true,
       "dependencies": {
         "@semantic-release/error": "^4.0.0",
@@ -2635,7 +2635,7 @@
         "lodash-es": "^4.17.21",
         "nerf-dart": "^1.0.0",
         "normalize-url": "^8.0.0",
-        "npm": "^10.5.0",
+        "npm": "^10.0.0",
         "rc": "^1.2.8",
         "read-pkg": "^9.0.0",
         "registry-auth-token": "^5.0.0",
@@ -3410,16 +3410,16 @@
       "integrity": "sha512-d4GpH4uPYp9W07kc487tiq6V/EUHl18vZWFMbQoe4Sk9LXEWzFi/BMf9x7TI4m7/j7gU3KeX8H6M8aPBgykeLw=="
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz",
-      "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz",
+      "integrity": "sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==",
       "dev": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.5.1",
-        "@typescript-eslint/scope-manager": "7.1.1",
-        "@typescript-eslint/type-utils": "7.1.1",
-        "@typescript-eslint/utils": "7.1.1",
-        "@typescript-eslint/visitor-keys": "7.1.1",
+        "@typescript-eslint/scope-manager": "7.1.0",
+        "@typescript-eslint/type-utils": "7.1.0",
+        "@typescript-eslint/utils": "7.1.0",
+        "@typescript-eslint/visitor-keys": "7.1.0",
         "debug": "^4.3.4",
         "graphemer": "^1.4.0",
         "ignore": "^5.2.4",
@@ -3445,15 +3445,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz",
-      "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.0.tgz",
+      "integrity": "sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.1.1",
-        "@typescript-eslint/types": "7.1.1",
-        "@typescript-eslint/typescript-estree": "7.1.1",
-        "@typescript-eslint/visitor-keys": "7.1.1",
+        "@typescript-eslint/scope-manager": "7.1.0",
+        "@typescript-eslint/types": "7.1.0",
+        "@typescript-eslint/typescript-estree": "7.1.0",
+        "@typescript-eslint/visitor-keys": "7.1.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -3473,13 +3473,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz",
-      "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz",
+      "integrity": "sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.1.1",
-        "@typescript-eslint/visitor-keys": "7.1.1"
+        "@typescript-eslint/types": "7.1.0",
+        "@typescript-eslint/visitor-keys": "7.1.0"
       },
       "engines": {
         "node": "^16.0.0 || >=18.0.0"
@@ -3490,13 +3490,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz",
-      "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz",
+      "integrity": "sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.1.1",
-        "@typescript-eslint/utils": "7.1.1",
+        "@typescript-eslint/typescript-estree": "7.1.0",
+        "@typescript-eslint/utils": "7.1.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.0.1"
       },
@@ -3517,9 +3517,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz",
-      "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.0.tgz",
+      "integrity": "sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==",
       "dev": true,
       "engines": {
         "node": "^16.0.0 || >=18.0.0"
@@ -3530,13 +3530,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz",
-      "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz",
+      "integrity": "sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.1.1",
-        "@typescript-eslint/visitor-keys": "7.1.1",
+        "@typescript-eslint/types": "7.1.0",
+        "@typescript-eslint/visitor-keys": "7.1.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -3587,17 +3587,17 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz",
-      "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.0.tgz",
+      "integrity": "sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
         "@types/json-schema": "^7.0.12",
         "@types/semver": "^7.5.0",
-        "@typescript-eslint/scope-manager": "7.1.1",
-        "@typescript-eslint/types": "7.1.1",
-        "@typescript-eslint/typescript-estree": "7.1.1",
+        "@typescript-eslint/scope-manager": "7.1.0",
+        "@typescript-eslint/types": "7.1.0",
+        "@typescript-eslint/typescript-estree": "7.1.0",
         "semver": "^7.5.4"
       },
       "engines": {
@@ -3612,12 +3612,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz",
-      "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz",
+      "integrity": "sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.1.1",
+        "@typescript-eslint/types": "7.1.0",
         "eslint-visitor-keys": "^3.4.1"
       },
       "engines": {
@@ -4341,15 +4341,15 @@
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
     },
     "node_modules/bare-events": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz",
-      "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
+      "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
       "optional": true
     },
     "node_modules/bare-fs": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.1.tgz",
-      "integrity": "sha512-+CjmZANQDFZWy4PGbVdmALIwmt33aJg8qTkVjClU6X4WmZkTPBDxRHiBn7fpqEWEfF3AC2io++erpViAIQbSjg==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.0.tgz",
+      "integrity": "sha512-+VhW202E9eTVGkX7p+TNXtZC4RTzj9JfJW7PtfIbZ7mIQ/QT9uOafQTx7lx2n9ERmWsXvLHF4hStAFn4gl2mQw==",
       "optional": true,
       "dependencies": {
         "bare-events": "^2.0.0",
@@ -4393,9 +4393,9 @@
       ]
     },
     "node_modules/basic-ftp": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
-      "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz",
+      "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==",
       "engines": {
         "node": ">=10.0.0"
       }
@@ -12280,9 +12280,9 @@
       }
     },
     "node_modules/npm": {
-      "version": "10.5.0",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz",
-      "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==",
+      "version": "10.2.5",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-10.2.5.tgz",
+      "integrity": "sha512-lXdZ7titEN8CH5YJk9C/aYRU9JeDxQ4d8rwIIDsvH3SMjLjHTukB2CFstMiB30zXs4vCrPN2WH6cDq1yHBeJAw==",
       "bundleDependencies": [
         "@isaacs/string-locale-compare",
         "@npmcli/arborist",
@@ -12346,6 +12346,7 @@
         "semver",
         "spdx-expression-parse",
         "ssri",
+        "strip-ansi",
         "supports-color",
         "tar",
         "text-table",
@@ -12363,12 +12364,12 @@
         "@npmcli/fs": "^3.1.0",
         "@npmcli/map-workspaces": "^3.0.4",
         "@npmcli/package-json": "^5.0.0",
-        "@npmcli/promise-spawn": "^7.0.1",
-        "@npmcli/run-script": "^7.0.4",
-        "@sigstore/tuf": "^2.3.1",
+        "@npmcli/promise-spawn": "^7.0.0",
+        "@npmcli/run-script": "^7.0.2",
+        "@sigstore/tuf": "^2.2.0",
         "abbrev": "^2.0.0",
         "archy": "~1.0.0",
-        "cacache": "^18.0.2",
+        "cacache": "^18.0.1",
         "chalk": "^5.3.0",
         "ci-info": "^4.0.0",
         "cli-columns": "^4.0.0",
@@ -12411,14 +12412,15 @@
         "npm-user-validate": "^2.0.0",
         "npmlog": "^7.0.1",
         "p-map": "^4.0.0",
-        "pacote": "^17.0.6",
+        "pacote": "^17.0.5",
         "parse-conflict-json": "^3.0.1",
         "proc-log": "^3.0.0",
         "qrcode-terminal": "^0.12.0",
         "read": "^2.1.0",
-        "semver": "^7.6.0",
+        "semver": "^7.5.4",
         "spdx-expression-parse": "^3.0.1",
         "ssri": "^10.0.5",
+        "strip-ansi": "^7.1.0",
         "supports-color": "^9.4.0",
         "tar": "^6.2.0",
         "text-table": "~0.2.0",
@@ -12475,18 +12477,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
     "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
       "version": "9.2.2",
       "dev": true,
@@ -12510,21 +12500,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
     "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
       "version": "1.1.0",
       "dev": true,
@@ -12532,7 +12507,7 @@
       "license": "ISC"
     },
     "node_modules/npm/node_modules/@npmcli/agent": {
-      "version": "2.2.1",
+      "version": "2.2.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12548,7 +12523,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/arborist": {
-      "version": "7.4.0",
+      "version": "7.2.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12561,7 +12536,7 @@
         "@npmcli/name-from-folder": "^2.0.0",
         "@npmcli/node-gyp": "^3.0.0",
         "@npmcli/package-json": "^5.0.0",
-        "@npmcli/query": "^3.1.0",
+        "@npmcli/query": "^3.0.1",
         "@npmcli/run-script": "^7.0.2",
         "bin-links": "^4.0.1",
         "cacache": "^18.0.0",
@@ -12580,7 +12555,7 @@
         "parse-conflict-json": "^3.0.0",
         "proc-log": "^3.0.0",
         "promise-all-reject-late": "^1.0.0",
-        "promise-call-limit": "^3.0.1",
+        "promise-call-limit": "^1.0.2",
         "read-package-json-fast": "^3.0.2",
         "semver": "^7.3.7",
         "ssri": "^10.0.5",
@@ -12595,7 +12570,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/config": {
-      "version": "8.2.0",
+      "version": "8.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12653,7 +12628,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/git": {
-      "version": "5.0.4",
+      "version": "5.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12754,7 +12729,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/promise-spawn": {
-      "version": "7.0.1",
+      "version": "7.0.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12766,7 +12741,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/query": {
-      "version": "3.1.0",
+      "version": "3.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -12778,15 +12753,15 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/run-script": {
-      "version": "7.0.4",
+      "version": "7.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "@npmcli/node-gyp": "^3.0.0",
-        "@npmcli/package-json": "^5.0.0",
         "@npmcli/promise-spawn": "^7.0.0",
         "node-gyp": "^10.0.0",
+        "read-package-json-fast": "^3.0.0",
         "which": "^4.0.0"
       },
       "engines": {
@@ -12804,28 +12779,19 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/bundle": {
-      "version": "2.2.0",
+      "version": "2.1.0",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.0"
+        "@sigstore/protobuf-specs": "^0.2.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/npm/node_modules/@sigstore/core": {
-      "version": "1.0.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
     "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
-      "version": "0.3.0",
+      "version": "0.2.1",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
@@ -12834,14 +12800,13 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/sign": {
-      "version": "2.2.3",
+      "version": "2.2.0",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.2.0",
-        "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.0",
+        "@sigstore/bundle": "^2.1.0",
+        "@sigstore/protobuf-specs": "^0.2.1",
         "make-fetch-happen": "^13.0.0"
       },
       "engines": {
@@ -12849,27 +12814,13 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/tuf": {
-      "version": "2.3.1",
-      "dev": true,
-      "inBundle": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.0",
-        "tuf-js": "^2.2.0"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/npm/node_modules/@sigstore/verify": {
-      "version": "1.1.0",
+      "version": "2.2.0",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.2.0",
-        "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.0"
+        "@sigstore/protobuf-specs": "^0.2.1",
+        "tuf-js": "^2.1.0"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -12906,6 +12857,18 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/npm/node_modules/abort-controller": {
+      "version": "3.0.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "event-target-shim": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=6.5"
+      }
+    },
     "node_modules/npm/node_modules/agent-base": {
       "version": "7.1.0",
       "dev": true,
@@ -12932,12 +12895,15 @@
       }
     },
     "node_modules/npm/node_modules/ansi-regex": {
-      "version": "5.0.1",
+      "version": "6.0.1",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
     "node_modules/npm/node_modules/ansi-styles": {
@@ -12965,10 +12931,14 @@
       "license": "MIT"
     },
     "node_modules/npm/node_modules/are-we-there-yet": {
-      "version": "4.0.2",
+      "version": "4.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
+      "dependencies": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^4.1.0"
+      },
       "engines": {
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
@@ -12979,6 +12949,26 @@
       "inBundle": true,
       "license": "MIT"
     },
+    "node_modules/npm/node_modules/base64-js": {
+      "version": "1.5.1",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "inBundle": true,
+      "license": "MIT"
+    },
     "node_modules/npm/node_modules/bin-links": {
       "version": "4.0.3",
       "dev": true,
@@ -13012,6 +13002,30 @@
         "balanced-match": "^1.0.0"
       }
     },
+    "node_modules/npm/node_modules/buffer": {
+      "version": "6.0.3",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "node_modules/npm/node_modules/builtins": {
       "version": "5.0.1",
       "dev": true,
@@ -13022,7 +13036,7 @@
       }
     },
     "node_modules/npm/node_modules/cacache": {
-      "version": "18.0.2",
+      "version": "18.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13114,6 +13128,27 @@
         "node": ">= 10"
       }
     },
+    "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/npm/node_modules/cli-table3": {
       "version": "0.6.3",
       "dev": true,
@@ -13187,6 +13222,27 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/npm/node_modules/columnify/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/columnify/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/npm/node_modules/common-ancestor-path": {
       "version": "1.0.1",
       "dev": true,
@@ -13275,8 +13331,14 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/npm/node_modules/delegates": {
+      "version": "1.0.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT"
+    },
     "node_modules/npm/node_modules/diff": {
-      "version": "5.2.0",
+      "version": "5.1.0",
       "dev": true,
       "inBundle": true,
       "license": "BSD-3-Clause",
@@ -13321,6 +13383,24 @@
       "inBundle": true,
       "license": "MIT"
     },
+    "node_modules/npm/node_modules/event-target-shim": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/npm/node_modules/events": {
+      "version": "3.3.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
     "node_modules/npm/node_modules/exponential-backoff": {
       "version": "3.1.1",
       "dev": true,
@@ -13392,6 +13472,27 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/npm/node_modules/gauge/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/gauge/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/npm/node_modules/glob": {
       "version": "10.3.10",
       "dev": true,
@@ -13427,7 +13528,7 @@
       "license": "ISC"
     },
     "node_modules/npm/node_modules/hasown": {
-      "version": "2.0.1",
+      "version": "2.0.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -13457,7 +13558,7 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/npm/node_modules/http-proxy-agent": {
-      "version": "7.0.2",
+      "version": "7.0.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -13470,7 +13571,7 @@
       }
     },
     "node_modules/npm/node_modules/https-proxy-agent": {
-      "version": "7.0.4",
+      "version": "7.0.2",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -13495,6 +13596,26 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/npm/node_modules/ieee754": {
+      "version": "1.2.1",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "inBundle": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/npm/node_modules/ignore-walk": {
       "version": "6.0.4",
       "dev": true,
@@ -13552,24 +13673,11 @@
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/npm/node_modules/ip-address": {
-      "version": "9.0.5",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT",
-      "dependencies": {
-        "jsbn": "1.1.0",
-        "sprintf-js": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 12"
-      }
-    },
-    "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": {
-      "version": "1.1.3",
+    "node_modules/npm/node_modules/ip": {
+      "version": "2.0.0",
       "dev": true,
       "inBundle": true,
-      "license": "BSD-3-Clause"
+      "license": "MIT"
     },
     "node_modules/npm/node_modules/ip-regex": {
       "version": "5.0.0",
@@ -13646,12 +13754,6 @@
         "@pkgjs/parseargs": "^0.11.0"
       }
     },
-    "node_modules/npm/node_modules/jsbn": {
-      "version": "1.1.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT"
-    },
     "node_modules/npm/node_modules/json-parse-even-better-errors": {
       "version": "3.0.1",
       "dev": true,
@@ -13705,7 +13807,7 @@
       }
     },
     "node_modules/npm/node_modules/libnpmdiff": {
-      "version": "6.0.7",
+      "version": "6.0.4",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13725,7 +13827,7 @@
       }
     },
     "node_modules/npm/node_modules/libnpmexec": {
-      "version": "7.0.8",
+      "version": "7.0.5",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13747,7 +13849,7 @@
       }
     },
     "node_modules/npm/node_modules/libnpmfund": {
-      "version": "5.0.5",
+      "version": "5.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13785,7 +13887,7 @@
       }
     },
     "node_modules/npm/node_modules/libnpmpack": {
-      "version": "6.0.7",
+      "version": "6.0.4",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13800,7 +13902,7 @@
       }
     },
     "node_modules/npm/node_modules/libnpmpublish": {
-      "version": "9.0.4",
+      "version": "9.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -13811,7 +13913,7 @@
         "npm-registry-fetch": "^16.0.0",
         "proc-log": "^3.0.0",
         "semver": "^7.3.7",
-        "sigstore": "^2.2.0",
+        "sigstore": "^2.1.0",
         "ssri": "^10.0.5"
       },
       "engines": {
@@ -13860,7 +13962,7 @@
       }
     },
     "node_modules/npm/node_modules/lru-cache": {
-      "version": "10.2.0",
+      "version": "10.1.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -14210,7 +14312,7 @@
       }
     },
     "node_modules/npm/node_modules/npm-packlist": {
-      "version": "8.0.2",
+      "version": "8.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -14307,7 +14409,7 @@
       }
     },
     "node_modules/npm/node_modules/pacote": {
-      "version": "17.0.6",
+      "version": "17.0.5",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -14327,7 +14429,7 @@
         "promise-retry": "^2.0.1",
         "read-package-json": "^7.0.0",
         "read-package-json-fast": "^3.0.0",
-        "sigstore": "^2.2.0",
+        "sigstore": "^2.0.0",
         "ssri": "^10.0.0",
         "tar": "^6.1.11"
       },
@@ -14378,7 +14480,7 @@
       }
     },
     "node_modules/npm/node_modules/postcss-selector-parser": {
-      "version": "6.0.15",
+      "version": "6.0.13",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -14399,6 +14501,15 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/npm/node_modules/process": {
+      "version": "0.11.10",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
     "node_modules/npm/node_modules/promise-all-reject-late": {
       "version": "1.0.1",
       "dev": true,
@@ -14409,7 +14520,7 @@
       }
     },
     "node_modules/npm/node_modules/promise-call-limit": {
-      "version": "3.0.1",
+      "version": "1.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -14505,6 +14616,22 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/npm/node_modules/readable-stream": {
+      "version": "4.4.2",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/npm/node_modules/retry": {
       "version": "0.12.0",
       "dev": true,
@@ -14514,6 +14641,26 @@
         "node": ">= 4"
       }
     },
+    "node_modules/npm/node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "inBundle": true,
+      "license": "MIT"
+    },
     "node_modules/npm/node_modules/safer-buffer": {
       "version": "2.1.2",
       "dev": true,
@@ -14522,7 +14669,7 @@
       "optional": true
     },
     "node_modules/npm/node_modules/semver": {
-      "version": "7.6.0",
+      "version": "7.5.4",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -14588,17 +14735,15 @@
       }
     },
     "node_modules/npm/node_modules/sigstore": {
-      "version": "2.2.2",
+      "version": "2.1.0",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.2.0",
-        "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.0",
-        "@sigstore/sign": "^2.2.3",
-        "@sigstore/tuf": "^2.3.1",
-        "@sigstore/verify": "^1.1.0"
+        "@sigstore/bundle": "^2.1.0",
+        "@sigstore/protobuf-specs": "^0.2.1",
+        "@sigstore/sign": "^2.1.0",
+        "@sigstore/tuf": "^2.1.0"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -14615,16 +14760,16 @@
       }
     },
     "node_modules/npm/node_modules/socks": {
-      "version": "2.8.0",
+      "version": "2.7.1",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "ip-address": "^9.0.5",
+        "ip": "^2.0.0",
         "smart-buffer": "^4.2.0"
       },
       "engines": {
-        "node": ">= 16.0.0",
+        "node": ">= 10.13.0",
         "npm": ">= 3.0.0"
       }
     },
@@ -14653,7 +14798,7 @@
       }
     },
     "node_modules/npm/node_modules/spdx-exceptions": {
-      "version": "2.5.0",
+      "version": "2.3.0",
       "dev": true,
       "inBundle": true,
       "license": "CC-BY-3.0"
@@ -14669,7 +14814,7 @@
       }
     },
     "node_modules/npm/node_modules/spdx-license-ids": {
-      "version": "3.0.17",
+      "version": "3.0.16",
       "dev": true,
       "inBundle": true,
       "license": "CC0-1.0"
@@ -14686,6 +14831,15 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/npm/node_modules/string_decoder": {
+      "version": "1.3.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
     "node_modules/npm/node_modules/string-width": {
       "version": "4.2.3",
       "dev": true,
@@ -14715,7 +14869,37 @@
         "node": ">=8"
       }
     },
-    "node_modules/npm/node_modules/strip-ansi": {
+    "node_modules/npm/node_modules/string-width-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/string-width-cjs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
       "version": "6.0.1",
       "dev": true,
       "inBundle": true,
@@ -14727,6 +14911,21 @@
         "node": ">=8"
       }
     },
+    "node_modules/npm/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
     "node_modules/npm/node_modules/strip-ansi-cjs": {
       "name": "strip-ansi",
       "version": "6.0.1",
@@ -14740,6 +14939,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/npm/node_modules/supports-color": {
       "version": "9.4.0",
       "dev": true,
@@ -14824,7 +15032,7 @@
       }
     },
     "node_modules/npm/node_modules/tuf-js": {
-      "version": "2.2.0",
+      "version": "2.1.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -14972,6 +15180,15 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
+    "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
       "version": "4.3.0",
       "dev": true,
@@ -14987,16 +15204,16 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
+    "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
       "version": "6.0.1",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
       },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
@@ -15022,21 +15239,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
     "node_modules/npm/node_modules/write-file-atomic": {
       "version": "5.0.1",
       "dev": true,
@@ -16304,14 +16506,14 @@
       }
     },
     "node_modules/puppeteer": {
-      "version": "22.4.0",
-      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.4.0.tgz",
-      "integrity": "sha512-tR+JsDbA2qD1DqRX4F9k9SxQhk6UzcaCN+Qux7+WrDceS7wcR7tlFmMNB8+g8zE4Fmr/iRTOtf5wNnTW9cGUFQ==",
+      "version": "22.3.0",
+      "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.3.0.tgz",
+      "integrity": "sha512-GC+tyjzYKjaNjhlDAuqRgDM+IOsqOG75Da4L28G4eULNLLxKDt+79x2OOSQ47HheJBgGq7ATSExNE6gayxP6cg==",
       "hasInstallScript": true,
       "dependencies": {
         "@puppeteer/browsers": "2.1.0",
         "cosmiconfig": "9.0.0",
-        "puppeteer-core": "22.4.0"
+        "puppeteer-core": "22.3.0"
       },
       "bin": {
         "puppeteer": "lib/esm/puppeteer/node/cli.js"
@@ -16342,9 +16544,9 @@
       }
     },
     "node_modules/puppeteer/node_modules/chromium-bidi": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.12.tgz",
-      "integrity": "sha512-sZMgEBWKbupD0Q7lyFu8AWkrE+rs5ycE12jFkGwIgD/VS8lDPtelPlXM7LYaq4zrkZ/O2L3f4afHUHL0ICdKog==",
+      "version": "0.5.10",
+      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.10.tgz",
+      "integrity": "sha512-4hsPE1VaLLM/sgNK/SlLbI24Ra7ZOuWAjA3rhw1lVCZ8ZiUgccS6cL5L/iqo4hjRcl5vwgYJ8xTtbXdulA9b6Q==",
       "dependencies": {
         "mitt": "3.0.1",
         "urlpattern-polyfill": "10.0.0"
@@ -16410,12 +16612,12 @@
       }
     },
     "node_modules/puppeteer/node_modules/puppeteer-core": {
-      "version": "22.4.0",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.4.0.tgz",
-      "integrity": "sha512-MZttAbttrxi6O/B//rY6zQihjFe/vXeCLb5YvKH2xG6yrcVESo0Hc5/Cv49omwZyZzAJ1BK8BnDeatDsj+3hMw==",
+      "version": "22.3.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.3.0.tgz",
+      "integrity": "sha512-Ho5Vdpdro05ZyCx/l5Hkc5vHiibKTaY37fIAD9NF9Gi/vDxkVTeX40U/mFnEmeoxyuYALvWCJfi7JTT82R6Tuw==",
       "dependencies": {
         "@puppeteer/browsers": "2.1.0",
-        "chromium-bidi": "0.5.12",
+        "chromium-bidi": "0.5.10",
         "cross-fetch": "4.0.0",
         "debug": "4.3.4",
         "devtools-protocol": "0.0.1249869",
diff --git a/package.json b/package.json
index c4b22d38e..02d8cf717 100644
--- a/package.json
+++ b/package.json
@@ -97,11 +97,11 @@
     "@semantic-release/commit-analyzer": "^11.1.0",
     "@semantic-release/git": "^10.0.1",
     "@semantic-release/github": "^9.2.6",
-    "@semantic-release/npm": "^11.0.3",
+    "@semantic-release/npm": "^11.0.2",
     "@semantic-release/release-notes-generator": "^12.1.0",
     "@types/jest": "^29.5.12",
-    "@typescript-eslint/eslint-plugin": "^7.1.1",
-    "@typescript-eslint/parser": "^7.1.1",
+    "@typescript-eslint/eslint-plugin": "^7.1.0",
+    "@typescript-eslint/parser": "^7.1.0",
     "chokidar-cli": "^3.0.0",
     "concurrently": "^8.2.2",
     "copyfiles": "^2.4.1",
diff --git a/site/src/esl-popup/esl-d-popup-game.ts b/site/src/esl-popup/esl-d-popup-game.ts
new file mode 100644
index 000000000..1e31242bb
--- /dev/null
+++ b/site/src/esl-popup/esl-d-popup-game.ts
@@ -0,0 +1,78 @@
+import {ESLBaseElement} from '@exadel/esl/modules/esl-base-element/core';
+import {attr, boolAttr, decorate, listen, memoize} from '@exadel/esl/modules/esl-utils/decorators';
+import {rafDecorator} from '@exadel/esl/modules//esl-utils/async';
+import {ESLTraversingQuery} from '@exadel/esl/modules/esl-traversing-query/core';
+
+/** Fun component like a game for checking popup positioning on edge cases */
+export class ESLDemoPopupGame extends ESLBaseElement {
+  static override is = 'esl-d-popup-game';
+
+  /** Trigger selector */
+  @attr() public trigger: string;
+  /** Marker shows that element is in dragging mode */
+  @boolAttr() public dragging = false;
+
+  @memoize()
+  get $trigger(): HTMLElement | undefined {
+    if (this.trigger) return ESLTraversingQuery.first(this.trigger, this) as HTMLElement | undefined;
+  }
+
+  protected updateTriggerPosition(dX: number, dY: number): void {
+    if (!this.$trigger) return;
+
+    const limitX = this.clientWidth - this.$trigger.clientWidth;
+    const limitY = this.clientHeight - this.$trigger.clientHeight;
+
+    let x = parseInt(this.$trigger.style.left, 10) || 0;
+    let y = parseInt(this.$trigger.style.top, 10) || 0;
+    x += dX;
+    y += dY;
+    x = Math.max(0, Math.min(x, limitX));
+    y = Math.max(0, Math.min(y, limitY));
+
+    this.$trigger.style.top = `${y}px`;
+    this.$trigger.style.left = `${x}px`;
+  }
+
+  @listen({event: 'mousedown'})
+  protected _onDragStart(event: MouseEvent): void {
+    this.dragging = true;
+    this.$$on(this._onDragging);
+    this.$$on(this._onDragStop);
+    event.preventDefault();
+  }
+
+  @listen({auto: false, event: 'mouseleave mouseup'})
+  protected _onDragStop(): void {
+    this.dragging = false;
+    this.$$off(this._onDragging);
+    this.$$off(this._onDragStop);
+  }
+
+  @listen({auto: false, event: 'mousemove'})
+  @decorate(rafDecorator)
+  protected _onDragging(event: MouseEvent): void {
+    if (!this.dragging || !this.$trigger) return;
+
+    const {movementX, movementY} = event;
+    this.updateTriggerPosition(movementX, movementY);
+
+    event.preventDefault();
+  }
+
+  @listen({event: 'wheel'})
+  @decorate(rafDecorator)
+  protected _onWheel(event: WheelEvent): void {
+    if (!this.$trigger) return;
+
+    let {deltaX, deltaY} = event;
+    if (event.shiftKey) [deltaY, deltaX] = [deltaX, deltaY];
+    const {clientWidth, clientHeight} = this;
+    this.style.setProperty('--_width', `${clientWidth + deltaX / 10}px`);
+    this.style.setProperty('--_height', `${clientHeight + deltaY / 10}px`);
+
+    this.updateTriggerPosition(0, 0);
+
+    event.preventDefault();
+  }
+}
diff --git a/site/src/localdev.ts b/site/src/localdev.ts
index 6188131b7..8bbf82249 100644
--- a/site/src/localdev.ts
+++ b/site/src/localdev.ts
@@ -53,6 +53,7 @@ import {ESLDemoSidebar} from './navigation/navigation';
 import {ESLDemoAnchorLink} from './anchor/anchor-link';
 import {ESLDemoBanner} from './banner/banner';
 import {ESLDemoSwipeArea, ESLDemoWheelArea} from './esl-events-demo/esl-events-demo';
+import {ESLDemoPopupGame} from './esl-popup/esl-d-popup-game';
 
 if (!CSS.supports('(height: 100dvh) or (width: 100dvw)')) ESLVSizeCSSProxy.observe();
 
@@ -67,6 +68,7 @@ ESLDemoBackLink.register();
 ESLDemoBanner.register();
 ESLDemoSwipeArea.register();
 ESLDemoWheelArea.register();
+ESLDemoPopupGame.register();
 
 // Test Content
 ESLRandomText.register('lorem-ipsum');
diff --git a/site/views/draft/popup-game.njk b/site/views/draft/popup-game.njk
new file mode 100644
index 000000000..9cd39342e
--- /dev/null
+++ b/site/views/draft/popup-game.njk
@@ -0,0 +1,173 @@
+---
+layout: content
+title: Popup game
+seoTitle: Popup UI examples based on ESL web components
+name: Popup game
+tags: [draft]
+icon: examples/popup.svg
+aside:
+  components:
+    - esl-popup
+    - esl-toggleable
+    - esl-trigger
+---
+
+<style>
+  .boundary-container {
+    display: flex;
+    box-sizing: content-box;
+    padding: 15px;
+    background-color: #007f0038;
+  }
+  esl-d-popup-game {
+    --_font-size: calc(min(var(--_height, 300px), var(--_width, 300px)) / 3);
+    position: relative;
+    display: inline-block;
+    height: var(--_height, 300px);
+    width: var(--_width, 300px);
+    background-color: #fff;
+  }
+  esl-d-popup-game:before, esl-d-popup-game:after {
+    position: absolute;
+    font-size: var(--_font-size);
+    display: inline-block;
+    opacity: 0.3;
+  }
+  esl-d-popup-game:before {
+    content: '🌒';
+  }
+  esl-d-popup-game:after {
+    content: '🪐';
+    bottom: 0;
+    right: 0;
+  }
+  .game-popup-trigger {
+    position: absolute;
+    display: inline-block;
+    z-index: 1;
+    transition: top 0.15s ease-in-out, left 0.15s ease-in-out;
+    padding: 2px 6px;
+    border: none;
+    border-radius: 50%;
+    box-shadow: none !important;
+    background-color: #bce0ff45;
+    font-size: 2rem;
+  }
+  .popup-game {
+    --_margin-arrow: 35px;
+  }
+  .popup-h[dir="rtl"] {
+    text-align: right;
+  }
+  .popup-content-wrapper {
+    display: flex;
+  }
+  .popup-v .popup-content-wrapper {
+    writing-mode: vertical-rl;
+  }
+  .popup-v .popup-content-wrapper {
+    height: 250px;
+    width: 50px;
+  }
+  .popup-h .popup-content-wrapper {
+    height: 50px;
+    width: 250px;
+  }
+  .popup-content-wrapper:before,
+  .popup-content-wrapper:after {
+    content: '';
+    display: block;
+    flex: 0 0 var(--_margin-arrow);
+    background-color: #ff000018;
+  }
+  .popup-content {
+    flex: 1;
+    margin: auto;
+  }
+</style>
+<p>This cool game will let you play with a popup.</p>
+<p>Drag a trigger element and watch how the popup and its arrow move. Use the mouse wheel to resize the container. Use shift to switch the resize direction.</p>
+<p>The green area on the edges of the container is determined by the offsetContainer value and means the safe zone in which popup can't come. The red zone on the edges of popup demonstrates the limits of arrow placement.</p>
+<h2>Horizontal, direction: LTR</h2>
+<section class="row">
+  <div>
+    <div class="boundary-container boundary-container-1">
+      <esl-d-popup-game trigger="::find(.game-popup-trigger)">
+        <esl-trigger
+          target="#game-popup-h-ltr"
+          mode="toggle"
+          class="game-popup-trigger"
+          style="top: 124px; left: 124px;">
+          🚀
+        </esl-trigger>
+      </esl-d-popup-game>
+    </div>
+  </div>
+  <esl-popup
+    id="game-popup-h-ltr"
+    class="popup-game popup-h"
+    position="top"
+    container=".boundary-container-1"
+    dir="ltr"
+    margin-arrow="35">
+    <div class="popup-content-wrapper">
+      <div class="popup-content"> 🇱 🇹 🇷 🐶 🐼</div>
+    </div>
+    <span class="esl-popup-arrow"></span>
+  </esl-popup>
+</section>
+<h2>Horizontal, direction: RTL</h2>
+<section class="row">
+  <div>
+    <div class="boundary-container boundary-container-2">
+      <esl-d-popup-game trigger="::find(.game-popup-trigger)">
+        <esl-trigger
+          target="#game-popup-h-rtl"
+          mode="toggle"
+          class="game-popup-trigger"
+          style="top: 124px; left: 124px;">
+          🚀
+        </esl-trigger>
+      </esl-d-popup-game>
+    </div>
+  </div>
+  <esl-popup
+    id="game-popup-h-rtl"
+    class="popup-game popup-h"
+    position="top"
+    container=".boundary-container-2"
+    dir="rtl"
+    margin-arrow="35">
+    <div class="popup-content-wrapper">
+      <div class="popup-content"> 🇷 🇹 🇱 🦝 🐱 </div>
+    </div>
+    <span class="esl-popup-arrow"></span>
+  </esl-popup>
+</section>
+<h2>Vertical</h2>
+<section class="row">
+  <div>
+    <div class="boundary-container boundary-container-3">
+      <esl-d-popup-game trigger="::find(.game-popup-trigger)">
+        <esl-trigger
+          target="#game-popup-v"
+          mode="toggle"
+          class="game-popup-trigger"
+          style="top: 124px; left: 124px;">
+          🚀
+        </esl-trigger>
+      </esl-d-popup-game>
+    </div>
+  </div>
+  <esl-popup
+    id="game-popup-v"
+    class="popup-game popup-v"
+    position="left"
+    container=".boundary-container-3"
+    margin-arrow="35">
+    <div class="popup-content-wrapper">
+      <div class="popup-content"> V E 🇷 🇹 I C A 🇱 🐼 </div>
+    </div>
+    <span class="esl-popup-arrow"></span>
+  </esl-popup>
+</section>
diff --git a/src/modules/esl-popup/core/esl-popup-position.ts b/src/modules/esl-popup/core/esl-popup-position.ts
index 4a8a75037..d6021d495 100644
--- a/src/modules/esl-popup/core/esl-popup-position.ts
+++ b/src/modules/esl-popup/core/esl-popup-position.ts
@@ -28,6 +28,16 @@ export interface PopupPositionConfig {
   inner: Rect;
   outer: Rect;
   trigger: Rect;
+  isRTL: boolean;
+}
+
+interface PopupAlignmentConfig {
+  isHorizontal: boolean;
+  start: 'x' | 'y';
+  end: 'right' | 'bottom';
+  isOutAtStart: boolean;
+  isOutAtEnd: boolean;
+  isWider: boolean;
 }
 
 /**
@@ -114,7 +124,7 @@ function getOppositePosition(position: PositionType): PositionType {
  * @returns updated popup position value
  * */
 function fitOnMajorAxis(cfg: PopupPositionConfig, value: PopupPositionValue): PopupPositionValue {
-  if (cfg.behavior !== 'fit' && cfg.behavior !== 'fit-major') return value;
+  if (!['fit', 'fit-major'].includes(cfg.behavior)) return value;
 
   const intersectionRatio = cfg.intersectionRatio[cfg.position] || 0;
   const leftComparand = isStartingSide(cfg.position) ? value.popup[cfg.position] : cfg.outer[cfg.position];
@@ -148,37 +158,46 @@ function adjustAlongMajorAxis(cfg: PopupPositionConfig, value: PopupPositionValu
 
 /**
  * Calculates adjust for popup position to fit container bounds
+ * @param cfg - popup position config
  * @param diffCoord - distance between the popup and the outer (container) bounding
  * @param arrowCoord - coordinate of the arrow
- * @param arrowLimit - the limit value of the arrow coordinate
- * @param isStart - is it starting side?
+ * @param isStart - should it rely on the starting side?
  * @returns adjustment value for the coordinates of the arrow and the popup
  */
-function adjustAlignmentBySide(diffCoord: number, arrowCoord: number, arrowLimit: number, isStart: boolean): number {
+function adjustAlignmentBySide(cfg: PopupPositionConfig, diffCoord: number, arrowCoord: number, isStart: boolean): number {
   let arrowAdjust = 0;
 
   if (isStart ? diffCoord < 0 : diffCoord > 0) {
     arrowAdjust = diffCoord;
     const newCoord = arrowCoord + arrowAdjust;
+    const dimension = isOnHorizontalAxis(cfg.position) ? 'height' : 'width';
+    const arrowLimit = cfg.marginArrow + (isStart ? 0 : calcUsableSizeForArrow(cfg, dimension));
     if (isStart ? newCoord < arrowLimit : newCoord > arrowLimit) {
-      arrowAdjust = 0;
+      arrowAdjust -= newCoord - arrowLimit;
     }
-    /** It was decided that if the relative positions of the trigger and container
-     *  do not allow the popup to be displayed correctly together with the arrow,
-     *  the popup should be displayed as-is without adjusting the position of the minor axis
-     *
-     *  The following code adheres to a different strategy - maximum position adaptation,
-     *  with the popup having minimal overhang outside the container.
-     *  Perhaps in the future, we should allow the user to choose the strategy.
-     *
-     * const func = isStartingSide ? Math.max : Math.min;
-     * arrowAdjust = func(diffCoord, arrowLimit - arrowCoord);
-     */
   }
 
   return arrowAdjust;
 }
 
+/**
+ * Sets up the configuration for adjusting position along the minor axis
+ * @param cfg - popup position config
+ * @param popup - current popup's position value
+ * @returns configuration for adjusting position along the minor axis
+ */
+function setupAlignmentBySide(cfg: PopupPositionConfig, popup: Rect): PopupAlignmentConfig {
+  const isHorizontal = isOnHorizontalAxis(cfg.position);
+  const start = isHorizontal ? 'y' : 'x';
+  const end = isHorizontal ? 'bottom' : 'right';
+  const dimension = isHorizontal ? 'height' : 'width';
+  const isOutAtStart = popup[start] < cfg.outer[start];
+  const isOutAtEnd = popup[end] > cfg.outer[end];
+  const isWider = cfg.outer[dimension] < cfg.element[dimension];
+
+  return {isHorizontal, start, end, isOutAtStart, isOutAtEnd, isWider};
+}
+
 /**
  * Updates popup and arrow positions to fit on minor axis.
  * @param cfg - popup position config
@@ -186,34 +205,29 @@ function adjustAlignmentBySide(diffCoord: number, arrowCoord: number, arrowLimit
  * @returns updated popup position value
  * */
 function fitOnMinorAxis(cfg: PopupPositionConfig, value: PopupPositionValue): PopupPositionValue {
-  if (cfg.behavior !== 'fit' && cfg.behavior !== 'fit-minor') return value;
+  if (!['fit', 'fit-minor'].includes(cfg.behavior)) return value;
 
-  const isHorizontal = isOnHorizontalAxis(cfg.position);
-  const start = isHorizontal ? 'y' : 'x';
-  const end = isHorizontal ? 'bottom' : 'right';
-  const dimension = isHorizontal ? 'height' : 'width';
+  const {popup, arrow} = value;
+  const {isHorizontal, start, end, isOutAtStart, isOutAtEnd, isWider} = setupAlignmentBySide(cfg, popup);
 
-  if (cfg.outer[dimension] < cfg.element[dimension] ||  // cancel fit mode if the popup size is greater than the outer limiter size
-      cfg.trigger[start] < cfg.outer[start] ||          // or the trigger is outside the outer limiting element
-      cfg.trigger[end] > cfg.outer[end]
-  ) return value;
+  // nothing to do when there is no outing
+  if (!isOutAtStart && !isOutAtEnd) return value;
+  // start-side adjusting happens if there is only start-side outing or LTR content direction
+  const isStarting = isOutAtStart && (!isOutAtEnd || !cfg.isRTL);
 
-  const {popup, arrow} = value;
-  // check the starting side of the axis
-  let arrowLimit = cfg.marginArrow;
-  let coordAdjust = adjustAlignmentBySide(popup[start] - cfg.outer[start], arrow[start], arrowLimit, true);
-  if (coordAdjust) {
-    popup[start] -= coordAdjust;
-    arrow[start] += coordAdjust;
-  }
-  // check the final side of the axis
-  arrowLimit += calcUsableSizeForArrow(cfg, dimension);
-  coordAdjust = adjustAlignmentBySide(popup[end] - cfg.outer[end], arrow[start], arrowLimit, false);
-  if (coordAdjust) {
-    popup[start] -= coordAdjust;
-    arrow[start] += coordAdjust;
-  }
-  return {...value, popup, arrow};
+  // the side for calculating the distance between the popup and the outer (container) bounding should be:
+  // - when the popup is wider than the container the diff side should depend on the text direction
+  //   (start side for LTR, end side for RTL)
+  // - else we should choose start side if start-side outing or end side if end-side outing
+  const diffSide = (isWider ? !cfg.isRTL : isStarting) ? start : end;
+  const diff = popup[diffSide] - cfg.outer[diffSide];
+  const shift = adjustAlignmentBySide(cfg, diff, arrow[start], isStarting);
+  arrow[start] += shift;
+  return {
+    ...value,
+    popup: isHorizontal ? popup.shift(0, -shift) : popup.shift(-shift, 0),
+    arrow
+  };
 }
 
 /**
diff --git a/src/modules/esl-popup/core/esl-popup.ts b/src/modules/esl-popup/core/esl-popup.ts
index 485d8610b..a3b7fd5c6 100644
--- a/src/modules/esl-popup/core/esl-popup.ts
+++ b/src/modules/esl-popup/core/esl-popup.ts
@@ -412,7 +412,8 @@ export class ESLPopup extends ESLToggleable {
       inner: triggerRect.grow(innerMargin),
       outer: (typeof this._offsetContainer === 'number') ?
         containerRect.shrink(this._offsetContainer) :
-        containerRect.shrink(...this._offsetContainer)
+        containerRect.shrink(...this._offsetContainer),
+      isRTL: isRTL(this)
     };
 
     const {placedAt, popup, arrow} = calcPopupPosition(config);
diff --git a/src/modules/esl-utils/dom/rect.ts b/src/modules/esl-utils/dom/rect.ts
index 06a7a77a4..abc1ec4f8 100644
--- a/src/modules/esl-utils/dom/rect.ts
+++ b/src/modules/esl-utils/dom/rect.ts
@@ -7,13 +7,13 @@ import type {Point} from './point';
  */
 export class Rect implements Point {
   /** The X coordinate of the Rect's origin (top-left corner of the rectangle). */
-  public x;
+  public readonly x;
   /** The Y coordinate of the Rect's origin (top-left corner of the rectangle). */
-  public y;
+  public readonly y;
   /** The width of the Rect. */
-  public width;
+  public readonly width;
   /** The height of the Rect. */
-  public height;
+  public readonly height;
 
   /**
    * The static method creates a new Rect instance from a DOMRect object of BoundingClientRect.
@@ -136,6 +136,11 @@ export class Rect implements Point {
     return new Rect(this.x + x, this.y + y, this.width, this.height);
   }
 
+  /** @returns new {@link Rect} that is resized by x and y axis */
+  public resize(xDelta: number = 0, yDelta: number = 0): Rect {
+    return new Rect(this.x, this.y, this.width + xDelta, this.height + yDelta);
+  }
+
   /** @returns new {@link Rect} an intersection of current and passed Rectangle */
   public intersect(rect: Rect): Rect {
     const top = Math.max(this.top, rect.top);


Test patch:
diff --git a/e2e/package.json b/e2e/package.json
index 3c642b221..23e437ac0 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -19,7 +19,7 @@
     "@types/puppeteer": "^7.0.4",
     "jest-image-snapshot": "^6.4.0",
     "jest-puppeteer": "^10.0.1",
-    "puppeteer": "^22.4.0",
+    "puppeteer": "^22.3.0",
     "stucumber": "^0.19.0"
   }
 }
diff --git a/src/modules/esl-popup/test/esl-popup-position.behaviour-fit-minor.test.ts b/src/modules/esl-popup/test/esl-popup-position.behaviour-fit-minor.test.ts
index e8c215d34..aa6290d11 100644
--- a/src/modules/esl-popup/test/esl-popup-position.behaviour-fit-minor.test.ts
+++ b/src/modules/esl-popup/test/esl-popup-position.behaviour-fit-minor.test.ts
@@ -28,6 +28,40 @@ describe('ESLPopup position: calcPopupPosition(): behavior set to fit-minor', ()
     popup
   };
 
+  describe('should not adjust when there is enough space for the popup:', () => {
+    test('on the top position', () => {
+      const cfg = {...cfgRef, position: 'top'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 85};
+      expected.popup = popup.shift(360, 290);
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the bottom position', () => {
+      const cfg = {...cfgRef, position: 'bottom'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(360, 530);
+      expected.placedAt = 'bottom';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the left position', () => {
+      const cfg = {...cfgRef, position: 'left'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(190, 410);
+      expected.placedAt = 'left';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the right position', () => {
+      const cfg = {...cfgRef, position: 'right'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(530, 410);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+  });
+
   describe('should adjust the position by moving to:', () => {
     test('left when there is a lack of space on the right side in the top position', () => {
       const cfg = {...cfgRef, position: 'top', outer: container.shift(-440, 0)} as PopupPositionConfig;
@@ -64,72 +98,146 @@ describe('ESLPopup position: calcPopupPosition(): behavior set to fit-minor', ()
     });
   });
 
-  describe('should not adjust the position in case:', () => {
-    test('when the popup size is greater than the outer limiter size', () => {
-      const narrowContainer = trigger.grow(50);
-      const cfg = {...cfgRef, position: 'top', outer: narrowContainer} as PopupPositionConfig;
+  describe('should adjust when the popup is outing both sides of the container', () => {
+    test('when the popup has a position on the vertical axis and LTR text direction', () => {
+      const cfg = {...cfgRef, position: 'top', element: popup.resize(1000, 0)} as PopupPositionConfig;
       const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 290);
+      expected.arrow = {x: 495, y: 85};
+      expected.popup = popup.shift(0, 290).resize(1000, 0);
       expect(calcPopupPosition(cfg)).toEqual(expected);
     });
-
-    describe('when the popup has a position on the vertical axis', () => {
+    test('when the popup has a position on the vertical axis and RTL text direction', () => {
+      const cfg = {...cfgRef, position: 'top', element: popup.resize(1000, 0), isRTL: true} as PopupPositionConfig;
       const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 290);
-      test('when the trigger is outside of the outer limiting element by the own left edge', () => {
-        const cfg = {...cfgRef, position: 'top', outer: container.shift(-510, 0)} as PopupPositionConfig;
+      expected.arrow = {x: 795, y: 85};
+      expected.popup = popup.shift(-300, 290).resize(1000, 0);
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+    test('when the popup has a position on the horizontal axis', () => {
+      const cfg = {...cfgRef, position: 'right', element: popup.resize(0, 1000)} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 495};
+      expected.popup = popup.shift(530, 0).resize(0, 1000);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+    test('when the popup has a position on the horizontal axis RTL', () => {
+      const cfg = {...cfgRef, position: 'right', element: popup.resize(0, 1000), isRTL: true} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 695};
+      expected.popup = popup.shift(530, -200).resize(0, 1000);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+  });
+
+  describe('should adjust when popup is outing at one side of the container and has size greater than the container', () => {
+    describe('should stick to the initial side of the container in case LTR text direction', () => {
+      test('when the popup has a position on the vertical axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          element: popup.resize(1000, 0),
+          outer: container.shift(400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 95, y: 85};
+        expected.popup = popup.shift(400, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when the trigger is outside of the outer limiting element by the own right edge', () => {
-        const cfg = {...cfgRef, position: 'top', outer: container.shift(510, 0)} as PopupPositionConfig;
+      test('when the popup has a position on the vertical axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          element: popup.resize(1000, 0),
+          outer: container.shift(-400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 895, y: 85};
+        expected.popup = popup.shift(-400, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-    });
-
-    describe('when the popup has a position on the horizontal axis', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(530, 410);
-      expected.placedAt = 'right';
-      test('when the trigger is outside of the outer limiting element by the own top edge', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, -510)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, 400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 95};
+        expected.popup = popup.shift(530, 400).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when the trigger is outside of the outer limiting element by the own right edge', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, 510)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, -400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 895};
+        expected.popup = popup.shift(530, -400).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
     });
 
-    describe('when there is a lack of space for position adjustment on the horizontal axis:', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 530);
-      expected.placedAt = 'bottom';
-
-      test('when it is required to move to the left', () => {
-        const cfg = {...cfgRef, position: 'bottom', outer: container.shift(-460, 0)} as PopupPositionConfig;
+    describe('should stick to the final side of the container in case RTL text direction', () => {
+      test('when the popup has a position on the vertical axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          isRTL: true,
+          element: popup.resize(1000, 0),
+          outer: container.shift(400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 395, y: 85};
+        expected.popup = popup.shift(100, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when it is required to move to the right', () => {
-        const cfg = {...cfgRef, position: 'bottom', outer: container.shift(480, 0)} as PopupPositionConfig;
+      test('when the popup has a position on the vertical axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          isRTL: true,
+          element: popup.resize(1000, 0),
+          outer: container.shift(-400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 1195, y: 85};
+        expected.popup = popup.shift(-700, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-    });
-
-    describe('when there is a lack of space for position adjustment on the vertical axis:', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(530, 410);
-      expected.placedAt = 'right';
-
-      test('when it is required to move to the top', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, -460)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          isRTL: true,
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, 400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 295};
+        expected.popup = popup.shift(530, 200).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when it is required to move to the bottom', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, 480)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          isRTL: true,
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, -400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 1095};
+        expected.popup = popup.shift(530, -600).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
     });
diff --git a/src/modules/esl-popup/test/esl-popup-position.behaviour-fit.test.ts b/src/modules/esl-popup/test/esl-popup-position.behaviour-fit.test.ts
index 28f15c85b..be303976e 100644
--- a/src/modules/esl-popup/test/esl-popup-position.behaviour-fit.test.ts
+++ b/src/modules/esl-popup/test/esl-popup-position.behaviour-fit.test.ts
@@ -92,6 +92,40 @@ describe('ESLPopup position: calcPopupPosition(): behavior set to fit-major', ()
     });
   });
 
+  describe('should not adjust when there is enough space for the popup:', () => {
+    test('on the top position', () => {
+      const cfg = {...cfgRef, position: 'top'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 85};
+      expected.popup = popup.shift(360, 290);
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the bottom position', () => {
+      const cfg = {...cfgRef, position: 'bottom'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(360, 530);
+      expected.placedAt = 'bottom';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the left position', () => {
+      const cfg = {...cfgRef, position: 'left'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(190, 410);
+      expected.placedAt = 'left';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+
+    test('on the right position', () => {
+      const cfg = {...cfgRef, position: 'right'} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.popup = popup.shift(530, 410);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+  });
+
   describe('should adjust the position by moving to:', () => {
     test('left when there is a lack of space on the right side in the top position', () => {
       const cfg = {...cfgRef, position: 'top', outer: container.shift(-440, 0)} as PopupPositionConfig;
@@ -128,73 +162,146 @@ describe('ESLPopup position: calcPopupPosition(): behavior set to fit-major', ()
     });
   });
 
-  describe('should not adjust the position in case:', () => {
-    test('when the popup size is greater than the outer limiter size', () => {
-      const narrowContainer = trigger.grow(50);
-      const cfg = {...cfgRef, position: 'top', outer: narrowContainer} as PopupPositionConfig;
+  describe('should adjust when the popup is outing both sides of the container', () => {
+    test('when the popup has a position on the vertical axis and LTR text direction', () => {
+      const cfg = {...cfgRef, position: 'top', element: popup.resize(1000, 0)} as PopupPositionConfig;
       const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 530);
-      expected.placedAt = 'bottom';
+      expected.arrow = {x: 495, y: 85};
+      expected.popup = popup.shift(0, 290).resize(1000, 0);
       expect(calcPopupPosition(cfg)).toEqual(expected);
     });
-
-    describe('when the popup has a position on the vertical axis', () => {
+    test('when the popup has a position on the vertical axis and RTL text direction', () => {
+      const cfg = {...cfgRef, position: 'top', element: popup.resize(1000, 0), isRTL: true} as PopupPositionConfig;
       const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 290);
-      test('when the trigger is outside of the outer limiting element by the own left edge', () => {
-        const cfg = {...cfgRef, position: 'top', outer: container.shift(-510, 0)} as PopupPositionConfig;
+      expected.arrow = {x: 795, y: 85};
+      expected.popup = popup.shift(-300, 290).resize(1000, 0);
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+    test('when the popup has a position on the horizontal axis', () => {
+      const cfg = {...cfgRef, position: 'right', element: popup.resize(0, 1000)} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 495};
+      expected.popup = popup.shift(530, 0).resize(0, 1000);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+    test('when the popup has a position on the horizontal axis RTL', () => {
+      const cfg = {...cfgRef, position: 'right', element: popup.resize(0, 1000), isRTL: true} as PopupPositionConfig;
+      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+      expected.arrow = {x: 135, y: 695};
+      expected.popup = popup.shift(530, -200).resize(0, 1000);
+      expected.placedAt = 'right';
+      expect(calcPopupPosition(cfg)).toEqual(expected);
+    });
+  });
+
+  describe('should adjust when popup is outing at one side of the container and has size greater than the container', () => {
+    describe('should stick to the initial side of the container in case LTR text direction', () => {
+      test('when the popup has a position on the vertical axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          element: popup.resize(1000, 0),
+          outer: container.shift(400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 95, y: 85};
+        expected.popup = popup.shift(400, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when the trigger is outside of the outer limiting element by the own right edge', () => {
-        const cfg = {...cfgRef, position: 'top', outer: container.shift(510, 0)} as PopupPositionConfig;
+      test('when the popup has a position on the vertical axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          element: popup.resize(1000, 0),
+          outer: container.shift(-400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 895, y: 85};
+        expected.popup = popup.shift(-400, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-    });
-
-    describe('when the popup has a position on the horizontal axis', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(530, 410);
-      expected.placedAt = 'right';
-      test('when the trigger is outside of the outer limiting element by the own top edge', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, -510)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, 400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 95};
+        expected.popup = popup.shift(530, 400).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when the trigger is outside of the outer limiting element by the own right edge', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, 510)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, -400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 895};
+        expected.popup = popup.shift(530, -400).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
     });
 
-    describe('when there is a lack of space for position adjustment on the horizontal axis:', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(360, 530);
-      expected.placedAt = 'bottom';
-
-      test('when it is required to move to the left', () => {
-        const cfg = {...cfgRef, position: 'bottom', outer: container.shift(-460, 0)} as PopupPositionConfig;
+    describe('should stick to the final side of the container in case RTL text direction', () => {
+      test('when the popup has a position on the vertical axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          isRTL: true,
+          element: popup.resize(1000, 0),
+          outer: container.shift(400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 395, y: 85};
+        expected.popup = popup.shift(100, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when it is required to move to the right', () => {
-        const cfg = {...cfgRef, position: 'bottom', outer: container.shift(480, 0)} as PopupPositionConfig;
+      test('when the popup has a position on the vertical axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'top',
+          isRTL: true,
+          element: popup.resize(1000, 0),
+          outer: container.shift(-400, 0)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 1195, y: 85};
+        expected.popup = popup.shift(-700, 290).resize(1000, 0);
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-    });
-
-    describe('when there is a lack of space for position adjustment on the vertical axis:', () => {
-      const expected = Object.assign({}, expectedRef) as PopupPositionValue;
-      expected.popup = popup.shift(530, 410);
-      expected.placedAt = 'right';
-
-      test('when it is required to move to the top', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, -460)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the initial side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          isRTL: true,
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, 400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 295};
+        expected.popup = popup.shift(530, 200).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
-
-      test('when it is required to move to the bottom', () => {
-        const cfg = {...cfgRef, position: 'right', outer: container.shift(0, 480)} as PopupPositionConfig;
+      test('when the popup has a position on the horizontal axis and crosses the final side', () => {
+        const cfg = {
+          ...cfgRef,
+          position: 'right',
+          isRTL: true,
+          element: popup.resize(0, 1000),
+          outer: container.shift(0, -400)
+        } as PopupPositionConfig;
+        const expected = Object.assign({}, expectedRef) as PopupPositionValue;
+        expected.arrow = {x: 135, y: 1095};
+        expected.popup = popup.shift(530, -600).resize(0, 1000);
+        expected.placedAt = 'right';
         expect(calcPopupPosition(cfg)).toEqual(expected);
       });
     });
diff --git a/src/modules/esl-utils/dom/test/rect.test.ts b/src/modules/esl-utils/dom/test/rect.test.ts
index b3be6c95e..2e78dd23b 100644
--- a/src/modules/esl-utils/dom/test/rect.test.ts
+++ b/src/modules/esl-utils/dom/test/rect.test.ts
@@ -98,6 +98,12 @@ describe('Rect API', () => {
       expect(rect.shift(2, 3)).toEqual(rect2);
     });
 
+    test('returns Rect resized by passed values', () => {
+      const rect = new Rect(1, 2, 3, 4);
+      const rect2 = new Rect(1, 2, 3 + 3, 4 + 2);
+      expect(rect.resize(3, 2)).toEqual(rect2);
+    });
+
     test.each([
       [{x: 0, y: 0, width: 0, height: 0}, {x: 0, y: 0, width: 0, height: 0}, true],
       [{x: 0, y: 0, width: 0, height: 0}, {left: 0, top: 0, width: 0, height: 0}, true],