@vibe/core 3.62.1-alpha-1ee6c.0 → 3.62.1-alpha-86256.0

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,10 @@ export interface ModalProps extends VibeComponentProps {
61
61
  } | ((returnTo: Element) => boolean | {
62
62
  preventScroll?: boolean;
63
63
  });
64
+ /**
65
+ * Whether to disable the focus lock.
66
+ */
67
+ disableFocusLock?: boolean;
64
68
  /**
65
69
  * Additional action to render in the header area.
66
70
  */
@@ -20291,6 +20291,15 @@
20291
20291
  "name": "boolean | { preventScroll?: boolean; } | ((returnTo: Element) => boolean | { preventScroll?: boolean; })"
20292
20292
  }
20293
20293
  },
20294
+ "disableFocusLock": {
20295
+ "defaultValue": null,
20296
+ "description": "Whether to disable the focus lock.",
20297
+ "name": "disableFocusLock",
20298
+ "required": false,
20299
+ "type": {
20300
+ "name": "boolean"
20301
+ }
20302
+ },
20294
20303
  "renderHeaderAction": {
20295
20304
  "defaultValue": null,
20296
20305
  "description": "Additional action to render in the header area.",
@@ -61,6 +61,10 @@ export interface ModalProps extends VibeComponentProps {
61
61
  } | ((returnTo: Element) => boolean | {
62
62
  preventScroll?: boolean;
63
63
  });
64
+ /**
65
+ * Whether to disable the focus lock.
66
+ */
67
+ disableFocusLock?: boolean;
64
68
  /**
65
69
  * Additional action to render in the header area.
66
70
  */
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e,defineProperty as t}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import o,{forwardRef as r,useRef as a,useState as i,useCallback as s,useMemo as n}from"react";import l from"classnames";import{RemoveScroll as m}from"react-remove-scroll";import{AnimatePresence as d,motion as c}from"framer-motion";import{getTestId as u}from"../../../tests/testIds.js";import{ComponentDefaultTestId as f,ComponentVibeId as p}from"../../../tests/constants.js";import v from"./Modal.module.scss.js";import y from"../ModalTopActions/ModalTopActions.js";import{getStyle as E}from"../../../helpers/typesciptCssModulesHelper.js";import{camelCase as b}from"es-toolkit";import{ModalProvider as A}from"../context/ModalContext.js";import{keyCodes as j}from"../../../constants/keyCodes.js";import"../../../constants/sizes.js";import{modalAnimationFullViewVariants as x,modalAnimationAnchorPopVariants as M,modalAnimationCenterPopVariants as h,modalAnimationOverlayVariants as T}from"../utils/animationVariants.js";import{createPortal as L}from"react-dom";import P from"../hooks/usePortalTarget/usePortalTarget.js";import C from"../../LayerProvider/LayerProvider.js";import k from"../../../hooks/useMergeRef.js";var I=r((function(r,I){var N=r.id,g=r.show,w=r.size,z=void 0===w?"medium":w,D=r.renderHeaderAction,H=r.closeButtonTheme,_=r.closeButtonAriaLabel,B=r.onClose,O=void 0===B?function(){}:B,R=r.autoFocus,F=void 0===R||R,V=r.onFocusAttempt,X=r.anchorElementRef,K=r.alertModal,S=r.container,Y=void 0===S?document.body:S,q=r.children,G=r.style,J=r.zIndex,Q=r.className,U=r["data-testid"],W=r["aria-labelledby"],Z=r["aria-describedby"],$=P(Y),ee=a(null),te=k(I,ee),oe=a(null),re=i(),ae=e(re,2),ie=ae[0],se=ae[1],ne=i(),le=e(ne,2),me=le[0],de=le[1],ce=s((function(e){W||se(e)}),[W]),ue=s((function(e){Z||de(e)}),[Z]),fe=n((function(){return{modalId:N,setTitleId:ce,setDescriptionId:ue,autoFocus:F}}),[N,ce,ue,F]),pe=s((function(e){g&&!K&&O(e)}),[g,K,O]),ve=s((function(e){e.key===j.ESCAPE&&g&&!K&&O(e)}),[K,O,g]),ye="full-view"===z?x:(null==X?void 0:X.current)?M:h,Ee=J?{"--monday-modal-z-index":J}:{};return s((function(e){if(!V)return!0;var t=V(e);return!0===t||t instanceof HTMLElement&&(t.focus(),!1)}),[V]),o.createElement(d,null,g&&o.createElement(C,{layerRef:oe},o.createElement(A,{value:fe},L(o.createElement("div",{ref:oe,className:v.container,style:Ee},o.createElement(c.div,{variants:T,initial:"initial",animate:"enter",exit:"exit","data-testid":u(f.MODAL_NEXT_OVERLAY,N),className:v.overlay,onClick:pe,"aria-hidden":!0}),o.createElement(m,{forwardProps:!0,ref:te},o.createElement(c.div,{variants:ye,initial:"exit",animate:"enter",exit:"exit",custom:X,className:l(v.modal,E(v,b("size-"+z)),t({},v.withHeaderAction,!!D),Q),id:N,"data-testid":U||u(f.MODAL_NEXT,N),"data-vibe":p.MODAL,role:"dialog","aria-modal":!0,"aria-labelledby":W||ie,"aria-describedby":Z||me,style:G,onKeyDown:ve,tabIndex:-1},q,o.createElement(y,{renderAction:D,theme:H,closeButtonAriaLabel:_,onClose:O})))),$))))}));export{I as default};
1
+ import{slicedToArray as e,defineProperty as t}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import o,{forwardRef as r,useRef as a,useState as i,useCallback as s,useMemo as n}from"react";import l from"classnames";import{RemoveScroll as m}from"react-remove-scroll";import d from"react-focus-lock";import{AnimatePresence as c,motion as u}from"framer-motion";import{getTestId as f}from"../../../tests/testIds.js";import{ComponentDefaultTestId as p,ComponentVibeId as v}from"../../../tests/constants.js";import y from"./Modal.module.scss.js";import b from"../ModalTopActions/ModalTopActions.js";import{getStyle as E}from"../../../helpers/typesciptCssModulesHelper.js";import{camelCase as A}from"es-toolkit";import{ModalProvider as j}from"../context/ModalContext.js";import{keyCodes as h}from"../../../constants/keyCodes.js";import"../../../constants/sizes.js";import{modalAnimationFullViewVariants as x,modalAnimationAnchorPopVariants as L,modalAnimationCenterPopVariants as M,modalAnimationOverlayVariants as T}from"../utils/animationVariants.js";import{createPortal as k}from"react-dom";import P from"../hooks/usePortalTarget/usePortalTarget.js";import C from"../../LayerProvider/LayerProvider.js";import F from"../../../hooks/useMergeRef.js";var w=d.default||d,I=r((function(r,d){var I=r.id,N=r.show,g=r.size,z=void 0===g?"medium":g,D=r.renderHeaderAction,H=r.closeButtonTheme,_=r.closeButtonAriaLabel,B=r.onClose,O=void 0===B?function(){}:B,R=r.autoFocus,V=void 0===R||R,X=r.onFocusAttempt,K=r.returnFocus,S=void 0===K||K,Y=r.disableFocusLock,q=r.anchorElementRef,G=r.alertModal,J=r.container,Q=void 0===J?document.body:J,U=r.children,W=r.style,Z=r.zIndex,$=r.className,ee=r["data-testid"],te=r["aria-labelledby"],oe=r["aria-describedby"],re=P(Q),ae=a(null),ie=F(d,ae),se=a(null),ne=i(),le=e(ne,2),me=le[0],de=le[1],ce=i(),ue=e(ce,2),fe=ue[0],pe=ue[1],ve=s((function(e){te||de(e)}),[te]),ye=s((function(e){oe||pe(e)}),[oe]),be=n((function(){return{modalId:I,setTitleId:ve,setDescriptionId:ye,autoFocus:V}}),[I,ve,ye,V]),Ee=s((function(e){N&&!G&&O(e)}),[N,G,O]),Ae=s((function(e){e.key===h.ESCAPE&&N&&!G&&O(e)}),[G,O,N]),je="full-view"===z?x:(null==q?void 0:q.current)?L:M,he=Z?{"--monday-modal-z-index":Z}:{},xe=s((function(e){if(!X)return!0;var t=X(e);return!0===t||t instanceof HTMLElement&&(t.focus(),!1)}),[X]);return o.createElement(c,null,N&&o.createElement(C,{layerRef:se},o.createElement(j,{value:be},k(o.createElement(w,{disabled:Y,returnFocus:S,autoFocus:V,whiteList:xe},o.createElement("div",{ref:se,className:y.container,style:he},o.createElement(u.div,{variants:T,initial:"initial",animate:"enter",exit:"exit","data-testid":f(p.MODAL_NEXT_OVERLAY,I),className:y.overlay,onClick:Ee,"aria-hidden":!0}),o.createElement(m,{forwardProps:!0,ref:ie},o.createElement(u.div,{variants:je,initial:"exit",animate:"enter",exit:"exit",custom:q,className:l(y.modal,E(y,A("size-"+z)),t({},y.withHeaderAction,!!D),$),id:I,"data-testid":ee||f(p.MODAL_NEXT,I),"data-vibe":v.MODAL,role:"dialog","aria-modal":!0,"aria-labelledby":te||me,"aria-describedby":oe||fe,style:W,onKeyDown:Ae,tabIndex:-1},U,o.createElement(b,{renderAction:D,theme:H,closeButtonAriaLabel:_,onClose:O}))))),re))))}));export{I as default};
2
2
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../../../../src/components/Modal/Modal/Modal.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { getTestId } from \"../../../tests/test-ids-utils\";\nimport { ComponentDefaultTestId, ComponentVibeId } from \"../../../tests/constants\";\nimport styles from \"./Modal.module.scss\";\nimport { type ModalProps } from \"./Modal.types\";\nimport ModalTopActions from \"../ModalTopActions/ModalTopActions\";\nimport { getStyle } from \"../../../helpers/typesciptCssModulesHelper\";\nimport { camelCase } from \"es-toolkit\";\nimport { ModalProvider } from \"../context/ModalContext\";\nimport { type ModalProviderValue } from \"../context/ModalContext.types\";\nimport { keyCodes } from \"../../../constants\";\nimport {\n modalAnimationAnchorPopVariants,\n modalAnimationCenterPopVariants,\n modalAnimationFullViewVariants,\n modalAnimationOverlayVariants\n} from \"../utils/animationVariants\";\nimport { createPortal } from \"react-dom\";\nimport usePortalTarget from \"../hooks/usePortalTarget/usePortalTarget\";\nimport { LayerProvider } from \"../../LayerProvider\";\nimport useMergeRef from \"../../../hooks/useMergeRef\";\n\nconst Modal = forwardRef(\n (\n {\n id,\n show,\n size = \"medium\",\n renderHeaderAction,\n closeButtonTheme,\n closeButtonAriaLabel,\n onClose = () => {},\n autoFocus = true,\n onFocusAttempt,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n returnFocus = true,\n anchorElementRef,\n alertModal,\n container = document.body,\n children,\n style,\n zIndex,\n className,\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby\n }: ModalProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const portalTargetElement = usePortalTarget(container);\n\n const modalRef = useRef<HTMLDivElement>(null);\n const modalMergedRef = useMergeRef<HTMLDivElement>(ref, modalRef);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [titleId, setTitleId] = useState<string>();\n const [descriptionId, setDescriptionId] = useState<string>();\n\n const setTitleIdCallback = useCallback(\n (newId: string) => {\n if (ariaLabelledby) return;\n setTitleId(newId);\n },\n [ariaLabelledby]\n );\n const setDescriptionIdCallback = useCallback(\n (newId: string) => {\n if (ariaDescribedby) return;\n setDescriptionId(newId);\n },\n [ariaDescribedby]\n );\n\n const contextValue = useMemo<ModalProviderValue>(\n () => ({\n modalId: id,\n setTitleId: setTitleIdCallback,\n setDescriptionId: setDescriptionIdCallback,\n autoFocus\n }),\n [id, setTitleIdCallback, setDescriptionIdCallback, autoFocus]\n );\n\n const onBackdropClick = useCallback<React.MouseEventHandler<HTMLDivElement>>(\n e => {\n if (!show || alertModal) return;\n onClose(e);\n },\n [show, alertModal, onClose]\n );\n\n const onModalKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n e => {\n if (e.key !== keyCodes.ESCAPE || !show || alertModal) return;\n onClose(e);\n },\n [alertModal, onClose, show]\n );\n\n const modalAnimationVariants =\n size === \"full-view\"\n ? modalAnimationFullViewVariants\n : anchorElementRef?.current\n ? modalAnimationAnchorPopVariants\n : modalAnimationCenterPopVariants;\n\n const zIndexStyle = zIndex ? ({ \"--monday-modal-z-index\": zIndex } as React.CSSProperties) : {};\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleFocusLockWhiteList = useCallback(\n (nextFocusedElement?: HTMLElement) => {\n if (!onFocusAttempt) return true;\n\n const outcome = onFocusAttempt(nextFocusedElement);\n\n if (outcome === true) return true;\n\n if (outcome instanceof HTMLElement) {\n outcome.focus();\n return false;\n }\n\n return false;\n },\n [onFocusAttempt]\n );\n\n return (\n <AnimatePresence>\n {show && (\n <LayerProvider layerRef={containerRef}>\n <ModalProvider value={contextValue}>\n {createPortal(\n <div ref={containerRef} className={styles.container} style={zIndexStyle}>\n <motion.div\n variants={modalAnimationOverlayVariants}\n initial=\"initial\"\n animate=\"enter\"\n exit=\"exit\"\n data-testid={getTestId(ComponentDefaultTestId.MODAL_NEXT_OVERLAY, id)}\n className={styles.overlay}\n onClick={onBackdropClick}\n aria-hidden\n />\n <RemoveScroll forwardProps ref={modalMergedRef}>\n <motion.div\n variants={modalAnimationVariants}\n initial=\"exit\"\n animate=\"enter\"\n exit=\"exit\"\n custom={anchorElementRef}\n className={cx(\n styles.modal,\n getStyle(styles, camelCase(\"size-\" + size)),\n { [styles.withHeaderAction]: !!renderHeaderAction },\n className\n )}\n id={id}\n data-testid={dataTestId || getTestId(ComponentDefaultTestId.MODAL_NEXT, id)}\n data-vibe={ComponentVibeId.MODAL}\n role=\"dialog\"\n aria-modal\n aria-labelledby={ariaLabelledby || titleId}\n aria-describedby={ariaDescribedby || descriptionId}\n style={style}\n onKeyDown={onModalKeyDown}\n tabIndex={-1}\n >\n {children}\n <ModalTopActions\n renderAction={renderHeaderAction}\n theme={closeButtonTheme}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onClose={onClose}\n />\n </motion.div>\n </RemoveScroll>\n </div>,\n portalTargetElement\n )}\n </ModalProvider>\n </LayerProvider>\n )}\n </AnimatePresence>\n );\n }\n);\n\nexport default Modal;\n"],"names":["Modal","forwardRef","_ref","ref","id","show","_ref$size","size","renderHeaderAction","closeButtonTheme","closeButtonAriaLabel","_ref$onClose","onClose","_ref$autoFocus","autoFocus","onFocusAttempt","anchorElementRef","alertModal","_ref$container","container","document","body","children","style","zIndex","className","dataTestId","ariaLabelledby","ariaDescribedby","portalTargetElement","usePortalTarget","modalRef","useRef","modalMergedRef","useMergeRef","containerRef","_useState","useState","_useState2","_slicedToArray","titleId","setTitleId","_useState3","_useState4","descriptionId","setDescriptionId","setTitleIdCallback","useCallback","newId","setDescriptionIdCallback","contextValue","useMemo","modalId","onBackdropClick","e","onModalKeyDown","key","keyCodes","ESCAPE","modalAnimationVariants","modalAnimationFullViewVariants","current","modalAnimationAnchorPopVariants","modalAnimationCenterPopVariants","zIndexStyle","nextFocusedElement","outcome","HTMLElement","focus","React","createElement","AnimatePresence","LayerProvider","layerRef","ModalProvider","value","createPortal","styles","motion","div","variants","modalAnimationOverlayVariants","initial","animate","exit","getTestId","ComponentDefaultTestId","MODAL_NEXT_OVERLAY","overlay","onClick","RemoveScroll","forwardProps","custom","cx","modal","getStyle","camelCase","_defineProperty","withHeaderAction","MODAL_NEXT","ComponentVibeId","MODAL","role","onKeyDown","tabIndex","ModalTopActions","renderAction","theme"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../../../../src/components/Modal/Modal/Modal.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport FocusLock from \"react-focus-lock\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { getTestId } from \"../../../tests/test-ids-utils\";\nimport { ComponentDefaultTestId, ComponentVibeId } from \"../../../tests/constants\";\nimport styles from \"./Modal.module.scss\";\nimport { type ModalProps } from \"./Modal.types\";\nimport ModalTopActions from \"../ModalTopActions/ModalTopActions\";\nimport { getStyle } from \"../../../helpers/typesciptCssModulesHelper\";\nimport { camelCase } from \"es-toolkit\";\nimport { ModalProvider } from \"../context/ModalContext\";\nimport { type ModalProviderValue } from \"../context/ModalContext.types\";\nimport { keyCodes } from \"../../../constants\";\nimport {\n modalAnimationAnchorPopVariants,\n modalAnimationCenterPopVariants,\n modalAnimationFullViewVariants,\n modalAnimationOverlayVariants\n} from \"../utils/animationVariants\";\nimport { createPortal } from \"react-dom\";\nimport usePortalTarget from \"../hooks/usePortalTarget/usePortalTarget\";\nimport { LayerProvider } from \"../../LayerProvider\";\nimport useMergeRef from \"../../../hooks/useMergeRef\";\n\n// @ts-expect-error This is a precaution to support all possible module systems (ESM/CJS)\nconst FocusLockComponent = (FocusLock.default || FocusLock) as typeof FocusLock;\n\nconst Modal = forwardRef(\n (\n {\n id,\n show,\n size = \"medium\",\n renderHeaderAction,\n closeButtonTheme,\n closeButtonAriaLabel,\n onClose = () => {},\n autoFocus = true,\n onFocusAttempt,\n returnFocus = true,\n disableFocusLock,\n anchorElementRef,\n alertModal,\n container = document.body,\n children,\n style,\n zIndex,\n className,\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby\n }: ModalProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const portalTargetElement = usePortalTarget(container);\n\n const modalRef = useRef<HTMLDivElement>(null);\n const modalMergedRef = useMergeRef<HTMLDivElement>(ref, modalRef);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [titleId, setTitleId] = useState<string>();\n const [descriptionId, setDescriptionId] = useState<string>();\n\n const setTitleIdCallback = useCallback(\n (newId: string) => {\n if (ariaLabelledby) return;\n setTitleId(newId);\n },\n [ariaLabelledby]\n );\n const setDescriptionIdCallback = useCallback(\n (newId: string) => {\n if (ariaDescribedby) return;\n setDescriptionId(newId);\n },\n [ariaDescribedby]\n );\n\n const contextValue = useMemo<ModalProviderValue>(\n () => ({\n modalId: id,\n setTitleId: setTitleIdCallback,\n setDescriptionId: setDescriptionIdCallback,\n autoFocus\n }),\n [id, setTitleIdCallback, setDescriptionIdCallback, autoFocus]\n );\n\n const onBackdropClick = useCallback<React.MouseEventHandler<HTMLDivElement>>(\n e => {\n if (!show || alertModal) return;\n onClose(e);\n },\n [show, alertModal, onClose]\n );\n\n const onModalKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n e => {\n if (e.key !== keyCodes.ESCAPE || !show || alertModal) return;\n onClose(e);\n },\n [alertModal, onClose, show]\n );\n\n const modalAnimationVariants =\n size === \"full-view\"\n ? modalAnimationFullViewVariants\n : anchorElementRef?.current\n ? modalAnimationAnchorPopVariants\n : modalAnimationCenterPopVariants;\n\n const zIndexStyle = zIndex ? ({ \"--monday-modal-z-index\": zIndex } as React.CSSProperties) : {};\n\n const handleFocusLockWhiteList = useCallback(\n (nextFocusedElement?: HTMLElement) => {\n if (!onFocusAttempt) return true;\n\n const outcome = onFocusAttempt(nextFocusedElement);\n\n if (outcome === true) return true;\n\n if (outcome instanceof HTMLElement) {\n outcome.focus();\n return false;\n }\n\n return false;\n },\n [onFocusAttempt]\n );\n\n return (\n <AnimatePresence>\n {show && (\n <LayerProvider layerRef={containerRef}>\n <ModalProvider value={contextValue}>\n {createPortal(\n <FocusLockComponent\n disabled={disableFocusLock}\n returnFocus={returnFocus}\n autoFocus={autoFocus}\n whiteList={handleFocusLockWhiteList}\n >\n <div ref={containerRef} className={styles.container} style={zIndexStyle}>\n <motion.div\n variants={modalAnimationOverlayVariants}\n initial=\"initial\"\n animate=\"enter\"\n exit=\"exit\"\n data-testid={getTestId(ComponentDefaultTestId.MODAL_NEXT_OVERLAY, id)}\n className={styles.overlay}\n onClick={onBackdropClick}\n aria-hidden\n />\n <RemoveScroll forwardProps ref={modalMergedRef}>\n <motion.div\n variants={modalAnimationVariants}\n initial=\"exit\"\n animate=\"enter\"\n exit=\"exit\"\n custom={anchorElementRef}\n className={cx(\n styles.modal,\n getStyle(styles, camelCase(\"size-\" + size)),\n { [styles.withHeaderAction]: !!renderHeaderAction },\n className\n )}\n id={id}\n data-testid={dataTestId || getTestId(ComponentDefaultTestId.MODAL_NEXT, id)}\n data-vibe={ComponentVibeId.MODAL}\n role=\"dialog\"\n aria-modal\n aria-labelledby={ariaLabelledby || titleId}\n aria-describedby={ariaDescribedby || descriptionId}\n style={style}\n onKeyDown={onModalKeyDown}\n tabIndex={-1}\n >\n {children}\n <ModalTopActions\n renderAction={renderHeaderAction}\n theme={closeButtonTheme}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onClose={onClose}\n />\n </motion.div>\n </RemoveScroll>\n </div>\n </FocusLockComponent>,\n portalTargetElement\n )}\n </ModalProvider>\n </LayerProvider>\n )}\n </AnimatePresence>\n );\n }\n);\n\nexport default Modal;\n"],"names":["FocusLockComponent","FocusLock","default","Modal","forwardRef","_ref","ref","id","show","_ref$size","size","renderHeaderAction","closeButtonTheme","closeButtonAriaLabel","_ref$onClose","onClose","_ref$autoFocus","autoFocus","onFocusAttempt","_ref$returnFocus","returnFocus","disableFocusLock","anchorElementRef","alertModal","_ref$container","container","document","body","children","style","zIndex","className","dataTestId","ariaLabelledby","ariaDescribedby","portalTargetElement","usePortalTarget","modalRef","useRef","modalMergedRef","useMergeRef","containerRef","_useState","useState","_useState2","_slicedToArray","titleId","setTitleId","_useState3","_useState4","descriptionId","setDescriptionId","setTitleIdCallback","useCallback","newId","setDescriptionIdCallback","contextValue","useMemo","modalId","onBackdropClick","e","onModalKeyDown","key","keyCodes","ESCAPE","modalAnimationVariants","modalAnimationFullViewVariants","current","modalAnimationAnchorPopVariants","modalAnimationCenterPopVariants","zIndexStyle","handleFocusLockWhiteList","nextFocusedElement","outcome","HTMLElement","focus","React","createElement","AnimatePresence","LayerProvider","layerRef","ModalProvider","value","createPortal","disabled","whiteList","styles","motion","div","variants","modalAnimationOverlayVariants","initial","animate","exit","getTestId","ComponentDefaultTestId","MODAL_NEXT_OVERLAY","overlay","onClick","RemoveScroll","forwardProps","custom","cx","modal","getStyle","camelCase","_defineProperty","withHeaderAction","MODAL_NEXT","ComponentVibeId","MODAL","role","onKeyDown","tabIndex","ModalTopActions","renderAction","theme"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e,defineProperty as t}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import o,{forwardRef as r,useRef as a,useState as i,useCallback as s,useMemo as n}from"react";import l from"classnames";import{RemoveScroll as m}from"react-remove-scroll";import{AnimatePresence as d,motion as c}from"framer-motion";import{getTestId as u}from"../../../tests/testIds.js";import{ComponentDefaultTestId as f,ComponentVibeId as p}from"../../../tests/constants.js";import v from"./Modal.module.scss.js";import y from"../ModalTopActions/ModalTopActions.js";import{getStyle as E}from"../../../helpers/typesciptCssModulesHelper.js";import{camelCase as b}from"es-toolkit";import{ModalProvider as A}from"../context/ModalContext.js";import{keyCodes as j}from"../../../constants/keyCodes.js";import"../../../constants/sizes.js";import{modalAnimationFullViewVariants as x,modalAnimationAnchorPopVariants as M,modalAnimationCenterPopVariants as h,modalAnimationOverlayVariants as T}from"../utils/animationVariants.js";import{createPortal as L}from"react-dom";import P from"../hooks/usePortalTarget/usePortalTarget.js";import C from"../../LayerProvider/LayerProvider.js";import k from"../../../hooks/useMergeRef.js";var I=r((function(r,I){var N=r.id,g=r.show,w=r.size,z=void 0===w?"medium":w,D=r.renderHeaderAction,H=r.closeButtonTheme,_=r.closeButtonAriaLabel,B=r.onClose,O=void 0===B?function(){}:B,R=r.autoFocus,F=void 0===R||R,V=r.onFocusAttempt,X=r.anchorElementRef,K=r.alertModal,S=r.container,Y=void 0===S?document.body:S,q=r.children,G=r.style,J=r.zIndex,Q=r.className,U=r["data-testid"],W=r["aria-labelledby"],Z=r["aria-describedby"],$=P(Y),ee=a(null),te=k(I,ee),oe=a(null),re=i(),ae=e(re,2),ie=ae[0],se=ae[1],ne=i(),le=e(ne,2),me=le[0],de=le[1],ce=s((function(e){W||se(e)}),[W]),ue=s((function(e){Z||de(e)}),[Z]),fe=n((function(){return{modalId:N,setTitleId:ce,setDescriptionId:ue,autoFocus:F}}),[N,ce,ue,F]),pe=s((function(e){g&&!K&&O(e)}),[g,K,O]),ve=s((function(e){e.key===j.ESCAPE&&g&&!K&&O(e)}),[K,O,g]),ye="full-view"===z?x:(null==X?void 0:X.current)?M:h,Ee=J?{"--monday-modal-z-index":J}:{};return s((function(e){if(!V)return!0;var t=V(e);return!0===t||t instanceof HTMLElement&&(t.focus(),!1)}),[V]),o.createElement(d,null,g&&o.createElement(C,{layerRef:oe},o.createElement(A,{value:fe},L(o.createElement("div",{ref:oe,className:v.container,style:Ee},o.createElement(c.div,{variants:T,initial:"initial",animate:"enter",exit:"exit","data-testid":u(f.MODAL_NEXT_OVERLAY,N),className:v.overlay,onClick:pe,"aria-hidden":!0}),o.createElement(m,{forwardProps:!0,ref:te},o.createElement(c.div,{variants:ye,initial:"exit",animate:"enter",exit:"exit",custom:X,className:l(v.modal,E(v,b("size-"+z)),t({},v.withHeaderAction,!!D),Q),id:N,"data-testid":U||u(f.MODAL_NEXT,N),"data-vibe":p.MODAL,role:"dialog","aria-modal":!0,"aria-labelledby":W||ie,"aria-describedby":Z||me,style:G,onKeyDown:ve,tabIndex:-1},q,o.createElement(y,{renderAction:D,theme:H,closeButtonAriaLabel:_,onClose:O})))),$))))}));export{I as default};
1
+ import{slicedToArray as e,defineProperty as t}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import o,{forwardRef as r,useRef as a,useState as i,useCallback as s,useMemo as n}from"react";import l from"classnames";import{RemoveScroll as m}from"react-remove-scroll";import d from"react-focus-lock";import{AnimatePresence as c,motion as u}from"framer-motion";import{getTestId as f}from"../../../tests/testIds.js";import{ComponentDefaultTestId as p,ComponentVibeId as v}from"../../../tests/constants.js";import y from"./Modal.module.scss.js";import b from"../ModalTopActions/ModalTopActions.js";import{getStyle as E}from"../../../helpers/typesciptCssModulesHelper.js";import{camelCase as A}from"es-toolkit";import{ModalProvider as j}from"../context/ModalContext.js";import{keyCodes as h}from"../../../constants/keyCodes.js";import"../../../constants/sizes.js";import{modalAnimationFullViewVariants as x,modalAnimationAnchorPopVariants as L,modalAnimationCenterPopVariants as M,modalAnimationOverlayVariants as T}from"../utils/animationVariants.js";import{createPortal as k}from"react-dom";import P from"../hooks/usePortalTarget/usePortalTarget.js";import C from"../../LayerProvider/LayerProvider.js";import F from"../../../hooks/useMergeRef.js";var w=d.default||d,I=r((function(r,d){var I=r.id,N=r.show,g=r.size,z=void 0===g?"medium":g,D=r.renderHeaderAction,H=r.closeButtonTheme,_=r.closeButtonAriaLabel,B=r.onClose,O=void 0===B?function(){}:B,R=r.autoFocus,V=void 0===R||R,X=r.onFocusAttempt,K=r.returnFocus,S=void 0===K||K,Y=r.disableFocusLock,q=r.anchorElementRef,G=r.alertModal,J=r.container,Q=void 0===J?document.body:J,U=r.children,W=r.style,Z=r.zIndex,$=r.className,ee=r["data-testid"],te=r["aria-labelledby"],oe=r["aria-describedby"],re=P(Q),ae=a(null),ie=F(d,ae),se=a(null),ne=i(),le=e(ne,2),me=le[0],de=le[1],ce=i(),ue=e(ce,2),fe=ue[0],pe=ue[1],ve=s((function(e){te||de(e)}),[te]),ye=s((function(e){oe||pe(e)}),[oe]),be=n((function(){return{modalId:I,setTitleId:ve,setDescriptionId:ye,autoFocus:V}}),[I,ve,ye,V]),Ee=s((function(e){N&&!G&&O(e)}),[N,G,O]),Ae=s((function(e){e.key===h.ESCAPE&&N&&!G&&O(e)}),[G,O,N]),je="full-view"===z?x:(null==q?void 0:q.current)?L:M,he=Z?{"--monday-modal-z-index":Z}:{},xe=s((function(e){if(!X)return!0;var t=X(e);return!0===t||t instanceof HTMLElement&&(t.focus(),!1)}),[X]);return o.createElement(c,null,N&&o.createElement(C,{layerRef:se},o.createElement(j,{value:be},k(o.createElement(w,{disabled:Y,returnFocus:S,autoFocus:V,whiteList:xe},o.createElement("div",{ref:se,className:y.container,style:he},o.createElement(u.div,{variants:T,initial:"initial",animate:"enter",exit:"exit","data-testid":f(p.MODAL_NEXT_OVERLAY,I),className:y.overlay,onClick:Ee,"aria-hidden":!0}),o.createElement(m,{forwardProps:!0,ref:ie},o.createElement(u.div,{variants:je,initial:"exit",animate:"enter",exit:"exit",custom:q,className:l(y.modal,E(y,A("size-"+z)),t({},y.withHeaderAction,!!D),$),id:I,"data-testid":ee||f(p.MODAL_NEXT,I),"data-vibe":v.MODAL,role:"dialog","aria-modal":!0,"aria-labelledby":te||me,"aria-describedby":oe||fe,style:W,onKeyDown:Ae,tabIndex:-1},U,o.createElement(b,{renderAction:D,theme:H,closeButtonAriaLabel:_,onClose:O}))))),re))))}));export{I as default};
2
2
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../../../src/components/Modal/Modal/Modal.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { getTestId } from \"../../../tests/test-ids-utils\";\nimport { ComponentDefaultTestId, ComponentVibeId } from \"../../../tests/constants\";\nimport styles from \"./Modal.module.scss\";\nimport { type ModalProps } from \"./Modal.types\";\nimport ModalTopActions from \"../ModalTopActions/ModalTopActions\";\nimport { getStyle } from \"../../../helpers/typesciptCssModulesHelper\";\nimport { camelCase } from \"es-toolkit\";\nimport { ModalProvider } from \"../context/ModalContext\";\nimport { type ModalProviderValue } from \"../context/ModalContext.types\";\nimport { keyCodes } from \"../../../constants\";\nimport {\n modalAnimationAnchorPopVariants,\n modalAnimationCenterPopVariants,\n modalAnimationFullViewVariants,\n modalAnimationOverlayVariants\n} from \"../utils/animationVariants\";\nimport { createPortal } from \"react-dom\";\nimport usePortalTarget from \"../hooks/usePortalTarget/usePortalTarget\";\nimport { LayerProvider } from \"../../LayerProvider\";\nimport useMergeRef from \"../../../hooks/useMergeRef\";\n\nconst Modal = forwardRef(\n (\n {\n id,\n show,\n size = \"medium\",\n renderHeaderAction,\n closeButtonTheme,\n closeButtonAriaLabel,\n onClose = () => {},\n autoFocus = true,\n onFocusAttempt,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n returnFocus = true,\n anchorElementRef,\n alertModal,\n container = document.body,\n children,\n style,\n zIndex,\n className,\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby\n }: ModalProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const portalTargetElement = usePortalTarget(container);\n\n const modalRef = useRef<HTMLDivElement>(null);\n const modalMergedRef = useMergeRef<HTMLDivElement>(ref, modalRef);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [titleId, setTitleId] = useState<string>();\n const [descriptionId, setDescriptionId] = useState<string>();\n\n const setTitleIdCallback = useCallback(\n (newId: string) => {\n if (ariaLabelledby) return;\n setTitleId(newId);\n },\n [ariaLabelledby]\n );\n const setDescriptionIdCallback = useCallback(\n (newId: string) => {\n if (ariaDescribedby) return;\n setDescriptionId(newId);\n },\n [ariaDescribedby]\n );\n\n const contextValue = useMemo<ModalProviderValue>(\n () => ({\n modalId: id,\n setTitleId: setTitleIdCallback,\n setDescriptionId: setDescriptionIdCallback,\n autoFocus\n }),\n [id, setTitleIdCallback, setDescriptionIdCallback, autoFocus]\n );\n\n const onBackdropClick = useCallback<React.MouseEventHandler<HTMLDivElement>>(\n e => {\n if (!show || alertModal) return;\n onClose(e);\n },\n [show, alertModal, onClose]\n );\n\n const onModalKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n e => {\n if (e.key !== keyCodes.ESCAPE || !show || alertModal) return;\n onClose(e);\n },\n [alertModal, onClose, show]\n );\n\n const modalAnimationVariants =\n size === \"full-view\"\n ? modalAnimationFullViewVariants\n : anchorElementRef?.current\n ? modalAnimationAnchorPopVariants\n : modalAnimationCenterPopVariants;\n\n const zIndexStyle = zIndex ? ({ \"--monday-modal-z-index\": zIndex } as React.CSSProperties) : {};\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleFocusLockWhiteList = useCallback(\n (nextFocusedElement?: HTMLElement) => {\n if (!onFocusAttempt) return true;\n\n const outcome = onFocusAttempt(nextFocusedElement);\n\n if (outcome === true) return true;\n\n if (outcome instanceof HTMLElement) {\n outcome.focus();\n return false;\n }\n\n return false;\n },\n [onFocusAttempt]\n );\n\n return (\n <AnimatePresence>\n {show && (\n <LayerProvider layerRef={containerRef}>\n <ModalProvider value={contextValue}>\n {createPortal(\n <div ref={containerRef} className={styles.container} style={zIndexStyle}>\n <motion.div\n variants={modalAnimationOverlayVariants}\n initial=\"initial\"\n animate=\"enter\"\n exit=\"exit\"\n data-testid={getTestId(ComponentDefaultTestId.MODAL_NEXT_OVERLAY, id)}\n className={styles.overlay}\n onClick={onBackdropClick}\n aria-hidden\n />\n <RemoveScroll forwardProps ref={modalMergedRef}>\n <motion.div\n variants={modalAnimationVariants}\n initial=\"exit\"\n animate=\"enter\"\n exit=\"exit\"\n custom={anchorElementRef}\n className={cx(\n styles.modal,\n getStyle(styles, camelCase(\"size-\" + size)),\n { [styles.withHeaderAction]: !!renderHeaderAction },\n className\n )}\n id={id}\n data-testid={dataTestId || getTestId(ComponentDefaultTestId.MODAL_NEXT, id)}\n data-vibe={ComponentVibeId.MODAL}\n role=\"dialog\"\n aria-modal\n aria-labelledby={ariaLabelledby || titleId}\n aria-describedby={ariaDescribedby || descriptionId}\n style={style}\n onKeyDown={onModalKeyDown}\n tabIndex={-1}\n >\n {children}\n <ModalTopActions\n renderAction={renderHeaderAction}\n theme={closeButtonTheme}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onClose={onClose}\n />\n </motion.div>\n </RemoveScroll>\n </div>,\n portalTargetElement\n )}\n </ModalProvider>\n </LayerProvider>\n )}\n </AnimatePresence>\n );\n }\n);\n\nexport default Modal;\n"],"names":["Modal","forwardRef","_ref","ref","id","show","_ref$size","size","renderHeaderAction","closeButtonTheme","closeButtonAriaLabel","_ref$onClose","onClose","_ref$autoFocus","autoFocus","onFocusAttempt","anchorElementRef","alertModal","_ref$container","container","document","body","children","style","zIndex","className","dataTestId","ariaLabelledby","ariaDescribedby","portalTargetElement","usePortalTarget","modalRef","useRef","modalMergedRef","useMergeRef","containerRef","_useState","useState","_useState2","_slicedToArray","titleId","setTitleId","_useState3","_useState4","descriptionId","setDescriptionId","setTitleIdCallback","useCallback","newId","setDescriptionIdCallback","contextValue","useMemo","modalId","onBackdropClick","e","onModalKeyDown","key","keyCodes","ESCAPE","modalAnimationVariants","modalAnimationFullViewVariants","current","modalAnimationAnchorPopVariants","modalAnimationCenterPopVariants","zIndexStyle","nextFocusedElement","outcome","HTMLElement","focus","React","createElement","AnimatePresence","LayerProvider","layerRef","ModalProvider","value","createPortal","styles","motion","div","variants","modalAnimationOverlayVariants","initial","animate","exit","getTestId","ComponentDefaultTestId","MODAL_NEXT_OVERLAY","overlay","onClick","RemoveScroll","forwardProps","custom","cx","modal","getStyle","camelCase","_defineProperty","withHeaderAction","MODAL_NEXT","ComponentVibeId","MODAL","role","onKeyDown","tabIndex","ModalTopActions","renderAction","theme"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../../../src/components/Modal/Modal/Modal.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\nimport cx from \"classnames\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport FocusLock from \"react-focus-lock\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { getTestId } from \"../../../tests/test-ids-utils\";\nimport { ComponentDefaultTestId, ComponentVibeId } from \"../../../tests/constants\";\nimport styles from \"./Modal.module.scss\";\nimport { type ModalProps } from \"./Modal.types\";\nimport ModalTopActions from \"../ModalTopActions/ModalTopActions\";\nimport { getStyle } from \"../../../helpers/typesciptCssModulesHelper\";\nimport { camelCase } from \"es-toolkit\";\nimport { ModalProvider } from \"../context/ModalContext\";\nimport { type ModalProviderValue } from \"../context/ModalContext.types\";\nimport { keyCodes } from \"../../../constants\";\nimport {\n modalAnimationAnchorPopVariants,\n modalAnimationCenterPopVariants,\n modalAnimationFullViewVariants,\n modalAnimationOverlayVariants\n} from \"../utils/animationVariants\";\nimport { createPortal } from \"react-dom\";\nimport usePortalTarget from \"../hooks/usePortalTarget/usePortalTarget\";\nimport { LayerProvider } from \"../../LayerProvider\";\nimport useMergeRef from \"../../../hooks/useMergeRef\";\n\n// @ts-expect-error This is a precaution to support all possible module systems (ESM/CJS)\nconst FocusLockComponent = (FocusLock.default || FocusLock) as typeof FocusLock;\n\nconst Modal = forwardRef(\n (\n {\n id,\n show,\n size = \"medium\",\n renderHeaderAction,\n closeButtonTheme,\n closeButtonAriaLabel,\n onClose = () => {},\n autoFocus = true,\n onFocusAttempt,\n returnFocus = true,\n disableFocusLock,\n anchorElementRef,\n alertModal,\n container = document.body,\n children,\n style,\n zIndex,\n className,\n \"data-testid\": dataTestId,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby\n }: ModalProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const portalTargetElement = usePortalTarget(container);\n\n const modalRef = useRef<HTMLDivElement>(null);\n const modalMergedRef = useMergeRef<HTMLDivElement>(ref, modalRef);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [titleId, setTitleId] = useState<string>();\n const [descriptionId, setDescriptionId] = useState<string>();\n\n const setTitleIdCallback = useCallback(\n (newId: string) => {\n if (ariaLabelledby) return;\n setTitleId(newId);\n },\n [ariaLabelledby]\n );\n const setDescriptionIdCallback = useCallback(\n (newId: string) => {\n if (ariaDescribedby) return;\n setDescriptionId(newId);\n },\n [ariaDescribedby]\n );\n\n const contextValue = useMemo<ModalProviderValue>(\n () => ({\n modalId: id,\n setTitleId: setTitleIdCallback,\n setDescriptionId: setDescriptionIdCallback,\n autoFocus\n }),\n [id, setTitleIdCallback, setDescriptionIdCallback, autoFocus]\n );\n\n const onBackdropClick = useCallback<React.MouseEventHandler<HTMLDivElement>>(\n e => {\n if (!show || alertModal) return;\n onClose(e);\n },\n [show, alertModal, onClose]\n );\n\n const onModalKeyDown = useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n e => {\n if (e.key !== keyCodes.ESCAPE || !show || alertModal) return;\n onClose(e);\n },\n [alertModal, onClose, show]\n );\n\n const modalAnimationVariants =\n size === \"full-view\"\n ? modalAnimationFullViewVariants\n : anchorElementRef?.current\n ? modalAnimationAnchorPopVariants\n : modalAnimationCenterPopVariants;\n\n const zIndexStyle = zIndex ? ({ \"--monday-modal-z-index\": zIndex } as React.CSSProperties) : {};\n\n const handleFocusLockWhiteList = useCallback(\n (nextFocusedElement?: HTMLElement) => {\n if (!onFocusAttempt) return true;\n\n const outcome = onFocusAttempt(nextFocusedElement);\n\n if (outcome === true) return true;\n\n if (outcome instanceof HTMLElement) {\n outcome.focus();\n return false;\n }\n\n return false;\n },\n [onFocusAttempt]\n );\n\n return (\n <AnimatePresence>\n {show && (\n <LayerProvider layerRef={containerRef}>\n <ModalProvider value={contextValue}>\n {createPortal(\n <FocusLockComponent\n disabled={disableFocusLock}\n returnFocus={returnFocus}\n autoFocus={autoFocus}\n whiteList={handleFocusLockWhiteList}\n >\n <div ref={containerRef} className={styles.container} style={zIndexStyle}>\n <motion.div\n variants={modalAnimationOverlayVariants}\n initial=\"initial\"\n animate=\"enter\"\n exit=\"exit\"\n data-testid={getTestId(ComponentDefaultTestId.MODAL_NEXT_OVERLAY, id)}\n className={styles.overlay}\n onClick={onBackdropClick}\n aria-hidden\n />\n <RemoveScroll forwardProps ref={modalMergedRef}>\n <motion.div\n variants={modalAnimationVariants}\n initial=\"exit\"\n animate=\"enter\"\n exit=\"exit\"\n custom={anchorElementRef}\n className={cx(\n styles.modal,\n getStyle(styles, camelCase(\"size-\" + size)),\n { [styles.withHeaderAction]: !!renderHeaderAction },\n className\n )}\n id={id}\n data-testid={dataTestId || getTestId(ComponentDefaultTestId.MODAL_NEXT, id)}\n data-vibe={ComponentVibeId.MODAL}\n role=\"dialog\"\n aria-modal\n aria-labelledby={ariaLabelledby || titleId}\n aria-describedby={ariaDescribedby || descriptionId}\n style={style}\n onKeyDown={onModalKeyDown}\n tabIndex={-1}\n >\n {children}\n <ModalTopActions\n renderAction={renderHeaderAction}\n theme={closeButtonTheme}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onClose={onClose}\n />\n </motion.div>\n </RemoveScroll>\n </div>\n </FocusLockComponent>,\n portalTargetElement\n )}\n </ModalProvider>\n </LayerProvider>\n )}\n </AnimatePresence>\n );\n }\n);\n\nexport default Modal;\n"],"names":["FocusLockComponent","FocusLock","default","Modal","forwardRef","_ref","ref","id","show","_ref$size","size","renderHeaderAction","closeButtonTheme","closeButtonAriaLabel","_ref$onClose","onClose","_ref$autoFocus","autoFocus","onFocusAttempt","_ref$returnFocus","returnFocus","disableFocusLock","anchorElementRef","alertModal","_ref$container","container","document","body","children","style","zIndex","className","dataTestId","ariaLabelledby","ariaDescribedby","portalTargetElement","usePortalTarget","modalRef","useRef","modalMergedRef","useMergeRef","containerRef","_useState","useState","_useState2","_slicedToArray","titleId","setTitleId","_useState3","_useState4","descriptionId","setDescriptionId","setTitleIdCallback","useCallback","newId","setDescriptionIdCallback","contextValue","useMemo","modalId","onBackdropClick","e","onModalKeyDown","key","keyCodes","ESCAPE","modalAnimationVariants","modalAnimationFullViewVariants","current","modalAnimationAnchorPopVariants","modalAnimationCenterPopVariants","zIndexStyle","handleFocusLockWhiteList","nextFocusedElement","outcome","HTMLElement","focus","React","createElement","AnimatePresence","LayerProvider","layerRef","ModalProvider","value","createPortal","disabled","whiteList","styles","motion","div","variants","modalAnimationOverlayVariants","initial","animate","exit","getTestId","ComponentDefaultTestId","MODAL_NEXT_OVERLAY","overlay","onClick","RemoveScroll","forwardProps","custom","cx","modal","getStyle","camelCase","_defineProperty","withHeaderAction","MODAL_NEXT","ComponentVibeId","MODAL","role","onKeyDown","tabIndex","ModalTopActions","renderAction","theme"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe/core",
3
- "version": "3.62.1-alpha-1ee6c.0",
3
+ "version": "3.62.1-alpha-86256.0",
4
4
  "description": "Official monday.com UI resources for application development in React.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -255,7 +255,7 @@
255
255
  "tsx": "^4.20.3",
256
256
  "typescript": "^4.7.3",
257
257
  "typescript-plugin-css-modules": "^4.2.1",
258
- "vibe-storybook-components": "1.0.4-alpha-1ee6c.0",
258
+ "vibe-storybook-components": "1.0.4-alpha-86256.0",
259
259
  "vite": "^5.3.1",
260
260
  "vitest": "^1.6.0"
261
261
  },
@@ -276,5 +276,5 @@
276
276
  "browserslist": [
277
277
  "extends browserslist-config-monday"
278
278
  ],
279
- "gitHead": "888c4c540dc800474b420fea2e622a32a9d27488"
279
+ "gitHead": "91d08e96fa53be9a0a8693c50433bfcd82bc6d2b"
280
280
  }