{"version":3,"file":"index.mjs","names":["FieldName","useField","useControl","Field","FieldProps","Input","useRef","Props","Omit","name","Date","type","pad","n","toString","padStart","toDateLocalValue","date","year","getFullYear","month","getMonth","day","getDate","hours","getHours","minutes","getMinutes","fromDatetimeLocalValue","value","datePart","timePart","split","map","Number","DateField","id","forcedId","rest","field","dateInputRef","HTMLInputElement","control","defaultValue","parse","payload","Error","serialize","toISOString","register","errors","e","console","log","target","change","blur"],"sources":["../../../../src/components/fields/date/DateField.tsx"],"sourcesContent":["import { FieldName, useField, useControl } from \"@conform-to/react/future\";\nimport { Field, FieldProps } from \"../field/Field\";\nimport { Input } from \"../text/Input\";\nimport { useRef } from \"react\";\n\ninterface Props extends Omit<FieldProps, \"children\" | \"group\"> {\n  name: FieldName<Date | null | undefined>;\n  type?: \"datetime-local\" | \"date\";\n}\n\nfunction pad(n: number): string {\n  return n.toString().padStart(2, \"0\");\n}\n\nfunction toDateLocalValue(date: Date, type: \"datetime-local\" | \"date\"): string {\n  const year = date.getFullYear();\n  const month = pad(date.getMonth() + 1);\n  const day = pad(date.getDate());\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n\n  return type === \"datetime-local\"\n    ? `${year}-${month}-${day}T${hours}:${minutes}`\n    : `${year}-${month}-${day}`;\n}\n\nfunction fromDatetimeLocalValue(value: string): Date {\n  const [datePart, timePart] = value.split(\"T\");\n  const [year, month, day] = datePart.split(\"-\").map(Number);\n  const [hours, minutes] = timePart?.split(\":\").map(Number) ?? [0, 0];\n  return new Date(year, month - 1, day, hours, minutes);\n}\n\nexport function DateField({ name, type = \"datetime-local\", id: forcedId, ...rest }: Props) {\n  const field = useField(name);\n  const id = forcedId ?? field.id;\n  const dateInputRef = useRef<HTMLInputElement>(null!);\n\n  const control = useControl<Date, string>({\n    defaultValue: field.defaultValue,\n    // only for control.payload\n    parse(payload) {\n      if (typeof payload !== \"string\") {\n        throw new Error(\"date input must return string\");\n      }\n      return new Date(payload);\n    },\n    serialize(value) {\n      return value.toISOString();\n    },\n  });\n\n  return (\n    <>\n      <input type=\"text\" name={field.name} ref={control.register} hidden />\n      <Field id={id} errors={field.errors} data-testid={field.name} {...rest}>\n        <Input\n          type={type}\n          ref={dateInputRef}\n          value={control.payload ? toDateLocalValue(control.payload, type) : \"\"}\n          onChange={(e) => {\n            console.log(\"onChange\", e.target.value, fromDatetimeLocalValue(e.target.value));\n            control.change(fromDatetimeLocalValue(e.target.value));\n          }}\n          onBlur={() => control.blur()}\n        />\n      </Field>\n    </>\n  );\n}\n"],"mappings":";;;;;;AAUA,SAASY,IAAIC,GAAmB;CAC9B,OAAOA,EAAEC,SAAS,CAAC,CAACC,SAAS,GAAG,GAAG;AACrC;AAEA,SAASC,iBAAiBC,MAAYN,MAAyC;CAC7E,MAAMO,OAAOD,KAAKE,YAAY;CAC9B,MAAMC,QAAQR,IAAIK,KAAKI,SAAS,IAAI,CAAC;CACrC,MAAMC,MAAMV,IAAIK,KAAKM,QAAQ,CAAC;CAC9B,MAAMC,QAAQZ,IAAIK,KAAKQ,SAAS,CAAC;CACjC,MAAMC,UAAUd,IAAIK,KAAKU,WAAW,CAAC;CAErC,OAAOhB,SAAS,mBACZ,GAAGO,KAAI,GAAIE,MAAK,GAAIE,IAAG,GAAIE,MAAK,GAAIE,YACpC,GAAGR,KAAI,GAAIE,MAAK,GAAIE;AAC1B;AAEA,SAASM,uBAAuBC,OAAqB;CACnD,MAAM,CAACC,UAAUC,YAAYF,MAAMG,MAAM,GAAG;CAC5C,MAAM,CAACd,MAAME,OAAOE,OAAOQ,SAASE,MAAM,GAAG,CAAC,CAACC,IAAIC,MAAM;CACzD,MAAM,CAACV,OAAOE,WAAWK,UAAUC,MAAM,GAAG,CAAC,CAACC,IAAIC,MAAM,KAAK,CAAC,GAAG,CAAC;CAClE,OAAO,IAAIxB,KAAKQ,MAAME,QAAQ,GAAGE,KAAKE,OAAOE,OAAO;AACtD;AAEA,SAAgBS,UAAU,EAAE1B,MAAME,OAAO,kBAAkByB,IAAIC,UAAU,GAAGC,QAAe;CACzF,MAAMC,QAAQtC,SAASQ,IAAI;CAC3B,MAAM2B,KAAKC,YAAYE,MAAMH;CAC7B,MAAMI,eAAelC,OAAyB,IAAK;CAEnD,MAAMoC,UAAUxC,WAAyB;EACvCyC,cAAcJ,MAAMI;EAEpBC,MAAMC,SAAS;GACb,IAAI,OAAOA,YAAY,UACrB,MAAM,IAAIC,MAAM,+BAA+B;GAEjD,OAAO,IAAIpC,KAAKmC,OAAO;EACzB;EACAE,UAAUlB,OAAO;GACf,OAAOA,MAAMmB,YAAY;EAC3B;CACF,CAAC;CAED,OACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,SAAD;EAAO,MAAK;EAAO,MAAMT,MAAM9B;EAAM,KAAKiC,QAAQO;EAAU,QAAA;CAAM,CAAA,GAClE,oBAAC,OAAD;EAAWb;EAAI,QAAQG,MAAMW;EAAQ,eAAaX,MAAM9B;EAAM,GAAI6B;EAChE,UAAA,oBAAC,OAAD;GACQ3B;GACN,KAAK6B;GACL,OAAOE,QAAQG,UAAU7B,iBAAiB0B,QAAQG,SAASlC,IAAI,IAAI;GACnE,WAAWwC,MAAM;IACfC,QAAQC,IAAI,YAAYF,EAAEG,OAAOzB,OAAOD,uBAAuBuB,EAAEG,OAAOzB,KAAK,CAAC;IAC9Ea,QAAQa,OAAO3B,uBAAuBuB,EAAEG,OAAOzB,KAAK,CAAC;GACvD;GACA,cAAca,QAAQc,KAAK;EAAE,CAAA;CAE1B,CAAA,CACT,EAAA,CAAA;AAEJ"}