{"version":3,"sources":["../src/components/inputs/DatePicker/DatePicker.tsx"],"names":["forwardRef","useId","cn","inputBaseClasses","inputSizeClasses","dirtyClasses","errorClasses","jsx","useFieldMode","useInlineEdit","useControllableState","DisplayValue","Field","jsxs"],"mappings":"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","file":"chunk-VUKIFFWK.cjs","sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { Field } from \"../Field\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport {\n  dirtyClasses,\n  errorClasses,\n  inputBaseClasses,\n  inputSizeClasses,\n} from \"../inputs.utils\";\nimport type { DatePickerProps } from \"./DatePicker.types\";\n\n/** Locale-format an ISO date / datetime-local string; fall back to the raw value. */\nfunction formatDateValue(iso: string, includeTime?: boolean): string {\n  if (!iso) return \"\";\n  const date = new Date(iso);\n  if (Number.isNaN(date.getTime())) return iso;\n  return includeTime\n    ? date.toLocaleString(undefined, {\n        year: \"numeric\",\n        month: \"short\",\n        day: \"numeric\",\n        hour: \"2-digit\",\n        minute: \"2-digit\",\n      })\n    : date.toLocaleDateString(undefined, {\n        year: \"numeric\",\n        month: \"short\",\n        day: \"numeric\",\n      });\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n  (props, ref) => {\n    const {\n      size = \"md\",\n      dirty,\n      error,\n      label,\n      labelHidden,\n      description,\n      required,\n      disabled,\n      className,\n      id,\n      name,\n      min,\n      max,\n      includeTime,\n    } = props;\n\n    const autoId = useId();\n    const pickerId = id ?? autoId;\n    const inputType = includeTime ? \"datetime-local\" : \"date\";\n\n    const inputClasses = cn(\n      inputBaseClasses,\n      inputSizeClasses[size],\n      dirtyClasses(dirty),\n      errorClasses(error),\n      \"w-full\",\n    );\n\n    if (props.range) {\n      return (\n        <RangeDatePicker\n          {...props}\n          id={pickerId}\n          inputType={inputType}\n          inputClasses={inputClasses}\n          ref={ref}\n        />\n      );\n    }\n\n    return (\n      <SingleDatePicker\n        {...props}\n        range={false}\n        id={pickerId}\n        inputType={inputType}\n        inputClasses={inputClasses}\n        ref={ref}\n      />\n    );\n  },\n);\n\nDatePicker.displayName = \"DatePicker\";\n\ninterface InternalProps {\n  inputType: string;\n  inputClasses: string;\n}\n\nconst SingleDatePicker = forwardRef<\n  HTMLInputElement,\n  DatePickerProps & { range?: false } & InternalProps\n>(\n  (\n    {\n      size = \"md\",\n      error,\n      label,\n      labelHidden,\n      description,\n      required,\n      disabled,\n      className,\n      id,\n      name,\n      min,\n      max,\n      includeTime,\n      mode,\n      inputType,\n      inputClasses,\n      ...rest\n    },\n    ref,\n  ) => {\n    const singleProps = rest as {\n      value?: string;\n      defaultValue?: string;\n      onValueChange?: (v: string) => void;\n    };\n    const resolvedMode = useFieldMode(mode);\n    const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n    const [value, setValue] = useControllableState(\n      singleProps.value,\n      singleProps.defaultValue ?? \"\",\n      singleProps.onValueChange,\n    );\n\n    const input = !showControl ? (\n      <DisplayValue\n        size={size}\n        className={className}\n        interactive={interactive}\n        onActivate={enterEdit}\n      >\n        {formatDateValue(value, includeTime)}\n      </DisplayValue>\n    ) : (\n      <input\n        data-react-fancy-date-picker=\"\"\n        ref={ref}\n        id={id}\n        type={inputType}\n        name={name}\n        min={min}\n        max={max}\n        value={value}\n        disabled={disabled}\n        required={required}\n        onChange={(e) => setValue(e.target.value)}\n        className={cn(inputClasses, className)}\n        autoFocus={interactive}\n        onBlur={() => {\n          if (interactive) exitEdit();\n        }}\n      />\n    );\n\n    if (label || error || description) {\n      return (\n        <Field\n          label={label}\n          labelHidden={labelHidden}\n          description={description}\n          error={error}\n          required={required}\n          htmlFor={id}\n          size={size}\n        >\n          {input}\n        </Field>\n      );\n    }\n\n    return input;\n  },\n);\n\nSingleDatePicker.displayName = \"SingleDatePicker\";\n\nconst RangeDatePicker = forwardRef<\n  HTMLInputElement,\n  DatePickerProps & { range: true } & InternalProps\n>(\n  (\n    {\n      size = \"md\",\n      error,\n      label,\n      labelHidden,\n      description,\n      required,\n      disabled,\n      className,\n      id,\n      name,\n      min,\n      max,\n      includeTime,\n      mode,\n      inputType,\n      inputClasses,\n      ...rest\n    },\n    ref,\n  ) => {\n    const rangeProps = rest as {\n      value?: [string, string];\n      defaultValue?: [string, string];\n      onValueChange?: (v: [string, string]) => void;\n    };\n    const resolvedMode = useFieldMode(mode);\n    const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n    const [value, setValue] = useControllableState(\n      rangeProps.value,\n      rangeProps.defaultValue ?? [\"\", \"\"] as [string, string],\n      rangeProps.onValueChange,\n    );\n\n    const input = !showControl ? (\n      <DisplayValue\n        size={size}\n        className={className}\n        interactive={interactive}\n        onActivate={enterEdit}\n      >\n        {value[0] || value[1]\n          ? `${formatDateValue(value[0], includeTime)} – ${formatDateValue(value[1], includeTime)}`\n          : \"\"}\n      </DisplayValue>\n    ) : (\n      <div\n        data-react-fancy-date-picker=\"\"\n        className={cn(\"flex items-center gap-2\", className)}\n        onBlur={(e) => {\n          if (interactive && !e.currentTarget.contains(e.relatedTarget as Node)) exitEdit();\n        }}\n      >\n        <input\n          ref={ref}\n          id={id}\n          type={inputType}\n          name={name ? `${name}_start` : undefined}\n          min={min}\n          max={value[1] || max}\n          value={value[0]}\n          disabled={disabled}\n          required={required}\n          onChange={(e) => setValue([e.target.value, value[1]])}\n          className={inputClasses}\n          autoFocus={interactive}\n        />\n        <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">to</span>\n        <input\n          type={inputType}\n          name={name ? `${name}_end` : undefined}\n          min={value[0] || min}\n          max={max}\n          value={value[1]}\n          disabled={disabled}\n          onChange={(e) => setValue([value[0], e.target.value])}\n          className={inputClasses}\n        />\n      </div>\n    );\n\n    if (label || error || description) {\n      return (\n        <Field\n          label={label}\n          labelHidden={labelHidden}\n          description={description}\n          error={error}\n          required={required}\n          htmlFor={id}\n          size={size}\n        >\n          {input}\n        </Field>\n      );\n    }\n\n    return input;\n  },\n);\n\nRangeDatePicker.displayName = \"RangeDatePicker\";\n"]}