smartsell-ui-kit 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1051,6 +1051,40 @@ var createTitleId = (title) => {
1051
1051
  }
1052
1052
  return "smartsell-modal-dialog";
1053
1053
  };
1054
+ var modalScrollLockStates = /* @__PURE__ */ new WeakMap();
1055
+ var acquireModalScrollLock = (documentRef) => {
1056
+ const body = documentRef.body;
1057
+ if (!body) {
1058
+ return void 0;
1059
+ }
1060
+ const currentState = modalScrollLockStates.get(documentRef);
1061
+ if (currentState) {
1062
+ currentState.count += 1;
1063
+ } else {
1064
+ modalScrollLockStates.set(documentRef, {
1065
+ count: 1,
1066
+ previousOverflow: body.style.overflow
1067
+ });
1068
+ body.style.overflow = "hidden";
1069
+ }
1070
+ let released = false;
1071
+ return () => {
1072
+ if (released) {
1073
+ return;
1074
+ }
1075
+ released = true;
1076
+ const state = modalScrollLockStates.get(documentRef);
1077
+ if (!state) {
1078
+ return;
1079
+ }
1080
+ if (state.count > 1) {
1081
+ state.count -= 1;
1082
+ return;
1083
+ }
1084
+ body.style.overflow = state.previousOverflow;
1085
+ modalScrollLockStates.delete(documentRef);
1086
+ };
1087
+ };
1054
1088
  var MODAL_HEADER_CONTROL_METRICS = getControlMetrics("sm");
1055
1089
  var MODAL_HEADER_CONTROL_SIZE = MODAL_HEADER_CONTROL_METRICS.height;
1056
1090
  var MODAL_HEADER_ICON_SIZE = 18;
@@ -1291,11 +1325,15 @@ function UnifiedModal({
1291
1325
  }
1292
1326
  }, [maximized]);
1293
1327
  (0, import_react4.useEffect)(() => {
1294
- if (!isOpen || typeof window === "undefined" || typeof document === "undefined") {
1328
+ if (!isOpen || typeof document === "undefined") {
1329
+ return;
1330
+ }
1331
+ return acquireModalScrollLock(document);
1332
+ }, [isOpen]);
1333
+ (0, import_react4.useEffect)(() => {
1334
+ if (!isOpen || typeof window === "undefined") {
1295
1335
  return;
1296
1336
  }
1297
- const previousOverflow = document.body.style.overflow;
1298
- document.body.style.overflow = "hidden";
1299
1337
  const handleKeyDown = (event) => {
1300
1338
  if (!shouldDisableDismiss && closeOnEscape && event.key === "Escape") {
1301
1339
  onClose();
@@ -1303,7 +1341,6 @@ function UnifiedModal({
1303
1341
  };
1304
1342
  window.addEventListener("keydown", handleKeyDown);
1305
1343
  return () => {
1306
- document.body.style.overflow = previousOverflow;
1307
1344
  window.removeEventListener("keydown", handleKeyDown);
1308
1345
  };
1309
1346
  }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);