@vibe/core 3.62.1-alpha-ab54f.0 → 3.62.1-alpha-1ee6c.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.
|
@@ -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
|
|
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};
|
|
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 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 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 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","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","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
|
+
{"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,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
|
|
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};
|
|
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 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 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 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","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","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":"kuCA2BA,IAAMA,EAAsBC,EAAUC,SAAWD,EAE3CE,EAAQC,GACZ,SAAAC,EAuBEC,GACE,IAtBAC,EAAEF,EAAFE,GACAC,EAAIH,EAAJG,KAAIC,EAAAJ,EACJK,KAAAA,OAAO,IAAHD,EAAG,SAAQA,EACfE,EAAkBN,EAAlBM,mBACAC,EAAgBP,EAAhBO,iBACAC,EAAoBR,EAApBQ,qBAAoBC,EAAAT,EACpBU,QAAAA,OAAO,IAAAD,EAAG,WAAQ,EAAAA,EAAAE,EAAAX,EAClBY,UAAAA,OAAY,IAAHD,GAAOA,EAChBE,EAAcb,EAAda,eAAcC,EAAAd,EACde,YAAAA,OAAc,IAAHD,GAAOA,EAClBE,EAAgBhB,EAAhBgB,iBACAC,EAAUjB,EAAViB,WAAUC,EAAAlB,EACVmB,UAAAA,OAAS,IAAAD,EAAGE,SAASC,KAAIH,EACzBI,EAAQtB,EAARsB,SACAC,EAAKvB,EAALuB,MACAC,EAAMxB,EAANwB,OACAC,EAASzB,EAATyB,UACeC,EAAU1B,EAAzB,eACmB2B,GAAc3B,EAAjC,mBACoB4B,GAAe5B,EAAnC,oBAII6B,GAAsBC,EAAgBX,GAEtCY,GAAWC,EAAuB,MAClCC,GAAiBC,EAA4BjC,EAAK8B,IAClDI,GAAeH,EAAuB,MAE5CI,GAA8BC,IAAkBC,GAAAC,EAAAH,GAAA,GAAzCI,GAAOF,GAAA,GAAEG,GAAUH,GAAA,GAC1BI,GAA0CL,IAAkBM,GAAAJ,EAAAG,GAAA,GAArDE,GAAaD,GAAA,GAAEE,GAAgBF,GAAA,GAEhCG,GAAqBC,GACzB,SAACC,GACKrB,IACJc,GAAWO,EACb,GACA,CAACrB,KAEGsB,GAA2BF,GAC/B,SAACC,GACKpB,IACJiB,GAAiBG,EACnB,GACA,CAACpB,KAGGsB,GAAeC,GACnB,WAAA,MAAO,CACLC,QAASlD,EACTuC,WAAYK,GACZD,iBAAkBI,GAClBrC,UAAAA,EACA,GACF,CAACV,EAAI4C,GAAoBG,GAA0BrC,IAG/CyC,GAAkBN,GACtB,SAAAO,GACOnD,IAAQc,GACbP,EAAQ4C,EACT,GACD,CAACnD,EAAMc,EAAYP,IAGf6C,GAAiBR,GACrB,SAAAO,GACMA,EAAEE,MAAQC,EAASC,QAAWvD,IAAQc,GAC1CP,EAAQ4C,EACT,GACD,CAACrC,EAAYP,EAASP,IAGlBwD,GACK,cAATtD,EACIuD,GACA5C,aAAA,EAAAA,EAAkB6C,SAClBC,EACAC,EAEAC,GAAcxC,EAAU,CAAE,yBAA0BA,GAAmC,GAEvFyC,GAA2BlB,GAC/B,SAACmB,GACC,IAAKrD,EAAgB,OAAO,EAE5B,IAAMsD,EAAUtD,EAAeqD,GAE/B,OAAgB,IAAZC,GAEAA,aAAmBC,cACrBD,EAAQE,SACD,EAIX,GACA,CAACxD,IAGH,OACEyD,EAAAC,cAACC,EAAe,KACbrE,GACCmE,EAAAC,cAACE,EAAa,CAACC,SAAUvC,IACvBmC,EAACC,cAAAI,GAAcC,MAAO1B,IACnB2B,EACCP,EAACC,cAAA5E,GACCoB,YAAaA,EACbH,UAAWA,EACXkE,UAAWb,IAEXK,EAAAC,cAAA,MAAA,CAAKtE,IAAKkC,GAAcV,UAAWsD,EAAO5D,UAAWI,MAAOyC,IAC1DM,EAAAC,cAACS,EAAOC,IACN,CAAAC,SAAUC,EACVC,QAAQ,UACRC,QAAQ,QACRC,KAAK,OACQ,cAAAC,EAAUC,EAAuBC,mBAAoBvF,GAClEuB,UAAWsD,EAAOW,QAClBC,QAAStC,GAET,eAAA,IACFiB,EAAAC,cAACqB,EAAa,CAAAC,cAAa,EAAA5F,IAAKgC,IAC9BqC,EAACC,cAAAS,EAAOC,IAAG,CACTC,SAAUvB,GACVyB,QAAQ,OACRC,QAAQ,QACRC,KAAK,OACLQ,OAAQ9E,EACRS,UAAWsE,EACThB,EAAOiB,MACPC,EAASlB,EAAQmB,EAAU,QAAU7F,IAAM8F,EAAA,CAAA,EACxCpB,EAAOqB,mBAAqB9F,GAC/BmB,GAEFvB,GAAIA,EAAE,cACOwB,GAAc6D,EAAUC,EAAuBa,WAAYnG,GAAG,YAChEoG,EAAgBC,MAC3BC,KAAK,SAAQ,cAAA,EAAA,kBAEI7E,IAAkBa,GACjB,mBAAAZ,IAAmBgB,GACrCrB,MAAOA,EACPkF,UAAWlD,GACXmD,UAAW,GAEVpF,EACDgD,EAAAC,cAACoC,EAAe,CACdC,aAActG,EACduG,MAAOtG,EACPC,qBAAsBA,EACtBE,QAASA,QAMnBmB,MAOd"}
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe/core",
|
|
3
|
-
"version": "3.62.1-alpha-
|
|
3
|
+
"version": "3.62.1-alpha-1ee6c.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-
|
|
258
|
+
"vibe-storybook-components": "1.0.4-alpha-1ee6c.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": "
|
|
279
|
+
"gitHead": "888c4c540dc800474b420fea2e622a32a9d27488"
|
|
280
280
|
}
|