Repository navigation
Release Next v3.0.0-next.19
Pre-release@cloudpdf/contract@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – Share links are grants. The operations are
grants.*under
/v1/tenants/{tenantId}/grants, the scope isgrants.manage, and the public
exchange isPOST /v1/grant-sessionswith{ grant, passphrase }. Answers say
grant/grants, the record sayspassphraseProtected, and create and update
takepassphrase. A grant has aname(1 to 100 characters, trimmed, or null).
New grants aregrt_…;shr_…ids keep working. The errors are
GrantPassphraseRequiredandGrantExpired, a layer names itsgrantId, and
everyShare*schema and type isGrant*.
@cloudpdf/engine@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – Opens a grant with
open({ kind: 'grant', grant, passphrase }), and the
document's grant isdoc.grant. The client half isexchangeGrant,
grantSessionSource,GrantSessionSourceandGrantExchangeError, and it
exchanges at/v1/grant-sessions.
@cloudpdf/sdk@3.0.0-next.19
Minor Changes
- #918 by @bobsingor –
client.sharesisclient.grants, with a grant'snameandpassphrase.
@cloudpdf/server@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – Share links are grants: routes under
/v1/tenants/{tenantId}/grants, the
grants.managescope, and the public exchange atPOST /v1/grant-sessions,
which takes{ grant, passphrase }. Migration 047 renamesshare_grantsto
grantsandshare_visitorstogrant_visitorswith their indexes and
constraints, renamespassword_hashtopassphrase_hash, and adds a grant's
name. New grants aregrt_…, andshr_…grants keep working. Session tokens
namegrant:<id>, andsecurity_eventsrecordsgrant.created,
grant.updated,grant.archivedandgrant.revoked.
@cloudpdf/viewer-angular@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };password
stays the PDF's own. The exchange helpers areexchangeGrant,
grantSessionSourceandGrantExchangeError.
@cloudpdf/viewer@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };password
stays the PDF's own. The exchange helpers areexchangeGrant,
grantSessionSourceandGrantExchangeError.
@cloudpdf/viewer-react@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };password
stays the PDF's own. The exchange helpers areexchangeGrant,
grantSessionSourceandGrantExchangeError.
@cloudpdf/viewer-svelte@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };password
stays the PDF's own. The exchange helpers areexchangeGrant,
grantSessionSourceandGrantExchangeError.
@cloudpdf/viewer-vue@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };password
stays the PDF's own. The exchange helpers areexchangeGrant,
grantSessionSourceandGrantExchangeError.
@embedpdf/core@3.0.0-next.19
Minor Changes
-
#918 by @bobsingor – A document opened with a grant reports what it waits for as
grantRequest, and
retry()takes the grant'spassphrase. -
#923 by @bobsingor –
createKernel({ fetch })takes your ownfetchfor{ kind: 'url' }documents, to add headers or cookies; it gets the URL and aninitwith the document's cancel signal, andretry()calls it again. A{ kind: 'url' }source takes anidof its own. A download the server refuses with 401 or 403 fails aspermission-denied, and one that isn't a PDF (a sign-in page, say) asinvalid-input. New exports: theHostFetchtype andisPdf(bytes).
@embedpdf/core-stage@3.0.0-next.19
Minor Changes
- #923 by @bobsingor – Zoom limits:
ZoomLimitsis a view's zoom range,resolveZoomLimits(minZoom, maxZoom)makes one insideZOOM_MINandZOOM_MAX(aminZoomabovemaxZoomcounts asmaxZoom), andclampZoom(zoom, limits)keeps a zoom inside it.resolveZoom()andzoomAround()take the limits as a last argument; without it they keep the full range.
@embedpdf/core-ui@3.0.0-next.19
Minor Changes
- #923 by @bobsingor – A bar can go at the top of a panel, under its title: the place
{ panel: id }, beside an edge,{ float },{ with }and{ at }. A panel's bars stack in the order they were added.barsInPanel(data, panel)lists them andpanelOf(place)reads the panel a place names, andvalidateLayout()names a panel the layout doesn't have, with the closest one that exists.
Patch Changes
- #923 by @bobsingor – An item without its own
importancehas its group's, as the docs say, instead of3.group('annotate', items, { importance: 2 })now moves those items into the "More" menu before the rest of the bar, and every item of a group at5stays in the bar. An item's ownimportancestill wins, and a custom item without a command is still pinned.
@embedpdf/engine-core@3.0.0-next.19
Minor Changes
- #918 by @bobsingor – The open input for a CloudPDF grant is
{ kind: 'grant', grant, passphrase?, restart? }(OpenInputGrant), and a document opened with one hasdoc.grant
(DocumentGrant), whoseresume()takespassphrase.ShareOpenRequestis
GrantOpenRequest, withpassphraseProvided, andSharePasswordRequiredis
GrantPassphraseRequired.
@embedpdf/angular@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
provideEmbedPdf({ fetch }): your ownfetchfor documents at a URL, to add headers or cookies. -
#923 by @bobsingor –
EpdfStageRef(and so the<epdf-stage>component) hascanZoomIn()andcanZoomOut(), whether the zoom is below the Stage'smaxZoomor above itsminZoom.
@embedpdf/react@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
@embedpdf/svelte@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
@embedpdf/vue@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer :fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
@embedpdf/web@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – Theming for the zoom tool's box:
--epdf-zoom-box-filland--epdf-zoom-box-stroke, which win over the stage'szoomBoxsetting, pluszoomBoxPaint(colors, accent)andZOOM_BOX_DASHto draw it. -
#923 by @bobsingor – Export
isFromTextField(event), which tells a key or a copy typed in a text field (an input, a text area, a select or editable content, inside a shadow root too) from one meant for the viewer around it.
@embedpdf/plugin-commands@3.0.0-next.19
Minor Changes
- #920 by @bobsingor – The standard commands have
tool:zoom, the marquee zoom tool, onZ(Acrobat's key), next totool:pointer(V) andtool:pan(H).
Patch Changes
- #923 by @bobsingor – The standard
zoom:inandzoom:outcommands are off at the Stage'smaxZoomandminZoom.
@embedpdf/plugin-i18n@3.0.0-next.19
Minor Changes
- #920 by @bobsingor – Labels for the
tool:zoomcommand (commands.tool.zoom) in all eight languages.
@embedpdf/plugin-interaction@3.0.0-next.19
Minor Changes
- #920 by @bobsingor – A third built-in tool,
zoom: drag a box to zoom to it, or click to zoom in a step (Alt-click zooms out), like Acrobat's Marquee Zoom. Its cursor iszoom-inon the pages and between them, one finger draws the box on a touch screen, and it neither follows links nor fills forms. The stage draws the box and does the zooming.listTools()now starts['pointer', 'pan', 'zoom'].
@embedpdf/plugin-stage@3.0.0-next.19
Minor Changes
-
#920 by @bobsingor – The
zoomtool's box. On the host lens,beginZoomDrag,moveZoomDrag,endZoomDrag({ zoomOut })andcancelZoomDragrun the drag, andgetZoomBox()gives the box in viewport pixels for an adapter to draw. A box zooms straight in, about the one point that stays put, until it fills the view, centered; it glides withscrollBehavior. A click (under 4 pixels) zooms one step around the point.createZoomDragHandler(stage, interaction)connects it to the interaction hub. The newzoomBoxsetting ({ fill, stroke },nullfollows the accent) colors the box.zoomIn()andzoomOut()take{ around }, likezoomToandzoomBy.reveal()with a fit now stops at the zoom limit (64×) instead of zooming past it on a tiny rect. Under a tool with agapCursor(pan, zoom), the pan fallback no longer takes drags between pages. A fit mode, a level orresetSettings()asked for again now applies after a zoom the user made: before,fitAutomatic()after a zoom step, pinch, double-tap or zoomedrevealdid nothing when automatic was already the setting, and so didzoomTo()with the last level set. -
#923 by @bobsingor – The Stage has zoom limits: the
minZoomandmaxZoomsettings,0.05and64by default (5% to 6400%). Nothing zooms past them: notzoomIn(), a pinch or Ctrl+wheel,zoomTo(),zoomBy(),setCamera(), a reveal or a destination, and not a fit mode, which stops at the limit. When the limits change, a zoom outside them moves to the nearest one; aminZoomabovemaxZoomcounts asmaxZoom.canZoomIn()andcanZoomOut()say whether the zoom is belowmaxZoomor aboveminZoom, for disabling your buttons.zoomIn()andzoomOut()step through round levels (100%, 125%, 150%, 200%, 300% and so on) in place of ×1.2. From a level in between, such as a fit, they go to the next one, and a level within 5% of a round one steps past it.
@embedpdf/viewer-angular@3.0.0-next.19
Minor Changes
- #923 by @bobsingor –
<epdf-pdf-viewer [fetch]>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its input, likesrc.
@embedpdf/viewer-chrome@3.0.0-next.19
Minor Changes
-
#923 by @bobsingor – Comment cards show what their thread has and offer what comes next. A mark with nothing said yet shows one box to write the comment, which becomes the annotation's own text where it may change, and a reply where it may not. A thread shows its comment, its replies and a box to reply; the box shows on the selected card, and stays while it holds a draft. A thread's status shows as a chip by its date once one is set. A check on the card marks the thread completed, and the card's menu (its ⋯ button, or a right-click on the card) sets any review status and deletes the thread. A page's count says how many comments are written on it. New commands
comment:status-accepted,comment:status-rejected,comment:status-cancelled,comment:status-completed,comment:status-none,comment:delete-threadand thecomment-itemmenu, and the iconscircleCheckandsend. -
#918 by @bobsingor – The grant prompt (
grantPromptin every locale) asks for a grant's passphrase
or its questions. -
#920 by @bobsingor – Marquee Zoom in the zoom menu: the
tool:zoomcommand switches to thezoomtool. Drag a box to zoom to it, or click to zoom in (Alt-click: out). It has labels in every built-in language. -
#923 by @bobsingor – The rows of buttons at the top of the thumbnails, outline and attachments panels are bars of the layout, named after their panel:
thumbnails(groupsedit,more,history),outline(filter,items) andattachments(count,files). They fit the panel's width like any bar, with what doesn't fit in a "More" menu, so a narrow panel no longer cuts off undo and redo, andadd,removeandreplacechange them. The thumbnails bar also has insert from a file, duplicate and extract where there's room, in place of the page menu's button. The outline's filter and the attachments' count are{ custom: 'outline-filter' }and{ custom: 'attachments-count' }. Any panel, your own too, draws the bars placed in it withplace: { panel: id }. -
#923 by @bobsingor –
FullViewertakes afetchprop, which every document at a URL downloads with. -
#923 by @bobsingor – The viewer speaks Swedish (
sv) and Traditional Chinese (zh-TW), for fifteen languages. Readers of Traditional Chinese (zh-TW,zh-HK,zh-MO,zh-Hant) now see it instead of English. Both are machine-translated in the terms Adobe Acrobat uses in each language, are waiting for a native speaker's review, and load the first time the viewer shows them.stringsan app gives forsvorzh-TWnow change the built-in language's words, and the words it leaves out show in that language instead of English.
Patch Changes
-
#923 by @bobsingor – The bar for selected annotations sits below them, and above them when there's no room below. Its menus and the link editor open on the same side.
-
#923 by @bobsingor – The default bars make room in the order their groups say, now that a group's
importanceis its items' too. In a narrow main bar, pan and pointer are the first buttons to go into the "More" menu, then the View menu and zoom, and the document menu, thumbnails, search and comments never do. So a phone keeps the mode tabs, folded behind a chevron, beside search and comments. In the annotate, shapes and form bars, the text tools, polygons and the less common fields go before undo and redo. The measuring tools, and delete in the annotation bar, stay in their bars. An item you add withlayout.add(item, { group })takes that group's importance unless you give it its own. -
#923 by @bobsingor – The thumbnails panel has a scrollbar like the pages', and room above the first thumbnail: 20 px around the thumbnails, where the panel's narrow width used to give them the 4 px phone gutter.
plugins.thumbnailscan still setpaddingandresponsive. -
#923 by @bobsingor – Full Screen (
view:fullscreen) fills the screen with the viewer's own box instead of the whole page, and leaves the page's own full screen alone. The viewer stays where the page put it, and nothing on the page moves or changes. In a frame withoutallow="fullscreen"the button isn't there, since the browser lets nothing in such a frame go full screen. Where the browser has no full screen for elements (Safari on iPhone) or refuses it, the viewer covers the whole window instead, until the button or Escape ends it; a viewer that already is the whole window there has no Full Screen. The button follows Escape and the page's ownrequestFullscreen()on the<embedpdf-viewer>element, shows thefullscreenExiticon while the viewer fills the screen, and dialogs and sheets open in the viewer stay on top as it goes full screen. -
#923 by @bobsingor – The
zoom:inandzoom:outcommands are off at the zoom limits, and the toolbar's − and + buttons show it: they grey out atmaxZoomandminZoom, set underplugins.stage. Zooming in and out steps through round levels (100%, 125%, 150%, 200% and so on).
@embedpdf/viewer@3.0.0-next.19
Minor Changes
- #923 by @bobsingor – The
fetchconfig key: your ownfetchfor every document at a URL (src,documentsand{ kind: 'url' }in code), to add headers or cookies. It follows its prop, aselement.fetchtoo: the next download uses a new one, and the viewer stays. A server that answers 401 or 403 shows in the tab as not allowed, and Try again callsfetchagain.
@embedpdf/viewer-react@3.0.0-next.19
Minor Changes
- #923 by @bobsingor –
<PDFViewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
@embedpdf/viewer-svelte@3.0.0-next.19
Minor Changes
- #923 by @bobsingor –
<PDFViewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
@embedpdf/viewer-vue@3.0.0-next.19
Minor Changes
- #923 by @bobsingor –
<PDFViewer :fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
@embedpdf/plugin-annotation@3.0.0-next.19
Patch Changes
- #923 by @bobsingor –
canDelete()answers for everything a delete takes. Deleting an annotation deletes its replies, review states, grouped parts and popups with it, andcanDelete()(on the plugin and oncomments) now checks each of them: the annotation as before, and what goes with it by itslockedflag and the permission to delete it. A delete button no longer offers a delete the engine refuses (a reply someone else wrote, under a grant that deletes only your own), or deletes a locked reply along with its parent.comments.canDeleteThread()andcomments.deleteThread()use the same check, so a thread with a review status can be deleted again: the hidden annotation a status is stored in no longer blocks it.