{"version":3,"file":"index.mjs","names":["#dispose"],"sources":["../src/controller.ts","../src/watcher.ts"],"sourcesContent":["import type { ReactiveController, ReactiveElement } from 'lit'\nimport { effect, effectScope } from 'alien-signals'\n\n/**\n * A Lit ReactiveController that manually tracks specific alien-signals\n * and requests a host update when any of the tracked signals change.\n */\nexport class SignalTrackingController implements ReactiveController {\n  #dispose: (() => void) | null = null\n\n  constructor(\n    private host: ReactiveElement,\n    private track: () => void,\n  ) {\n    this.host.addController(this)\n  }\n\n  hostConnected(): void {\n    this.#dispose = effectScope(() => {\n      effect(() => {\n        this.track()\n        this.host.requestUpdate()\n      })\n    })\n  }\n\n  hostDisconnected(): void {\n    this.#dispose?.()\n    this.#dispose = null\n  }\n}\n","import type { ReactiveElement } from 'lit'\nimport { effect } from 'alien-signals'\n\ntype Constructor<T> = new (...args: any[]) => T\n\n/**\n * A class mixin that adds automatic fine-grained reactive updates to any Lit ReactiveElement\n * (like LitElement) by tracking alien-signals accessed during the update/render lifecycle.\n */\nexport function SignalWatcher<T extends Constructor<ReactiveElement>>(Base: T): T {\n  abstract class SignalWatcherClass extends Base {\n    private __dispose?: () => void\n\n    override performUpdate(): void {\n      if (this.isUpdatePending === false) {\n        return\n      }\n\n      this.__dispose?.()\n\n      let updateFromLit = true\n\n      this.__dispose = effect(() => {\n        if (updateFromLit) {\n          updateFromLit = false\n          super.performUpdate()\n        }\n        else {\n          this.requestUpdate()\n        }\n      })\n    }\n\n    override connectedCallback(): void {\n      super.connectedCallback()\n      // Ensure we re-render on re-connection to capture current signal accesses\n      this.requestUpdate()\n    }\n\n    override disconnectedCallback(): void {\n      super.disconnectedCallback()\n      this.__dispose?.()\n      this.__dispose = undefined\n    }\n  }\n\n  return SignalWatcherClass as unknown as T\n}\n"],"mappings":";;;;;;AAOA,IAAa,2BAAb,MAAoE;CAIxD;CACA;CAJV,WAAgC;CAEhC,YACE,MACA,OACA;EAFQ,KAAA,OAAA;EACA,KAAA,QAAA;EAER,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAsB;EACpB,KAAKA,WAAW,kBAAkB;GAChC,aAAa;IACX,KAAK,MAAM;IACX,KAAK,KAAK,cAAc;GAC1B,CAAC;EACH,CAAC;CACH;CAEA,mBAAyB;EACvB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF;;;;;;;ACrBA,SAAgB,cAAsD,MAAY;CAChF,MAAe,2BAA2B,KAAK;EAC7C;EAEA,gBAA+B;GAC7B,IAAI,KAAK,oBAAoB,OAC3B;GAGF,KAAK,YAAY;GAEjB,IAAI,gBAAgB;GAEpB,KAAK,YAAY,aAAa;IAC5B,IAAI,eAAe;KACjB,gBAAgB;KAChB,MAAM,cAAc;IACtB,OAEE,KAAK,cAAc;GAEvB,CAAC;EACH;EAEA,oBAAmC;GACjC,MAAM,kBAAkB;GAExB,KAAK,cAAc;EACrB;EAEA,uBAAsC;GACpC,MAAM,qBAAqB;GAC3B,KAAK,YAAY;GACjB,KAAK,YAAY,KAAA;EACnB;CACF;CAEA,OAAO;AACT"}