{"version":3,"file":"TimeRangeList.cjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/TimeRangeList.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useRef, ReactNode } from 'react';\n\nimport { GrafanaTheme2, TimeOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nimport { TimePickerTitle } from './TimePickerTitle';\nimport { TimeRangeOption } from './TimeRangeOption';\nimport { useListFocus } from './hooks';\n\ninterface Props {\n  title?: string;\n  options: TimeOption[];\n  value?: TimeOption;\n  onChange: (option: TimeOption) => void;\n  placeholderEmpty?: ReactNode;\n}\n\nexport const TimeRangeList = (props: Props) => {\n  const styles = useStyles2(getStyles);\n  const { title, options, placeholderEmpty } = props;\n\n  if (typeof placeholderEmpty !== 'undefined' && options.length <= 0) {\n    return <>{placeholderEmpty}</>;\n  }\n\n  if (!title) {\n    return <Options {...props} />;\n  }\n\n  return (\n    <section aria-label={title}>\n      <fieldset>\n        <div className={styles.title}>\n          <TimePickerTitle>{title}</TimePickerTitle>\n        </div>\n        <Options {...props} />\n      </fieldset>\n    </section>\n  );\n};\n\nconst Options = ({ options, value, onChange, title }: Props) => {\n  const styles = useStyles2(getOptionsStyles);\n\n  const localRef = useRef<HTMLUListElement>(null);\n  const [handleKeys] = useListFocus({ localRef, options });\n\n  return (\n    <>\n      <ul\n        role=\"presentation\"\n        onKeyDown={handleKeys}\n        ref={localRef}\n        aria-roledescription={t('time-picker.time-range.aria-role', 'Time range selection')}\n        className={styles.list}\n      >\n        {options.map((option, index) => (\n          <TimeRangeOption\n            key={keyForOption(option, index)}\n            value={option}\n            selected={isEqual(option, value)}\n            onSelect={onChange}\n            name={title ?? t('time-picker.time-range.default-title', 'Time ranges')}\n          />\n        ))}\n      </ul>\n    </>\n  );\n};\n\nfunction keyForOption(option: TimeOption, index: number): string {\n  return `${option.from}-${option.to}-${index}`;\n}\n\nfunction isEqual(x: TimeOption, y?: TimeOption): boolean {\n  if (!y || !x) {\n    return false;\n  }\n  return y.from === x.from && y.to === x.to;\n}\n\nconst getStyles = () => ({\n  title: css({\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    padding: '8px 16px 5px 9px',\n  }),\n});\n\nconst getOptionsStyles = (theme: GrafanaTheme2) => ({\n  list: css({\n    padding: theme.spacing(0.5),\n  }),\n});\n"],"names":["useStyles2","jsx","TimePickerTitle","useRef","useListFocus","Fragment","t","TimeRangeOption","css"],"mappings":"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"}