{"version":3,"file":"index.cjs","sources":["../src/lib/types.ts","../src/lib/actions.ts","../src/lib/spread-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePluginConfig, EventHook } from '@embedpdf/core';\nimport { PdfPageObject } from '@embedpdf/models';\n\nexport interface SpreadPluginConfig extends BasePluginConfig {\n  defaultSpreadMode?: SpreadMode;\n}\n\nexport enum SpreadMode {\n  None = 'none',\n  Odd = 'odd',\n  Even = 'even',\n}\n\n// Per-document spread state\nexport interface SpreadDocumentState {\n  spreadMode: SpreadMode;\n  pageGrouping?: number[][]; // [[0], [1,2], [3,4], ...]\n}\n\nexport interface SpreadState {\n  documents: Record<string, SpreadDocumentState>;\n  activeDocumentId: string | null;\n}\n\n// Events include documentId\nexport interface SpreadChangeEvent {\n  documentId: string;\n  spreadMode: SpreadMode;\n}\n\n// Scoped spread capability\nexport interface SpreadScope {\n  setSpreadMode(mode: SpreadMode): void;\n  getSpreadMode(): SpreadMode;\n  getSpreadPages(): PdfPageObject[][];\n  onSpreadChange: EventHook<SpreadMode>;\n}\n\nexport interface SpreadCapability {\n  // Active document operations\n  setSpreadMode(mode: SpreadMode): void;\n  getSpreadMode(): SpreadMode;\n  getSpreadPages(documentId?: string): PdfPageObject[][];\n\n  // Document-scoped operations\n  forDocument(documentId: string): SpreadScope;\n\n  // Events\n  onSpreadChange: EventHook<SpreadChangeEvent>;\n}\n","import { Action } from '@embedpdf/core';\nimport { SpreadMode, SpreadDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_SPREAD_STATE = 'SPREAD/INIT_STATE';\nexport const CLEANUP_SPREAD_STATE = 'SPREAD/CLEANUP_STATE';\nexport const SET_ACTIVE_SPREAD_DOCUMENT = 'SPREAD/SET_ACTIVE_DOCUMENT';\n\n// Spread operations\nexport const SET_SPREAD_MODE = 'SPREAD/SET_SPREAD_MODE';\nexport const SET_PAGE_GROUPING = 'SPREAD/SET_PAGE_GROUPING';\n\n// Document lifecycle actions\nexport interface InitSpreadStateAction extends Action {\n  type: typeof INIT_SPREAD_STATE;\n  payload: {\n    documentId: string;\n    state: SpreadDocumentState;\n  };\n}\n\nexport interface CleanupSpreadStateAction extends Action {\n  type: typeof CLEANUP_SPREAD_STATE;\n  payload: string; // documentId\n}\n\nexport interface SetActiveSpreadDocumentAction extends Action {\n  type: typeof SET_ACTIVE_SPREAD_DOCUMENT;\n  payload: string | null; // documentId\n}\n\nexport interface SetSpreadModeAction extends Action {\n  type: typeof SET_SPREAD_MODE;\n  payload: {\n    documentId: string;\n    spreadMode: SpreadMode;\n  };\n}\n\nexport interface SetPageGroupingAction extends Action {\n  type: typeof SET_PAGE_GROUPING;\n  payload: {\n    documentId: string;\n    grouping: number[][];\n  };\n}\n\nexport type SpreadAction =\n  | InitSpreadStateAction\n  | CleanupSpreadStateAction\n  | SetActiveSpreadDocumentAction\n  | SetSpreadModeAction\n  | SetPageGroupingAction;\n\n// Action Creators\nexport function initSpreadState(\n  documentId: string,\n  state: SpreadDocumentState,\n): InitSpreadStateAction {\n  return { type: INIT_SPREAD_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupSpreadState(documentId: string): CleanupSpreadStateAction {\n  return { type: CLEANUP_SPREAD_STATE, payload: documentId };\n}\n\nexport function setActiveSpreadDocument(documentId: string | null): SetActiveSpreadDocumentAction {\n  return { type: SET_ACTIVE_SPREAD_DOCUMENT, payload: documentId };\n}\n\nexport function setSpreadMode(documentId: string, spreadMode: SpreadMode): SetSpreadModeAction {\n  return { type: SET_SPREAD_MODE, payload: { documentId, spreadMode } };\n}\n\nexport function setPageGrouping(documentId: string, grouping: number[][]): SetPageGroupingAction {\n  return { type: SET_PAGE_GROUPING, payload: { documentId, grouping } };\n}\n","import { BasePlugin, createBehaviorEmitter, Listener, PluginRegistry } from '@embedpdf/core';\nimport { PdfPageObject } from '@embedpdf/models';\nimport {\n  SpreadCapability,\n  SpreadMode,\n  SpreadPluginConfig,\n  SpreadState,\n  SpreadScope,\n  SpreadChangeEvent,\n  SpreadDocumentState,\n} from './types';\nimport {\n  setSpreadMode,\n  initSpreadState,\n  cleanupSpreadState,\n  SpreadAction,\n  setPageGrouping,\n} from './actions';\nimport { ViewportCapability, ViewportPlugin } from '@embedpdf/plugin-viewport';\n\nexport class SpreadPlugin extends BasePlugin<\n  SpreadPluginConfig,\n  SpreadCapability,\n  SpreadState,\n  SpreadAction\n> {\n  static readonly id = 'spread' as const;\n\n  private readonly spreadEmitter$ = createBehaviorEmitter<SpreadChangeEvent>();\n  private readonly defaultSpreadMode: SpreadMode;\n  private readonly viewport: ViewportCapability | null;\n\n  constructor(id: string, registry: PluginRegistry, cfg: SpreadPluginConfig) {\n    super(id, registry);\n    this.defaultSpreadMode = cfg.defaultSpreadMode ?? SpreadMode.None;\n\n    this.viewport = registry.getPlugin<ViewportPlugin>('viewport')?.provides() ?? null;\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Document Lifecycle Hooks (from BasePlugin)\n  // ─────────────────────────────────────────────────────────\n\n  protected override onDocumentLoadingStarted(documentId: string): void {\n    // Initialize spread state for this document\n    const docState: SpreadDocumentState = {\n      spreadMode: this.defaultSpreadMode,\n    };\n\n    this.dispatch(initSpreadState(documentId, docState));\n    this.viewport?.gate('spread', documentId);\n    this.logger.debug(\n      'SpreadPlugin',\n      'DocumentOpened',\n      `Initialized spread state for document: ${documentId}`,\n    );\n  }\n\n  protected override onDocumentLoaded(documentId: string): void {\n    // Calculate grouping indices and store in plugin state\n    const coreDoc = this.coreState.core.documents[documentId];\n    if (coreDoc?.document) {\n      const grouping = this.calculatePageGrouping(documentId, coreDoc.document.pages.length);\n\n      // Store grouping in plugin state\n      this.dispatch(setPageGrouping(documentId, grouping));\n    }\n    this.viewport?.releaseGate('spread', documentId);\n  }\n\n  protected override onDocumentClosed(documentId: string): void {\n    this.dispatch(cleanupSpreadState(documentId));\n\n    this.logger.debug(\n      'SpreadPlugin',\n      'DocumentClosed',\n      `Cleaned up spread state for document: ${documentId}`,\n    );\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Capability\n  // ─────────────────────────────────────────────────────────\n\n  protected buildCapability(): SpreadCapability {\n    return {\n      // Active document operations\n      setSpreadMode: (mode: SpreadMode) => this.setSpreadModeForDocument(mode),\n      getSpreadMode: () => this.getSpreadModeForDocument(),\n      getSpreadPages: () => this.getSpreadPages(),\n      // Document-scoped operations\n      forDocument: (documentId: string) => this.createSpreadScope(documentId),\n\n      // Events\n      onSpreadChange: this.spreadEmitter$.on,\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Document Scoping\n  // ─────────────────────────────────────────────────────────\n\n  private createSpreadScope(documentId: string): SpreadScope {\n    return {\n      setSpreadMode: (mode: SpreadMode) => this.setSpreadModeForDocument(mode, documentId),\n      getSpreadMode: () => this.getSpreadModeForDocument(documentId),\n      getSpreadPages: () => this.getSpreadPages(documentId),\n      onSpreadChange: (listener: Listener<SpreadMode>) =>\n        this.spreadEmitter$.on((event) => {\n          if (event.documentId === documentId) listener(event.spreadMode);\n        }),\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // State Helpers\n  // ─────────────────────────────────────────────────────────\n  private getDocumentState(documentId?: string): SpreadDocumentState | null {\n    const id = documentId ?? this.getActiveDocumentId();\n    return this.state.documents[id] ?? null;\n  }\n\n  private getDocumentStateOrThrow(documentId?: string): SpreadDocumentState {\n    const state = this.getDocumentState(documentId);\n    if (!state) {\n      throw new Error(`Spread state not found for document: ${documentId ?? 'active'}`);\n    }\n    return state;\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Core Operations\n  // ─────────────────────────────────────────────────────────\n\n  private setSpreadModeForDocument(mode: SpreadMode, documentId?: string): void {\n    const id = documentId ?? this.getActiveDocumentId();\n    const currentState = this.getDocumentStateOrThrow(id);\n    const coreDoc = this.coreState.core.documents[id];\n\n    if (!coreDoc?.document) {\n      throw new Error(`Document ${id} not loaded`);\n    }\n\n    if (currentState.spreadMode !== mode) {\n      // Update plugin state\n      this.dispatch(setSpreadMode(id, mode));\n\n      // Calculate new grouping\n      const grouping = this.calculatePageGrouping(id, coreDoc.document.pages.length);\n      this.dispatch(setPageGrouping(id, grouping));\n\n      // Emit event\n      this.spreadEmitter$.emit({\n        documentId: id,\n        spreadMode: mode,\n      });\n    }\n  }\n\n  private getSpreadModeForDocument(documentId?: string): SpreadMode {\n    return this.getDocumentStateOrThrow(documentId).spreadMode;\n  }\n\n  /**\n   * Calculate page grouping indices based on spread mode\n   * Returns indices, not actual page objects\n   */\n  private calculatePageGrouping(documentId: string, pageCount: number): number[][] {\n    const docState = this.getDocumentStateOrThrow(documentId);\n    const spreadMode = docState.spreadMode;\n\n    switch (spreadMode) {\n      case SpreadMode.None:\n        // [[0], [1], [2], [3], ...]\n        return Array.from({ length: pageCount }, (_, i) => [i]);\n\n      case SpreadMode.Odd:\n        // [[0, 1], [2, 3], [4, 5], ...]\n        return Array.from({ length: Math.ceil(pageCount / 2) }, (_, i) => {\n          const indices = [i * 2];\n          if (i * 2 + 1 < pageCount) indices.push(i * 2 + 1);\n          return indices;\n        });\n\n      case SpreadMode.Even:\n        // [[0], [1, 2], [3, 4], [5, 6], ...]\n        return [\n          [0],\n          ...Array.from({ length: Math.ceil((pageCount - 1) / 2) }, (_, i) => {\n            const indices = [1 + i * 2];\n            if (1 + i * 2 + 1 < pageCount) indices.push(1 + i * 2 + 1);\n            return indices;\n          }),\n        ];\n\n      default:\n        return Array.from({ length: pageCount }, (_, i) => [i]);\n    }\n  }\n\n  /**\n   * Get the actual page objects grouped according to spread mode\n   * This is computed on-demand, not stored\n   */\n  private getSpreadPages(documentId?: string): PdfPageObject[][] {\n    const id = documentId ?? this.getActiveDocumentId();\n    const coreDoc = this.coreState.core.documents[id];\n    const spreadState = this.getDocumentStateOrThrow(id);\n\n    if (!coreDoc?.document) {\n      throw new Error(`Document ${id} not loaded`);\n    }\n\n    const grouping = spreadState.pageGrouping ?? [];\n    const pages = coreDoc.document.pages;\n\n    // Map indices to actual page objects\n    return grouping.map((indices) => indices.map((idx) => pages[idx]).filter(Boolean));\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Store Update Handlers\n  // ─────────────────────────────────────────────────────────\n\n  override onStoreUpdated(prevState: SpreadState, newState: SpreadState): void {\n    // Emit spread change events for each changed document\n    for (const documentId in newState.documents) {\n      const prevDoc = prevState.documents[documentId];\n      const newDoc = newState.documents[documentId];\n\n      if (prevDoc?.spreadMode !== newDoc.spreadMode) {\n        this.logger.debug(\n          'SpreadPlugin',\n          'SpreadModeChanged',\n          `Spread mode changed for document ${documentId}: ${prevDoc?.spreadMode ?? SpreadMode.None} -> ${newDoc.spreadMode}`,\n        );\n      }\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Lifecycle\n  // ─────────────────────────────────────────────────────────\n\n  async initialize(_config: SpreadPluginConfig): Promise<void> {\n    this.logger.info('SpreadPlugin', 'Initialize', 'Spread plugin initialized');\n  }\n\n  async destroy(): Promise<void> {\n    this.spreadEmitter$.clear();\n    super.destroy();\n  }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { SpreadPluginConfig } from './types';\n\nexport const SPREAD_PLUGIN_ID = 'spread';\n\nexport const manifest: PluginManifest<SpreadPluginConfig> = {\n  id: SPREAD_PLUGIN_ID,\n  name: 'Spread Plugin',\n  version: '1.0.0',\n  provides: ['spread'],\n  requires: [],\n  optional: ['viewport'],\n  defaultConfig: {},\n};\n","import { Reducer } from '@embedpdf/core';\nimport {\n  SpreadAction,\n  INIT_SPREAD_STATE,\n  CLEANUP_SPREAD_STATE,\n  SET_ACTIVE_SPREAD_DOCUMENT,\n  SET_SPREAD_MODE,\n  SET_PAGE_GROUPING,\n} from './actions';\nimport { SpreadState, SpreadDocumentState, SpreadMode } from './types';\n\nexport const initialDocumentState: SpreadDocumentState = {\n  spreadMode: SpreadMode.None,\n};\n\nexport const initialState: SpreadState = {\n  documents: {},\n  activeDocumentId: null,\n};\n\nexport const spreadReducer: Reducer<SpreadState, SpreadAction> = (state = initialState, action) => {\n  switch (action.type) {\n    case INIT_SPREAD_STATE: {\n      const { documentId, state: docState } = action.payload;\n      return {\n        ...state,\n        documents: {\n          ...state.documents,\n          [documentId]: docState,\n        },\n        // Set as active if no active document\n        activeDocumentId: state.activeDocumentId ?? documentId,\n      };\n    }\n\n    case CLEANUP_SPREAD_STATE: {\n      const documentId = action.payload;\n      const { [documentId]: removed, ...remainingDocs } = state.documents;\n      return {\n        ...state,\n        documents: remainingDocs,\n        activeDocumentId: state.activeDocumentId === documentId ? null : state.activeDocumentId,\n      };\n    }\n\n    case SET_ACTIVE_SPREAD_DOCUMENT: {\n      return {\n        ...state,\n        activeDocumentId: action.payload,\n      };\n    }\n\n    case SET_SPREAD_MODE: {\n      const { documentId, spreadMode } = action.payload;\n      const docState = state.documents[documentId];\n      if (!docState) return state;\n\n      return {\n        ...state,\n        documents: {\n          ...state.documents,\n          [documentId]: {\n            ...docState,\n            spreadMode,\n          },\n        },\n      };\n    }\n\n    case SET_PAGE_GROUPING: {\n      const { documentId, grouping } = action.payload;\n      const docState = state.documents[documentId];\n      if (!docState) return state;\n\n      return {\n        ...state,\n        documents: {\n          ...state.documents,\n          [documentId]: {\n            ...docState,\n            pageGrouping: grouping,\n          },\n        },\n      };\n    }\n\n    default:\n      return state;\n  }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { SpreadPlugin } from './spread-plugin';\nimport { manifest, SPREAD_PLUGIN_ID } from './manifest';\nimport { SpreadPluginConfig, SpreadState } from './types';\nimport { spreadReducer, initialState } from './reducer';\nimport { SpreadAction } from './actions';\n\nexport const SpreadPluginPackage: PluginPackage<\n  SpreadPlugin,\n  SpreadPluginConfig,\n  SpreadState,\n  SpreadAction\n> = {\n  manifest,\n  create: (registry, config) => new SpreadPlugin(SPREAD_PLUGIN_ID, registry, config),\n  reducer: spreadReducer,\n  initialState,\n};\n\nexport * from './spread-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\nexport * from './reducer';\n"],"names":["SpreadMode","INIT_SPREAD_STATE","CLEANUP_SPREAD_STATE","SET_ACTIVE_SPREAD_DOCUMENT","SET_SPREAD_MODE","SET_PAGE_GROUPING","initSpreadState","documentId","state","type","payload","cleanupSpreadState","setSpreadMode","spreadMode","setPageGrouping","grouping","_SpreadPlugin","BasePlugin","constructor","id","registry","cfg","super","this","spreadEmitter$","createBehaviorEmitter","defaultSpreadMode","None","viewport","_a","getPlugin","provides","onDocumentLoadingStarted","docState","dispatch","gate","logger","debug","onDocumentLoaded","coreDoc","coreState","core","documents","document","calculatePageGrouping","pages","length","releaseGate","onDocumentClosed","buildCapability","mode","setSpreadModeForDocument","getSpreadMode","getSpreadModeForDocument","getSpreadPages","forDocument","createSpreadScope","onSpreadChange","on","listener","event","getDocumentState","getActiveDocumentId","getDocumentStateOrThrow","Error","currentState","emit","pageCount","Array","from","_","i","Odd","Math","ceil","indices","push","Even","spreadState","pageGrouping","map","idx","filter","Boolean","onStoreUpdated","prevState","newState","prevDoc","newDoc","initialize","_config","info","destroy","clear","SpreadPlugin","SPREAD_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","initialDocumentState","initialState","activeDocumentId","spreadReducer","action","removed","remainingDocs","SpreadPluginPackage","create","config","reducer"],"mappings":"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"}