{"version":3,"file":"su-labs-visit-tracker.mjs","sources":["../../../../projects/su-labs/visit-tracker/src/lib/visit-tracker.service.ts","../../../../projects/su-labs/visit-tracker/src/public-api.ts","../../../../projects/su-labs/visit-tracker/src/su-labs-visit-tracker.ts"],"sourcesContent":["import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { SuVisitData, SuVisitTrackerConfig } from './visit-tracker.types';\n\n@Injectable({ providedIn: 'root' })\nexport class SuVisitTrackerService {\n  /** Key used for localStorage */\n  private storageKey = 'su:visits';\n\n  /** Milestones to track */\n  private _milestones: number[] = [10, 100];\n\n  /** Current visit count */\n  public count: WritableSignal<number> = signal(0);\n\n  /** Last visit date as ISO string */\n  public lastVisit: WritableSignal<string | null> = signal(null);\n\n  /** The number of the milestone reached on the current visit, or null */\n  public milestone: WritableSignal<number | null> = signal(null);\n\n  /** Initialize the service and update signals */\n  public init(config?: SuVisitTrackerConfig): void {\n    if (config?.storageKey) {\n      this.storageKey = config.storageKey;\n    }\n    if (config?.milestoneVisits && Array.isArray(config.milestoneVisits)) {\n      this._milestones = config.milestoneVisits.sort((a, b) => a - b);\n    }\n\n    const storedData = localStorage.getItem(this.storageKey);\n    const stored: Partial<SuVisitData> = storedData ? JSON.parse(storedData) : {};\n\n    const prevCount = stored.count ?? 0;\n    const prevDate = stored.lastVisit ?? null;\n    const newCount = prevCount + 1;\n\n    this.count.set(newCount);\n    this.lastVisit.set(prevDate);\n\n    this.updateMilestone(newCount);\n\n    localStorage.setItem(\n      this.storageKey,\n      JSON.stringify({ count: newCount, lastVisit: new Date().toISOString() }),\n    );\n  }\n\n  /** Update the milestone signal based on the current count */\n  private updateMilestone(count: number): void {\n    const reachedMilestone = this._milestones.find(m => m === count);\n    this.milestone.set(reachedMilestone ?? null);\n  }\n}\n","/*\n * Public API Surface of visit-tracker\n */\n\nexport * from './lib/visit-tracker.types';\nexport * from './lib/visit-tracker.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAIa,qBAAqB,CAAA;;IAExB,UAAU,GAAG,WAAW;;AAGxB,IAAA,WAAW,GAAa,CAAC,EAAE,EAAE,GAAG,CAAC;;AAGlC,IAAA,KAAK,GAA2B,MAAM,CAAC,CAAC,iDAAC;;AAGzC,IAAA,SAAS,GAAkC,MAAM,CAAC,IAAI,qDAAC;;AAGvD,IAAA,SAAS,GAAkC,MAAM,CAAC,IAAI,qDAAC;;AAGvD,IAAA,IAAI,CAAC,MAA6B,EAAA;AACvC,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;;AAErC,QAAA,IAAI,MAAM,EAAE,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;YACpE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;QAGjE,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AACxD,QAAA,MAAM,MAAM,GAAyB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE;AAE7E,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;AACnC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI;AACzC,QAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC;AAE9B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAE5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAE9B,YAAY,CAAC,OAAO,CAClB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CACzE;;;AAIK,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;;uGA9CnC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACHlC;;AAEG;;ACFH;;AAEG;;;;"}