{"version":3,"file":"ModalRoot.cjs","sources":["../../../src/components/Modal/ModalRoot.tsx"],"sourcesContent":["import {\n  createVarsResolver,\n  factory,\n  Factory,\n  getDefaultZIndex,\n  getRadius,\n  getSize,\n  RaikouRadius,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { ModalBase, ModalBaseProps, ModalBaseStylesNames } from '../ModalBase';\nimport { ModalProvider, ScrollAreaComponent } from './Modal.context';\nimport { ModalContentStyle, ModalHeaderStyle, ModalInnerStyle, ModalRootStyle } from './Modal.css';\n\nexport type ModalRootStylesNames =\n  | 'title'\n  | 'body'\n  | 'header'\n  | 'content'\n  | 'overlay'\n  | 'root'\n  | 'close'\n  | 'inner';\nexport type ModalRootCssVariables = {\n  root: '--modal-radius' | '--modal-size' | '--modal-y-offset' | '--modal-x-offset';\n};\n\nexport interface ModalRootProps extends StylesApiProps<ModalRootFactory>, ModalBaseProps {\n  __staticSelector?: string;\n\n  /** Top/bottom modal offset, `5dvh` by default */\n  yOffset?: React.CSSProperties['marginTop'];\n\n  /** Left/right modal offset, `5vw` by default */\n  xOffset?: React.CSSProperties['marginLeft'];\n\n  /** Scroll area component, native `div` element by default */\n  scrollAreaComponent?: ScrollAreaComponent;\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius`, `theme.defaultRadius` by default */\n  radius?: RaikouRadius;\n\n  /** Determines whether the modal should be centered vertically, `false` by default */\n  centered?: boolean;\n\n  /** Determines whether the modal should take the entire screen, `false` by default */\n  fullScreen?: boolean;\n}\n\nexport type ModalRootFactory = Factory<{\n  props: ModalRootProps;\n  ref: HTMLDivElement;\n  stylesNames: ModalRootStylesNames;\n  vars: ModalRootCssVariables;\n  compound: true;\n}>;\n\nconst defaultProps: Partial<ModalRootProps> = {\n  __staticSelector: 'Modal',\n  closeOnClickOutside: true,\n  withinPortal: true,\n  lockScroll: true,\n  trapFocus: true,\n  returnFocus: true,\n  closeOnEscape: true,\n  keepMounted: false,\n  zIndex: getDefaultZIndex('modal'),\n  transitionProps: { duration: 200, transition: 'fade-down' },\n  yOffset: '5dvh',\n};\n\nconst varsResolver = createVarsResolver<ModalRootFactory>(\n  (_, { radius, size, yOffset, xOffset }) => ({\n    root: {\n      '--modal-radius': radius === undefined ? undefined : getRadius(radius),\n      '--modal-size': getSize(size, 'modal-size'),\n      '--modal-y-offset': rem(yOffset),\n      '--modal-x-offset': rem(xOffset),\n    },\n  })\n);\n\nexport const ModalRoot = factory<ModalRootFactory>((_props, ref) => {\n  const props = useProps('ModalRoot', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    yOffset,\n    scrollAreaComponent,\n    radius,\n    fullScreen,\n    centered,\n    xOffset,\n    __staticSelector,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<ModalRootFactory>({\n    name: __staticSelector!,\n    classes: {\n      root: ModalRootStyle,\n      header: ModalHeaderStyle,\n      content: ModalContentStyle,\n      inner: ModalInnerStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  return (\n    <ModalProvider value={{ yOffset, scrollAreaComponent, getStyles, fullScreen }}>\n      <ModalBase\n        ref={ref}\n        {...getStyles('root')}\n        data-full-screen={fullScreen || undefined}\n        data-centered={centered || undefined}\n        unstyled={unstyled}\n        {...others}\n      />\n    </ModalProvider>\n  );\n});\n\nModalRoot.displayName = '@raikou/core/ModalRoot';\n"],"names":["getDefaultZIndex","createVarsResolver","getRadius","getSize","rem","factory","useProps","useStyles","ModalRootStyle","ModalHeaderStyle","ModalContentStyle","ModalInnerStyle","jsx","ModalProvider","ModalBase"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAM,YAAwC,GAAA;AAAA,EAC5C,gBAAkB,EAAA,OAAA;AAAA,EAClB,mBAAqB,EAAA,IAAA;AAAA,EACrB,YAAc,EAAA,IAAA;AAAA,EACd,UAAY,EAAA,IAAA;AAAA,EACZ,SAAW,EAAA,IAAA;AAAA,EACX,WAAa,EAAA,IAAA;AAAA,EACb,aAAe,EAAA,IAAA;AAAA,EACf,WAAa,EAAA,KAAA;AAAA,EACb,MAAA,EAAQA,kCAAiB,OAAO,CAAA;AAAA,EAChC,eAAiB,EAAA,EAAE,QAAU,EAAA,GAAA,EAAK,YAAY,WAAY,EAAA;AAAA,EAC1D,OAAS,EAAA;AACX,CAAA;AAEA,MAAM,YAAe,GAAAC,qCAAA;AAAA,EACnB,CAAC,CAAG,EAAA,EAAE,QAAQ,IAAM,EAAA,OAAA,EAAS,SAAe,MAAA;AAAA,IAC1C,IAAM,EAAA;AAAA,MACJ,gBAAkB,EAAA,MAAA,KAAW,KAAY,CAAA,GAAA,KAAA,CAAA,GAAYC,kBAAU,MAAM,CAAA;AAAA,MACrE,cAAA,EAAgBC,eAAQ,CAAA,IAAA,EAAM,YAAY,CAAA;AAAA,MAC1C,kBAAA,EAAoBC,QAAI,OAAO,CAAA;AAAA,MAC/B,kBAAA,EAAoBA,QAAI,OAAO;AAAA;AACjC,GACF;AACF,CAAA;AAEO,MAAM,SAAY,GAAAC,eAAA,CAA0B,CAAC,MAAA,EAAQ,GAAQ,KAAA;AAClE,EAAA,MAAM,KAAQ,GAAAC,iBAAA,CAAS,WAAa,EAAA,YAAA,EAAc,MAAM,CAAA;AACxD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAA,MAAM,YAAYC,mBAA4B,CAAA;AAAA,IAC5C,IAAM,EAAA,gBAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,IAAM,EAAAC,wBAAA;AAAA,MACN,MAAQ,EAAAC,0BAAA;AAAA,MACR,OAAS,EAAAC,2BAAA;AAAA,MACT,KAAO,EAAAC;AAAA,KACT;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAC,cAAA,CAACC,+BAAc,KAAO,EAAA,EAAE,SAAS,mBAAqB,EAAA,SAAA,EAAW,YAC/D,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAACE,mBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,UAAU,MAAM,CAAA;AAAA,MACpB,oBAAkB,UAAc,IAAA,KAAA,CAAA;AAAA,MAChC,iBAAe,QAAY,IAAA,KAAA,CAAA;AAAA,MAC3B,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GAER,EAAA,CAAA;AAEJ,CAAC;AAED,SAAA,CAAU,WAAc,GAAA,wBAAA;;;;"}