{"version":3,"file":"pageVisibility.mjs","sources":["../../src/pageVisibility.ts"],"sourcesContent":["import type { Socket } from \"phoenix\";\n\nconst DEFAULT_DISCONNECT_DELAY_MS = 30_000;\n\n/**\n * Disconnects the socket after a delay when the page becomes hidden,\n * and reconnects when it becomes visible again. This avoids holding\n * open connections for background tabs that aren't being viewed.\n *\n * The delay prevents unnecessary disconnects during brief tab switches.\n * Phoenix channels automatically rejoin after reconnecting.\n */\nexport class PageVisibilityManager {\n  private disconnectTimer: ReturnType<typeof setTimeout> | null = null;\n  private wasConnected = false;\n\n  constructor(\n    private socket: Socket,\n    private disconnectDelayMs: number = DEFAULT_DISCONNECT_DELAY_MS,\n  ) {\n    if (typeof document !== \"undefined\") {\n      document.addEventListener(\"visibilitychange\", this.onVisibilityChange);\n    }\n  }\n\n  private onVisibilityChange = () => {\n    if (document.hidden) {\n      this.scheduleDisconnect();\n    } else {\n      this.reconnect();\n    }\n  };\n\n  private scheduleDisconnect() {\n    this.clearTimer();\n\n    this.disconnectTimer = setTimeout(() => {\n      this.disconnectTimer = null;\n\n      if (this.socket.isConnected()) {\n        this.wasConnected = true;\n        this.socket.disconnect();\n      }\n    }, this.disconnectDelayMs);\n  }\n\n  private reconnect() {\n    this.clearTimer();\n\n    if (this.wasConnected) {\n      this.wasConnected = false;\n      this.socket.connect();\n    }\n  }\n\n  private clearTimer() {\n    if (this.disconnectTimer) {\n      clearTimeout(this.disconnectTimer);\n      this.disconnectTimer = null;\n    }\n  }\n\n  teardown() {\n    this.clearTimer();\n\n    if (typeof document !== \"undefined\") {\n      document.removeEventListener(\"visibilitychange\", this.onVisibilityChange);\n    }\n  }\n}\n"],"names":["PageVisibilityManager","socket","disconnectDelayMs","__publicField"],"mappings":";;;AAYO,MAAMA,EAAsB;AAAA,EAIjC,YACUC,GACAC,IAA4B,KACpC;AANM,IAAAC,EAAA,yBAAwD;AACxD,IAAAA,EAAA,sBAAe;AAWf,IAAAA,EAAA,4BAAqB,MAAM;AACjC,MAAI,SAAS,SACX,KAAK,mBAAmB,IAExB,KAAK,UAAU;AAAA,IAEnB;AAdU,SAAA,SAAAF,GACA,KAAA,oBAAAC,GAEJ,OAAO,WAAa,OACb,SAAA,iBAAiB,oBAAoB,KAAK,kBAAkB;AAAA,EACvE;AAAA,EAWM,qBAAqB;AAC3B,SAAK,WAAW,GAEX,KAAA,kBAAkB,WAAW,MAAM;AACtC,WAAK,kBAAkB,MAEnB,KAAK,OAAO,kBACd,KAAK,eAAe,IACpB,KAAK,OAAO,WAAW;AAAA,IACzB,GACC,KAAK,iBAAiB;AAAA,EAAA;AAAA,EAGnB,YAAY;AAClB,SAAK,WAAW,GAEZ,KAAK,iBACP,KAAK,eAAe,IACpB,KAAK,OAAO,QAAQ;AAAA,EACtB;AAAA,EAGM,aAAa;AACnB,IAAI,KAAK,oBACP,aAAa,KAAK,eAAe,GACjC,KAAK,kBAAkB;AAAA,EACzB;AAAA,EAGF,WAAW;AACT,SAAK,WAAW,GAEZ,OAAO,WAAa,OACb,SAAA,oBAAoB,oBAAoB,KAAK,kBAAkB;AAAA,EAC1E;AAEJ;"}