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.js CHANGED
@@ -1010,6 +1010,40 @@ var createTitleId = (title) => {
1010
1010
  }
1011
1011
  return "smartsell-modal-dialog";
1012
1012
  };
1013
+ var modalScrollLockStates = /* @__PURE__ */ new WeakMap();
1014
+ var acquireModalScrollLock = (documentRef) => {
1015
+ const body = documentRef.body;
1016
+ if (!body) {
1017
+ return void 0;
1018
+ }
1019
+ const currentState = modalScrollLockStates.get(documentRef);
1020
+ if (currentState) {
1021
+ currentState.count += 1;
1022
+ } else {
1023
+ modalScrollLockStates.set(documentRef, {
1024
+ count: 1,
1025
+ previousOverflow: body.style.overflow
1026
+ });
1027
+ body.style.overflow = "hidden";
1028
+ }
1029
+ let released = false;
1030
+ return () => {
1031
+ if (released) {
1032
+ return;
1033
+ }
1034
+ released = true;
1035
+ const state = modalScrollLockStates.get(documentRef);
1036
+ if (!state) {
1037
+ return;
1038
+ }
1039
+ if (state.count > 1) {
1040
+ state.count -= 1;
1041
+ return;
1042
+ }
1043
+ body.style.overflow = state.previousOverflow;
1044
+ modalScrollLockStates.delete(documentRef);
1045
+ };
1046
+ };
1013
1047
  var MODAL_HEADER_CONTROL_METRICS = getControlMetrics("sm");
1014
1048
  var MODAL_HEADER_CONTROL_SIZE = MODAL_HEADER_CONTROL_METRICS.height;
1015
1049
  var MODAL_HEADER_ICON_SIZE = 18;
@@ -1250,11 +1284,15 @@ function UnifiedModal({
1250
1284
  }
1251
1285
  }, [maximized]);
1252
1286
  useEffect3(() => {
1253
- if (!isOpen || typeof window === "undefined" || typeof document === "undefined") {
1287
+ if (!isOpen || typeof document === "undefined") {
1288
+ return;
1289
+ }
1290
+ return acquireModalScrollLock(document);
1291
+ }, [isOpen]);
1292
+ useEffect3(() => {
1293
+ if (!isOpen || typeof window === "undefined") {
1254
1294
  return;
1255
1295
  }
1256
- const previousOverflow = document.body.style.overflow;
1257
- document.body.style.overflow = "hidden";
1258
1296
  const handleKeyDown = (event) => {
1259
1297
  if (!shouldDisableDismiss && closeOnEscape && event.key === "Escape") {
1260
1298
  onClose();
@@ -1262,7 +1300,6 @@ function UnifiedModal({
1262
1300
  };
1263
1301
  window.addEventListener("keydown", handleKeyDown);
1264
1302
  return () => {
1265
- document.body.style.overflow = previousOverflow;
1266
1303
  window.removeEventListener("keydown", handleKeyDown);
1267
1304
  };
1268
1305
  }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);