Skip to content

Releases: embedpdf/embed-pdf-viewer

Release Next v2.0.0-next.2

15 Dec 22:12
30887ca

Choose a tag to compare

Pre-release

@embedpdf/[email protected]

Minor Changes

  • 89b94a0 by @bobsingor – Added pageNumber and totalPages properties to LayoutReadyEvent. This allows consumers to get the current page information immediately when the layout becomes ready, without needing to subscribe to a separate onPageChange event.

@embedpdf/[email protected]

Minor Changes

  • #293 by @github-actions – Added data-hidden-items attribute for efficient CSS dependency rules.

    Problem: Visibility dependency rules (e.g., hiding overflow buttons when all menu items are hidden) required exponential CSS rules when using category-based logic, causing stylesheet bloat.

    Solution:

    • Added hiddenItems state that tracks which item IDs are hidden based on disabled categories
    • Dependency rules now use data-epdf-hid attribute to check item IDs directly
    • CSS rules are now O(n) per breakpoint instead of O(m^n)

    New APIs:

    • getHiddenItems() - returns array of hidden item IDs
    • onCategoryChanged event now includes hiddenItems in payload
    • extractItemCategories(schema) - extracts item→categories mapping
    • computeHiddenItems(itemCategories, disabledCategories) - computes hidden items

    Breaking Changes: None - existing disabledCategories API unchanged

@embedpdf/[email protected]

Minor Changes

  • 89b94a0 by @bobsingor – Added comprehensive type exports for all plugin Capabilities and Scopes, enabling proper TypeScript support when using plugin APIs.

    New Type Exports

    All plugins now export their *Capability and *Scope types, allowing developers to properly type variables when using plugin.provides() and forDocument():

    • Viewport: ViewportCapability, ViewportScope, ViewportMetrics
    • Scroll: ScrollCapability, ScrollScope, ScrollMetrics, PageChangeEvent, ScrollEvent, LayoutChangeEvent
    • Spread: SpreadCapability, SpreadScope
    • Zoom: ZoomCapability, ZoomScope, ZoomLevel, ZoomChangeEvent
    • Rotate: RotateCapability, RotateScope
    • Tiling: TilingCapability, TilingScope
    • Thumbnail: ThumbnailCapability, ThumbnailScope
    • Annotation: AnnotationCapability, AnnotationScope, AnnotationEvent
    • Search: SearchCapability, SearchScope
    • Selection: SelectionCapability, SelectionScope
    • Capture: CaptureCapability, CaptureScope
    • Redaction: RedactionCapability, RedactionScope, RedactionMode, RedactionItem
    • UI: UIScope (UICapability was already exported)
    • I18n: I18nCapability, I18nScope, Locale, LocaleChangeEvent
    • Commands: CommandScope (CommandsCapability was already exported)
    • DocumentManager: DocumentManagerCapability, DocumentChangeEvent, LoadDocumentUrlOptions, LoadDocumentBufferOptions
    • Print: PrintCapability, PrintScope
    • Fullscreen: FullscreenCapability
    • Bookmark: BookmarkCapability, BookmarkScope
    • Export: ExportCapability, ExportScope
    • Pan: PanCapability, PanScope
    • History: HistoryCapability, HistoryScope
    • Attachment: AttachmentCapability, AttachmentScope
    • Render: RenderCapability, RenderScope
    • InteractionManager: InteractionManagerCapability, InteractionManagerScope

    Usage Example

    import {
      ScrollPlugin,
      type ScrollCapability,
      type ScrollScope,
      type PageChangeEvent,
    } from '@embedpdf/snippet';
    
    // Type the capability returned by provides()
    const scroll: ScrollCapability = registry
      .getPlugin<ScrollPlugin>('scroll')
      ?.provides();
    
    // Type the scoped API for a specific document
    const doc: ScrollScope = scroll.forDocument('my-document');
    
    // Type event callbacks
    scroll.onPageChange((event: PageChangeEvent) => {
      console.log(`Page ${event.pageNumber} of ${event.totalPages}`);
    });
  • #293 by @github-actions – Added global disabledCategories config and hierarchical categories for fine-grained feature control.

    Global disabledCategories Configuration

    Added disabledCategories to the root PDFViewerConfig that applies to both UI and Commands plugins:

    const config: PDFViewerConfig = {
      src: 'document.pdf',
      // Disable all annotation and redaction features globally
      disabledCategories: ['annotation', 'redaction'],
    };

    Plugin-specific settings can override the global setting:

    const config: PDFViewerConfig = {
      disabledCategories: ['annotation'], // Global default
      ui: {
        disabledCategories: ['redaction'], // Overrides for UI only
      },
      commands: {
        disabledCategories: [], // Re-enables all for commands
      },
    };

    Hierarchical Categories

    All commands and UI schema items now have hierarchical categories for granular control:

    • annotation - all annotation features
      • annotation-markup - highlight, underline, strikeout, squiggly
        • annotation-highlight, annotation-underline, etc.
      • annotation-shape - rectangle, circle, line, arrow, polygon, polyline
        • annotation-rectangle, annotation-circle, etc.
      • annotation-ink, annotation-text, annotation-stamp
    • redaction - all redaction features
      • redaction-text, redaction-area, redaction-apply, redaction-clear
    • zoom - all zoom features
      • zoom-in, zoom-out, zoom-fit-page, zoom-fit-width, zoom-marquee
      • zoom-level - all zoom level presets
    • document - document operations
      • document-open, document-close, document-print, document-export, document-fullscreen
    • panel - sidebar panels
      • panel-sidebar, panel-search, panel-comment, panel-annotation-style
    • page - page settings
      • spread, scroll, rotate
    • history - undo/redo
      • history-undo, history-redo
    • mode - viewer modes
      • mode-view, mode-annotate, mode-shapes, mode-redact
    • tools - tool buttons
      • pan, pointer, capture

    Example: Disable only print functionality while keeping export:

    disabledCategories: ['document-print'];
  • #293 by @github-actions – Added Spanish translations, improved i18n support, and enhanced plugin configuration API.

    New Features

    • Spanish Translations: Added Spanish (es) locale support with complete translations for all UI elements and commands.
    • Annotation Sidebar Translations: Sidebar titles are now properly translated using i18n keys. Added missing translation keys (annotation.freeText, annotation.square, annotation.styles, annotation.defaults) to all 5 languages.

    Improvements

    • Partial Plugin Configs: All plugin configuration options in PDFViewerConfig now use Partial<> types, making it easier to override only the settings you need without specifying all required fields.
    • Reactive Blend Mode Labels: Blend mode dropdown labels in the annotation sidebar now update reactively when the language changes.
    • Search Sidebar Layout: Changed search options checkboxes from horizontal to vertical layout for better compatibility with longer translated labels.
    // Override just specific settings
    <PDFViewer
      config={{
        src: '/document.pdf',
        zoom: { defaultZoomLevel: ZoomMode.FitWidth },
        i18n: { defaultLocale: 'es' }, // Use Spanish translations
      }}
    />

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release Next v2.0.0-next.1

05 Dec 15:54
30887ca

Choose a tag to compare

Pre-release

@embedpdf/[email protected]

Minor Changes

  • #283 by @github-actions – ## Remove initialPage Config & Add isInitial to LayoutReadyEvent

    Breaking Changes

    • Removed initialPage config option: The initialPage configuration option has been removed from ScrollPluginConfig. With multi-document support, a global initial page setting no longer makes sense.

    Migration

    To scroll to a specific page when a document loads, use the onLayoutReady event instead:

    import { useCapability } from '@embedpdf/core/react';
    import type { ScrollPlugin } from '@embedpdf/plugin-scroll';
    
    const ScrollToPageOnLoad = ({ documentId, initialPage }) => {
      const { provides: scrollCapability } =
        useCapability<ScrollPlugin>('scroll');
    
      useEffect(() => {
        if (!scrollCapability) return;
    
        const unsubscribe = scrollCapability.onLayoutReady((event) => {
          if (event.documentId === documentId && event.isInitial) {
            scrollCapability.forDocument(documentId).scrollToPage({
              pageNumber: initialPage,
              behavior: 'instant',
            });
          }
        });
    
        return unsubscribe;
      }, [scrollCapability, documentId, initialPage]);
    
      return null;
    };

    New Features

    • isInitial flag on LayoutReadyEvent: The onLayoutReady event now includes an isInitial boolean that is true only on the first layout after document load, and false on subsequent layouts (e.g., when switching between tabs). This allows distinguishing between initial document load and tab reactivation.

@embedpdf/[email protected]

Patch Changes

  • caec11d by @bobsingor – Updated useCommand hook to return { current: ResolvedCommand | null } instead of { command: ResolvedCommand | null } for consistency with other Svelte hooks. Updated KeyboardShortcuts component to use the new pattern.

    Migration:

    <!-- Before -->
    const cmd = useCommand(() => 'nav.next', () => documentId); // Access: cmd.command?.execute()
    
    <!-- After -->
    const cmd = useCommand(() => 'nav.next', () => documentId); // Access: cmd.current?.execute()

@embedpdf/[email protected]

Patch Changes

  • caec11d by @bobsingor – Fixed useOpenDocuments hook to correctly handle empty documentIds arrays. Previously, passing an empty array would fall through to returning all documents; now it correctly returns an empty array. This fix applies to React, Vue, and Svelte hooks.

@embedpdf/[email protected]

Patch Changes

  • caec11d by @bobsingor – Fixed Vue useTranslations hook reactivity for locale computed property. The locale value now correctly updates when the locale changes.

@embedpdf/[email protected]

Patch Changes

  • caec11d by @bobsingor – Added configurable menuHeight option to SelectionPluginConfig. This allows customizing the height used to determine whether the selection menu appears above or below the selection. Default value is 40 pixels. Also fixed type imports in Svelte SelectionLayer component.

    createPluginRegistration(SelectionPluginPackage, {
      enabled: true,
      menuHeight: 50, // Custom menu height for placement calculations
    });

@embedpdf/[email protected]

Patch Changes

  • caec11d by @bobsingor – Refactored CounterRotateContainer to use a Svelte action (action: Action<HTMLElement>) instead of a ref callback (ref: (el: HTMLElement | null) => void). This is the idiomatic Svelte pattern for attaching lifecycle-managed behavior to DOM elements. Updated MenuWrapperProps type accordingly.

    Migration:

    <!-- Before -->
    <span bind:this={el} style={menuWrapperProps.style}>
    $effect(() => { menuWrapperProps.ref(el); });
    
    <!-- After -->
    <span use:menuWrapperProps.action style={menuWrapperProps.style}>

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release Next v2.0.0-next.0

03 Dec 22:42
30887ca

Choose a tag to compare

Pre-release

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    This is a major refactoring to support multiple documents in a single viewer instance. The core architecture has been significantly enhanced to manage per-document state and lifecycle.

    Breaking Changes

    • Store Structure: Core state now uses documents: Record<string, DocumentState> instead of a single document property. Each document has its own state including pages, scale, rotation, and other document-specific properties.
    • BasePlugin Lifecycle: Added new protected lifecycle methods that plugins can override:
      • onDocumentLoadingStarted(documentId: string) - Called when a document starts loading
      • onDocumentLoaded(documentId: string) - Called when a document finishes loading
      • onDocumentClosed(documentId: string) - Called when a document is closed
      • onActiveDocumentChanged(previousId: string | null, currentId: string | null) - Called when the active document changes
      • onScaleChanged(documentId: string, scale: number) - Called when document scale changes
      • onRotationChanged(documentId: string, rotation: number) - Called when document rotation changes
    • Document Access: New helper methods in BasePlugin:
      • getActiveDocumentId() - Get the active document ID (throws if none)
      • getActiveDocumentIdOrNull() - Get the active document ID or null
      • getCoreDocument(documentId?: string) - Get document state by ID
      • getCoreDocumentOrThrow(documentId?: string) - Get document state or throw
    • Actions: All core actions now support an optional documentId parameter. Actions that previously operated on a single document now require explicit document targeting.
    • State Management: The store now tracks multiple documents with an activeDocumentId field to indicate which document is currently active.

    New Features

    • Support for opening and managing multiple PDF documents simultaneously
    • Per-document state isolation
    • Document lifecycle management with proper cleanup
    • Active document tracking and switching

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    The annotation plugin now supports multiple documents with per-document annotation state and tool management.

    Breaking Changes

    • All Actions: All annotation actions now require a documentId parameter:
      • setAnnotations(documentId, annotations) - was setAnnotations(annotations)
      • selectAnnotation(documentId, pageIndex, id) - was selectAnnotation(pageIndex, id)
      • deselectAnnotation(documentId) - was deselectAnnotation() (no params)
      • setActiveToolId(documentId, toolId) - was setActiveToolId(toolId)
      • createAnnotation(documentId, pageIndex, annotation) - was createAnnotation(pageIndex, annotation)
      • patchAnnotation(documentId, pageIndex, id, patch) - was patchAnnotation(pageIndex, id, patch)
      • deleteAnnotation(documentId, pageIndex, id) - was deleteAnnotation(pageIndex, id)
      • commitPendingChanges(documentId) - was commitPendingChanges() (no params)
      • purgeAnnotation(documentId, uid) - was purgeAnnotation(uid)
    • State Structure: Plugin state now uses documents: Record<string, AnnotationDocumentState> instead of a flat structure. Each document has its own annotations, selected annotation, and active tool.
    • Capability Methods: All capability methods that previously operated on a single document now require document scoping or operate on the active document by default.

    Framework-Specific Changes (React/Preact, Svelte, Vue)

    • AnnotationContainer Component:
      • Now requires documentId prop (React/Preact: @embedpdf/plugin-annotation/react, Svelte: @embedpdf/plugin-annotation/svelte, Vue: @embedpdf/plugin-annotation/vue)
      • Component now uses forDocument(documentId) to get document-scoped annotation capability
      • selectionMenu prop type changed to AnnotationSelectionMenuRenderFn for better type safety
      • Bounding box constraints now use unscaled page dimensions (scale is applied internally)
    • Annotation Hooks:
      • All hooks now work with document-scoped capabilities via forDocument()
      • Components automatically scope operations to the provided documentId

    New Features

    • Per-document annotation storage and management
    • Per-document active tool tracking
    • Document lifecycle hooks for automatic state initialization and cleanup
    • forDocument() method for document-scoped operations

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    The attachment plugin now supports accessing attachments from multiple documents.

    Breaking Changes

    • Methods: All methods now accept an optional documentId parameter and operate on the active document by default:
      • getAttachments(documentId?) - Returns attachments for the specified or active document
      • downloadAttachment(attachment, documentId?) - Downloads attachment from the specified or active document
    • Capability: Added forDocument(documentId) method that returns AttachmentScope for document-specific operations.

    Framework-Specific Changes (React/Preact, Svelte, Vue)

    • Hooks:
      • Added Svelte hooks support (@embedpdf/plugin-attachment/svelte)
      • All hooks work with document-scoped capabilities via forDocument()

    New Features

    • AttachmentScope interface for document-scoped attachment operations
    • Support for accessing attachments from any document, not just the active one

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    The bookmark plugin now supports accessing bookmarks from multiple documents.

    Breaking Changes

    • Methods: getBookmarks() now accepts an optional documentId parameter and operates on the active document by default.
    • Capability: Added forDocument(documentId) method that returns BookmarkScope for document-specific operations.

    Framework-Specific Changes (React/Preact, Svelte, Vue)

    • Hooks:
      • Added Svelte hooks support (@embedpdf/plugin-bookmark/svelte)
      • All hooks work with document-scoped capabilities via forDocument()

    New Features

    • BookmarkScope interface for document-scoped bookmark operations
    • Support for accessing bookmarks from any document, not just the active one

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    The capture plugin now supports multiple documents with per-document state management.

    Breaking Changes

    • CaptureAreaEvent: Now includes documentId field. All capture events are scoped to a specific document.
    • RegisterMarqueeOnPageOptions: Now requires documentId field to specify which document the marquee capture should be registered for.
    • CaptureCapability:
      • Removed onMarqueeCaptureActiveChange event hook
      • Added onStateChange event hook that emits StateChangeEvent with documentId and state
      • Added getState() method to get current document state
      • Added forDocument(documentId: string) method that returns a CaptureScope for document-specific operations
    • State Management: Plugin now maintains per-document state with CaptureDocumentState tracking isMarqueeCaptureActive per document.

    Framework-Specific Changes (React/Preact, Svelte, Vue)

    • MarqueeCapture Component:
      • Now requires documentId prop (React/Preact: @embedpdf/plugin-capture/react, Svelte: @embedpdf/plugin-capture/svelte, Vue: @embedpdf/plugin-capture/vue)
      • scale prop is now optional - if not provided, uses document state scale
      • Component now uses useDocumentState hook to get document scale automatically
    • useCapture Hook:
      • Now requires documentId parameter: useCapture(documentId)
      • Returns document-scoped capture state and operations

    New Features

    • CaptureScope interface for document-scoped operations
    • Per-document marquee capture state tracking
    • Document lifecycle management with automatic state initialization and cleanup
    • forDocument() method for operating on specific documents

@embedpdf/[email protected]

Major Changes

  • #279 by @bobsingor – ## Multi-Document Support

    The commands plugin now supports command registration and execution with document awareness.

    Breaking Changes

    • Plugin Architecture: Complete rewrite to support command registration, execution tracking, and state management.
    • Command Execution: Commands now receive document context and can...
Read more

Release v1.5.0

02 Dec 15:29
30887ca

Choose a tag to compare

@embedpdf/[email protected]

Minor Changes

  • #238 by @0xbe7a – Add optional form widget rendering to the render pipeline.

    What changed

    • @embedpdf/models

      • PdfRenderPageOptions now supports withForms?: boolean to request drawing interactive form widgets.
    • @embedpdf/engines

      • PdfiumEngine.renderPage and renderPageRect honor withForms.
        When enabled, the engine initializes the page form handle and calls FPDF_FFLDraw with the correct device transform.
      • New helper computeFormDrawParams(matrix, rect, pageSize, rotation) calculates start offsets and sizes for FPDF_FFLDraw.
    • @embedpdf/plugin-render

      • New plugin config flags:
        • withForms?: boolean (default false)
        • withAnnotations?: boolean (default false)
      • The plugin merges per-call options with plugin defaults so callers can set once at init or override per call.

@embedpdf/[email protected]

Minor Changes

  • #238 by @0xbe7a – Add optional form widget rendering to the render pipeline.

    What changed

    • @embedpdf/models

      • PdfRenderPageOptions now supports withForms?: boolean to request drawing interactive form widgets.
    • @embedpdf/engines

      • PdfiumEngine.renderPage and renderPageRect honor withForms.
        When enabled, the engine initializes the page form handle and calls FPDF_FFLDraw with the correct device transform.
      • New helper computeFormDrawParams(matrix, rect, pageSize, rotation) calculates start offsets and sizes for FPDF_FFLDraw.
    • @embedpdf/plugin-render

      • New plugin config flags:
        • withForms?: boolean (default false)
        • withAnnotations?: boolean (default false)
      • The plugin merges per-call options with plugin defaults so callers can set once at init or override per call.

@embedpdf/[email protected]

Minor Changes

  • #238 by @0xbe7a – Add optional form widget rendering to the render pipeline.

    What changed

    • @embedpdf/models

      • PdfRenderPageOptions now supports withForms?: boolean to request drawing interactive form widgets.
    • @embedpdf/engines

      • PdfiumEngine.renderPage and renderPageRect honor withForms.
        When enabled, the engine initializes the page form handle and calls FPDF_FFLDraw with the correct device transform.
      • New helper computeFormDrawParams(matrix, rect, pageSize, rotation) calculates start offsets and sizes for FPDF_FFLDraw.
    • @embedpdf/plugin-render

      • New plugin config flags:
        • withForms?: boolean (default false)
        • withAnnotations?: boolean (default false)
      • The plugin merges per-call options with plugin defaults so callers can set once at init or override per call.

@embedpdf/[email protected]

Patch Changes

  • #236 by @eposha – Increase zoom precision from two decimals to three (changed rounding from /100 to /1000) to improve smoother zoom granularity and reduce jumpy transitions.

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release v1.4.1

22 Oct 21:13
66f2e7c

Choose a tag to compare

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update Svelte hooks (useCapability, useCoreState, usePlugin) to return reactive $state objects instead of computed getters for better integration with Svelte 5's reactivity model.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update usePdfiumEngine hook to return a reactive $state object directly, simplifying state management for consumers.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – feat: Add Svelte 5 adapter (/svelte export) for the Capture plugin. Includes Rune-based hooks (useCapture, useCaptureCapability, useCapturePlugin) and the MarqueeCapture.svelte component.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update Download.svelte component to correctly access plugin and capability instances from the refactored hooks.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update FullscreenProvider.svelte component and useFullscreen hook to work with the refactored Svelte core hooks, returning reactive state objects.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update provider components (GlobalPointerProvider, PagePointerProvider) and hooks (useInteractionManager, useCursor, usePointerHandlers, useIsPageExclusive) to use the refactored Svelte core hooks and return reactive state objects.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update FilePicker.svelte component to correctly access the loader capability instance from the refactored hook.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update usePan hook to return a reactive state object, aligning with the core hook refactoring.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update Rotate.svelte component and useRotate hook to work with the refactored Svelte core hooks and return a reactive state object.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update Scroller.svelte component and useScroll hook to use refactored core hooks and return a reactive state object. Introduced shared RenderPageProps type. Adjusted Vue components accordingly.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update SearchLayer.svelte component and useSearch hook to use refactored core hooks and return a reactive state object.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update CopyToClipboard.svelte and SelectionLayer.svelte components to correctly access plugin/capability instances from refactored hooks.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update useSpread hook to return a reactive state object, aligning with the core hook refactoring.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update ThumbImg.svelte and ThumbnailsPane.svelte components to correctly access plugin/capability instances from refactored hooks.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update TileImg.svelte and TilingLayer.svelte components to correctly access capability/core state instances from refactored hooks.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update Viewport.svelte component and useViewportRef hook to use refactored core hooks. Introduced useViewportScrollActivity hook returning reactive state. Renamed internal hook file.

@embedpdf/[email protected]

Patch Changes

  • #234 by @bobsingor – refactor(svelte): Update MarqueeZoom.svelte, PinchWrapper.svelte components and useZoom, usePinch hooks to work with refactored core hooks and return reactive state objects.

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release v1.4.0

21 Oct 21:17
23639ef

Choose a tag to compare

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useRegistry, usePlugin, useCapability, useCoreState) and components (EmbedPDF, AutoMount, NestedWrapper). Enhanced core Store to prevent dispatches within reducers. Thanks to @andrewrisse for the Svelte integration work!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with PdfEngineProvider component and Rune-based hooks (useEngineContext, useEngine, usePdfiumEngine). Removed deprecated mock engine. Thanks to @andrewrisse!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useExportPlugin, useExportCapability) and Download.svelte utility component.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useFullscreen, etc.) and FullscreenProvider.svelte wrapper component.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useInteractionManager, useCursor, usePointerHandlers, useIsPageExclusive) and provider components (GlobalPointerProvider.svelte, PagePointerProvider.svelte). Thanks to @andrewrisse for adding the Svelte adapter!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useLoaderPlugin, useLoaderCapability) and FilePicker.svelte utility component. Thanks to @andrewrisse for the Svelte integration!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (usePan, etc.) and PanMode.svelte utility component.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (usePrintPlugin, usePrintCapability) and PrintFrame.svelte utility component.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useRenderPlugin, useRenderCapability) and RenderLayer.svelte component. Thanks to @andrewrisse for implementing the Svelte render layer!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useRotate, etc.) and Rotate.svelte component.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useScroll, etc.) and Scroller.svelte component. Thanks to @andrewrisse for adding the Svelte adapter and hooks!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useSearch, etc.) and SearchLayer.svelte component. Fixed initial state in shared hook.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useSelectionPlugin, useSelectionCapability), SelectionLayer.svelte component, and CopyToClipboard.svelte utility.

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useSpread, etc.).

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useThumbnailPlugin, useThumbnailCapability) and components (ThumbnailsPane.svelte, ThumbImg.svelte).

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useTilingPlugin, useTilingCapability) and components (TilingLayer.svelte, TileImg.svelte). Thanks to @andrewrisse for adding the Svelte components!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useViewportPlugin, useViewportCapability, useViewportRef) and Viewport.svelte component. Thanks to @andrewrisse for the Svelte integration!

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Add Svelte 5 adapter (/svelte export) with Rune-based hooks (useZoom, usePinch), components (MarqueeZoom.svelte, PinchWrapper.svelte), and fix for initialization timing. Thanks to @andrewrisse for adding the Svelte components and hooks!

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Minor Changes

  • #222 by @andrewrisse – feat: Update build system for Svelte 5 support. Added Svelte compilation via @sveltejs/vite-plugin-svelte and introduced SvelteDtsResolver using svelte2tsx to generate accurate TypeScript declarations for .svelte files. Adjusted Vite config generation for Svelte output.

Release v1.3.16

17 Oct 09:13
52dff4d

Choose a tag to compare

@embedpdf/[email protected]

Patch Changes

@embedpdf/[email protected]

Patch Changes

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release v1.3.15

17 Oct 07:40
ccc6a39

Choose a tag to compare

@embedpdf/[email protected]

Patch Changes

  • #218 by @odedindi – Use unique key prop in search layer component results mapping

@embedpdf/[email protected]

Patch Changes

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release v1.3.14

08 Oct 16:02
090ecc7

Choose a tag to compare

@embedpdf/[email protected]

Patch Changes

@embedpdf/[email protected]

Patch Changes

@embedpdf/[email protected]

Patch Changes

  • d4092ea by @bobsingor – Removed preventDefault() from pointer and touch event handlers in CounterRotateContainer to ensure buttons remain functional on mobile and tablet devices. Now only stopPropagation() is used to prevent event propagation without interfering with native click generation.

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

Release v1.3.13

06 Oct 20:13
6510ee3

Choose a tag to compare

@embedpdf/[email protected]

Patch Changes

  • #209 by @bobsingor – Introduces a deepToRaw utility to recursively unwrap Vue refs/reactives, and applies it to annotation rendering to prevent unnecessary re-renders.

  • #208 by @bobsingor – Introduces Vue components for annotation features, including annotation containers, layers, paint layers, and annotation types (circle, square, ink, etc.). Integrates annotation tools into the Vue-Vuetify example, updates toolbar and application logic to support annotation mode, and refactors shared annotation types for better modularity. Also adds supporting hooks and utilities for annotation interaction and state management.

@embedpdf/[email protected]

Patch Changes

  • #209 by @bobsingor – Refactor Vue render-layer to improve image URL management

@embedpdf/[email protected]

Patch Changes

  • #209 by @bobsingor – Refactor tile refresh logic and cleanup tile image components

@embedpdf/[email protected]

Patch Changes

  • e5d4729 by @bobsingor – Updates MenuWrapperProps and counter-rotate-container.vue to use lowercase event handler props for pointer and touch events

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]

@embedpdf/[email protected]