@metricinsights/pp-dev 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/cli.js +1 -1
  2. package/dist/cjs/cli.js.map +1 -1
  3. package/dist/cjs/index-BYpGxymF.js +2 -0
  4. package/dist/cjs/index-BYpGxymF.js.map +1 -0
  5. package/dist/cjs/index.js +1 -1
  6. package/dist/cjs/package.json +1 -3
  7. package/dist/cjs/plugin-BHngnaEU.js +2 -0
  8. package/dist/cjs/plugin-BHngnaEU.js.map +1 -0
  9. package/dist/cjs/plugin.js +1 -1
  10. package/dist/cjs/version-plugin-7W1v65PU.js +2 -0
  11. package/dist/cjs/version-plugin-7W1v65PU.js.map +1 -0
  12. package/dist/client/client.css +1 -1
  13. package/dist/client/client.css.map +1 -1
  14. package/dist/client/client.js +62 -41
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/esm/cli.js +1 -1
  17. package/dist/esm/cli.js.map +1 -1
  18. package/dist/esm/index-C7yA2HV8.js +2 -0
  19. package/dist/esm/index-C7yA2HV8.js.map +1 -0
  20. package/dist/esm/index.js +1 -1
  21. package/dist/esm/package.json +1 -3
  22. package/dist/esm/plugin-FSAnUcfG.js +2 -0
  23. package/dist/esm/plugin-FSAnUcfG.js.map +1 -0
  24. package/dist/esm/plugin.js +1 -1
  25. package/dist/esm/version-plugin-CgfQOMyf.js +2 -0
  26. package/dist/esm/version-plugin-CgfQOMyf.js.map +1 -0
  27. package/dist/types/index.d.ts +6 -2
  28. package/package.json +3 -10
  29. package/dist/cjs/index-XIFH2ace.js +0 -2
  30. package/dist/cjs/index-XIFH2ace.js.map +0 -1
  31. package/dist/cjs/plugin-lLb1ogcl.js +0 -2
  32. package/dist/cjs/plugin-lLb1ogcl.js.map +0 -1
  33. package/dist/cjs/version-plugin-C0xv4wbw.js +0 -2
  34. package/dist/cjs/version-plugin-C0xv4wbw.js.map +0 -1
  35. package/dist/esm/index-BtZKQ3Ni.js +0 -2
  36. package/dist/esm/index-BtZKQ3Ni.js.map +0 -1
  37. package/dist/esm/plugin-BtTlYPNc.js +0 -2
  38. package/dist/esm/plugin-BtTlYPNc.js.map +0 -1
  39. package/dist/esm/version-plugin-7_CHPYR-.js +0 -2
  40. package/dist/esm/version-plugin-7_CHPYR-.js.map +0 -1
  41. package/scripts/patch-npm-bundled-vulnerabilities.mjs +0 -84
@@ -644,6 +644,67 @@ function initPanelSettings($panel, controller, hooks) {
644
644
  });
645
645
  }
646
646
 
647
+ const ICON_SIZE = 16;
648
+ const CLOSE_ICON_SIZE = 12;
649
+ const TYPE_ICONS = {
650
+ success: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>`,
651
+ danger: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/></svg>`,
652
+ warning: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>`,
653
+ info: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>`,
654
+ };
655
+ function createPopupElement(opts) {
656
+ const $popup = document.createElement('div');
657
+ $popup.classList.add('pp-dev-info-namespace');
658
+ const $popupContent = document.createElement('div');
659
+ $popupContent.classList.add('pp-dev-info__popup');
660
+ if (opts.type) {
661
+ $popupContent.classList.add(`pp-dev-info__popup--${opts.type}`);
662
+ }
663
+ if (opts.className) {
664
+ $popupContent.classList.add(...opts.className.split(/\s+/).filter(Boolean));
665
+ }
666
+ if (opts.style) {
667
+ $popupContent.style.cssText = opts.style;
668
+ }
669
+ const $title = document.createElement('div');
670
+ $title.classList.add('pp-dev-info__popup-title');
671
+ if (opts.type) {
672
+ const $icon = document.createElement('div');
673
+ $icon.classList.add('pp-dev-info__popup-title-icon');
674
+ $icon.innerHTML = TYPE_ICONS[opts.type];
675
+ $title.appendChild($icon);
676
+ }
677
+ const $titleText = document.createElement('div');
678
+ $titleText.classList.add('pp-dev-info__popup-title-text');
679
+ $titleText.textContent = opts.title;
680
+ const $close = document.createElement('button');
681
+ $close.type = 'button';
682
+ $close.setAttribute('aria-label', 'Close');
683
+ $close.classList.add('pp-dev-info__popup-title-close');
684
+ $close.innerHTML = `
685
+ <svg
686
+ viewBox="0 0 24 24"
687
+ width="${CLOSE_ICON_SIZE}"
688
+ height="${CLOSE_ICON_SIZE}"
689
+ stroke="currentColor"
690
+ stroke-width="1.5"
691
+ fill="none"
692
+ stroke-linecap="round"
693
+ stroke-linejoin="round"
694
+ >
695
+ <path d="M18 6L6 18"></path>
696
+ <path d="M6 6l12 12"></path>
697
+ </svg>
698
+ `;
699
+ const $content = document.createElement('div');
700
+ $content.classList.add('pp-dev-info__popup-content');
701
+ $content.textContent = opts.content;
702
+ $title.append($titleText, $close);
703
+ $popupContent.append($title, $content);
704
+ $popup.appendChild($popupContent);
705
+ return $popup;
706
+ }
707
+
647
708
  /// <reference types="vite/client" />
648
709
  // Applied unconditionally (even if the panel itself is hidden) — this is what makes the
649
710
  // override affect the whole injected panel, not just its own markup.
@@ -653,8 +714,6 @@ const POPUP_HEIGHT = 100;
653
714
  const ANIMATION_DURATION = 300;
654
715
  const CONFIRM_MODAL_OVERLAY_CLASS = 'pp-dev-info__confirm-overlay';
655
716
  const activeConfirmModals = new Map();
656
- const ICON_SIZE = 16;
657
- const CLOSE_ICON_SIZE = 12;
658
717
  function teardownConfirmModal(overlay, result) {
659
718
  const entry = activeConfirmModals.get(overlay);
660
719
  if (!entry) {
@@ -665,44 +724,6 @@ function teardownConfirmModal(overlay, result) {
665
724
  overlay.remove();
666
725
  entry.resolve(result);
667
726
  }
668
- const TYPE_ICONS = {
669
- success: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>`,
670
- danger: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 8v4"/><path d="M12 16h.01"/></svg>`,
671
- warning: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>`,
672
- info: `<svg viewBox="0 0 24 24" width="${ICON_SIZE}" height="${ICON_SIZE}" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>`,
673
- };
674
- function createPopupElement(opts) {
675
- const $popup = document.createElement('div');
676
- $popup.classList.add('pp-dev-info-namespace');
677
- const typeClass = opts.type ? `pp-dev-info__popup--${opts.type}` : '';
678
- const iconHtml = opts.type ? `<div class="pp-dev-info__popup-title-icon">${TYPE_ICONS[opts.type]}</div>` : '';
679
- const template = `
680
- <div class="pp-dev-info__popup ${typeClass} ${opts.className || ''}" style="${opts.style || ''}">
681
- <div class="pp-dev-info__popup-title">
682
- ${iconHtml}
683
- <div class="pp-dev-info__popup-title-text">${opts.title}</div>
684
- <div class="pp-dev-info__popup-title-close">
685
- <svg
686
- viewBox="0 0 24 24"
687
- width="${CLOSE_ICON_SIZE}"
688
- height="${CLOSE_ICON_SIZE}"
689
- stroke="currentColor"
690
- stroke-width="1.5"
691
- fill="none"
692
- stroke-linecap="round"
693
- stroke-linejoin="round"
694
- >
695
- <path d="M18 6L6 18"></path>
696
- <path d="M6 6l12 12"></path>
697
- </svg>
698
- </div>
699
- </div>
700
- <div class="pp-dev-info__popup-content">${opts.content}</div>
701
- </div>
702
- `;
703
- $popup.innerHTML = template;
704
- return $popup;
705
- }
706
727
  let panelController = null;
707
728
  let startReloadVariablesFlow = null;
708
729
  let pendingReloadVariablesPopup = null;
@@ -981,7 +1002,7 @@ if (hot) {
981
1002
  else if ('syncedAt' in payload && typeof payload.syncedAt !== 'undefined') {
982
1003
  infoPopup({
983
1004
  title: 'Sync success',
984
- content: `Synced at ${new Date(payload.syncedAt).toLocaleString()}.<br />Backup filename: ${payload.backupFilename}`,
1005
+ content: `Synced at ${new Date(payload.syncedAt).toLocaleString()}.\nBackup filename: ${payload.backupFilename}`,
985
1006
  type: 'success',
986
1007
  });
987
1008
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../../src/client/hot-context.ts","../../src/client/storage.ts","../../src/client/panel-state.ts","../../src/client/panel-position.ts","../../src/client/theme.ts","../../src/client/panel-settings.ts","../../src/client/index.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\nimport type { ViteHotContext } from 'vite/types/hot.js';\n\n/**\n * Minimal `import.meta.hot`-compatible context for environments without Vite HMR\n * (e.g. the `pp-dev next` server). The dev-panel client only uses `hot.on()` and\n * `hot.send()`; this shim implements those over a raw WebSocket using the same\n * custom-event wire shape Vite uses: `{ type: 'custom', event, data }`.\n *\n * Used only as a fallback: when `import.meta.hot` exists (Vite), that is used\n * instead and this code never runs.\n */\n\n/**\n * WebSocket path the pp-dev Next.js server listens on for dev-panel messages.\n * Kept in sync with `PP_DEV_HMR_WS_PATH` in `src/constants.ts` (server side).\n */\nconst PP_DEV_HMR_WS_PATH = '/@pp-dev-hmr';\n\ntype CustomMessage = { type: 'custom'; event: string; data?: unknown };\n\ntype Handler = (payload: any) => void;\n\nconst MAX_OUTBOX_SIZE = 50;\n\nfunction resolveWebSocketUrl(): string {\n const { protocol, host } = window.location;\n const wsProtocol = protocol === 'https:' ? 'wss:' : 'ws:';\n\n return `${wsProtocol}//${host}${PP_DEV_HMR_WS_PATH}`;\n}\n\nexport function createPPDevHotContext(): ViteHotContext {\n const handlers = new Map<string, Set<Handler>>();\n /** Outgoing messages queued while the socket is not OPEN; flushed on connect. */\n const outbox: string[] = [];\n\n let socket: WebSocket | null = null;\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n let reconnectDelay = 1_000;\n const MAX_RECONNECT_DELAY = 10_000;\n\n const flushOutbox = () => {\n if (!socket || socket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n while (outbox.length > 0) {\n socket.send(outbox.shift()!);\n }\n };\n\n const dispatch = (event: string, data: unknown) => {\n const eventHandlers = handlers.get(event);\n\n if (!eventHandlers) {\n return;\n }\n\n for (const handler of eventHandlers) {\n try {\n handler(data);\n } catch (err) {\n // A failing handler must not break dispatch to the others.\n console.error(`[pp-dev] hot handler for \"${event}\" failed`, err);\n }\n }\n };\n\n const connect = () => {\n try {\n socket = new WebSocket(resolveWebSocketUrl());\n } catch (err) {\n console.error('[pp-dev] failed to open dev-panel WebSocket', err);\n scheduleReconnect();\n\n return;\n }\n\n socket.addEventListener('open', () => {\n reconnectDelay = 1_000;\n flushOutbox();\n });\n\n socket.addEventListener('message', (ev) => {\n let message: CustomMessage;\n\n try {\n message = JSON.parse(typeof ev.data === 'string' ? ev.data : '');\n } catch {\n return;\n }\n\n if (message && message.type === 'custom' && typeof message.event === 'string') {\n dispatch(message.event, message.data);\n }\n });\n\n socket.addEventListener('close', () => {\n socket = null;\n scheduleReconnect();\n });\n\n socket.addEventListener('error', () => {\n // `close` follows `error`; reconnect is scheduled there.\n socket?.close();\n });\n };\n\n const scheduleReconnect = () => {\n if (reconnectTimer) {\n return;\n }\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n reconnectDelay = Math.min(reconnectDelay * 2, MAX_RECONNECT_DELAY);\n connect();\n }, reconnectDelay);\n };\n\n connect();\n\n const noop = () => {};\n\n const context: Pick<ViteHotContext, 'on' | 'off' | 'send'> & Partial<ViteHotContext> = {\n on(event, cb) {\n let set = handlers.get(event);\n\n if (!set) {\n set = new Set();\n handlers.set(event, set);\n }\n\n set.add(cb as Handler);\n },\n off(event, cb) {\n handlers.get(event)?.delete(cb as Handler);\n },\n send(event, data) {\n const payload = JSON.stringify({ type: 'custom', event, data } satisfies CustomMessage);\n\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(payload);\n } else {\n if (outbox.length >= MAX_OUTBOX_SIZE) {\n outbox.shift();\n }\n\n outbox.push(payload);\n }\n },\n // Unused by the dev-panel client; provided as no-ops to satisfy the shape.\n accept: noop as ViteHotContext['accept'],\n acceptExports: noop as ViteHotContext['acceptExports'],\n dispose: noop,\n prune: noop,\n invalidate: noop,\n data: {},\n };\n\n return context as ViteHotContext;\n}\n","// localStorage helpers guarded against environments where storage is unavailable\n// (e.g. sandboxed iframes). Keys follow the original `pp-dev-info-closed` naming.\n\nexport const STORAGE_KEYS = {\n closed: 'pp-dev-info-closed',\n position: 'pp-dev-info-position',\n autoHide: 'pp-dev-info-auto-hide',\n hidden: 'pp-dev-info-hidden',\n /** Shared with the standalone Inspector/Variables Editor pages — same key, same values. */\n theme: 'pp-dev-info-theme',\n} as const;\n\nexport function checkLocalStorage() {\n try {\n localStorage.setItem('test', 'test');\n localStorage.removeItem('test');\n\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function setStorageItem(key: string, value: string) {\n if (checkLocalStorage()) {\n localStorage.setItem(key, value);\n }\n}\n\nexport function getStorageItem(key: string) {\n if (checkLocalStorage()) {\n return localStorage.getItem(key);\n }\n\n return null;\n}\n\nexport function removeStorageItem(key: string) {\n if (checkLocalStorage()) {\n localStorage.removeItem(key);\n }\n}\n","import { STORAGE_KEYS, getStorageItem, setStorageItem, removeStorageItem } from './storage.js';\n\nexport type Corner = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport const CORNERS: readonly Corner[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\nexport interface PanelState {\n position: Corner;\n autoHide: boolean;\n hidden: boolean;\n}\n\nexport interface PanelStateController {\n getState(): PanelState;\n setPosition(corner: Corner): void;\n setAutoHide(on: boolean): void;\n setHidden(on: boolean): void;\n /** Clear all persisted overrides and re-resolve from the server-rendered config. */\n reset(): void;\n onChange(cb: (state: PanelState) => void): void;\n}\n\nconst POSITION_CLASS_PREFIX = 'pp-dev-info--';\nconst AUTO_HIDE_CLASS = 'pp-dev-info--auto-hide';\nconst HIDDEN_CLASS = 'pp-dev-info--hidden';\nconst CLOSED_CLASS = 'closed';\nconst NO_TRANSITION_CLASS = 'is-dragging';\n\nexport function isCorner(value: unknown): value is Corner {\n return typeof value === 'string' && (CORNERS as readonly string[]).includes(value);\n}\n\nfunction stateFromDataAttrs($panel: HTMLElement): PanelState {\n return {\n position: isCorner($panel.dataset.position) ? $panel.dataset.position : 'bottom-right',\n autoHide: $panel.dataset.autoHide === 'true',\n hidden: $panel.dataset.hidden === 'true',\n };\n}\n\n/**\n * Resolve the effective panel state. Precedence per setting:\n * localStorage (runtime user choice) → data-* attribute (config) → built-in default.\n * The `?pp-dev-panel=show|hide` URL param writes a persistent localStorage override\n * before resolution, so it both restores a hidden panel and survives reloads.\n */\nexport function resolvePanelState($panel: HTMLElement): PanelState {\n const param = new URLSearchParams(window.location.search).get('pp-dev-panel');\n\n if (param === 'show') {\n setStorageItem(STORAGE_KEYS.hidden, 'false');\n } else if (param === 'hide') {\n setStorageItem(STORAGE_KEYS.hidden, 'true');\n }\n\n const defaults = stateFromDataAttrs($panel);\n\n const storedPosition = getStorageItem(STORAGE_KEYS.position);\n const storedAutoHide = getStorageItem(STORAGE_KEYS.autoHide);\n const storedHidden = getStorageItem(STORAGE_KEYS.hidden);\n\n return {\n position: isCorner(storedPosition) ? storedPosition : defaults.position,\n autoHide: storedAutoHide !== null ? storedAutoHide === 'true' : defaults.autoHide,\n hidden: storedHidden !== null ? storedHidden === 'true' : defaults.hidden,\n };\n}\n\nexport function applyPanelState($panel: HTMLElement, state: PanelState, opts?: { instant?: boolean }): void {\n const apply = () => {\n for (const corner of CORNERS) {\n $panel.classList.toggle(POSITION_CLASS_PREFIX + corner, corner === state.position);\n }\n\n $panel.classList.toggle(AUTO_HIDE_CLASS, state.autoHide);\n $panel.classList.toggle(HIDDEN_CLASS, state.hidden);\n };\n\n if (opts?.instant) {\n // No-transition guard: when localStorage differs from the server-rendered corner,\n // the panel must not visibly slide across the screen on load. `is-dragging`\n // disables transitions; a reflow makes the class swap land before it is removed.\n $panel.classList.add(NO_TRANSITION_CLASS);\n apply();\n void $panel.offsetWidth;\n\n const unlock = () => $panel.classList.remove(NO_TRANSITION_CLASS);\n\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(unlock);\n } else {\n setTimeout(unlock, 0);\n }\n } else {\n apply();\n }\n}\n\nfunction clearClosed($panel: HTMLElement): void {\n $panel.classList.remove(CLOSED_CLASS);\n $panel.querySelector('.pp-dev-info__wrap-btn svg')?.classList.remove(CLOSED_CLASS);\n removeStorageItem(STORAGE_KEYS.closed);\n}\n\nexport function createPanelStateController($panel: HTMLElement): PanelStateController {\n let state = resolvePanelState($panel);\n const listeners: Array<(s: PanelState) => void> = [];\n\n if (state.autoHide) {\n // Auto-hide and minimize are mutually exclusive; a stale persisted `closed`\n // state must not combine with the auto-hide transform.\n clearClosed($panel);\n }\n\n applyPanelState($panel, state, { instant: true });\n\n const commit = () => {\n applyPanelState($panel, state);\n\n for (const cb of listeners) {\n cb(state);\n }\n };\n\n return {\n getState: () => state,\n\n setPosition(corner) {\n state = { ...state, position: corner };\n setStorageItem(STORAGE_KEYS.position, corner);\n commit();\n },\n\n setAutoHide(on) {\n state = { ...state, autoHide: on };\n setStorageItem(STORAGE_KEYS.autoHide, String(on));\n\n if (on) {\n clearClosed($panel);\n }\n\n commit();\n },\n\n setHidden(on) {\n state = { ...state, hidden: on };\n setStorageItem(STORAGE_KEYS.hidden, String(on));\n commit();\n },\n\n reset() {\n removeStorageItem(STORAGE_KEYS.position);\n removeStorageItem(STORAGE_KEYS.autoHide);\n removeStorageItem(STORAGE_KEYS.hidden);\n clearClosed($panel);\n\n // Re-resolve purely from the server-rendered config (bypass the URL param,\n // which would immediately re-write its localStorage override).\n state = stateFromDataAttrs($panel);\n commit();\n },\n\n onChange(cb) {\n listeners.push(cb);\n },\n };\n}\n","import type { Corner } from './panel-state.js';\n\nexport const AUTO_HIDE_SHOW_DELAY = 300;\nexport const AUTO_HIDE_HIDE_DELAY = 500;\n\nconst PEEKING_CLASS = 'is-peeking';\nconst DRAGGING_CLASS = 'is-dragging';\n\n/** Nearest screen corner for a viewport point; ties resolve toward bottom-right. */\nexport function nearestCorner(x: number, y: number, viewportWidth: number, viewportHeight: number): Corner {\n const left = x < viewportWidth / 2;\n const top = y < viewportHeight / 2;\n\n if (top) {\n return left ? 'top-left' : 'top-right';\n }\n\n return left ? 'bottom-left' : 'bottom-right';\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Drag the panel by its handle and snap to the nearest corner on release.\n * Pointer capture keeps the drag tracking over iframes and outside the window.\n */\nexport function initDrag($panel: HTMLElement, $handle: HTMLElement, onSnap: (corner: Corner) => void): void {\n let dragging = false;\n let pointerId = -1;\n let offsetX = 0;\n let offsetY = 0;\n let panelWidth = 0;\n let panelHeight = 0;\n\n const onKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') {\n stop(false);\n }\n };\n\n const stop = (snap: boolean, ev?: PointerEvent) => {\n if (!dragging) {\n return;\n }\n\n dragging = false;\n\n try {\n $handle.releasePointerCapture(pointerId);\n } catch {\n // pointer already released\n }\n\n document.body.style.userSelect = '';\n document.removeEventListener('keydown', onKeyDown, true);\n\n // Re-enable transitions before clearing the inline placement so the snap animates.\n $panel.classList.remove(DRAGGING_CLASS);\n $panel.style.left = '';\n $panel.style.top = '';\n $panel.style.right = '';\n $panel.style.bottom = '';\n $panel.style.transform = '';\n\n if (snap && ev) {\n onSnap(nearestCorner(ev.clientX, ev.clientY, window.innerWidth, window.innerHeight));\n }\n };\n\n const moveTo = (ev: PointerEvent) => {\n const x = clamp(ev.clientX - offsetX, 0, Math.max(0, window.innerWidth - panelWidth));\n const y = clamp(ev.clientY - offsetY, 0, Math.max(0, window.innerHeight - panelHeight));\n\n $panel.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n };\n\n $handle.addEventListener('pointerdown', (ev: PointerEvent) => {\n if (ev.pointerType === 'mouse' && ev.button !== 0) {\n return;\n }\n\n const rect = $panel.getBoundingClientRect();\n\n dragging = true;\n pointerId = ev.pointerId;\n offsetX = ev.clientX - rect.left;\n offsetY = ev.clientY - rect.top;\n panelWidth = rect.width;\n panelHeight = rect.height;\n\n $handle.setPointerCapture(ev.pointerId);\n $panel.classList.add(DRAGGING_CLASS);\n\n // Anchor to the top-left origin so translate3d coordinates are viewport-absolute;\n // inline styles override the corner-class placement for the duration of the drag.\n $panel.style.left = '0';\n $panel.style.top = '0';\n $panel.style.right = 'auto';\n $panel.style.bottom = 'auto';\n\n moveTo(ev);\n\n document.body.style.userSelect = 'none';\n document.addEventListener('keydown', onKeyDown, true);\n ev.preventDefault();\n });\n\n $handle.addEventListener('pointermove', (ev: PointerEvent) => {\n if (dragging) {\n moveTo(ev);\n }\n });\n\n $handle.addEventListener('pointerup', (ev: PointerEvent) => stop(true, ev));\n $handle.addEventListener('pointercancel', () => stop(false));\n}\n\nexport interface AutoHideHandle {\n /** Force the panel to stay revealed (e.g. while the settings popover is open). */\n keepPeeked(on: boolean): void;\n}\n\n/**\n * Hover-reveal behavior for the auto-hide mode: pointer over the exposed strip for\n * AUTO_HIDE_SHOW_DELAY slides the panel out; leaving re-hides it after a grace period.\n * Keyboard focus inside the panel also keeps it revealed.\n */\nexport function initAutoHide($panel: HTMLElement, isActive: () => boolean): AutoHideHandle {\n let showTimer: number | undefined;\n let hideTimer: number | undefined;\n let popoverOpen = false;\n\n const shouldStayPeeked = () =>\n popoverOpen || $panel.matches(':focus-within') || $panel.classList.contains(DRAGGING_CLASS);\n\n const scheduleHide = () => {\n window.clearTimeout(hideTimer);\n hideTimer = window.setTimeout(() => {\n if (!shouldStayPeeked() && !$panel.matches(':hover')) {\n $panel.classList.remove(PEEKING_CLASS);\n }\n }, AUTO_HIDE_HIDE_DELAY);\n };\n\n $panel.addEventListener('pointerenter', () => {\n if (!isActive()) {\n return;\n }\n\n window.clearTimeout(hideTimer);\n showTimer = window.setTimeout(() => $panel.classList.add(PEEKING_CLASS), AUTO_HIDE_SHOW_DELAY);\n });\n\n $panel.addEventListener('pointerleave', () => {\n if (!isActive()) {\n return;\n }\n\n window.clearTimeout(showTimer);\n scheduleHide();\n });\n\n $panel.addEventListener('focusin', () => {\n if (isActive()) {\n window.clearTimeout(hideTimer);\n $panel.classList.add(PEEKING_CLASS);\n }\n });\n\n $panel.addEventListener('focusout', () => {\n if (isActive()) {\n scheduleHide();\n }\n });\n\n return {\n keepPeeked(on: boolean) {\n popoverOpen = on;\n\n if (!isActive()) {\n return;\n }\n\n if (on) {\n window.clearTimeout(showTimer);\n window.clearTimeout(hideTimer);\n $panel.classList.add(PEEKING_CLASS);\n } else {\n scheduleHide();\n }\n },\n };\n}\n","// Theme override (Auto/Dark/Light), shared across the dev panel and the standalone\n// Inspector/Variables Editor pages via the same localStorage key (see STORAGE_KEYS.theme) and\n// the same `data-pp-dev-theme` attribute convention (prefixed to avoid colliding with a host\n// Portal Page's own theme attribute, since the panel is injected into pages pp-dev doesn't own).\nimport { STORAGE_KEYS, getStorageItem, setStorageItem } from './storage.js';\n\nexport type ThemeChoice = 'auto' | 'dark' | 'light';\n\nconst THEME_ATTR = 'data-pp-dev-theme';\n\nexport function getStoredTheme(): ThemeChoice {\n const value = getStorageItem(STORAGE_KEYS.theme);\n\n return value === 'dark' || value === 'light' ? value : 'auto';\n}\n\nexport function applyTheme(theme: ThemeChoice): void {\n if (theme === 'dark' || theme === 'light') {\n document.documentElement.setAttribute(THEME_ATTR, theme);\n } else {\n document.documentElement.removeAttribute(THEME_ATTR);\n }\n}\n\nexport function setTheme(theme: ThemeChoice): void {\n setStorageItem(STORAGE_KEYS.theme, theme);\n applyTheme(theme);\n}\n\n/** Call once on page load to apply whatever was last chosen (defaults to 'auto', a no-op). */\nexport function initTheme(): void {\n applyTheme(getStoredTheme());\n}\n","import type { Corner, PanelStateController } from './panel-state.js';\nimport { CORNERS } from './panel-state.js';\nimport { getStoredTheme, setTheme, type ThemeChoice } from './theme.js';\n\nconst CORNER_TITLES: Record<Corner, string> = {\n 'top-left': 'Top left',\n 'top-right': 'Top right',\n 'bottom-left': 'Bottom left',\n 'bottom-right': 'Bottom right',\n};\n\nconst THEME_CHOICES: ThemeChoice[] = ['auto', 'dark', 'light'];\nconst THEME_LABELS: Record<ThemeChoice, string> = { auto: 'Auto', dark: 'Dark', light: 'Light' };\n\nfunction buildPopover(controller: PanelStateController, showPageVariablesGroup: boolean): HTMLDivElement {\n const state = controller.getState();\n const $popover = document.createElement('div');\n\n $popover.classList.add('pp-dev-info__settings');\n\n const cornerButtons = CORNERS.map((corner) => {\n const active = corner === state.position ? ' active' : '';\n\n return `<button type=\"button\" class=\"pp-dev-info__corner-btn pp-dev-info__corner-btn--${corner}${active}\" data-corner=\"${corner}\" title=\"${CORNER_TITLES[corner]}\" aria-pressed=\"${corner === state.position}\"></button>`;\n }).join('');\n\n const currentTheme = getStoredTheme();\n const themeButtons = THEME_CHOICES.map((choice) => {\n const active = choice === currentTheme ? ' active' : '';\n\n return `<button type=\"button\" class=\"pp-dev-info__theme-btn${active}\" data-theme-choice=\"${choice}\" aria-pressed=\"${choice === currentTheme}\">${THEME_LABELS[choice]}</button>`;\n }).join('');\n\n const pageVariablesRow = showPageVariablesGroup\n ? `\n <div class=\"pp-dev-info__settings-group\">\n <span class=\"pp-dev-info__settings-label\">Page variables</span>\n <div class=\"pp-dev-info__vars-buttons\" role=\"group\" aria-label=\"Page variables\">\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__reload-vars-btn\" title=\"Refetch live values from MI now, then reload the page\">Reload variables</button>\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__open-editor-btn\">Open variables editor…</button>\n </div>\n </div>`\n : '';\n\n $popover.innerHTML = `\n <div class=\"pp-dev-info__settings-title\">Panel settings</div>\n <div class=\"pp-dev-info__settings-row\">\n <span class=\"pp-dev-info__settings-label\">Position</span>\n <div class=\"pp-dev-info__corner-grid\">${cornerButtons}</div>\n </div>\n <div class=\"pp-dev-info__settings-row\">\n <label class=\"pp-dev-info__settings-label\" for=\"pp-dev-auto-hide-toggle\">Auto-hide</label>\n <input\n type=\"checkbox\"\n id=\"pp-dev-auto-hide-toggle\"\n class=\"pp-dev-info__settings-toggle\"\n ${state.autoHide ? 'checked' : ''}\n />\n </div>\n <div class=\"pp-dev-info__settings-row\">\n <span class=\"pp-dev-info__settings-label\">Theme</span>\n <div class=\"pp-dev-info__theme-grid\" role=\"group\" aria-label=\"Theme\">${themeButtons}</div>\n </div>\n ${pageVariablesRow}\n <div class=\"pp-dev-info__settings-group\">\n <span class=\"pp-dev-info__settings-label\">Dev tools</span>\n <div class=\"pp-dev-info__vars-buttons\" role=\"group\" aria-label=\"Dev tools\">\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__open-inspector-btn\">Open request inspector…</button>\n </div>\n </div>\n <button type=\"button\" class=\"pp-dev-info__settings-hide-btn\">Hide panel</button>\n <div class=\"pp-dev-info__settings-hint\">Restore with <code>?pp-dev-panel=show</code> in the URL</div>\n <span class=\"pp-dev-info__settings-reset\" role=\"button\" tabindex=\"0\">Reset to config defaults</span>\n `;\n\n return $popover;\n}\n\nfunction syncPopover($popover: HTMLDivElement, controller: PanelStateController): void {\n const state = controller.getState();\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__corner-btn').forEach(($btn) => {\n const active = $btn.dataset.corner === state.position;\n\n $btn.classList.toggle('active', active);\n $btn.setAttribute('aria-pressed', String(active));\n });\n\n const $toggle = $popover.querySelector<HTMLInputElement>('.pp-dev-info__settings-toggle');\n\n if ($toggle) {\n $toggle.checked = state.autoHide;\n }\n}\n\nexport interface PanelSettingsHooks {\n onOpenChange?: (open: boolean) => void;\n onOpenVariablesEditorClick?: () => void;\n onOpenInspectorClick?: () => void;\n onReloadVariablesClick?: () => void;\n}\n\n/** Settings popover: corner picker, auto-hide toggle, hide button, reset. */\nexport function initPanelSettings(\n $panel: HTMLElement,\n controller: PanelStateController,\n hooks?: PanelSettingsHooks,\n): void {\n const $btn = $panel.querySelector<HTMLButtonElement>('.pp-dev-info__settings-btn');\n\n if (!$btn) {\n return;\n }\n\n let $popover: HTMLDivElement | null = null;\n\n const onDocClick = (ev: MouseEvent) => {\n const target = ev.target as Node;\n\n if ($popover && !$popover.contains(target) && !$btn.contains(target)) {\n close();\n }\n };\n\n const onKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') {\n close();\n }\n };\n\n const close = () => {\n if (!$popover) {\n return;\n }\n\n $popover.remove();\n $popover = null;\n document.removeEventListener('click', onDocClick, true);\n document.removeEventListener('keydown', onKeyDown, true);\n hooks?.onOpenChange?.(false);\n };\n\n const open = () => {\n const showPageVariablesGroup = $panel.dataset.templateLess !== 'true';\n\n $popover = buildPopover(controller, showPageVariablesGroup);\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__corner-btn').forEach(($cornerBtn) => {\n $cornerBtn.addEventListener('click', (ev) => {\n ev.preventDefault();\n controller.setPosition($cornerBtn.dataset.corner as Corner);\n });\n });\n\n $popover.querySelector<HTMLInputElement>('.pp-dev-info__settings-toggle')?.addEventListener('change', (ev) => {\n controller.setAutoHide((ev.target as HTMLInputElement).checked);\n });\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__theme-btn').forEach(($themeBtn) => {\n $themeBtn.addEventListener('click', (ev) => {\n ev.preventDefault();\n setTheme($themeBtn.dataset.themeChoice as ThemeChoice);\n\n $popover!.querySelectorAll<HTMLButtonElement>('.pp-dev-info__theme-btn').forEach(($btn) => {\n const active = $btn === $themeBtn;\n\n $btn.classList.toggle('active', active);\n $btn.setAttribute('aria-pressed', String(active));\n });\n });\n });\n\n $popover.querySelector<HTMLButtonElement>('.pp-dev-info__settings-hide-btn')?.addEventListener('click', (ev) => {\n ev.preventDefault();\n close();\n controller.setHidden(true);\n });\n\n const actions: [string, (() => void) | undefined][] = [\n ['.pp-dev-info__open-editor-btn', hooks?.onOpenVariablesEditorClick],\n ['.pp-dev-info__reload-vars-btn', hooks?.onReloadVariablesClick],\n ['.pp-dev-info__open-inspector-btn', hooks?.onOpenInspectorClick],\n ];\n\n actions.forEach(([selector, hook]) => {\n $popover!.querySelector<HTMLButtonElement>(selector)?.addEventListener('click', (ev) => {\n ev.preventDefault();\n close();\n hook?.();\n });\n });\n\n const $reset = $popover.querySelector<HTMLElement>('.pp-dev-info__settings-reset');\n\n $reset?.addEventListener('click', (ev) => {\n ev.preventDefault();\n controller.reset();\n });\n $reset?.addEventListener('keydown', (ev: KeyboardEvent) => {\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n controller.reset();\n }\n });\n\n $panel.appendChild($popover);\n document.addEventListener('click', onDocClick, true);\n document.addEventListener('keydown', onKeyDown, true);\n hooks?.onOpenChange?.(true);\n };\n\n $btn.addEventListener('click', (ev) => {\n ev.preventDefault();\n\n if ($popover) {\n close();\n } else {\n open();\n }\n });\n\n controller.onChange(() => {\n if ($popover) {\n syncPopover($popover, controller);\n }\n });\n}\n","/// <reference types=\"vite/client\" />\nimport './assets/css/client.scss';\nimport './index.html';\nimport { createPPDevHotContext } from './hot-context.js';\nimport { STORAGE_KEYS, getStorageItem, setStorageItem } from './storage.js';\nimport { createPanelStateController, type PanelStateController } from './panel-state.js';\nimport { initDrag, initAutoHide } from './panel-position.js';\nimport { initPanelSettings } from './panel-settings.js';\nimport { initTheme } from './theme.js';\n\n// Applied unconditionally (even if the panel itself is hidden) — this is what makes the\n// override affect the whole injected panel, not just its own markup.\ninitTheme();\n\ninterface InfoPopupOptions {\n title: string;\n content: string;\n style?: string;\n className?: string;\n duration?: number;\n onClose?: () => void;\n type?: 'success' | 'danger' | 'info' | 'warning';\n}\n\ninterface SyncActionRequiredPayload {\n requestId: string;\n title: string;\n content: string;\n confirmText: string;\n cancelText: string;\n}\n\ninterface ConfirmModalOptions {\n title: string;\n content: string;\n confirmText: string;\n cancelText: string;\n}\n\ntype PageVariablesReloadResponsePayload = { ok: true; count: number; skipped: boolean } | { error: string };\n\nlet activePopups = 0;\nconst POPUP_OFFSET = 10;\nconst POPUP_HEIGHT = 100;\nconst ANIMATION_DURATION = 300;\nconst CONFIRM_MODAL_OVERLAY_CLASS = 'pp-dev-info__confirm-overlay';\n\nconst activeConfirmModals = new Map<\n HTMLDivElement,\n { resolve: (value: boolean) => void; onKeyDown: (event: KeyboardEvent) => void }\n>();\n\nconst ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\n\nfunction teardownConfirmModal(overlay: HTMLDivElement, result: boolean) {\n const entry = activeConfirmModals.get(overlay);\n\n if (!entry) {\n return;\n }\n\n document.removeEventListener('keydown', entry.onKeyDown);\n\n activeConfirmModals.delete(overlay);\n overlay.remove();\n entry.resolve(result);\n}\n\nconst TYPE_ICONS: Record<NonNullable<InfoPopupOptions['type']>, string> = {\n success: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/></svg>`,\n danger: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 8v4\"/><path d=\"M12 16h.01\"/></svg>`,\n warning: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`,\n info: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`,\n};\n\nfunction createPopupElement(opts: InfoPopupOptions): HTMLDivElement {\n const $popup = document.createElement('div');\n\n $popup.classList.add('pp-dev-info-namespace');\n\n const typeClass = opts.type ? `pp-dev-info__popup--${opts.type}` : '';\n const iconHtml = opts.type ? `<div class=\"pp-dev-info__popup-title-icon\">${TYPE_ICONS[opts.type]}</div>` : '';\n\n const template = `\n <div class=\"pp-dev-info__popup ${typeClass} ${opts.className || ''}\" style=\"${opts.style || ''}\">\n <div class=\"pp-dev-info__popup-title\">\n ${iconHtml}\n <div class=\"pp-dev-info__popup-title-text\">${opts.title}</div>\n <div class=\"pp-dev-info__popup-title-close\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"${CLOSE_ICON_SIZE}\"\n height=\"${CLOSE_ICON_SIZE}\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6L6 18\"></path>\n <path d=\"M6 6l12 12\"></path>\n </svg>\n </div>\n </div>\n <div class=\"pp-dev-info__popup-content\">${opts.content}</div>\n </div>\n `;\n\n $popup.innerHTML = template;\n\n return $popup;\n}\n\nlet panelController: PanelStateController | null = null;\nlet startReloadVariablesFlow: (() => void) | null = null;\nlet pendingReloadVariablesPopup: { close: () => void } | null = null;\n\nfunction updatePopupPositions() {\n const popups = document.querySelectorAll<HTMLElement>('.pp-dev-info-namespace:not(.pp-dev-info)');\n const position = panelController?.getState().position ?? 'bottom-right';\n const isLeft = position === 'top-left' || position === 'bottom-left';\n const isTop = position === 'top-left' || position === 'top-right';\n\n // Anchor popups to the panel's horizontal side and stack them from the vertically\n // opposite edge so they never cover the panel.\n popups.forEach((popup, index: number) => {\n const offset = POPUP_OFFSET + index * (POPUP_HEIGHT + POPUP_OFFSET);\n const $popupContent = popup.querySelector<HTMLElement>('.pp-dev-info__popup');\n\n if (!$popupContent) {\n return;\n }\n\n $popupContent.classList.toggle('pp-dev-info__popup--left', isLeft);\n\n if (isTop) {\n $popupContent.style.top = 'auto';\n $popupContent.style.bottom = `${offset}px`;\n } else {\n $popupContent.style.bottom = 'auto';\n $popupContent.style.top = `${offset}px`;\n }\n });\n}\n\nfunction animatePopup($popup: HTMLDivElement, type: 'enter' | 'exit') {\n return new Promise<void>((resolve) => {\n const $popupContent = $popup.querySelector('.pp-dev-info__popup');\n\n if (!$popupContent) {\n return resolve();\n }\n\n if (type === 'enter') {\n $popupContent.classList.add('entering');\n\n requestAnimationFrame(() => {\n $popupContent.classList.remove('entering');\n\n resolve();\n });\n } else {\n $popupContent.classList.add('exiting');\n\n setTimeout(() => {\n $popupContent.classList.remove('exiting');\n\n resolve();\n }, ANIMATION_DURATION);\n }\n });\n}\n\nfunction infoPopup(opts: InfoPopupOptions): { close: () => void } {\n const $popup = createPopupElement(opts);\n const $closeButton = $popup.querySelector('.pp-dev-info__popup-title-close');\n\n const removePopup = async () => {\n await animatePopup($popup, 'exit');\n\n $popup.remove();\n\n activePopups--;\n\n updatePopupPositions();\n\n opts.onClose?.();\n };\n\n $closeButton?.addEventListener('click', removePopup);\n document.body.appendChild($popup);\n\n // Position the popup\n activePopups++;\n updatePopupPositions();\n\n // Animate entrance\n animatePopup($popup, 'enter');\n\n const duration = opts.duration ?? 10000;\n\n if (duration > 0) {\n let remainingTime = duration;\n let lastUpdate = Date.now();\n let isVisible = true;\n\n const scheduleDismiss = () => {\n if (!isVisible) {\n return;\n }\n\n const now = Date.now();\n const elapsed = now - lastUpdate;\n\n remainingTime -= elapsed;\n lastUpdate = now;\n\n if (remainingTime <= 0) {\n removePopup();\n\n return;\n }\n\n requestAnimationFrame(scheduleDismiss);\n };\n\n // Handle visibility change\n document.addEventListener('visibilitychange', () => {\n isVisible = !document.hidden;\n\n if (isVisible) {\n lastUpdate = Date.now();\n requestAnimationFrame(scheduleDismiss);\n }\n });\n\n requestAnimationFrame(scheduleDismiss);\n }\n\n return { close: removePopup };\n}\n\nfunction closeAllConfirmModals() {\n for (const overlay of [...activeConfirmModals.keys()]) {\n teardownConfirmModal(overlay, false);\n }\n}\n\nfunction confirmModal(opts: ConfirmModalOptions): Promise<boolean> {\n closeAllConfirmModals();\n\n return new Promise<boolean>((resolve) => {\n const $overlay = document.createElement('div');\n\n $overlay.classList.add('pp-dev-info-namespace', CONFIRM_MODAL_OVERLAY_CLASS);\n\n const $confirm = document.createElement('div');\n\n $confirm.classList.add('pp-dev-info__confirm');\n\n const $title = document.createElement('div');\n\n $title.classList.add('pp-dev-info__confirm-title');\n $title.textContent = opts.title;\n\n const $content = document.createElement('div');\n\n $content.classList.add('pp-dev-info__confirm-content');\n $content.textContent = opts.content;\n\n const $actions = document.createElement('div');\n\n $actions.classList.add('pp-dev-info__confirm-actions');\n\n const $cancelButton = document.createElement('button');\n\n $cancelButton.type = 'button';\n $cancelButton.classList.add('pp-dev-info__confirm-btn', 'pp-dev-info__confirm-btn--cancel');\n $cancelButton.textContent = opts.cancelText;\n\n const $confirmButton = document.createElement('button');\n\n $confirmButton.type = 'button';\n $confirmButton.classList.add('pp-dev-info__confirm-btn', 'pp-dev-info__confirm-btn--confirm');\n $confirmButton.textContent = opts.confirmText;\n\n $actions.append($cancelButton, $confirmButton);\n $confirm.append($title, $content, $actions);\n $overlay.appendChild($confirm);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n teardownConfirmModal($overlay, false);\n }\n };\n\n activeConfirmModals.set($overlay, { resolve, onKeyDown });\n\n $confirmButton.addEventListener('click', () => {\n teardownConfirmModal($overlay, true);\n });\n\n $cancelButton.addEventListener('click', () => {\n teardownConfirmModal($overlay, false);\n });\n\n $overlay.addEventListener('click', (event) => {\n if (event.target === $overlay) {\n teardownConfirmModal($overlay, false);\n }\n });\n\n document.addEventListener('keydown', onKeyDown);\n document.body.appendChild($overlay);\n });\n}\n\n// ── Inspector console banner ──────────────────────────────────────────────────\n// Logged once on page load so it is visible in DevTools history when the console\n// is opened. The message is harmless if the inspector is disabled.\n(function printInspectorBanner() {\n const url = window.location.origin + '/@pp-dev/inspector';\n\n console.log(\n '%cpp-dev%c 🔍 Request Inspector → %c%s',\n 'background:#6e8efb;color:#fff;padding:2px 8px;border-radius:4px;font-weight:700;font-size:11px',\n 'color:#a0a0b8;font-size:11px',\n 'color:#a78bfa;font-size:11px;text-decoration:underline',\n url,\n );\n})();\n\n// ── Panel UI: position, auto-hide, hide, minimize ─────────────────────────────\n// Initialized outside the hot-context guard — panel placement and visibility must\n// not depend on the WebSocket transport being available.\nconst CLOSED_CLASS = 'closed';\n\nconst $infoPanel = document.querySelector<HTMLElement>('.pp-dev-info');\n\nif ($infoPanel) {\n panelController = createPanelStateController($infoPanel);\n\n const $dragHandle = $infoPanel.querySelector<HTMLElement>('.pp-dev-info__drag-handle');\n\n if ($dragHandle) {\n initDrag($infoPanel, $dragHandle, (corner) => panelController!.setPosition(corner));\n }\n\n const autoHide = initAutoHide($infoPanel, () => panelController!.getState().autoHide);\n\n initPanelSettings($infoPanel, panelController, {\n onOpenChange: (open) => autoHide.keepPeeked(open),\n onOpenVariablesEditorClick: () => window.open(window.location.origin + '/@pp-dev/variables-editor', '_blank'),\n onOpenInspectorClick: () => window.open(window.location.origin + '/@pp-dev/inspector', '_blank'),\n onReloadVariablesClick: () => startReloadVariablesFlow?.(),\n });\n\n panelController.onChange((state) => {\n if (!state.autoHide) {\n $infoPanel.classList.remove('is-peeking');\n }\n\n updatePopupPositions();\n });\n\n // Minimize button; in auto-hide mode it acts as \"pin\" (disables auto-hide).\n const $minimizeButtonWrap = $infoPanel.querySelector<HTMLElement>('.pp-dev-info__wrap-btn');\n const $minimizeButtonSVG = $minimizeButtonWrap?.querySelector('svg');\n\n if ($minimizeButtonWrap && $minimizeButtonSVG) {\n let isClosed = getStorageItem(STORAGE_KEYS.closed) === 'true' && !panelController.getState().autoHide;\n\n const updateTitle = () => {\n $minimizeButtonWrap.title = panelController!.getState().autoHide ? 'Pin panel' : 'Minimize';\n };\n\n updateTitle();\n panelController.onChange(updateTitle);\n\n if (isClosed) {\n $infoPanel.classList.add(CLOSED_CLASS);\n $minimizeButtonSVG.classList.add(CLOSED_CLASS);\n }\n\n $minimizeButtonWrap.addEventListener('click', (e: Event) => {\n e.preventDefault();\n\n if (panelController!.getState().autoHide) {\n isClosed = false;\n panelController!.setAutoHide(false);\n\n return;\n }\n\n $infoPanel.classList.toggle(CLOSED_CLASS);\n $minimizeButtonSVG.classList.toggle(CLOSED_CLASS);\n\n isClosed = !isClosed;\n\n setStorageItem(STORAGE_KEYS.closed, isClosed ? 'true' : 'false');\n });\n }\n}\n\n// Use Vite's HMR context when available; otherwise fall back to a raw-WebSocket\n// shim so the dev panel also works under the `pp-dev next` server (no Vite HMR).\nconst hot = import.meta.hot ?? createPPDevHotContext();\n\nif (hot) {\n hot.on('redirect', (data: { url: string }) => {\n window.location.href = data.url;\n });\n\n hot.on('client:config:update', (data: { config: { [key: string]: any } }) => {\n if (typeof data.config?.canSync === 'boolean') {\n if (data.config.canSync) {\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n $syncButton.disabled = false;\n $syncButton.classList.remove('disabled');\n $syncButton.title = 'Sync template';\n }\n } else {\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n $syncButton.disabled = true;\n $syncButton.classList.add('disabled');\n $syncButton.title = 'Sync is unavailable on this instance';\n }\n }\n }\n });\n\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n hot.on('template:sync:action-required', async (payload: SyncActionRequiredPayload) => {\n // Keep the sync spinner running while a confirmation modal is shown — the sync\n // process is still in progress and only ends on `template:sync:response`.\n const approved = await confirmModal({\n title: payload.title,\n content: payload.content,\n confirmText: payload.confirmText,\n cancelText: payload.cancelText,\n });\n\n hot.send('template:sync:action-response', {\n requestId: payload.requestId,\n approved,\n });\n });\n\n hot.on(\n 'template:sync:response',\n (\n payload:\n | { syncedAt: string; currentHash: string; backupFilename: string }\n | { error: string; config?: { [p: string]: any }; refresh?: boolean }\n | { cancelled: boolean; message: string },\n ) => {\n closeAllConfirmModals();\n $syncButton.classList.remove('syncing');\n\n if ('cancelled' in payload && payload.cancelled) {\n infoPopup({\n title: 'Sync cancelled',\n content: payload.message,\n type: 'warning',\n });\n } else if ('error' in payload && typeof payload.error !== 'undefined') {\n infoPopup({\n title: 'Sync error',\n content: payload.error,\n type: 'danger',\n });\n\n if (payload.refresh) {\n setTimeout(() => {\n window.location.reload();\n });\n } else {\n $syncButton.disabled = true;\n $syncButton.classList.add('disabled');\n $syncButton.title = 'Sync is unavailable on this instance';\n }\n } else if ('syncedAt' in payload && typeof payload.syncedAt !== 'undefined') {\n infoPopup({\n title: 'Sync success',\n content: `Synced at ${new Date(payload.syncedAt).toLocaleString()}.<br />Backup filename: ${\n payload.backupFilename\n }`,\n type: 'success',\n });\n }\n },\n );\n\n $syncButton.addEventListener('click', (ev: Event) => {\n ev.preventDefault();\n\n $syncButton.classList.add('syncing');\n\n hot.send('template:sync', {});\n });\n }\n\n hot.on('page-variables:reload:response', (payload: PageVariablesReloadResponsePayload) => {\n pendingReloadVariablesPopup?.close();\n pendingReloadVariablesPopup = null;\n\n if ('error' in payload) {\n infoPopup({\n title: 'Reload variables error',\n content: payload.error,\n type: 'danger',\n });\n\n return;\n }\n\n if (payload.skipped) {\n infoPopup({\n title: 'Nothing to reload',\n content: 'This page has no template variables to refresh.',\n type: 'warning',\n });\n\n return;\n }\n\n infoPopup({\n title: 'Variables reloaded',\n content: `Refetched ${payload.count} variable(s) from MI. Reloading the page…`,\n type: 'success',\n duration: 1200,\n });\n\n setTimeout(() => window.location.reload(), 600);\n });\n\n startReloadVariablesFlow = () => {\n pendingReloadVariablesPopup?.close();\n pendingReloadVariablesPopup = infoPopup({\n title: 'Reloading variables',\n content: 'Refetching live values from MI…',\n type: 'info',\n duration: 0,\n });\n\n hot.send('page-variables:reload', {});\n };\n}\n"],"names":["CLOSED_CLASS"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
1
+ {"version":3,"file":"client.js","sources":["../../src/client/hot-context.ts","../../src/client/storage.ts","../../src/client/panel-state.ts","../../src/client/panel-position.ts","../../src/client/theme.ts","../../src/client/panel-settings.ts","../../src/client/popup.ts","../../src/client/index.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\nimport type { ViteHotContext } from 'vite/types/hot.js';\n\n/**\n * Minimal `import.meta.hot`-compatible context for environments without Vite HMR\n * (e.g. the `pp-dev next` server). The dev-panel client only uses `hot.on()` and\n * `hot.send()`; this shim implements those over a raw WebSocket using the same\n * custom-event wire shape Vite uses: `{ type: 'custom', event, data }`.\n *\n * Used only as a fallback: when `import.meta.hot` exists (Vite), that is used\n * instead and this code never runs.\n */\n\n/**\n * WebSocket path the pp-dev Next.js server listens on for dev-panel messages.\n * Kept in sync with `PP_DEV_HMR_WS_PATH` in `src/constants.ts` (server side).\n */\nconst PP_DEV_HMR_WS_PATH = '/@pp-dev-hmr';\n\ntype CustomMessage = { type: 'custom'; event: string; data?: unknown };\n\ntype Handler = (payload: any) => void;\n\nconst MAX_OUTBOX_SIZE = 50;\n\nfunction resolveWebSocketUrl(): string {\n const { protocol, host } = window.location;\n const wsProtocol = protocol === 'https:' ? 'wss:' : 'ws:';\n\n return `${wsProtocol}//${host}${PP_DEV_HMR_WS_PATH}`;\n}\n\nexport function createPPDevHotContext(): ViteHotContext {\n const handlers = new Map<string, Set<Handler>>();\n /** Outgoing messages queued while the socket is not OPEN; flushed on connect. */\n const outbox: string[] = [];\n\n let socket: WebSocket | null = null;\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n let reconnectDelay = 1_000;\n const MAX_RECONNECT_DELAY = 10_000;\n\n const flushOutbox = () => {\n if (!socket || socket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n while (outbox.length > 0) {\n socket.send(outbox.shift()!);\n }\n };\n\n const dispatch = (event: string, data: unknown) => {\n const eventHandlers = handlers.get(event);\n\n if (!eventHandlers) {\n return;\n }\n\n for (const handler of eventHandlers) {\n try {\n handler(data);\n } catch (err) {\n // A failing handler must not break dispatch to the others.\n console.error(`[pp-dev] hot handler for \"${event}\" failed`, err);\n }\n }\n };\n\n const connect = () => {\n try {\n socket = new WebSocket(resolveWebSocketUrl());\n } catch (err) {\n console.error('[pp-dev] failed to open dev-panel WebSocket', err);\n scheduleReconnect();\n\n return;\n }\n\n socket.addEventListener('open', () => {\n reconnectDelay = 1_000;\n flushOutbox();\n });\n\n socket.addEventListener('message', (ev) => {\n let message: CustomMessage;\n\n try {\n message = JSON.parse(typeof ev.data === 'string' ? ev.data : '');\n } catch {\n return;\n }\n\n if (message && message.type === 'custom' && typeof message.event === 'string') {\n dispatch(message.event, message.data);\n }\n });\n\n socket.addEventListener('close', () => {\n socket = null;\n scheduleReconnect();\n });\n\n socket.addEventListener('error', () => {\n // `close` follows `error`; reconnect is scheduled there.\n socket?.close();\n });\n };\n\n const scheduleReconnect = () => {\n if (reconnectTimer) {\n return;\n }\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n reconnectDelay = Math.min(reconnectDelay * 2, MAX_RECONNECT_DELAY);\n connect();\n }, reconnectDelay);\n };\n\n connect();\n\n const noop = () => {};\n\n const context: Pick<ViteHotContext, 'on' | 'off' | 'send'> & Partial<ViteHotContext> = {\n on(event, cb) {\n let set = handlers.get(event);\n\n if (!set) {\n set = new Set();\n handlers.set(event, set);\n }\n\n set.add(cb as Handler);\n },\n off(event, cb) {\n handlers.get(event)?.delete(cb as Handler);\n },\n send(event, data) {\n const payload = JSON.stringify({ type: 'custom', event, data } satisfies CustomMessage);\n\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(payload);\n } else {\n if (outbox.length >= MAX_OUTBOX_SIZE) {\n outbox.shift();\n }\n\n outbox.push(payload);\n }\n },\n // Unused by the dev-panel client; provided as no-ops to satisfy the shape.\n accept: noop as ViteHotContext['accept'],\n acceptExports: noop as ViteHotContext['acceptExports'],\n dispose: noop,\n prune: noop,\n invalidate: noop,\n data: {},\n };\n\n return context as ViteHotContext;\n}\n","// localStorage helpers guarded against environments where storage is unavailable\n// (e.g. sandboxed iframes). Keys follow the original `pp-dev-info-closed` naming.\n\nexport const STORAGE_KEYS = {\n closed: 'pp-dev-info-closed',\n position: 'pp-dev-info-position',\n autoHide: 'pp-dev-info-auto-hide',\n hidden: 'pp-dev-info-hidden',\n /** Shared with the standalone Inspector/Variables Editor pages — same key, same values. */\n theme: 'pp-dev-info-theme',\n} as const;\n\nexport function checkLocalStorage() {\n try {\n localStorage.setItem('test', 'test');\n localStorage.removeItem('test');\n\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function setStorageItem(key: string, value: string) {\n if (checkLocalStorage()) {\n localStorage.setItem(key, value);\n }\n}\n\nexport function getStorageItem(key: string) {\n if (checkLocalStorage()) {\n return localStorage.getItem(key);\n }\n\n return null;\n}\n\nexport function removeStorageItem(key: string) {\n if (checkLocalStorage()) {\n localStorage.removeItem(key);\n }\n}\n","import { STORAGE_KEYS, getStorageItem, setStorageItem, removeStorageItem } from './storage.js';\n\nexport type Corner = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport const CORNERS: readonly Corner[] = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\n\nexport interface PanelState {\n position: Corner;\n autoHide: boolean;\n hidden: boolean;\n}\n\nexport interface PanelStateController {\n getState(): PanelState;\n setPosition(corner: Corner): void;\n setAutoHide(on: boolean): void;\n setHidden(on: boolean): void;\n /** Clear all persisted overrides and re-resolve from the server-rendered config. */\n reset(): void;\n onChange(cb: (state: PanelState) => void): void;\n}\n\nconst POSITION_CLASS_PREFIX = 'pp-dev-info--';\nconst AUTO_HIDE_CLASS = 'pp-dev-info--auto-hide';\nconst HIDDEN_CLASS = 'pp-dev-info--hidden';\nconst CLOSED_CLASS = 'closed';\nconst NO_TRANSITION_CLASS = 'is-dragging';\n\nexport function isCorner(value: unknown): value is Corner {\n return typeof value === 'string' && (CORNERS as readonly string[]).includes(value);\n}\n\nfunction stateFromDataAttrs($panel: HTMLElement): PanelState {\n return {\n position: isCorner($panel.dataset.position) ? $panel.dataset.position : 'bottom-right',\n autoHide: $panel.dataset.autoHide === 'true',\n hidden: $panel.dataset.hidden === 'true',\n };\n}\n\n/**\n * Resolve the effective panel state. Precedence per setting:\n * localStorage (runtime user choice) → data-* attribute (config) → built-in default.\n * The `?pp-dev-panel=show|hide` URL param writes a persistent localStorage override\n * before resolution, so it both restores a hidden panel and survives reloads.\n */\nexport function resolvePanelState($panel: HTMLElement): PanelState {\n const param = new URLSearchParams(window.location.search).get('pp-dev-panel');\n\n if (param === 'show') {\n setStorageItem(STORAGE_KEYS.hidden, 'false');\n } else if (param === 'hide') {\n setStorageItem(STORAGE_KEYS.hidden, 'true');\n }\n\n const defaults = stateFromDataAttrs($panel);\n\n const storedPosition = getStorageItem(STORAGE_KEYS.position);\n const storedAutoHide = getStorageItem(STORAGE_KEYS.autoHide);\n const storedHidden = getStorageItem(STORAGE_KEYS.hidden);\n\n return {\n position: isCorner(storedPosition) ? storedPosition : defaults.position,\n autoHide: storedAutoHide !== null ? storedAutoHide === 'true' : defaults.autoHide,\n hidden: storedHidden !== null ? storedHidden === 'true' : defaults.hidden,\n };\n}\n\nexport function applyPanelState($panel: HTMLElement, state: PanelState, opts?: { instant?: boolean }): void {\n const apply = () => {\n for (const corner of CORNERS) {\n $panel.classList.toggle(POSITION_CLASS_PREFIX + corner, corner === state.position);\n }\n\n $panel.classList.toggle(AUTO_HIDE_CLASS, state.autoHide);\n $panel.classList.toggle(HIDDEN_CLASS, state.hidden);\n };\n\n if (opts?.instant) {\n // No-transition guard: when localStorage differs from the server-rendered corner,\n // the panel must not visibly slide across the screen on load. `is-dragging`\n // disables transitions; a reflow makes the class swap land before it is removed.\n $panel.classList.add(NO_TRANSITION_CLASS);\n apply();\n void $panel.offsetWidth;\n\n const unlock = () => $panel.classList.remove(NO_TRANSITION_CLASS);\n\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(unlock);\n } else {\n setTimeout(unlock, 0);\n }\n } else {\n apply();\n }\n}\n\nfunction clearClosed($panel: HTMLElement): void {\n $panel.classList.remove(CLOSED_CLASS);\n $panel.querySelector('.pp-dev-info__wrap-btn svg')?.classList.remove(CLOSED_CLASS);\n removeStorageItem(STORAGE_KEYS.closed);\n}\n\nexport function createPanelStateController($panel: HTMLElement): PanelStateController {\n let state = resolvePanelState($panel);\n const listeners: Array<(s: PanelState) => void> = [];\n\n if (state.autoHide) {\n // Auto-hide and minimize are mutually exclusive; a stale persisted `closed`\n // state must not combine with the auto-hide transform.\n clearClosed($panel);\n }\n\n applyPanelState($panel, state, { instant: true });\n\n const commit = () => {\n applyPanelState($panel, state);\n\n for (const cb of listeners) {\n cb(state);\n }\n };\n\n return {\n getState: () => state,\n\n setPosition(corner) {\n state = { ...state, position: corner };\n setStorageItem(STORAGE_KEYS.position, corner);\n commit();\n },\n\n setAutoHide(on) {\n state = { ...state, autoHide: on };\n setStorageItem(STORAGE_KEYS.autoHide, String(on));\n\n if (on) {\n clearClosed($panel);\n }\n\n commit();\n },\n\n setHidden(on) {\n state = { ...state, hidden: on };\n setStorageItem(STORAGE_KEYS.hidden, String(on));\n commit();\n },\n\n reset() {\n removeStorageItem(STORAGE_KEYS.position);\n removeStorageItem(STORAGE_KEYS.autoHide);\n removeStorageItem(STORAGE_KEYS.hidden);\n clearClosed($panel);\n\n // Re-resolve purely from the server-rendered config (bypass the URL param,\n // which would immediately re-write its localStorage override).\n state = stateFromDataAttrs($panel);\n commit();\n },\n\n onChange(cb) {\n listeners.push(cb);\n },\n };\n}\n","import type { Corner } from './panel-state.js';\n\nexport const AUTO_HIDE_SHOW_DELAY = 300;\nexport const AUTO_HIDE_HIDE_DELAY = 500;\n\nconst PEEKING_CLASS = 'is-peeking';\nconst DRAGGING_CLASS = 'is-dragging';\n\n/** Nearest screen corner for a viewport point; ties resolve toward bottom-right. */\nexport function nearestCorner(x: number, y: number, viewportWidth: number, viewportHeight: number): Corner {\n const left = x < viewportWidth / 2;\n const top = y < viewportHeight / 2;\n\n if (top) {\n return left ? 'top-left' : 'top-right';\n }\n\n return left ? 'bottom-left' : 'bottom-right';\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Drag the panel by its handle and snap to the nearest corner on release.\n * Pointer capture keeps the drag tracking over iframes and outside the window.\n */\nexport function initDrag($panel: HTMLElement, $handle: HTMLElement, onSnap: (corner: Corner) => void): void {\n let dragging = false;\n let pointerId = -1;\n let offsetX = 0;\n let offsetY = 0;\n let panelWidth = 0;\n let panelHeight = 0;\n\n const onKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') {\n stop(false);\n }\n };\n\n const stop = (snap: boolean, ev?: PointerEvent) => {\n if (!dragging) {\n return;\n }\n\n dragging = false;\n\n try {\n $handle.releasePointerCapture(pointerId);\n } catch {\n // pointer already released\n }\n\n document.body.style.userSelect = '';\n document.removeEventListener('keydown', onKeyDown, true);\n\n // Re-enable transitions before clearing the inline placement so the snap animates.\n $panel.classList.remove(DRAGGING_CLASS);\n $panel.style.left = '';\n $panel.style.top = '';\n $panel.style.right = '';\n $panel.style.bottom = '';\n $panel.style.transform = '';\n\n if (snap && ev) {\n onSnap(nearestCorner(ev.clientX, ev.clientY, window.innerWidth, window.innerHeight));\n }\n };\n\n const moveTo = (ev: PointerEvent) => {\n const x = clamp(ev.clientX - offsetX, 0, Math.max(0, window.innerWidth - panelWidth));\n const y = clamp(ev.clientY - offsetY, 0, Math.max(0, window.innerHeight - panelHeight));\n\n $panel.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n };\n\n $handle.addEventListener('pointerdown', (ev: PointerEvent) => {\n if (ev.pointerType === 'mouse' && ev.button !== 0) {\n return;\n }\n\n const rect = $panel.getBoundingClientRect();\n\n dragging = true;\n pointerId = ev.pointerId;\n offsetX = ev.clientX - rect.left;\n offsetY = ev.clientY - rect.top;\n panelWidth = rect.width;\n panelHeight = rect.height;\n\n $handle.setPointerCapture(ev.pointerId);\n $panel.classList.add(DRAGGING_CLASS);\n\n // Anchor to the top-left origin so translate3d coordinates are viewport-absolute;\n // inline styles override the corner-class placement for the duration of the drag.\n $panel.style.left = '0';\n $panel.style.top = '0';\n $panel.style.right = 'auto';\n $panel.style.bottom = 'auto';\n\n moveTo(ev);\n\n document.body.style.userSelect = 'none';\n document.addEventListener('keydown', onKeyDown, true);\n ev.preventDefault();\n });\n\n $handle.addEventListener('pointermove', (ev: PointerEvent) => {\n if (dragging) {\n moveTo(ev);\n }\n });\n\n $handle.addEventListener('pointerup', (ev: PointerEvent) => stop(true, ev));\n $handle.addEventListener('pointercancel', () => stop(false));\n}\n\nexport interface AutoHideHandle {\n /** Force the panel to stay revealed (e.g. while the settings popover is open). */\n keepPeeked(on: boolean): void;\n}\n\n/**\n * Hover-reveal behavior for the auto-hide mode: pointer over the exposed strip for\n * AUTO_HIDE_SHOW_DELAY slides the panel out; leaving re-hides it after a grace period.\n * Keyboard focus inside the panel also keeps it revealed.\n */\nexport function initAutoHide($panel: HTMLElement, isActive: () => boolean): AutoHideHandle {\n let showTimer: number | undefined;\n let hideTimer: number | undefined;\n let popoverOpen = false;\n\n const shouldStayPeeked = () =>\n popoverOpen || $panel.matches(':focus-within') || $panel.classList.contains(DRAGGING_CLASS);\n\n const scheduleHide = () => {\n window.clearTimeout(hideTimer);\n hideTimer = window.setTimeout(() => {\n if (!shouldStayPeeked() && !$panel.matches(':hover')) {\n $panel.classList.remove(PEEKING_CLASS);\n }\n }, AUTO_HIDE_HIDE_DELAY);\n };\n\n $panel.addEventListener('pointerenter', () => {\n if (!isActive()) {\n return;\n }\n\n window.clearTimeout(hideTimer);\n showTimer = window.setTimeout(() => $panel.classList.add(PEEKING_CLASS), AUTO_HIDE_SHOW_DELAY);\n });\n\n $panel.addEventListener('pointerleave', () => {\n if (!isActive()) {\n return;\n }\n\n window.clearTimeout(showTimer);\n scheduleHide();\n });\n\n $panel.addEventListener('focusin', () => {\n if (isActive()) {\n window.clearTimeout(hideTimer);\n $panel.classList.add(PEEKING_CLASS);\n }\n });\n\n $panel.addEventListener('focusout', () => {\n if (isActive()) {\n scheduleHide();\n }\n });\n\n return {\n keepPeeked(on: boolean) {\n popoverOpen = on;\n\n if (!isActive()) {\n return;\n }\n\n if (on) {\n window.clearTimeout(showTimer);\n window.clearTimeout(hideTimer);\n $panel.classList.add(PEEKING_CLASS);\n } else {\n scheduleHide();\n }\n },\n };\n}\n","// Theme override (Auto/Dark/Light), shared across the dev panel and the standalone\n// Inspector/Variables Editor pages via the same localStorage key (see STORAGE_KEYS.theme) and\n// the same `data-pp-dev-theme` attribute convention (prefixed to avoid colliding with a host\n// Portal Page's own theme attribute, since the panel is injected into pages pp-dev doesn't own).\nimport { STORAGE_KEYS, getStorageItem, setStorageItem } from './storage.js';\n\nexport type ThemeChoice = 'auto' | 'dark' | 'light';\n\nconst THEME_ATTR = 'data-pp-dev-theme';\n\nexport function getStoredTheme(): ThemeChoice {\n const value = getStorageItem(STORAGE_KEYS.theme);\n\n return value === 'dark' || value === 'light' ? value : 'auto';\n}\n\nexport function applyTheme(theme: ThemeChoice): void {\n if (theme === 'dark' || theme === 'light') {\n document.documentElement.setAttribute(THEME_ATTR, theme);\n } else {\n document.documentElement.removeAttribute(THEME_ATTR);\n }\n}\n\nexport function setTheme(theme: ThemeChoice): void {\n setStorageItem(STORAGE_KEYS.theme, theme);\n applyTheme(theme);\n}\n\n/** Call once on page load to apply whatever was last chosen (defaults to 'auto', a no-op). */\nexport function initTheme(): void {\n applyTheme(getStoredTheme());\n}\n","import type { Corner, PanelStateController } from './panel-state.js';\nimport { CORNERS } from './panel-state.js';\nimport { getStoredTheme, setTheme, type ThemeChoice } from './theme.js';\n\nconst CORNER_TITLES: Record<Corner, string> = {\n 'top-left': 'Top left',\n 'top-right': 'Top right',\n 'bottom-left': 'Bottom left',\n 'bottom-right': 'Bottom right',\n};\n\nconst THEME_CHOICES: ThemeChoice[] = ['auto', 'dark', 'light'];\nconst THEME_LABELS: Record<ThemeChoice, string> = { auto: 'Auto', dark: 'Dark', light: 'Light' };\n\nfunction buildPopover(controller: PanelStateController, showPageVariablesGroup: boolean): HTMLDivElement {\n const state = controller.getState();\n const $popover = document.createElement('div');\n\n $popover.classList.add('pp-dev-info__settings');\n\n const cornerButtons = CORNERS.map((corner) => {\n const active = corner === state.position ? ' active' : '';\n\n return `<button type=\"button\" class=\"pp-dev-info__corner-btn pp-dev-info__corner-btn--${corner}${active}\" data-corner=\"${corner}\" title=\"${CORNER_TITLES[corner]}\" aria-pressed=\"${corner === state.position}\"></button>`;\n }).join('');\n\n const currentTheme = getStoredTheme();\n const themeButtons = THEME_CHOICES.map((choice) => {\n const active = choice === currentTheme ? ' active' : '';\n\n return `<button type=\"button\" class=\"pp-dev-info__theme-btn${active}\" data-theme-choice=\"${choice}\" aria-pressed=\"${choice === currentTheme}\">${THEME_LABELS[choice]}</button>`;\n }).join('');\n\n const pageVariablesRow = showPageVariablesGroup\n ? `\n <div class=\"pp-dev-info__settings-group\">\n <span class=\"pp-dev-info__settings-label\">Page variables</span>\n <div class=\"pp-dev-info__vars-buttons\" role=\"group\" aria-label=\"Page variables\">\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__reload-vars-btn\" title=\"Refetch live values from MI now, then reload the page\">Reload variables</button>\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__open-editor-btn\">Open variables editor…</button>\n </div>\n </div>`\n : '';\n\n $popover.innerHTML = `\n <div class=\"pp-dev-info__settings-title\">Panel settings</div>\n <div class=\"pp-dev-info__settings-row\">\n <span class=\"pp-dev-info__settings-label\">Position</span>\n <div class=\"pp-dev-info__corner-grid\">${cornerButtons}</div>\n </div>\n <div class=\"pp-dev-info__settings-row\">\n <label class=\"pp-dev-info__settings-label\" for=\"pp-dev-auto-hide-toggle\">Auto-hide</label>\n <input\n type=\"checkbox\"\n id=\"pp-dev-auto-hide-toggle\"\n class=\"pp-dev-info__settings-toggle\"\n ${state.autoHide ? 'checked' : ''}\n />\n </div>\n <div class=\"pp-dev-info__settings-row\">\n <span class=\"pp-dev-info__settings-label\">Theme</span>\n <div class=\"pp-dev-info__theme-grid\" role=\"group\" aria-label=\"Theme\">${themeButtons}</div>\n </div>\n ${pageVariablesRow}\n <div class=\"pp-dev-info__settings-group\">\n <span class=\"pp-dev-info__settings-label\">Dev tools</span>\n <div class=\"pp-dev-info__vars-buttons\" role=\"group\" aria-label=\"Dev tools\">\n <button type=\"button\" class=\"pp-dev-info__vars-btn pp-dev-info__open-inspector-btn\">Open request inspector…</button>\n </div>\n </div>\n <button type=\"button\" class=\"pp-dev-info__settings-hide-btn\">Hide panel</button>\n <div class=\"pp-dev-info__settings-hint\">Restore with <code>?pp-dev-panel=show</code> in the URL</div>\n <span class=\"pp-dev-info__settings-reset\" role=\"button\" tabindex=\"0\">Reset to config defaults</span>\n `;\n\n return $popover;\n}\n\nfunction syncPopover($popover: HTMLDivElement, controller: PanelStateController): void {\n const state = controller.getState();\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__corner-btn').forEach(($btn) => {\n const active = $btn.dataset.corner === state.position;\n\n $btn.classList.toggle('active', active);\n $btn.setAttribute('aria-pressed', String(active));\n });\n\n const $toggle = $popover.querySelector<HTMLInputElement>('.pp-dev-info__settings-toggle');\n\n if ($toggle) {\n $toggle.checked = state.autoHide;\n }\n}\n\nexport interface PanelSettingsHooks {\n onOpenChange?: (open: boolean) => void;\n onOpenVariablesEditorClick?: () => void;\n onOpenInspectorClick?: () => void;\n onReloadVariablesClick?: () => void;\n}\n\n/** Settings popover: corner picker, auto-hide toggle, hide button, reset. */\nexport function initPanelSettings(\n $panel: HTMLElement,\n controller: PanelStateController,\n hooks?: PanelSettingsHooks,\n): void {\n const $btn = $panel.querySelector<HTMLButtonElement>('.pp-dev-info__settings-btn');\n\n if (!$btn) {\n return;\n }\n\n let $popover: HTMLDivElement | null = null;\n\n const onDocClick = (ev: MouseEvent) => {\n const target = ev.target as Node;\n\n if ($popover && !$popover.contains(target) && !$btn.contains(target)) {\n close();\n }\n };\n\n const onKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') {\n close();\n }\n };\n\n const close = () => {\n if (!$popover) {\n return;\n }\n\n $popover.remove();\n $popover = null;\n document.removeEventListener('click', onDocClick, true);\n document.removeEventListener('keydown', onKeyDown, true);\n hooks?.onOpenChange?.(false);\n };\n\n const open = () => {\n const showPageVariablesGroup = $panel.dataset.templateLess !== 'true';\n\n $popover = buildPopover(controller, showPageVariablesGroup);\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__corner-btn').forEach(($cornerBtn) => {\n $cornerBtn.addEventListener('click', (ev) => {\n ev.preventDefault();\n controller.setPosition($cornerBtn.dataset.corner as Corner);\n });\n });\n\n $popover.querySelector<HTMLInputElement>('.pp-dev-info__settings-toggle')?.addEventListener('change', (ev) => {\n controller.setAutoHide((ev.target as HTMLInputElement).checked);\n });\n\n $popover.querySelectorAll<HTMLButtonElement>('.pp-dev-info__theme-btn').forEach(($themeBtn) => {\n $themeBtn.addEventListener('click', (ev) => {\n ev.preventDefault();\n setTheme($themeBtn.dataset.themeChoice as ThemeChoice);\n\n $popover!.querySelectorAll<HTMLButtonElement>('.pp-dev-info__theme-btn').forEach(($btn) => {\n const active = $btn === $themeBtn;\n\n $btn.classList.toggle('active', active);\n $btn.setAttribute('aria-pressed', String(active));\n });\n });\n });\n\n $popover.querySelector<HTMLButtonElement>('.pp-dev-info__settings-hide-btn')?.addEventListener('click', (ev) => {\n ev.preventDefault();\n close();\n controller.setHidden(true);\n });\n\n const actions: [string, (() => void) | undefined][] = [\n ['.pp-dev-info__open-editor-btn', hooks?.onOpenVariablesEditorClick],\n ['.pp-dev-info__reload-vars-btn', hooks?.onReloadVariablesClick],\n ['.pp-dev-info__open-inspector-btn', hooks?.onOpenInspectorClick],\n ];\n\n actions.forEach(([selector, hook]) => {\n $popover!.querySelector<HTMLButtonElement>(selector)?.addEventListener('click', (ev) => {\n ev.preventDefault();\n close();\n hook?.();\n });\n });\n\n const $reset = $popover.querySelector<HTMLElement>('.pp-dev-info__settings-reset');\n\n $reset?.addEventListener('click', (ev) => {\n ev.preventDefault();\n controller.reset();\n });\n $reset?.addEventListener('keydown', (ev: KeyboardEvent) => {\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n controller.reset();\n }\n });\n\n $panel.appendChild($popover);\n document.addEventListener('click', onDocClick, true);\n document.addEventListener('keydown', onKeyDown, true);\n hooks?.onOpenChange?.(true);\n };\n\n $btn.addEventListener('click', (ev) => {\n ev.preventDefault();\n\n if ($popover) {\n close();\n } else {\n open();\n }\n });\n\n controller.onChange(() => {\n if ($popover) {\n syncPopover($popover, controller);\n }\n });\n}\n","export interface InfoPopupOptions {\n title: string;\n content: string;\n style?: string;\n className?: string;\n duration?: number;\n onClose?: () => void;\n type?: 'success' | 'danger' | 'info' | 'warning';\n}\n\nconst ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\n\nconst TYPE_ICONS: Record<NonNullable<InfoPopupOptions['type']>, string> = {\n success: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/></svg>`,\n danger: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 8v4\"/><path d=\"M12 16h.01\"/></svg>`,\n warning: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg>`,\n info: `<svg viewBox=\"0 0 24 24\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/></svg>`,\n};\n\nexport function createPopupElement(opts: InfoPopupOptions): HTMLDivElement {\n const $popup = document.createElement('div');\n\n $popup.classList.add('pp-dev-info-namespace');\n\n const $popupContent = document.createElement('div');\n\n $popupContent.classList.add('pp-dev-info__popup');\n\n if (opts.type) {\n $popupContent.classList.add(`pp-dev-info__popup--${opts.type}`);\n }\n\n if (opts.className) {\n $popupContent.classList.add(...opts.className.split(/\\s+/).filter(Boolean));\n }\n\n if (opts.style) {\n $popupContent.style.cssText = opts.style;\n }\n\n const $title = document.createElement('div');\n\n $title.classList.add('pp-dev-info__popup-title');\n\n if (opts.type) {\n const $icon = document.createElement('div');\n\n $icon.classList.add('pp-dev-info__popup-title-icon');\n $icon.innerHTML = TYPE_ICONS[opts.type];\n $title.appendChild($icon);\n }\n\n const $titleText = document.createElement('div');\n\n $titleText.classList.add('pp-dev-info__popup-title-text');\n $titleText.textContent = opts.title;\n\n const $close = document.createElement('button');\n\n $close.type = 'button';\n $close.setAttribute('aria-label', 'Close');\n $close.classList.add('pp-dev-info__popup-title-close');\n $close.innerHTML = `\n <svg\n viewBox=\"0 0 24 24\"\n width=\"${CLOSE_ICON_SIZE}\"\n height=\"${CLOSE_ICON_SIZE}\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6L6 18\"></path>\n <path d=\"M6 6l12 12\"></path>\n </svg>\n `;\n\n const $content = document.createElement('div');\n\n $content.classList.add('pp-dev-info__popup-content');\n $content.textContent = opts.content;\n\n $title.append($titleText, $close);\n $popupContent.append($title, $content);\n $popup.appendChild($popupContent);\n\n return $popup;\n}\n","/// <reference types=\"vite/client\" />\nimport './assets/css/client.scss';\nimport './index.html';\nimport { createPPDevHotContext } from './hot-context.js';\nimport { STORAGE_KEYS, getStorageItem, setStorageItem } from './storage.js';\nimport { createPanelStateController, type PanelStateController } from './panel-state.js';\nimport { initDrag, initAutoHide } from './panel-position.js';\nimport { initPanelSettings } from './panel-settings.js';\nimport { initTheme } from './theme.js';\nimport { createPopupElement, type InfoPopupOptions } from './popup.js';\n\n// Applied unconditionally (even if the panel itself is hidden) — this is what makes the\n// override affect the whole injected panel, not just its own markup.\ninitTheme();\n\ninterface SyncActionRequiredPayload {\n requestId: string;\n title: string;\n content: string;\n confirmText: string;\n cancelText: string;\n}\n\ninterface ConfirmModalOptions {\n title: string;\n content: string;\n confirmText: string;\n cancelText: string;\n}\n\ntype PageVariablesReloadResponsePayload = { ok: true; count: number; skipped: boolean } | { error: string };\n\nlet activePopups = 0;\nconst POPUP_OFFSET = 10;\nconst POPUP_HEIGHT = 100;\nconst ANIMATION_DURATION = 300;\nconst CONFIRM_MODAL_OVERLAY_CLASS = 'pp-dev-info__confirm-overlay';\n\nconst activeConfirmModals = new Map<\n HTMLDivElement,\n { resolve: (value: boolean) => void; onKeyDown: (event: KeyboardEvent) => void }\n>();\n\nfunction teardownConfirmModal(overlay: HTMLDivElement, result: boolean) {\n const entry = activeConfirmModals.get(overlay);\n\n if (!entry) {\n return;\n }\n\n document.removeEventListener('keydown', entry.onKeyDown);\n\n activeConfirmModals.delete(overlay);\n overlay.remove();\n entry.resolve(result);\n}\n\nlet panelController: PanelStateController | null = null;\nlet startReloadVariablesFlow: (() => void) | null = null;\nlet pendingReloadVariablesPopup: { close: () => void } | null = null;\n\nfunction updatePopupPositions() {\n const popups = document.querySelectorAll<HTMLElement>('.pp-dev-info-namespace:not(.pp-dev-info)');\n const position = panelController?.getState().position ?? 'bottom-right';\n const isLeft = position === 'top-left' || position === 'bottom-left';\n const isTop = position === 'top-left' || position === 'top-right';\n\n // Anchor popups to the panel's horizontal side and stack them from the vertically\n // opposite edge so they never cover the panel.\n popups.forEach((popup, index: number) => {\n const offset = POPUP_OFFSET + index * (POPUP_HEIGHT + POPUP_OFFSET);\n const $popupContent = popup.querySelector<HTMLElement>('.pp-dev-info__popup');\n\n if (!$popupContent) {\n return;\n }\n\n $popupContent.classList.toggle('pp-dev-info__popup--left', isLeft);\n\n if (isTop) {\n $popupContent.style.top = 'auto';\n $popupContent.style.bottom = `${offset}px`;\n } else {\n $popupContent.style.bottom = 'auto';\n $popupContent.style.top = `${offset}px`;\n }\n });\n}\n\nfunction animatePopup($popup: HTMLDivElement, type: 'enter' | 'exit') {\n return new Promise<void>((resolve) => {\n const $popupContent = $popup.querySelector('.pp-dev-info__popup');\n\n if (!$popupContent) {\n return resolve();\n }\n\n if (type === 'enter') {\n $popupContent.classList.add('entering');\n\n requestAnimationFrame(() => {\n $popupContent.classList.remove('entering');\n\n resolve();\n });\n } else {\n $popupContent.classList.add('exiting');\n\n setTimeout(() => {\n $popupContent.classList.remove('exiting');\n\n resolve();\n }, ANIMATION_DURATION);\n }\n });\n}\n\nfunction infoPopup(opts: InfoPopupOptions): { close: () => void } {\n const $popup = createPopupElement(opts);\n const $closeButton = $popup.querySelector('.pp-dev-info__popup-title-close');\n\n const removePopup = async () => {\n await animatePopup($popup, 'exit');\n\n $popup.remove();\n\n activePopups--;\n\n updatePopupPositions();\n\n opts.onClose?.();\n };\n\n $closeButton?.addEventListener('click', removePopup);\n document.body.appendChild($popup);\n\n // Position the popup\n activePopups++;\n updatePopupPositions();\n\n // Animate entrance\n animatePopup($popup, 'enter');\n\n const duration = opts.duration ?? 10000;\n\n if (duration > 0) {\n let remainingTime = duration;\n let lastUpdate = Date.now();\n let isVisible = true;\n\n const scheduleDismiss = () => {\n if (!isVisible) {\n return;\n }\n\n const now = Date.now();\n const elapsed = now - lastUpdate;\n\n remainingTime -= elapsed;\n lastUpdate = now;\n\n if (remainingTime <= 0) {\n removePopup();\n\n return;\n }\n\n requestAnimationFrame(scheduleDismiss);\n };\n\n // Handle visibility change\n document.addEventListener('visibilitychange', () => {\n isVisible = !document.hidden;\n\n if (isVisible) {\n lastUpdate = Date.now();\n requestAnimationFrame(scheduleDismiss);\n }\n });\n\n requestAnimationFrame(scheduleDismiss);\n }\n\n return { close: removePopup };\n}\n\nfunction closeAllConfirmModals() {\n for (const overlay of [...activeConfirmModals.keys()]) {\n teardownConfirmModal(overlay, false);\n }\n}\n\nfunction confirmModal(opts: ConfirmModalOptions): Promise<boolean> {\n closeAllConfirmModals();\n\n return new Promise<boolean>((resolve) => {\n const $overlay = document.createElement('div');\n\n $overlay.classList.add('pp-dev-info-namespace', CONFIRM_MODAL_OVERLAY_CLASS);\n\n const $confirm = document.createElement('div');\n\n $confirm.classList.add('pp-dev-info__confirm');\n\n const $title = document.createElement('div');\n\n $title.classList.add('pp-dev-info__confirm-title');\n $title.textContent = opts.title;\n\n const $content = document.createElement('div');\n\n $content.classList.add('pp-dev-info__confirm-content');\n $content.textContent = opts.content;\n\n const $actions = document.createElement('div');\n\n $actions.classList.add('pp-dev-info__confirm-actions');\n\n const $cancelButton = document.createElement('button');\n\n $cancelButton.type = 'button';\n $cancelButton.classList.add('pp-dev-info__confirm-btn', 'pp-dev-info__confirm-btn--cancel');\n $cancelButton.textContent = opts.cancelText;\n\n const $confirmButton = document.createElement('button');\n\n $confirmButton.type = 'button';\n $confirmButton.classList.add('pp-dev-info__confirm-btn', 'pp-dev-info__confirm-btn--confirm');\n $confirmButton.textContent = opts.confirmText;\n\n $actions.append($cancelButton, $confirmButton);\n $confirm.append($title, $content, $actions);\n $overlay.appendChild($confirm);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n teardownConfirmModal($overlay, false);\n }\n };\n\n activeConfirmModals.set($overlay, { resolve, onKeyDown });\n\n $confirmButton.addEventListener('click', () => {\n teardownConfirmModal($overlay, true);\n });\n\n $cancelButton.addEventListener('click', () => {\n teardownConfirmModal($overlay, false);\n });\n\n $overlay.addEventListener('click', (event) => {\n if (event.target === $overlay) {\n teardownConfirmModal($overlay, false);\n }\n });\n\n document.addEventListener('keydown', onKeyDown);\n document.body.appendChild($overlay);\n });\n}\n\n// ── Inspector console banner ──────────────────────────────────────────────────\n// Logged once on page load so it is visible in DevTools history when the console\n// is opened. The message is harmless if the inspector is disabled.\n(function printInspectorBanner() {\n const url = window.location.origin + '/@pp-dev/inspector';\n\n console.log(\n '%cpp-dev%c 🔍 Request Inspector → %c%s',\n 'background:#6e8efb;color:#fff;padding:2px 8px;border-radius:4px;font-weight:700;font-size:11px',\n 'color:#a0a0b8;font-size:11px',\n 'color:#a78bfa;font-size:11px;text-decoration:underline',\n url,\n );\n})();\n\n// ── Panel UI: position, auto-hide, hide, minimize ─────────────────────────────\n// Initialized outside the hot-context guard — panel placement and visibility must\n// not depend on the WebSocket transport being available.\nconst CLOSED_CLASS = 'closed';\n\nconst $infoPanel = document.querySelector<HTMLElement>('.pp-dev-info');\n\nif ($infoPanel) {\n panelController = createPanelStateController($infoPanel);\n\n const $dragHandle = $infoPanel.querySelector<HTMLElement>('.pp-dev-info__drag-handle');\n\n if ($dragHandle) {\n initDrag($infoPanel, $dragHandle, (corner) => panelController!.setPosition(corner));\n }\n\n const autoHide = initAutoHide($infoPanel, () => panelController!.getState().autoHide);\n\n initPanelSettings($infoPanel, panelController, {\n onOpenChange: (open) => autoHide.keepPeeked(open),\n onOpenVariablesEditorClick: () => window.open(window.location.origin + '/@pp-dev/variables-editor', '_blank'),\n onOpenInspectorClick: () => window.open(window.location.origin + '/@pp-dev/inspector', '_blank'),\n onReloadVariablesClick: () => startReloadVariablesFlow?.(),\n });\n\n panelController.onChange((state) => {\n if (!state.autoHide) {\n $infoPanel.classList.remove('is-peeking');\n }\n\n updatePopupPositions();\n });\n\n // Minimize button; in auto-hide mode it acts as \"pin\" (disables auto-hide).\n const $minimizeButtonWrap = $infoPanel.querySelector<HTMLElement>('.pp-dev-info__wrap-btn');\n const $minimizeButtonSVG = $minimizeButtonWrap?.querySelector('svg');\n\n if ($minimizeButtonWrap && $minimizeButtonSVG) {\n let isClosed = getStorageItem(STORAGE_KEYS.closed) === 'true' && !panelController.getState().autoHide;\n\n const updateTitle = () => {\n $minimizeButtonWrap.title = panelController!.getState().autoHide ? 'Pin panel' : 'Minimize';\n };\n\n updateTitle();\n panelController.onChange(updateTitle);\n\n if (isClosed) {\n $infoPanel.classList.add(CLOSED_CLASS);\n $minimizeButtonSVG.classList.add(CLOSED_CLASS);\n }\n\n $minimizeButtonWrap.addEventListener('click', (e: Event) => {\n e.preventDefault();\n\n if (panelController!.getState().autoHide) {\n isClosed = false;\n panelController!.setAutoHide(false);\n\n return;\n }\n\n $infoPanel.classList.toggle(CLOSED_CLASS);\n $minimizeButtonSVG.classList.toggle(CLOSED_CLASS);\n\n isClosed = !isClosed;\n\n setStorageItem(STORAGE_KEYS.closed, isClosed ? 'true' : 'false');\n });\n }\n}\n\n// Use Vite's HMR context when available; otherwise fall back to a raw-WebSocket\n// shim so the dev panel also works under the `pp-dev next` server (no Vite HMR).\nconst hot = import.meta.hot ?? createPPDevHotContext();\n\nif (hot) {\n hot.on('redirect', (data: { url: string }) => {\n window.location.href = data.url;\n });\n\n hot.on('client:config:update', (data: { config: { [key: string]: any } }) => {\n if (typeof data.config?.canSync === 'boolean') {\n if (data.config.canSync) {\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n $syncButton.disabled = false;\n $syncButton.classList.remove('disabled');\n $syncButton.title = 'Sync template';\n }\n } else {\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n $syncButton.disabled = true;\n $syncButton.classList.add('disabled');\n $syncButton.title = 'Sync is unavailable on this instance';\n }\n }\n }\n });\n\n const $syncButton = document.getElementById('sync-template') as HTMLButtonElement | null;\n\n if ($syncButton) {\n hot.on('template:sync:action-required', async (payload: SyncActionRequiredPayload) => {\n // Keep the sync spinner running while a confirmation modal is shown — the sync\n // process is still in progress and only ends on `template:sync:response`.\n const approved = await confirmModal({\n title: payload.title,\n content: payload.content,\n confirmText: payload.confirmText,\n cancelText: payload.cancelText,\n });\n\n hot.send('template:sync:action-response', {\n requestId: payload.requestId,\n approved,\n });\n });\n\n hot.on(\n 'template:sync:response',\n (\n payload:\n | { syncedAt: string; currentHash: string; backupFilename: string }\n | { error: string; config?: { [p: string]: any }; refresh?: boolean }\n | { cancelled: boolean; message: string },\n ) => {\n closeAllConfirmModals();\n $syncButton.classList.remove('syncing');\n\n if ('cancelled' in payload && payload.cancelled) {\n infoPopup({\n title: 'Sync cancelled',\n content: payload.message,\n type: 'warning',\n });\n } else if ('error' in payload && typeof payload.error !== 'undefined') {\n infoPopup({\n title: 'Sync error',\n content: payload.error,\n type: 'danger',\n });\n\n if (payload.refresh) {\n setTimeout(() => {\n window.location.reload();\n });\n } else {\n $syncButton.disabled = true;\n $syncButton.classList.add('disabled');\n $syncButton.title = 'Sync is unavailable on this instance';\n }\n } else if ('syncedAt' in payload && typeof payload.syncedAt !== 'undefined') {\n infoPopup({\n title: 'Sync success',\n content: `Synced at ${new Date(payload.syncedAt).toLocaleString()}.\\nBackup filename: ${\n payload.backupFilename\n }`,\n type: 'success',\n });\n }\n },\n );\n\n $syncButton.addEventListener('click', (ev: Event) => {\n ev.preventDefault();\n\n $syncButton.classList.add('syncing');\n\n hot.send('template:sync', {});\n });\n }\n\n hot.on('page-variables:reload:response', (payload: PageVariablesReloadResponsePayload) => {\n pendingReloadVariablesPopup?.close();\n pendingReloadVariablesPopup = null;\n\n if ('error' in payload) {\n infoPopup({\n title: 'Reload variables error',\n content: payload.error,\n type: 'danger',\n });\n\n return;\n }\n\n if (payload.skipped) {\n infoPopup({\n title: 'Nothing to reload',\n content: 'This page has no template variables to refresh.',\n type: 'warning',\n });\n\n return;\n }\n\n infoPopup({\n title: 'Variables reloaded',\n content: `Refetched ${payload.count} variable(s) from MI. Reloading the page…`,\n type: 'success',\n duration: 1200,\n });\n\n setTimeout(() => window.location.reload(), 600);\n });\n\n startReloadVariablesFlow = () => {\n pendingReloadVariablesPopup?.close();\n pendingReloadVariablesPopup = infoPopup({\n title: 'Reloading variables',\n content: 'Refetching live values from MI…',\n type: 'info',\n duration: 0,\n });\n\n hot.send('page-variables:reload', {});\n };\n}\n"],"names":["CLOSED_CLASS"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}