{"version":3,"file":"index.cjs","sources":["../src/lib/manifest.ts","../src/lib/utils.ts","../src/lib/actions.ts","../src/lib/rotate-plugin.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { PluginManifest } from '@embedpdf/core';\nimport { RotatePluginConfig } from './types';\n\nexport const ROTATE_PLUGIN_ID = 'rotate';\n\nexport const manifest: PluginManifest<RotatePluginConfig> = {\n  id: ROTATE_PLUGIN_ID,\n  name: 'Rotate Plugin',\n  version: '1.0.0',\n  provides: ['rotate'],\n  requires: [],\n  optional: [],\n  defaultConfig: {},\n};\n","import { Rotation } from '@embedpdf/models';\n\n/**\n * Returns the 6-tuple transformation matrix for rotation.\n * Rotation is clockwise, origin = top-left (0 0).\n *\n * ── Note on e,f ───────────────────────────────\n * For 0°/180° no translation is needed.\n * For 90°/270° you may want to pass the page\n * height / width so the page stays in positive\n * coordinates.  Keep them 0 and handle layout\n * elsewhere if that's what you do today.\n */\nexport function getRotationMatrix(\n  rotation: Rotation,\n  w: number,\n  h: number,\n): [number, number, number, number, number, number] {\n  let a = 1,\n    b = 0,\n    c = 0,\n    d = 1,\n    e = 0,\n    f = 0;\n\n  switch (rotation) {\n    case 1: // 90°\n      a = 0;\n      b = 1;\n      c = -1;\n      d = 0;\n      e = h;\n      break;\n    case 2: // 180°\n      a = -1;\n      b = 0;\n      c = 0;\n      d = -1;\n      e = w;\n      f = h;\n      break;\n    case 3: // 270°\n      a = 0;\n      b = -1;\n      c = 1;\n      d = 0;\n      f = w;\n      break;\n  }\n\n  return [a, b, c, d, e, f];\n}\n\n/**\n * Returns the CSS matrix transformation string for rotation.\n * Rotation is clockwise, origin = top-left (0 0).\n */\nexport function getRotationMatrixString(rotation: Rotation, w: number, h: number): string {\n  const [a, b, c, d, e, f] = getRotationMatrix(rotation, w, h);\n  return `matrix(${a},${b},${c},${d},${e},${f})`;\n}\n\n/**\n * Returns the next rotation.\n */\nexport function getNextRotation(current: Rotation): Rotation {\n  return ((current + 1) % 4) as Rotation;\n}\n\n/**\n * Returns the previous rotation.\n */\nexport function getPreviousRotation(current: Rotation): Rotation {\n  return ((current + 3) % 4) as Rotation; // +3 is equivalent to -1 in modulo 4\n}\n","import { Action } from '@embedpdf/core';\nimport { Rotation } from '@embedpdf/models';\nimport { RotateDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_ROTATE_STATE = 'ROTATE/INIT_STATE';\nexport const CLEANUP_ROTATE_STATE = 'ROTATE/CLEANUP_STATE';\nexport const SET_ACTIVE_ROTATE_DOCUMENT = 'ROTATE/SET_ACTIVE_DOCUMENT';\n\n// Rotation operations\nexport const SET_ROTATION = 'ROTATE/SET_ROTATION';\n\n// Document lifecycle actions\nexport interface InitRotateStateAction extends Action {\n  type: typeof INIT_ROTATE_STATE;\n  payload: {\n    documentId: string;\n    state: RotateDocumentState;\n  };\n}\n\nexport interface CleanupRotateStateAction extends Action {\n  type: typeof CLEANUP_ROTATE_STATE;\n  payload: string; // documentId\n}\n\nexport interface SetActiveRotateDocumentAction extends Action {\n  type: typeof SET_ACTIVE_ROTATE_DOCUMENT;\n  payload: string | null; // documentId\n}\n\nexport interface SetRotationAction extends Action {\n  type: typeof SET_ROTATION;\n  payload: {\n    documentId: string;\n    rotation: Rotation;\n  };\n}\n\nexport type RotateAction =\n  | InitRotateStateAction\n  | CleanupRotateStateAction\n  | SetActiveRotateDocumentAction\n  | SetRotationAction;\n\n// Action Creators\nexport function initRotateState(\n  documentId: string,\n  state: RotateDocumentState,\n): InitRotateStateAction {\n  return { type: INIT_ROTATE_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupRotateState(documentId: string): CleanupRotateStateAction {\n  return { type: CLEANUP_ROTATE_STATE, payload: documentId };\n}\n\nexport function setActiveRotateDocument(documentId: string | null): SetActiveRotateDocumentAction {\n  return { type: SET_ACTIVE_ROTATE_DOCUMENT, payload: documentId };\n}\n\nexport function setRotation(documentId: string, rotation: Rotation): SetRotationAction {\n  return { type: SET_ROTATION, payload: { documentId, rotation } };\n}\n","import {\n  BasePlugin,\n  createBehaviorEmitter,\n  Listener,\n  PluginRegistry,\n  setRotation as setCoreRotation,\n} from '@embedpdf/core';\nimport { Rotation } from '@embedpdf/models';\nimport {\n  GetMatrixOptions,\n  RotateCapability,\n  RotatePluginConfig,\n  RotateScope,\n  RotationChangeEvent,\n  RotateState,\n  RotateDocumentState,\n} from './types';\nimport { getNextRotation, getPreviousRotation, getRotationMatrixString } from './utils';\nimport { initRotateState, cleanupRotateState, setRotation, RotateAction } from './actions';\n\nexport class RotatePlugin extends BasePlugin<\n  RotatePluginConfig,\n  RotateCapability,\n  RotateState,\n  RotateAction\n> {\n  static readonly id = 'rotate' as const;\n\n  private readonly rotate$ = createBehaviorEmitter<RotationChangeEvent>();\n  private readonly defaultRotation: Rotation;\n\n  constructor(id: string, registry: PluginRegistry, cfg: RotatePluginConfig) {\n    super(id, registry);\n    this.defaultRotation = cfg.defaultRotation ?? 0;\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Document Lifecycle Hooks (from BasePlugin)\n  // ─────────────────────────────────────────────────────────\n\n  protected override onDocumentLoadingStarted(documentId: string): void {\n    // Initialize rotation state for this document\n    const docState: RotateDocumentState = {\n      rotation: this.defaultRotation,\n    };\n\n    this.dispatch(initRotateState(documentId, docState));\n\n    // Also set in core state for backwards compatibility\n    this.dispatchCoreAction(setCoreRotation(this.defaultRotation, documentId));\n\n    this.logger.debug(\n      'RotatePlugin',\n      'DocumentOpened',\n      `Initialized rotation state for document: ${documentId}`,\n    );\n  }\n\n  protected override onDocumentClosed(documentId: string): void {\n    this.dispatch(cleanupRotateState(documentId));\n\n    this.logger.debug(\n      'RotatePlugin',\n      'DocumentClosed',\n      `Cleaned up rotation state for document: ${documentId}`,\n    );\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Capability\n  // ─────────────────────────────────────────────────────────\n\n  protected buildCapability(): RotateCapability {\n    return {\n      // Active document operations\n      setRotation: (rotation: Rotation) => this.setRotationForDocument(rotation),\n      getRotation: () => this.getRotationForDocument(),\n      rotateForward: () => this.rotateForward(),\n      rotateBackward: () => this.rotateBackward(),\n\n      // Document-scoped operations\n      forDocument: (documentId: string) => this.createRotateScope(documentId),\n\n      // Events\n      onRotateChange: this.rotate$.on,\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Document Scoping\n  // ─────────────────────────────────────────────────────────\n\n  private createRotateScope(documentId: string): RotateScope {\n    return {\n      setRotation: (rotation: Rotation) => this.setRotationForDocument(rotation, documentId),\n      getRotation: () => this.getRotationForDocument(documentId),\n      rotateForward: () => this.rotateForward(documentId),\n      rotateBackward: () => this.rotateBackward(documentId),\n      onRotateChange: (listener: Listener<Rotation>) =>\n        this.rotate$.on((event) => {\n          if (event.documentId === documentId) listener(event.rotation);\n        }),\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // State Helpers\n  // ─────────────────────────────────────────────────────────\n  private getDocumentState(documentId?: string): RotateDocumentState | null {\n    const id = documentId ?? this.getActiveDocumentId();\n    return this.state.documents[id] ?? null;\n  }\n\n  private getDocumentStateOrThrow(documentId?: string): RotateDocumentState {\n    const state = this.getDocumentState(documentId);\n    if (!state) {\n      throw new Error(`Rotation state not found for document: ${documentId ?? 'active'}`);\n    }\n    return state;\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Core Operations\n  // ─────────────────────────────────────────────────────────\n\n  private setRotationForDocument(rotation: Rotation, documentId?: string): void {\n    const id = documentId ?? this.getActiveDocumentId();\n    const coreDoc = this.coreState.core.documents[id];\n\n    if (!coreDoc?.document) {\n      throw new Error(`Document ${id} not loaded`);\n    }\n\n    // Update plugin state\n    this.dispatch(setRotation(id, rotation));\n\n    // Update core state for backwards compatibility\n    this.dispatchCoreAction(setCoreRotation(rotation, id));\n\n    // Emit event\n    this.rotate$.emit({\n      documentId: id,\n      rotation,\n    });\n  }\n\n  private getRotationForDocument(documentId?: string): Rotation {\n    return this.getDocumentStateOrThrow(documentId).rotation;\n  }\n\n  private rotateForward(documentId?: string): void {\n    const id = documentId ?? this.getActiveDocumentId();\n    const currentRotation = this.getRotationForDocument(id);\n    const nextRotation = getNextRotation(currentRotation);\n    this.setRotationForDocument(nextRotation, id);\n  }\n\n  private rotateBackward(documentId?: string): void {\n    const id = documentId ?? this.getActiveDocumentId();\n    const currentRotation = this.getRotationForDocument(id);\n    const prevRotation = getPreviousRotation(currentRotation);\n    this.setRotationForDocument(prevRotation, id);\n  }\n\n  public getMatrixAsString(options: GetMatrixOptions): string {\n    return getRotationMatrixString(options.rotation, options.width, options.height);\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Store Update Handlers\n  // ─────────────────────────────────────────────────────────\n\n  override onStoreUpdated(prevState: RotateState, newState: RotateState): void {\n    // Emit rotation 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?.rotation !== newDoc.rotation) {\n        this.logger.debug(\n          'RotatePlugin',\n          'RotationChanged',\n          `Rotation changed for document ${documentId}: ${prevDoc?.rotation ?? 0} -> ${newDoc.rotation}`,\n        );\n      }\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────\n  // Lifecycle\n  // ─────────────────────────────────────────────────────────\n\n  async initialize(_config: RotatePluginConfig): Promise<void> {\n    this.logger.info('RotatePlugin', 'Initialize', 'Rotate plugin initialized');\n  }\n\n  async destroy(): Promise<void> {\n    this.rotate$.clear();\n    super.destroy();\n  }\n}\n","import { Reducer } from '@embedpdf/core';\nimport {\n  RotateAction,\n  INIT_ROTATE_STATE,\n  CLEANUP_ROTATE_STATE,\n  SET_ACTIVE_ROTATE_DOCUMENT,\n  SET_ROTATION,\n} from './actions';\nimport { RotateState, RotateDocumentState } from './types';\n\nexport const initialDocumentState: RotateDocumentState = {\n  rotation: 0,\n};\n\nexport const initialState: RotateState = {\n  documents: {},\n  activeDocumentId: null,\n};\n\nexport const rotateReducer: Reducer<RotateState, RotateAction> = (state = initialState, action) => {\n  switch (action.type) {\n    case INIT_ROTATE_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_ROTATE_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_ROTATE_DOCUMENT: {\n      return {\n        ...state,\n        activeDocumentId: action.payload,\n      };\n    }\n\n    case SET_ROTATION: {\n      const { documentId, rotation } = 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            rotation,\n          },\n        },\n      };\n    }\n\n    default:\n      return state;\n  }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { manifest, ROTATE_PLUGIN_ID } from './manifest';\nimport { RotatePluginConfig, RotateState } from './types';\nimport { RotatePlugin } from './rotate-plugin';\nimport { RotateAction } from './actions';\nimport { rotateReducer, initialState } from './reducer';\n\nexport const RotatePluginPackage: PluginPackage<\n  RotatePlugin,\n  RotatePluginConfig,\n  RotateState,\n  RotateAction\n> = {\n  manifest,\n  create: (registry, config) => new RotatePlugin(ROTATE_PLUGIN_ID, registry, config),\n  reducer: rotateReducer,\n  initialState,\n};\n\nexport * from './rotate-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\nexport * from './reducer';\nexport * from './utils';\n"],"names":["ROTATE_PLUGIN_ID","manifest","id","name","version","provides","requires","optional","defaultConfig","getRotationMatrix","rotation","w","h","a","b","c","d","e","f","getRotationMatrixString","getNextRotation","current","getPreviousRotation","INIT_ROTATE_STATE","CLEANUP_ROTATE_STATE","SET_ACTIVE_ROTATE_DOCUMENT","SET_ROTATION","initRotateState","documentId","state","type","payload","cleanupRotateState","setRotation","_RotatePlugin","BasePlugin","constructor","registry","cfg","super","this","rotate$","createBehaviorEmitter","defaultRotation","onDocumentLoadingStarted","docState","dispatch","dispatchCoreAction","setCoreRotation","logger","debug","onDocumentClosed","buildCapability","setRotationForDocument","getRotation","getRotationForDocument","rotateForward","rotateBackward","forDocument","createRotateScope","onRotateChange","on","listener","event","getDocumentState","getActiveDocumentId","documents","getDocumentStateOrThrow","Error","coreDoc","coreState","core","document","emit","nextRotation","prevRotation","getMatrixAsString","options","width","height","onStoreUpdated","prevState","newState","prevDoc","newDoc","initialize","_config","info","destroy","clear","RotatePlugin","initialState","activeDocumentId","rotateReducer","action","removed","remainingDocs","RotatePluginPackage","create","config","reducer"],"mappings":"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"}