{"version":3,"file":"persistence.cjs","names":[],"sources":["../../src/lib/persistence.ts"],"sourcesContent":["import type { Anchor, DockMode, Position, Size } from \"./types\";\n\nexport type PersistedContextState = {\n  anchor?: Anchor;\n  anchorOffset?: Position;\n  size?: Size;\n  hasCustomPosition?: boolean;\n};\n\nexport type PersistedState = {\n  button?: Omit<PersistedContextState, \"size\">;\n  window?: PersistedContextState;\n  isOpen?: boolean;\n  dockMode?: DockMode;\n  selectedMenu?: string;\n  selectedContext?: string;\n};\n\nexport function loadInspectorState(storageKey: string): PersistedState | null {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n\n  const raw = window.localStorage.getItem(storageKey);\n  if (raw) {\n    try {\n      const parsed = JSON.parse(raw);\n      if (parsed && typeof parsed === \"object\") {\n        return parsed as PersistedState;\n      }\n    } catch {\n      // Fall through to cookie migration path\n    }\n  }\n\n  // Backwards compatibility: try to read the legacy cookie and migrate it\n  if (typeof document !== \"undefined\") {\n    const prefix = `${storageKey}=`;\n    const entry = document.cookie\n      .split(\"; \")\n      .find((cookie) => cookie.startsWith(prefix));\n    if (entry) {\n      const legacyRaw = entry.substring(prefix.length);\n      try {\n        const parsed = JSON.parse(decodeURIComponent(legacyRaw));\n        if (parsed && typeof parsed === \"object\") {\n          return parsed as PersistedState;\n        }\n      } catch {\n        return null;\n      }\n    }\n  }\n\n  return null;\n}\n\nexport function saveInspectorState(\n  storageKey: string,\n  state: PersistedState,\n): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n\n  try {\n    window.localStorage.setItem(storageKey, JSON.stringify(state));\n  } catch (error) {\n    console.warn(\"Failed to persist inspector state\", error);\n  }\n}\n\nexport function isValidAnchor(value: unknown): value is Anchor {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as Anchor;\n  return (\n    (candidate.horizontal === \"left\" || candidate.horizontal === \"right\") &&\n    (candidate.vertical === \"top\" || candidate.vertical === \"bottom\")\n  );\n}\n\nexport function isValidPosition(value: unknown): value is Position {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as Position;\n  return isFiniteNumber(candidate.x) && isFiniteNumber(candidate.y);\n}\n\nexport function isValidSize(value: unknown): value is Size {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as Size;\n  return isFiniteNumber(candidate.width) && isFiniteNumber(candidate.height);\n}\n\nexport function isFiniteNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function isValidDockMode(value: unknown): value is DockMode {\n  return value === \"floating\" || value === \"docked-left\";\n}\n"],"mappings":";;AAkBA,SAAgB,mBAAmB,YAA2C;AAC5E,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,MAAM,OAAO,aAAa,QAAQ,WAAW;AACnD,KAAI,IACF,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,MAAI,UAAU,OAAO,WAAW,SAC9B,QAAO;SAEH;AAMV,KAAI,OAAO,aAAa,aAAa;EACnC,MAAM,SAAS,GAAG,WAAW;EAC7B,MAAM,QAAQ,SAAS,OACpB,MAAM,KAAK,CACX,MAAM,WAAW,OAAO,WAAW,OAAO,CAAC;AAC9C,MAAI,OAAO;GACT,MAAM,YAAY,MAAM,UAAU,OAAO,OAAO;AAChD,OAAI;IACF,MAAM,SAAS,KAAK,MAAM,mBAAmB,UAAU,CAAC;AACxD,QAAI,UAAU,OAAO,WAAW,SAC9B,QAAO;WAEH;AACN,WAAO;;;;AAKb,QAAO;;AAGT,SAAgB,mBACd,YACA,OACM;AACN,KAAI,OAAO,WAAW,YACpB;AAGF,KAAI;AACF,SAAO,aAAa,QAAQ,YAAY,KAAK,UAAU,MAAM,CAAC;UACvD,OAAO;AACd,UAAQ,KAAK,qCAAqC,MAAM;;;AAI5D,SAAgB,cAAc,OAAiC;AAC7D,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAGT,MAAM,YAAY;AAClB,SACG,UAAU,eAAe,UAAU,UAAU,eAAe,aAC5D,UAAU,aAAa,SAAS,UAAU,aAAa;;AAI5D,SAAgB,gBAAgB,OAAmC;AACjE,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAGT,MAAM,YAAY;AAClB,QAAO,eAAe,UAAU,EAAE,IAAI,eAAe,UAAU,EAAE;;AAGnE,SAAgB,YAAY,OAA+B;AACzD,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAGT,MAAM,YAAY;AAClB,QAAO,eAAe,UAAU,MAAM,IAAI,eAAe,UAAU,OAAO;;AAG5E,SAAgB,eAAe,OAAiC;AAC9D,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM;;AAG5D,SAAgB,gBAAgB,OAAmC;AACjE,QAAO,UAAU,cAAc,UAAU"}