{"version":3,"file":"DatePickerWithInput.cjs","sources":["../../../../../src/components/DateTimePickers/DatePickerWithInput/DatePickerWithInput.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { autoUpdate, useClick, useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { ChangeEvent, forwardRef, useImperativeHandle, useState } from 'react';\n\nimport { GrafanaTheme2, dateTime } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../../utils/floating';\nimport { Props as InputProps, Input } from '../../Input/Input';\nimport { DatePicker } from '../DatePicker/DatePicker';\n\nexport const formatDate = (date: Date | string) => dateTime(date).format('L');\n\n/** @public */\nexport interface DatePickerWithInputProps extends Omit<InputProps, 'value' | 'onChange'> {\n  /** Value selected by the DatePicker */\n  value?: Date | string;\n  /** The minimum date the value can be set to */\n  minDate?: Date;\n  /** The maximum date the value can be set to */\n  maxDate?: Date;\n  /** Handles changes when a new date is selected */\n  onChange: (value: Date | string) => void;\n  /** Hide the calendar when date is selected */\n  closeOnSelect?: boolean;\n  /** Text that appears when the input has no text */\n  placeholder?: string;\n}\n\n/**\n * An input with a calendar view, used to select a date.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-datepickerwithinput--docs\n * @public\n */\nexport const DatePickerWithInput = forwardRef<HTMLInputElement, DatePickerWithInputProps>(\n  ({ value, minDate, maxDate, onChange, closeOnSelect, placeholder = 'Date', ...rest }, ref) => {\n    const [open, setOpen] = useState(false);\n    const styles = useStyles2(getStyles);\n    const placement = 'bottom-start';\n\n    // the order of middleware is important!\n    // see https://floating-ui.com/docs/arrow#order\n    const middleware = getPositioningMiddleware(placement);\n\n    const { context, refs, floatingStyles } = useFloating<HTMLInputElement>({\n      open,\n      placement,\n      onOpenChange: setOpen,\n      middleware,\n      whileElementsMounted: autoUpdate,\n      strategy: 'fixed',\n    });\n\n    const click = useClick(context);\n    const dismiss = useDismiss(context);\n    const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, click]);\n\n    useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(ref, () => refs.domReference.current, [\n      refs.domReference,\n    ]);\n\n    return (\n      <div className={styles.container}>\n        <Input\n          ref={refs.setReference}\n          type=\"text\"\n          autoComplete={'off'}\n          placeholder={placeholder}\n          value={value ? formatDate(value) : value}\n          onChange={(ev: ChangeEvent<HTMLInputElement>) => {\n            // Allow resetting the date\n            if (ev.target.value === '') {\n              onChange('');\n            }\n          }}\n          className={styles.input}\n          {...rest}\n          {...getReferenceProps()}\n        />\n        <div className={styles.popover} ref={refs.setFloating} style={floatingStyles} {...getFloatingProps()}>\n          <DatePicker\n            isOpen={open}\n            value={value && typeof value !== 'string' ? value : dateTime().toDate()}\n            minDate={minDate}\n            maxDate={maxDate}\n            onChange={(ev) => {\n              onChange(ev);\n              if (closeOnSelect) {\n                setOpen(false);\n              }\n            }}\n            onClose={() => setOpen(false)}\n          />\n        </div>\n      </div>\n    );\n  }\n);\n\nDatePickerWithInput.displayName = 'DatePickerWithInput';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    container: css({\n      position: 'relative',\n    }),\n    input: css({\n      /* hides the native Calendar picker icon given when using type=date */\n      \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n        display: 'none',\n        WebkitAppearance: 'none',\n      },\n    }),\n    popover: css({\n      zIndex: theme.zIndex.tooltip,\n    }),\n  };\n};\n"],"names":["dateTime","forwardRef","useState","useStyles2","getPositioningMiddleware","useFloating","autoUpdate","useClick","useDismiss","useInteractions","useImperativeHandle","jsxs","jsx","Input","DatePicker","css"],"mappings":"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"}