{"version":3,"file":"use-uncontrolled.mjs","names":[],"sources":["../../src/use-uncontrolled/use-uncontrolled.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseUncontrolledOptions<T> {\n  /** Value for controlled state */\n  value?: T;\n\n  /** Initial value for uncontrolled state */\n  defaultValue?: T;\n\n  /** Final value for uncontrolled state when value and defaultValue are not provided */\n  finalValue?: T;\n\n  /** Controlled state onChange handler */\n  onChange?: (value: T, ...payload: any[]) => void;\n}\n\nexport type UseUncontrolledReturnValue<T> = [\n  /** Current value */\n  T,\n\n  /** Handler to update the state, passes `value` and `payload` to `onChange` */\n  (value: T, ...payload: any[]) => void,\n\n  /** True if the state is controlled, false if uncontrolled */\n  boolean,\n];\n\nexport function useUncontrolled<T>({\n  value,\n  defaultValue,\n  finalValue,\n  onChange = () => {},\n}: UseUncontrolledOptions<T>): UseUncontrolledReturnValue<T> {\n  const [uncontrolledValue, setUncontrolledValue] = useState(\n    defaultValue !== undefined ? defaultValue : finalValue\n  );\n\n  const handleUncontrolledChange = (val: T, ...payload: any[]) => {\n    setUncontrolledValue(val);\n    onChange?.(val, ...payload);\n  };\n\n  if (value !== undefined) {\n    return [value as T, onChange, true];\n  }\n\n  return [uncontrolledValue as T, handleUncontrolledChange, false];\n}\n\nexport namespace useUncontrolled {\n  export type Options<T> = UseUncontrolledOptions<T>;\n  export type ReturnValue<T> = UseUncontrolledReturnValue<T>;\n}\n"],"mappings":";;;AA2BA,SAAgB,gBAAmB,EACjC,OACA,cACA,YACA,iBAAiB,MAC0C;CAC3D,MAAM,CAAC,mBAAmB,wBAAwB,SAChD,iBAAiB,KAAA,IAAY,eAAe,WAC7C;CAED,MAAM,4BAA4B,KAAQ,GAAG,YAAmB;AAC9D,uBAAqB,IAAI;AACzB,aAAW,KAAK,GAAG,QAAQ;;AAG7B,KAAI,UAAU,KAAA,EACZ,QAAO;EAAC;EAAY;EAAU;EAAK;AAGrC,QAAO;EAAC;EAAwB;EAA0B;EAAM"}