import { computed } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';

// Secondary entry point: ng2-pdfjs-viewer/signals
//
// Read-only Angular signals projected from the viewer's @Output() events, for
// zoneless and OnPush apps that prefer reading state from signals over wiring up
// a handful of (event)="..." bindings and EventEmitter subscriptions.
//
// It reads the same outputs the component already emits - it adds no new viewer
// behaviour and sends nothing anywhere. Each signal holds the latest value from
// its source output and starts as `undefined` until that output first fires
// (`loaded`/`totalPages` are derived from page initialization).
//
// Requires Angular 16+ (signals + `@angular/core/rxjs-interop`). The base package
// keeps its `>=10` peer range; only this entry point needs 16+, so import it from
// the subpath and apps on older Angular never load it:
//
//   import { pdfViewerSignals } from "ng2-pdfjs-viewer/signals";
//
// A @ViewChild viewer is only populated in ngAfterViewInit, which is NOT an
// injection context, so pass an Injector captured earlier:
//
//   @ViewChild('viewer') viewer!: PdfJsViewerComponent;
//   private injector = inject(Injector);
//   signals!: PdfViewerSignals;
//
//   ngAfterViewInit() {
//     this.signals = pdfViewerSignals(this.viewer, { injector: this.injector });
//   }
//   // template: {{ signals.page() }} / {{ signals.totalPages() }} / {{ signals.loaded() }}
//
// Called from a constructor or field initializer (where an injection context
// exists), the `injector` option can be omitted. Subscriptions are torn down with
// the injector's DestroyRef - i.e. when the host component is destroyed.
/**
 * Project the viewer's outputs into read-only signals. See the file header for
 * usage and the injection-context rules. The returned signals are live: each
 * updates when its source output next fires.
 */
function pdfViewerSignals(viewer, options = {}) {
    const { injector } = options;
    const latest = (source) => toSignal(source, { initialValue: undefined, injector });
    const pages = latest(viewer.onPagesInit);
    return {
        page: latest(viewer.onPageChange),
        scale: latest(viewer.onScaleChange),
        totalPages: computed(() => pages()?.pagesCount),
        loaded: computed(() => pages() !== undefined),
        error: latest(viewer.onDocumentError),
        rotation: latest(viewer.onRotationChange),
        findMatches: latest(viewer.onUpdateFindMatchesCount),
        readAloud: latest(viewer.onReadAloudStateChange),
        annotationEditor: latest(viewer.onAnnotationEditorStateChange),
        annotationEditorMode: latest(viewer.annotationEditorChange),
        sidebar: latest(viewer.onSidebarViewChanged),
        metadata: latest(viewer.onMetadataLoaded),
        outline: latest(viewer.onOutlineLoaded),
        formData: latest(viewer.formDataChange),
        presentationMode: latest(viewer.onPresentationModeChanged),
        zoom: latest(viewer.zoomChange),
        cursor: latest(viewer.cursorChange),
        scroll: latest(viewer.scrollChange),
        spread: latest(viewer.spreadChange),
        pageMode: latest(viewer.pageModeChange),
    };
}

/**
 * Generated bundle index. Do not edit.
 */

export { pdfViewerSignals };
//# sourceMappingURL=ng2-pdfjs-viewer-signals.mjs.map
