@activecollab/components 2.0.500 → 2.0.501

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.
@@ -61,6 +61,25 @@ var Window = exports.Window = /*#__PURE__*/(0, _react.forwardRef)(function (_ref
61
61
  onKeyDown(event);
62
62
  }
63
63
  }, [disableCloseOnEsc, onClose, onKeyDown]);
64
+
65
+ // Focus that falls to the body, when the focused node unmounts, sends no key to the window.
66
+ (0, _react.useEffect)(function () {
67
+ if (disableCloseOnEsc || !onClose) {
68
+ return undefined;
69
+ }
70
+ var handleBodyKeyDown = function handleBodyKeyDown(event) {
71
+ var windows = document.querySelectorAll(".c-window");
72
+ var isTopWindow = windows[windows.length - 1] === innerRef.current;
73
+ if (event.target === document.body && !event.defaultPrevented && (event.key === "Esc" || event.key === "Escape") && isTopWindow) {
74
+ event.preventDefault();
75
+ onClose();
76
+ }
77
+ };
78
+ document.addEventListener("keydown", handleBodyKeyDown);
79
+ return function () {
80
+ return document.removeEventListener("keydown", handleBodyKeyDown);
81
+ };
82
+ }, [disableCloseOnEsc, onClose]);
64
83
  var handleClick = (0, _react.useCallback)(function (event) {
65
84
  event === null || event === void 0 || event.stopPropagation();
66
85
  typeof onClick === "function" && onClick(event);
@@ -1 +1 @@
1
- {"version":3,"file":"Window.js","names":["_react","_interopRequireWildcard","require","_reactFocusLock","_interopRequireDefault","_reactRemoveScroll","_classnames","_Style","_helpers","_utils","_useForkRef","_excluded","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","returnFocus","preventScroll","Window","exports","forwardRef","_ref","ref","children","onClose","className","style","onKeyDown","_ref$disableFocusLock","disableFocusLock","_ref$disableScrollLoc","disableScrollLock","_ref$disableCloseOnEs","disableCloseOnEsc","_ref$disableReturnFoc","disableReturnFocus","_ref$isolateScroll","isolateScroll","onClick","rest","innerRef","useRef","handleRef","useForkRef","_useLayerContext","useLayerContext","_useLayerContext$zInd","zIndex","layers","skyscraper","handleKeyDown","useCallback","event","defaultPrevented","key","preventDefault","stopPropagation","handleClick","createElement","Portal","disabled","RemoveScroll","forwardProps","enabled","noIsolation","StyledWindow","tabIndex","classnames","displayName"],"sources":["../../../../src/components/Window/Window.tsx"],"sourcesContent":["import React, { useCallback, useRef, forwardRef, KeyboardEvent } from \"react\";\nimport FocusLock from \"react-focus-lock\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport classnames from \"classnames\";\n\nimport { StyledWindow } from \"./Style\";\nimport { Portal, useLayerContext } from \"../../helpers\";\nimport { layers } from \"../../utils\";\nimport useForkRef from \"../../utils/useForkRef\";\n\nexport interface IWindow {\n onClose?: () => void;\n disableFocusLock?: boolean;\n disableScrollLock?: boolean;\n disableCloseOnEsc?: boolean;\n /** Leave the focus where it is when the focus lock turns off */\n disableReturnFocus?: boolean;\n /** With the scroll lock on, also stop the scroll that starts outside the window */\n isolateScroll?: boolean;\n}\n\nconst returnFocus = { preventScroll: true };\n\nexport const Window = forwardRef<\n HTMLDivElement,\n IWindow & Omit<React.ComponentPropsWithoutRef<\"div\">, keyof IWindow>\n>(\n (\n {\n children,\n onClose,\n className,\n style,\n onKeyDown,\n disableFocusLock = false,\n disableScrollLock = false,\n disableCloseOnEsc = false,\n disableReturnFocus = false,\n isolateScroll = false,\n onClick,\n ...rest\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(innerRef, ref);\n const { zIndex = layers.skyscraper } = useLayerContext();\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n !disableCloseOnEsc\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n if (typeof onKeyDown === \"function\") {\n onKeyDown(event);\n }\n },\n [disableCloseOnEsc, onClose, onKeyDown]\n );\n\n const handleClick = useCallback(\n (event) => {\n event?.stopPropagation();\n typeof onClick === \"function\" && onClick(event);\n },\n [onClick]\n );\n\n return (\n <Portal>\n <FocusLock\n returnFocus={disableReturnFocus ? false : returnFocus}\n disabled={disableFocusLock}\n >\n <RemoveScroll\n forwardProps\n ref={handleRef}\n enabled={!disableScrollLock}\n noIsolation={!isolateScroll}\n >\n <StyledWindow\n {...rest}\n style={{ zIndex, ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n className={classnames(\"c-window\", className)}\n onClick={handleClick}\n >\n {children}\n </StyledWindow>\n </RemoveScroll>\n </FocusLock>\n </Portal>\n );\n }\n);\n\nWindow.displayName = \"Window\";\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AAEA,IAAAI,WAAA,GAAAF,sBAAA,CAAAF,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAN,sBAAA,CAAAF,OAAA;AAAgD,IAAAS,SAAA;AAAA,SAAAP,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAf,uBAAA,YAAAA,wBAAAW,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,cAAAK,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAN,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAN,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAK,EAAA,EAAAN,CAAA,IAAAC,CAAA,CAAAK,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAL,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAAA,SAAAiB,SAAA,WAAAA,QAAA,GAAAH,MAAA,CAAAI,MAAA,GAAAJ,MAAA,CAAAI,MAAA,CAAAC,IAAA,eAAAhB,CAAA,aAAAN,CAAA,MAAAA,CAAA,GAAAuB,SAAA,CAAAC,MAAA,EAAAxB,CAAA,UAAAG,CAAA,GAAAoB,SAAA,CAAAvB,CAAA,YAAAK,CAAA,IAAAF,CAAA,OAAAY,cAAA,CAAAC,IAAA,CAAAb,CAAA,EAAAE,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAF,CAAA,CAAAE,CAAA,aAAAC,CAAA,KAAAc,QAAA,CAAAK,KAAA,OAAAF,SAAA;AAAA,SAAAG,QAAA1B,CAAA,EAAAK,CAAA,QAAAF,CAAA,GAAAc,MAAA,CAAAU,IAAA,CAAA3B,CAAA,OAAAiB,MAAA,CAAAW,qBAAA,QAAArB,CAAA,GAAAU,MAAA,CAAAW,qBAAA,CAAA5B,CAAA,GAAAK,CAAA,KAAAE,CAAA,GAAAA,CAAA,CAAAsB,MAAA,WAAAxB,CAAA,WAAAY,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAK,CAAA,EAAAyB,UAAA,OAAA3B,CAAA,CAAA4B,IAAA,CAAAN,KAAA,CAAAtB,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAA6B,cAAAhC,CAAA,aAAAK,CAAA,MAAAA,CAAA,GAAAkB,SAAA,CAAAC,MAAA,EAAAnB,CAAA,UAAAF,CAAA,WAAAoB,SAAA,CAAAlB,CAAA,IAAAkB,SAAA,CAAAlB,CAAA,QAAAA,CAAA,OAAAqB,OAAA,CAAAT,MAAA,CAAAd,CAAA,OAAA8B,OAAA,WAAA5B,CAAA,IAAA6B,eAAA,CAAAlC,CAAA,EAAAK,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAY,MAAA,CAAAkB,yBAAA,GAAAlB,MAAA,CAAAmB,gBAAA,CAAApC,CAAA,EAAAiB,MAAA,CAAAkB,yBAAA,CAAAhC,CAAA,KAAAuB,OAAA,CAAAT,MAAA,CAAAd,CAAA,GAAA8B,OAAA,WAAA5B,CAAA,IAAAY,MAAA,CAAAC,cAAA,CAAAlB,CAAA,EAAAK,CAAA,EAAAY,MAAA,CAAAE,wBAAA,CAAAhB,CAAA,EAAAE,CAAA,iBAAAL,CAAA;AAAA,SAAAkC,gBAAAlC,CAAA,EAAAK,CAAA,EAAAF,CAAA,YAAAE,CAAA,GAAAgC,cAAA,CAAAhC,CAAA,MAAAL,CAAA,GAAAiB,MAAA,CAAAC,cAAA,CAAAlB,CAAA,EAAAK,CAAA,IAAAiC,KAAA,EAAAnC,CAAA,EAAA2B,UAAA,MAAAS,YAAA,MAAAC,QAAA,UAAAxC,CAAA,CAAAK,CAAA,IAAAF,CAAA,EAAAH,CAAA;AAAA,SAAAqC,eAAAlC,CAAA,QAAAK,CAAA,GAAAiC,YAAA,CAAAtC,CAAA,uCAAAK,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAiC,aAAAtC,CAAA,EAAAE,CAAA,2BAAAF,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAH,CAAA,GAAAG,CAAA,CAAAuC,MAAA,CAAAC,WAAA,kBAAA3C,CAAA,QAAAQ,CAAA,GAAAR,CAAA,CAAAgB,IAAA,CAAAb,CAAA,EAAAE,CAAA,uCAAAG,CAAA,SAAAA,CAAA,YAAAoC,SAAA,yEAAAvC,CAAA,GAAAwC,MAAA,GAAAC,MAAA,EAAA3C,CAAA;AAAA,SAAA4C,yBAAA/C,CAAA,EAAAG,CAAA,gBAAAH,CAAA,iBAAAO,CAAA,EAAAF,CAAA,EAAAG,CAAA,GAAAwC,6BAAA,CAAAhD,CAAA,EAAAG,CAAA,OAAAc,MAAA,CAAAW,qBAAA,QAAAtB,CAAA,GAAAW,MAAA,CAAAW,qBAAA,CAAA5B,CAAA,QAAAK,CAAA,MAAAA,CAAA,GAAAC,CAAA,CAAAkB,MAAA,EAAAnB,CAAA,IAAAE,CAAA,GAAAD,CAAA,CAAAD,CAAA,UAAAF,CAAA,CAAA8C,OAAA,CAAA1C,CAAA,QAAA2C,oBAAA,CAAAlC,IAAA,CAAAhB,CAAA,EAAAO,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAP,CAAA,CAAAO,CAAA,aAAAC,CAAA;AAAA,SAAAwC,8BAAA3C,CAAA,EAAAL,CAAA,gBAAAK,CAAA,iBAAAF,CAAA,gBAAAG,CAAA,IAAAD,CAAA,SAAAU,cAAA,CAAAC,IAAA,CAAAX,CAAA,EAAAC,CAAA,gBAAAN,CAAA,CAAAiD,OAAA,CAAA3C,CAAA,aAAAH,CAAA,CAAAG,CAAA,IAAAD,CAAA,CAAAC,CAAA,YAAAH,CAAA;AAahD,IAAMgD,WAAW,GAAG;EAAEC,aAAa,EAAE;AAAK,CAAC;AAEpC,IAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,gBAAG,IAAAE,iBAAU,EAI9B,UAAAC,IAAA,EAeEC,GAAG,EACA;EAAA,IAdDC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IACRC,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACPC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IACTC,KAAK,GAAAL,IAAA,CAALK,KAAK;IACLC,SAAS,GAAAN,IAAA,CAATM,SAAS;IAAAC,qBAAA,GAAAP,IAAA,CACTQ,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAT,IAAA,CACxBU,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAX,IAAA,CACzBY,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAb,IAAA,CACzBc,kBAAkB;IAAlBA,kBAAkB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,kBAAA,GAAAf,IAAA,CAC1BgB,aAAa;IAAbA,aAAa,GAAAD,kBAAA,cAAG,KAAK,GAAAA,kBAAA;IACrBE,OAAO,GAAAjB,IAAA,CAAPiB,OAAO;IACJC,IAAI,GAAA3B,wBAAA,CAAAS,IAAA,EAAAzD,SAAA;EAIT,IAAM4E,QAAQ,GAAG,IAAAC,aAAM,EAAiB,IAAI,CAAC;EAC7C,IAAMC,SAAS,GAAG,IAAAC,mBAAU,EAACH,QAAQ,EAAElB,GAAG,CAAC;EAC3C,IAAAsB,gBAAA,GAAuC,IAAAC,wBAAe,EAAC,CAAC;IAAAC,qBAAA,GAAAF,gBAAA,CAAhDG,MAAM;IAANA,MAAM,GAAAD,qBAAA,cAAGE,aAAM,CAACC,UAAU,GAAAH,qBAAA;EAElC,IAAMI,aAAa,GAAG,IAAAC,kBAAW,EAC/B,UAACC,KAAoC,EAAK;IACxC,IACE,CAACA,KAAK,CAACC,gBAAgB,KACtBD,KAAK,CAACE,GAAG,KAAK,KAAK,IAAIF,KAAK,CAACE,GAAG,KAAK,QAAQ,CAAC,IAC/C,CAACrB,iBAAiB,EAClB;MACAmB,KAAK,CAACG,cAAc,CAAC,CAAC;MACtBH,KAAK,CAACI,eAAe,CAAC,CAAC;MACvB,IAAIhC,OAAO,EAAE;QACXA,OAAO,CAAC,CAAC;MACX;IACF;IACA,IAAI,OAAOG,SAAS,KAAK,UAAU,EAAE;MACnCA,SAAS,CAACyB,KAAK,CAAC;IAClB;EACF,CAAC,EACD,CAACnB,iBAAiB,EAAET,OAAO,EAAEG,SAAS,CACxC,CAAC;EAED,IAAM8B,WAAW,GAAG,IAAAN,kBAAW,EAC7B,UAACC,KAAK,EAAK;IACTA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEI,eAAe,CAAC,CAAC;IACxB,OAAOlB,OAAO,KAAK,UAAU,IAAIA,OAAO,CAACc,KAAK,CAAC;EACjD,CAAC,EACD,CAACd,OAAO,CACV,CAAC;EAED,oBACErF,MAAA,CAAAc,OAAA,CAAA2F,aAAA,CAACjG,QAAA,CAAAkG,MAAM,qBACL1G,MAAA,CAAAc,OAAA,CAAA2F,aAAA,CAACtG,eAAA,CAAAW,OAAS;IACRiD,WAAW,EAAEmB,kBAAkB,GAAG,KAAK,GAAGnB,WAAY;IACtD4C,QAAQ,EAAE/B;EAAiB,gBAE3B5E,MAAA,CAAAc,OAAA,CAAA2F,aAAA,CAACpG,kBAAA,CAAAuG,YAAY;IACXC,YAAY;IACZxC,GAAG,EAAEoB,SAAU;IACfqB,OAAO,EAAE,CAAChC,iBAAkB;IAC5BiC,WAAW,EAAE,CAAC3B;EAAc,gBAE5BpF,MAAA,CAAAc,OAAA,CAAA2F,aAAA,CAAClG,MAAA,CAAAyG,YAAY,EAAAhF,QAAA,KACPsD,IAAI;IACRb,KAAK,EAAA7B,aAAA;MAAIkD;IAAM,GAAKrB,KAAK,CAAG;IAC5BC,SAAS,EAAEuB,aAAc;IACzBgB,QAAQ,EAAE,CAAE;IACZzC,SAAS,EAAE,IAAA0C,mBAAU,EAAC,UAAU,EAAE1C,SAAS,CAAE;IAC7Ca,OAAO,EAAEmB;EAAY,IAEpBlC,QACW,CACF,CACL,CACL,CAAC;AAEb,CACF,CAAC;AAEDL,MAAM,CAACkD,WAAW,GAAG,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"Window.js","names":["_react","_interopRequireWildcard","require","_reactFocusLock","_interopRequireDefault","_reactRemoveScroll","_classnames","_Style","_helpers","_utils","_useForkRef","_excluded","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","returnFocus","preventScroll","Window","exports","forwardRef","_ref","ref","children","onClose","className","style","onKeyDown","_ref$disableFocusLock","disableFocusLock","_ref$disableScrollLoc","disableScrollLock","_ref$disableCloseOnEs","disableCloseOnEsc","_ref$disableReturnFoc","disableReturnFocus","_ref$isolateScroll","isolateScroll","onClick","rest","innerRef","useRef","handleRef","useForkRef","_useLayerContext","useLayerContext","_useLayerContext$zInd","zIndex","layers","skyscraper","handleKeyDown","useCallback","event","defaultPrevented","key","preventDefault","stopPropagation","useEffect","undefined","handleBodyKeyDown","windows","document","querySelectorAll","isTopWindow","current","target","body","addEventListener","removeEventListener","handleClick","createElement","Portal","disabled","RemoveScroll","forwardProps","enabled","noIsolation","StyledWindow","tabIndex","classnames","displayName"],"sources":["../../../../src/components/Window/Window.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useRef,\n forwardRef,\n KeyboardEvent,\n} from \"react\";\nimport FocusLock from \"react-focus-lock\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport classnames from \"classnames\";\n\nimport { StyledWindow } from \"./Style\";\nimport { Portal, useLayerContext } from \"../../helpers\";\nimport { layers } from \"../../utils\";\nimport useForkRef from \"../../utils/useForkRef\";\n\nexport interface IWindow {\n onClose?: () => void;\n disableFocusLock?: boolean;\n disableScrollLock?: boolean;\n disableCloseOnEsc?: boolean;\n /** Leave the focus where it is when the focus lock turns off */\n disableReturnFocus?: boolean;\n /** With the scroll lock on, also stop the scroll that starts outside the window */\n isolateScroll?: boolean;\n}\n\nconst returnFocus = { preventScroll: true };\n\nexport const Window = forwardRef<\n HTMLDivElement,\n IWindow & Omit<React.ComponentPropsWithoutRef<\"div\">, keyof IWindow>\n>(\n (\n {\n children,\n onClose,\n className,\n style,\n onKeyDown,\n disableFocusLock = false,\n disableScrollLock = false,\n disableCloseOnEsc = false,\n disableReturnFocus = false,\n isolateScroll = false,\n onClick,\n ...rest\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(innerRef, ref);\n const { zIndex = layers.skyscraper } = useLayerContext();\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n !disableCloseOnEsc\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n if (typeof onKeyDown === \"function\") {\n onKeyDown(event);\n }\n },\n [disableCloseOnEsc, onClose, onKeyDown]\n );\n\n // Focus that falls to the body, when the focused node unmounts, sends no key to the window.\n useEffect(() => {\n if (disableCloseOnEsc || !onClose) {\n return undefined;\n }\n\n const handleBodyKeyDown = (event: globalThis.KeyboardEvent) => {\n const windows = document.querySelectorAll(\".c-window\");\n const isTopWindow = windows[windows.length - 1] === innerRef.current;\n\n if (\n event.target === document.body &&\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n isTopWindow\n ) {\n event.preventDefault();\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleBodyKeyDown);\n\n return () => document.removeEventListener(\"keydown\", handleBodyKeyDown);\n }, [disableCloseOnEsc, onClose]);\n\n const handleClick = useCallback(\n (event) => {\n event?.stopPropagation();\n typeof onClick === \"function\" && onClick(event);\n },\n [onClick]\n );\n\n return (\n <Portal>\n <FocusLock\n returnFocus={disableReturnFocus ? false : returnFocus}\n disabled={disableFocusLock}\n >\n <RemoveScroll\n forwardProps\n ref={handleRef}\n enabled={!disableScrollLock}\n noIsolation={!isolateScroll}\n >\n <StyledWindow\n {...rest}\n style={{ zIndex, ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n className={classnames(\"c-window\", className)}\n onClick={handleClick}\n >\n {children}\n </StyledWindow>\n </RemoveScroll>\n </FocusLock>\n </Portal>\n );\n }\n);\n\nWindow.displayName = \"Window\";\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Window.d.ts","sourceRoot":"","sources":["../../../../src/components/Window/Window.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAW9E,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID,eAAO,MAAM,MAAM,kMAgFlB,CAAC"}
1
+ {"version":3,"file":"Window.d.ts","sourceRoot":"","sources":["../../../../src/components/Window/Window.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAWf,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID,eAAO,MAAM,MAAM,kMA0GlB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  const _excluded = ["children", "onClose", "className", "style", "onKeyDown", "disableFocusLock", "disableScrollLock", "disableCloseOnEsc", "disableReturnFocus", "isolateScroll", "onClick"];
4
- import React, { useCallback, useRef, forwardRef } from "react";
4
+ import React, { useCallback, useEffect, useRef, forwardRef } from "react";
5
5
  import FocusLock from "react-focus-lock";
6
6
  import { RemoveScroll } from "react-remove-scroll";
7
7
  import classnames from "classnames";
@@ -47,6 +47,23 @@ export const Window = /*#__PURE__*/forwardRef((_ref, ref) => {
47
47
  onKeyDown(event);
48
48
  }
49
49
  }, [disableCloseOnEsc, onClose, onKeyDown]);
50
+
51
+ // Focus that falls to the body, when the focused node unmounts, sends no key to the window.
52
+ useEffect(() => {
53
+ if (disableCloseOnEsc || !onClose) {
54
+ return undefined;
55
+ }
56
+ const handleBodyKeyDown = event => {
57
+ const windows = document.querySelectorAll(".c-window");
58
+ const isTopWindow = windows[windows.length - 1] === innerRef.current;
59
+ if (event.target === document.body && !event.defaultPrevented && (event.key === "Esc" || event.key === "Escape") && isTopWindow) {
60
+ event.preventDefault();
61
+ onClose();
62
+ }
63
+ };
64
+ document.addEventListener("keydown", handleBodyKeyDown);
65
+ return () => document.removeEventListener("keydown", handleBodyKeyDown);
66
+ }, [disableCloseOnEsc, onClose]);
50
67
  const handleClick = useCallback(event => {
51
68
  event == null || event.stopPropagation();
52
69
  typeof onClick === "function" && onClick(event);
@@ -1 +1 @@
1
- {"version":3,"file":"Window.js","names":["React","useCallback","useRef","forwardRef","FocusLock","RemoveScroll","classnames","StyledWindow","Portal","useLayerContext","layers","useForkRef","returnFocus","preventScroll","Window","_ref","ref","children","onClose","className","style","onKeyDown","_ref$disableFocusLock","disableFocusLock","_ref$disableScrollLoc","disableScrollLock","_ref$disableCloseOnEs","disableCloseOnEsc","_ref$disableReturnFoc","disableReturnFocus","_ref$isolateScroll","isolateScroll","onClick","rest","_objectWithoutPropertiesLoose","_excluded","innerRef","handleRef","_useLayerContext","_useLayerContext$zInd","zIndex","skyscraper","handleKeyDown","event","defaultPrevented","key","preventDefault","stopPropagation","handleClick","createElement","disabled","forwardProps","enabled","noIsolation","_extends","tabIndex","displayName"],"sources":["../../../../src/components/Window/Window.tsx"],"sourcesContent":["import React, { useCallback, useRef, forwardRef, KeyboardEvent } from \"react\";\nimport FocusLock from \"react-focus-lock\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport classnames from \"classnames\";\n\nimport { StyledWindow } from \"./Style\";\nimport { Portal, useLayerContext } from \"../../helpers\";\nimport { layers } from \"../../utils\";\nimport useForkRef from \"../../utils/useForkRef\";\n\nexport interface IWindow {\n onClose?: () => void;\n disableFocusLock?: boolean;\n disableScrollLock?: boolean;\n disableCloseOnEsc?: boolean;\n /** Leave the focus where it is when the focus lock turns off */\n disableReturnFocus?: boolean;\n /** With the scroll lock on, also stop the scroll that starts outside the window */\n isolateScroll?: boolean;\n}\n\nconst returnFocus = { preventScroll: true };\n\nexport const Window = forwardRef<\n HTMLDivElement,\n IWindow & Omit<React.ComponentPropsWithoutRef<\"div\">, keyof IWindow>\n>(\n (\n {\n children,\n onClose,\n className,\n style,\n onKeyDown,\n disableFocusLock = false,\n disableScrollLock = false,\n disableCloseOnEsc = false,\n disableReturnFocus = false,\n isolateScroll = false,\n onClick,\n ...rest\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(innerRef, ref);\n const { zIndex = layers.skyscraper } = useLayerContext();\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n !disableCloseOnEsc\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n if (typeof onKeyDown === \"function\") {\n onKeyDown(event);\n }\n },\n [disableCloseOnEsc, onClose, onKeyDown]\n );\n\n const handleClick = useCallback(\n (event) => {\n event?.stopPropagation();\n typeof onClick === \"function\" && onClick(event);\n },\n [onClick]\n );\n\n return (\n <Portal>\n <FocusLock\n returnFocus={disableReturnFocus ? false : returnFocus}\n disabled={disableFocusLock}\n >\n <RemoveScroll\n forwardProps\n ref={handleRef}\n enabled={!disableScrollLock}\n noIsolation={!isolateScroll}\n >\n <StyledWindow\n {...rest}\n style={{ zIndex, ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n className={classnames(\"c-window\", className)}\n onClick={handleClick}\n >\n {children}\n </StyledWindow>\n </RemoveScroll>\n </FocusLock>\n </Portal>\n );\n }\n);\n\nWindow.displayName = \"Window\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Window.js","names":["React","useCallback","useEffect","useRef","forwardRef","FocusLock","RemoveScroll","classnames","StyledWindow","Portal","useLayerContext","layers","useForkRef","returnFocus","preventScroll","Window","_ref","ref","children","onClose","className","style","onKeyDown","_ref$disableFocusLock","disableFocusLock","_ref$disableScrollLoc","disableScrollLock","_ref$disableCloseOnEs","disableCloseOnEsc","_ref$disableReturnFoc","disableReturnFocus","_ref$isolateScroll","isolateScroll","onClick","rest","_objectWithoutPropertiesLoose","_excluded","innerRef","handleRef","_useLayerContext","_useLayerContext$zInd","zIndex","skyscraper","handleKeyDown","event","defaultPrevented","key","preventDefault","stopPropagation","undefined","handleBodyKeyDown","windows","document","querySelectorAll","isTopWindow","length","current","target","body","addEventListener","removeEventListener","handleClick","createElement","disabled","forwardProps","enabled","noIsolation","_extends","tabIndex","displayName"],"sources":["../../../../src/components/Window/Window.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useRef,\n forwardRef,\n KeyboardEvent,\n} from \"react\";\nimport FocusLock from \"react-focus-lock\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport classnames from \"classnames\";\n\nimport { StyledWindow } from \"./Style\";\nimport { Portal, useLayerContext } from \"../../helpers\";\nimport { layers } from \"../../utils\";\nimport useForkRef from \"../../utils/useForkRef\";\n\nexport interface IWindow {\n onClose?: () => void;\n disableFocusLock?: boolean;\n disableScrollLock?: boolean;\n disableCloseOnEsc?: boolean;\n /** Leave the focus where it is when the focus lock turns off */\n disableReturnFocus?: boolean;\n /** With the scroll lock on, also stop the scroll that starts outside the window */\n isolateScroll?: boolean;\n}\n\nconst returnFocus = { preventScroll: true };\n\nexport const Window = forwardRef<\n HTMLDivElement,\n IWindow & Omit<React.ComponentPropsWithoutRef<\"div\">, keyof IWindow>\n>(\n (\n {\n children,\n onClose,\n className,\n style,\n onKeyDown,\n disableFocusLock = false,\n disableScrollLock = false,\n disableCloseOnEsc = false,\n disableReturnFocus = false,\n isolateScroll = false,\n onClick,\n ...rest\n },\n ref\n ) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(innerRef, ref);\n const { zIndex = layers.skyscraper } = useLayerContext();\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n !disableCloseOnEsc\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n if (typeof onKeyDown === \"function\") {\n onKeyDown(event);\n }\n },\n [disableCloseOnEsc, onClose, onKeyDown]\n );\n\n // Focus that falls to the body, when the focused node unmounts, sends no key to the window.\n useEffect(() => {\n if (disableCloseOnEsc || !onClose) {\n return undefined;\n }\n\n const handleBodyKeyDown = (event: globalThis.KeyboardEvent) => {\n const windows = document.querySelectorAll(\".c-window\");\n const isTopWindow = windows[windows.length - 1] === innerRef.current;\n\n if (\n event.target === document.body &&\n !event.defaultPrevented &&\n (event.key === \"Esc\" || event.key === \"Escape\") &&\n isTopWindow\n ) {\n event.preventDefault();\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleBodyKeyDown);\n\n return () => document.removeEventListener(\"keydown\", handleBodyKeyDown);\n }, [disableCloseOnEsc, onClose]);\n\n const handleClick = useCallback(\n (event) => {\n event?.stopPropagation();\n typeof onClick === \"function\" && onClick(event);\n },\n [onClick]\n );\n\n return (\n <Portal>\n <FocusLock\n returnFocus={disableReturnFocus ? false : returnFocus}\n disabled={disableFocusLock}\n >\n <RemoveScroll\n forwardProps\n ref={handleRef}\n enabled={!disableScrollLock}\n noIsolation={!isolateScroll}\n >\n <StyledWindow\n {...rest}\n style={{ zIndex, ...style }}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n className={classnames(\"c-window\", className)}\n onClick={handleClick}\n >\n {children}\n </StyledWindow>\n </RemoveScroll>\n </FocusLock>\n </Portal>\n );\n }\n);\n\nWindow.displayName = \"Window\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IACVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,UAAU,QAEL,OAAO;AACd,OAAOC,SAAS,MAAM,kBAAkB;AACxC,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,YAAY,QAAQ,SAAS;AACtC,SAASC,MAAM,EAAEC,eAAe,QAAQ,eAAe;AACvD,SAASC,MAAM,QAAQ,aAAa;AACpC,OAAOC,UAAU,MAAM,wBAAwB;AAa/C,MAAMC,WAAW,GAAG;EAAEC,aAAa,EAAE;AAAK,CAAC;AAE3C,OAAO,MAAMC,MAAM,gBAAGX,UAAU,CAI9B,CAAAY,IAAA,EAeEC,GAAG,KACA;EAAA,IAdDC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IACRC,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACPC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IACTC,KAAK,GAAAL,IAAA,CAALK,KAAK;IACLC,SAAS,GAAAN,IAAA,CAATM,SAAS;IAAAC,qBAAA,GAAAP,IAAA,CACTQ,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAT,IAAA,CACxBU,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAX,IAAA,CACzBY,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAb,IAAA,CACzBc,kBAAkB;IAAlBA,kBAAkB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;IAAAE,kBAAA,GAAAf,IAAA,CAC1BgB,aAAa;IAAbA,aAAa,GAAAD,kBAAA,cAAG,KAAK,GAAAA,kBAAA;IACrBE,OAAO,GAAAjB,IAAA,CAAPiB,OAAO;IACJC,IAAI,GAAAC,6BAAA,CAAAnB,IAAA,EAAAoB,SAAA;EAIT,MAAMC,QAAQ,GAAGlC,MAAM,CAAiB,IAAI,CAAC;EAC7C,MAAMmC,SAAS,GAAG1B,UAAU,CAACyB,QAAQ,EAAEpB,GAAG,CAAC;EAC3C,MAAAsB,gBAAA,GAAuC7B,eAAe,CAAC,CAAC;IAAA8B,qBAAA,GAAAD,gBAAA,CAAhDE,MAAM;IAANA,MAAM,GAAAD,qBAAA,cAAG7B,MAAM,CAAC+B,UAAU,GAAAF,qBAAA;EAElC,MAAMG,aAAa,GAAG1C,WAAW,CAC9B2C,KAAoC,IAAK;IACxC,IACE,CAACA,KAAK,CAACC,gBAAgB,KACtBD,KAAK,CAACE,GAAG,KAAK,KAAK,IAAIF,KAAK,CAACE,GAAG,KAAK,QAAQ,CAAC,IAC/C,CAAClB,iBAAiB,EAClB;MACAgB,KAAK,CAACG,cAAc,CAAC,CAAC;MACtBH,KAAK,CAACI,eAAe,CAAC,CAAC;MACvB,IAAI7B,OAAO,EAAE;QACXA,OAAO,CAAC,CAAC;MACX;IACF;IACA,IAAI,OAAOG,SAAS,KAAK,UAAU,EAAE;MACnCA,SAAS,CAACsB,KAAK,CAAC;IAClB;EACF,CAAC,EACD,CAAChB,iBAAiB,EAAET,OAAO,EAAEG,SAAS,CACxC,CAAC;;EAED;EACApB,SAAS,CAAC,MAAM;IACd,IAAI0B,iBAAiB,IAAI,CAACT,OAAO,EAAE;MACjC,OAAO8B,SAAS;IAClB;IAEA,MAAMC,iBAAiB,GAAIN,KAA+B,IAAK;MAC7D,MAAMO,OAAO,GAAGC,QAAQ,CAACC,gBAAgB,CAAC,WAAW,CAAC;MACtD,MAAMC,WAAW,GAAGH,OAAO,CAACA,OAAO,CAACI,MAAM,GAAG,CAAC,CAAC,KAAKlB,QAAQ,CAACmB,OAAO;MAEpE,IACEZ,KAAK,CAACa,MAAM,KAAKL,QAAQ,CAACM,IAAI,IAC9B,CAACd,KAAK,CAACC,gBAAgB,KACtBD,KAAK,CAACE,GAAG,KAAK,KAAK,IAAIF,KAAK,CAACE,GAAG,KAAK,QAAQ,CAAC,IAC/CQ,WAAW,EACX;QACAV,KAAK,CAACG,cAAc,CAAC,CAAC;QACtB5B,OAAO,CAAC,CAAC;MACX;IACF,CAAC;IAEDiC,QAAQ,CAACO,gBAAgB,CAAC,SAAS,EAAET,iBAAiB,CAAC;IAEvD,OAAO,MAAME,QAAQ,CAACQ,mBAAmB,CAAC,SAAS,EAAEV,iBAAiB,CAAC;EACzE,CAAC,EAAE,CAACtB,iBAAiB,EAAET,OAAO,CAAC,CAAC;EAEhC,MAAM0C,WAAW,GAAG5D,WAAW,CAC5B2C,KAAK,IAAK;IACTA,KAAK,YAALA,KAAK,CAAEI,eAAe,CAAC,CAAC;IACxB,OAAOf,OAAO,KAAK,UAAU,IAAIA,OAAO,CAACW,KAAK,CAAC;EACjD,CAAC,EACD,CAACX,OAAO,CACV,CAAC;EAED,oBACEjC,KAAA,CAAA8D,aAAA,CAACrD,MAAM,qBACLT,KAAA,CAAA8D,aAAA,CAACzD,SAAS;IACRQ,WAAW,EAAEiB,kBAAkB,GAAG,KAAK,GAAGjB,WAAY;IACtDkD,QAAQ,EAAEvC;EAAiB,gBAE3BxB,KAAA,CAAA8D,aAAA,CAACxD,YAAY;IACX0D,YAAY;IACZ/C,GAAG,EAAEqB,SAAU;IACf2B,OAAO,EAAE,CAACvC,iBAAkB;IAC5BwC,WAAW,EAAE,CAAClC;EAAc,gBAE5BhC,KAAA,CAAA8D,aAAA,CAACtD,YAAY,EAAA2D,QAAA,KACPjC,IAAI;IACRb,KAAK,EAAA8C,QAAA;MAAI1B;IAAM,GAAKpB,KAAK,CAAG;IAC5BC,SAAS,EAAEqB,aAAc;IACzByB,QAAQ,EAAE,CAAE;IACZhD,SAAS,EAAEb,UAAU,CAAC,UAAU,EAAEa,SAAS,CAAE;IAC7Ca,OAAO,EAAE4B;EAAY,IAEpB3C,QACW,CACF,CACL,CACL,CAAC;AAEb,CACF,CAAC;AAEDH,MAAM,CAACsD,WAAW,GAAG,QAAQ","ignoreList":[]}
package/dist/index.js CHANGED
@@ -16809,6 +16809,25 @@
16809
16809
  onKeyDown(event);
16810
16810
  }
16811
16811
  }, [disableCloseOnEsc, onClose, onKeyDown]);
16812
+
16813
+ // Focus that falls to the body, when the focused node unmounts, sends no key to the window.
16814
+ React.useEffect(function () {
16815
+ if (disableCloseOnEsc || !onClose) {
16816
+ return undefined;
16817
+ }
16818
+ var handleBodyKeyDown = function handleBodyKeyDown(event) {
16819
+ var windows = document.querySelectorAll(".c-window");
16820
+ var isTopWindow = windows[windows.length - 1] === innerRef.current;
16821
+ if (event.target === document.body && !event.defaultPrevented && (event.key === "Esc" || event.key === "Escape") && isTopWindow) {
16822
+ event.preventDefault();
16823
+ onClose();
16824
+ }
16825
+ };
16826
+ document.addEventListener("keydown", handleBodyKeyDown);
16827
+ return function () {
16828
+ return document.removeEventListener("keydown", handleBodyKeyDown);
16829
+ };
16830
+ }, [disableCloseOnEsc, onClose]);
16812
16831
  var handleClick = React.useCallback(function (event) {
16813
16832
  event === null || event === void 0 || event.stopPropagation();
16814
16833
  typeof onClick === "function" && onClick(event);