{"version":3,"file":"TimePickerCalendar.cjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/TimePickerCalendar.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useOverlay } from '@react-aria/overlays';\nimport { createRef, FormEvent, memo } from 'react';\n\nimport { DateTime, GrafanaTheme2, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getModalStyles } from '../../Modal/getModalStyles';\nimport { WeekStart } from '../WeekStartPicker';\n\nimport { Body } from './CalendarBody';\nimport { Footer } from './CalendarFooter';\nimport { Header } from './CalendarHeader';\n\nexport const getStyles = (theme: GrafanaTheme2, isReversed = false) => {\n  return {\n    container: css({\n      top: 0,\n      position: 'absolute',\n      [`${isReversed ? 'left' : 'right'}`]: '546px', // lmao\n    }),\n\n    modalContainer: css({\n      label: 'modalContainer',\n      margin: '0 auto',\n    }),\n\n    calendar: css({\n      display: 'flex',\n      flexDirection: 'column',\n      gap: theme.spacing(1),\n      padding: theme.spacing(1),\n      label: 'calendar',\n      boxShadow: theme.shadows.z3,\n      backgroundColor: theme.colors.background.elevated,\n      border: `1px solid ${theme.colors.border.weak}`,\n      borderRadius: theme.shape.radius.default,\n    }),\n\n    modal: css({\n      label: 'modal',\n      boxShadow: theme.shadows.z3,\n      left: '50%',\n      position: 'fixed',\n      top: '50%',\n      transform: 'translate(-50%, -50%)',\n      zIndex: theme.zIndex.modal,\n    }),\n  };\n};\n\nexport interface TimePickerCalendarProps {\n  isOpen: boolean;\n  from: DateTime;\n  to: DateTime;\n  onClose: () => void;\n  onApply: (e: FormEvent<HTMLButtonElement>) => void;\n  onChange: (from: DateTime, to: DateTime) => void;\n  weekStart?: WeekStart;\n\n  /**\n   * When true, the calendar is rendered as a floating \"tooltip\" next to the input.\n   * When false, the calendar is rendered \"fullscreen\" in a modal. Yes. Don't ask.\n   */\n  isFullscreen: boolean;\n  timeZone?: TimeZone;\n  isReversed?: boolean;\n}\n\nfunction TimePickerCalendar(props: TimePickerCalendarProps) {\n  const theme = useTheme2();\n  const { modalBackdrop } = useStyles2(getModalStyles);\n  const styles = getStyles(theme, props.isReversed);\n  const { isOpen, isFullscreen: isFullscreenProp, onClose } = props;\n  const ref = createRef<HTMLElement>();\n  const { dialogProps } = useDialog(\n    {\n      'aria-label': selectors.components.TimePicker.calendar.label,\n    },\n    ref\n  );\n  const { overlayProps } = useOverlay(\n    {\n      isDismissable: true,\n      isOpen,\n      onClose,\n    },\n    ref\n  );\n\n  // This prop is confusingly worded, so rename it to something more intuitive.\n  const showInModal = !isFullscreenProp;\n\n  if (!isOpen) {\n    return null;\n  }\n\n  const calendar = (\n    <section\n      className={styles.calendar}\n      ref={ref}\n      {...overlayProps}\n      {...dialogProps}\n      data-testid={selectors.components.TimePicker.calendar.label}\n    >\n      <Header {...props} />\n      <Body {...props} />\n      {showInModal && <Footer {...props} />}\n    </section>\n  );\n\n  if (!showInModal) {\n    return (\n      <FocusScope contain restoreFocus autoFocus>\n        <div className={styles.container}>{calendar}</div>\n      </FocusScope>\n    );\n  }\n\n  return (\n    <OverlayContainer>\n      <div className={modalBackdrop} />\n\n      <FocusScope contain autoFocus restoreFocus>\n        <div className={styles.modal}>\n          <div className={styles.modalContainer}>{calendar}</div>\n        </div>\n      </FocusScope>\n    </OverlayContainer>\n  );\n}\nexport default memo(TimePickerCalendar);\nTimePickerCalendar.displayName = 'TimePickerCalendar';\n"],"names":["css","useTheme2","useStyles2","getModalStyles","createRef","useDialog","selectors","useOverlay","jsxs","jsx","Header","Body","Footer","FocusScope","OverlayContainer","memo"],"mappings":"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"}