{"version":3,"names":["onCleanup","Timeout","create","currentId","start","delay","fn","clear","setTimeout","isStarted","clearTimeout","useTimeout","timeout"],"sources":["use-timeout.ts"],"sourcesContent":["import { onCleanup } from \"solid-js\";\n\ntype TimeoutId = ReturnType<typeof setTimeout>;\n\n/**\n * Class-instance-like timeout handle with `start` / `clear` methods.\n *\n * Mirrors Base UI React's `Timeout`\n * (`@base-ui/utils/useTimeout` — `packages/utils/src/useTimeout.ts`) so\n * component ports read 1:1 against the React source.\n */\nexport class Timeout {\n\tstatic create(): Timeout {\n\t\treturn new Timeout();\n\t}\n\n\tprivate currentId: TimeoutId | null = null;\n\n\t/**\n\t * Executes `fn` after `delay` ms, clearing any previously scheduled call\n\t * from this handle. Calling `start` again cancels the prior scheduling.\n\t */\n\tstart(delay: number, fn: () => void): void {\n\t\tthis.clear();\n\t\tthis.currentId = setTimeout(() => {\n\t\t\tthis.currentId = null;\n\t\t\tfn();\n\t\t}, delay);\n\t}\n\n\tisStarted(): boolean {\n\t\treturn this.currentId !== null;\n\t}\n\n\tclear = (): void => {\n\t\tif (this.currentId !== null) {\n\t\t\tclearTimeout(this.currentId);\n\t\t\tthis.currentId = null;\n\t\t}\n\t};\n}\n\n/**\n * A `setTimeout` with automatic cleanup via `onCleanup`.\n *\n * Returns a {@link Timeout} handle whose `start(delay, fn)` schedules a\n * callback (cancelling any previously scheduled one) and whose `clear()`\n * cancels the pending callback. On disposal of the owning scope, `clear()`\n * fires automatically so outstanding timeouts don't leak.\n *\n * Solid 2 notes:\n *\n * - Must be called from an owned scope (component body, `createRoot`, etc.)\n *   so `onCleanup` has somewhere to register. Calling this at module scope\n *   would log `NO_OWNER_CLEANUP` and the cleanup would never fire.\n * - The returned object has stable identity for the scope's lifetime — safe\n *   to capture in closures.\n */\nexport function useTimeout(): Timeout {\n\tconst timeout = Timeout.create();\n\tonCleanup(timeout.clear);\n\treturn timeout;\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,UAAU;AAIpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,CAAC;EACpB,OAAOC,MAAMA,CAAA,EAAY;IACxB,OAAO,IAAID,OAAO,CAAC,CAAC;EACrB;EAEQE,SAAS,GAAqB,IAAI;;EAE1C;AACD;AACA;AACA;EACCC,KAAKA,CAACC,KAAa,EAAEC,EAAc,EAAQ;IAC1C,IAAI,CAACC,KAAK,CAAC,CAAC;IACZ,IAAI,CAACJ,SAAS,GAAGK,UAAU,CAAC,MAAM;MACjC,IAAI,CAACL,SAAS,GAAG,IAAI;MACrBG,EAAE,CAAC,CAAC;IACL,CAAC,EAAED,KAAK,CAAC;EACV;EAEAI,SAASA,CAAA,EAAY;IACpB,OAAO,IAAI,CAACN,SAAS,KAAK,IAAI;EAC/B;EAEAI,KAAK,GAAGA,CAAA,KAAY;IACnB,IAAI,IAAI,CAACJ,SAAS,KAAK,IAAI,EAAE;MAC5BO,YAAY,CAAC,IAAI,CAACP,SAAS,CAAC;MAC5B,IAAI,CAACA,SAAS,GAAG,IAAI;IACtB;EACD,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,UAAUA,CAAA,EAAY;EACrC,MAAMC,OAAO,GAAGX,OAAO,CAACC,MAAM,CAAC,CAAC;EAChCF,SAAS,CAACY,OAAO,CAACL,KAAK,CAAC;EACxB,OAAOK,OAAO;AACf","ignoreList":[]}