@embedpdf/viewer-chrome 3.0.0-next.13 → 3.0.0-next.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -132
- package/dist/annotation-fonts-BqoLZ4Mp.js +80 -0
- package/dist/annotation-fonts-BqoLZ4Mp.js.map +1 -0
- package/dist/annotation-fonts-Dt0IQXhz.cjs +91 -0
- package/dist/annotation-fonts-Dt0IQXhz.cjs.map +1 -0
- package/dist/annotation-style--rPIZsuP.js +879 -0
- package/dist/annotation-style--rPIZsuP.js.map +1 -0
- package/dist/annotation-style-Bzvvp8-N.cjs +879 -0
- package/dist/annotation-style-Bzvvp8-N.cjs.map +1 -0
- package/dist/ar-D9XKAmDx.js +567 -0
- package/dist/ar-D9XKAmDx.js.map +1 -0
- package/dist/ar-DnEj5vbP.cjs +567 -0
- package/dist/ar-DnEj5vbP.cjs.map +1 -0
- package/dist/chrome.cjs +378 -221
- package/dist/chrome.cjs.map +1 -1
- package/dist/chrome.d.cts +5 -34
- package/dist/chrome.d.ts +5 -34
- package/dist/chrome.js +377 -218
- package/dist/chrome.js.map +1 -1
- package/dist/commands-BmgxhJ8B.js +953 -0
- package/dist/commands-BmgxhJ8B.js.map +1 -0
- package/dist/commands-CYt4SFUX.cjs +1060 -0
- package/dist/commands-CYt4SFUX.cjs.map +1 -0
- package/dist/commands.cjs +12 -595
- package/dist/commands.d.cts +29 -4
- package/dist/commands.d.ts +29 -4
- package/dist/commands.js +2 -593
- package/dist/comments-panel-MUVgLCBI.js +514 -0
- package/dist/comments-panel-MUVgLCBI.js.map +1 -0
- package/dist/comments-panel-pEcQg4Vs.cjs +514 -0
- package/dist/comments-panel-pEcQg4Vs.cjs.map +1 -0
- package/dist/de-Bdr4aWzm.js +566 -0
- package/dist/de-Bdr4aWzm.js.map +1 -0
- package/dist/de-Dv6zvbnd.cjs +566 -0
- package/dist/de-Dv6zvbnd.cjs.map +1 -0
- package/dist/dialog-B5GBisKv.js +55 -0
- package/dist/dialog-B5GBisKv.js.map +1 -0
- package/dist/dialog-t8F13BL_.cjs +60 -0
- package/dist/dialog-t8F13BL_.cjs.map +1 -0
- package/dist/es-BP09DR9w.cjs +566 -0
- package/dist/es-BP09DR9w.cjs.map +1 -0
- package/dist/es-BSXz5tBv.js +566 -0
- package/dist/es-BSXz5tBv.js.map +1 -0
- package/dist/form-design-panel-B5MXTZ96.cjs +418 -0
- package/dist/form-design-panel-B5MXTZ96.cjs.map +1 -0
- package/dist/form-design-panel-vWWU9uB-.js +418 -0
- package/dist/form-design-panel-vWWU9uB-.js.map +1 -0
- package/dist/fr-BBQQn7tJ.cjs +566 -0
- package/dist/fr-BBQQn7tJ.cjs.map +1 -0
- package/dist/fr-Ckn3K9v1.js +566 -0
- package/dist/fr-Ckn3K9v1.js.map +1 -0
- package/dist/he-DRsG7bH7.cjs +567 -0
- package/dist/he-DRsG7bH7.cjs.map +1 -0
- package/dist/he-wdGU5PkU.js +567 -0
- package/dist/he-wdGU5PkU.js.map +1 -0
- package/dist/icons-BrK5iVL8.js +856 -0
- package/dist/icons-BrK5iVL8.js.map +1 -0
- package/dist/icons-x0Tc05bs.cjs +1010 -0
- package/dist/icons-x0Tc05bs.cjs.map +1 -0
- package/dist/index.cjs +3162 -5106
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +636 -143
- package/dist/index.d.ts +636 -143
- package/dist/index.js +3083 -4975
- package/dist/index.js.map +1 -1
- package/dist/it-BuP4o0xQ.cjs +566 -0
- package/dist/it-BuP4o0xQ.cjs.map +1 -0
- package/dist/it-Us-VmvIu.js +566 -0
- package/dist/it-Us-VmvIu.js.map +1 -0
- package/dist/ja-Cizj0-5O.js +566 -0
- package/dist/ja-Cizj0-5O.js.map +1 -0
- package/dist/ja-DovEd6ts.cjs +566 -0
- package/dist/ja-DovEd6ts.cjs.map +1 -0
- package/dist/ko-B-qJEol2.cjs +566 -0
- package/dist/ko-B-qJEol2.cjs.map +1 -0
- package/dist/ko-DlrXliE1.js +566 -0
- package/dist/ko-DlrXliE1.js.map +1 -0
- package/dist/labels-BiM9wp9K.cjs +21 -0
- package/dist/labels-BiM9wp9K.cjs.map +1 -0
- package/dist/labels-C6_i87Oj.js +16 -0
- package/dist/labels-C6_i87Oj.js.map +1 -0
- package/dist/link-editor-CSjqPnj1.cjs +125 -0
- package/dist/link-editor-CSjqPnj1.cjs.map +1 -0
- package/dist/link-editor-SxM1nnJU.js +125 -0
- package/dist/link-editor-SxM1nnJU.js.map +1 -0
- package/dist/measurement-Bs61XWbJ.js +325 -0
- package/dist/measurement-Bs61XWbJ.js.map +1 -0
- package/dist/measurement-CcCsHPOX.cjs +326 -0
- package/dist/measurement-CcCsHPOX.cjs.map +1 -0
- package/dist/nl-0aF7M_0h.js +566 -0
- package/dist/nl-0aF7M_0h.js.map +1 -0
- package/dist/nl-D3KZDDiJ.cjs +566 -0
- package/dist/nl-D3KZDDiJ.cjs.map +1 -0
- package/dist/pl-BW--AaCI.js +566 -0
- package/dist/pl-BW--AaCI.js.map +1 -0
- package/dist/pl-DSFhAUqx.cjs +566 -0
- package/dist/pl-DSFhAUqx.cjs.map +1 -0
- package/dist/pt-C5S-8MC5.cjs +566 -0
- package/dist/pt-C5S-8MC5.cjs.map +1 -0
- package/dist/pt-DIhpU5pT.js +566 -0
- package/dist/pt-DIhpU5pT.js.map +1 -0
- package/dist/redact-confirm-B6j36TPw.js +83 -0
- package/dist/redact-confirm-B6j36TPw.js.map +1 -0
- package/dist/redact-confirm-CX_SY2ZN.cjs +83 -0
- package/dist/redact-confirm-CX_SY2ZN.cjs.map +1 -0
- package/dist/redaction-panel-BmoIl-Ll.cjs +96 -0
- package/dist/redaction-panel-BmoIl-Ll.cjs.map +1 -0
- package/dist/redaction-panel-IJDshSJI.js +96 -0
- package/dist/redaction-panel-IJDshSJI.js.map +1 -0
- package/dist/search-panel-HfIhJm1M.js +249 -0
- package/dist/search-panel-HfIhJm1M.js.map +1 -0
- package/dist/search-panel-s9IoiOtv.cjs +249 -0
- package/dist/search-panel-s9IoiOtv.cjs.map +1 -0
- package/dist/sheet-BDsa_Sup.cjs +442 -0
- package/dist/sheet-BDsa_Sup.cjs.map +1 -0
- package/dist/sheet-R6XDgyEf.js +365 -0
- package/dist/sheet-R6XDgyEf.js.map +1 -0
- package/dist/sign-dialog-CgnR7akj.cjs +155 -0
- package/dist/sign-dialog-CgnR7akj.cjs.map +1 -0
- package/dist/sign-dialog-GDqCoQhA.js +155 -0
- package/dist/sign-dialog-GDqCoQhA.js.map +1 -0
- package/dist/signature-inspector-DyO313Qf.cjs +166 -0
- package/dist/signature-inspector-DyO313Qf.cjs.map +1 -0
- package/dist/signature-inspector-okFz8do6.js +166 -0
- package/dist/signature-inspector-okFz8do6.js.map +1 -0
- package/dist/signature-maker-BhCmYyHD.js +393 -0
- package/dist/signature-maker-BhCmYyHD.js.map +1 -0
- package/dist/signature-maker-BoYa8vgA.cjs +393 -0
- package/dist/signature-maker-BoYa8vgA.cjs.map +1 -0
- package/dist/signatures-panel-B56PC6d9.cjs +300 -0
- package/dist/signatures-panel-B56PC6d9.cjs.map +1 -0
- package/dist/signatures-panel-CgnFfhFm.js +300 -0
- package/dist/signatures-panel-CgnFfhFm.js.map +1 -0
- package/dist/stamp-store-BHvRs-Do.cjs +147 -0
- package/dist/stamp-store-BHvRs-Do.cjs.map +1 -0
- package/dist/stamp-store-WuF-L3Jj.js +112 -0
- package/dist/stamp-store-WuF-L3Jj.js.map +1 -0
- package/dist/stamps-panel-B9NYGayn.cjs +231 -0
- package/dist/stamps-panel-B9NYGayn.cjs.map +1 -0
- package/dist/stamps-panel-CDO0FPyK.js +231 -0
- package/dist/stamps-panel-CDO0FPyK.js.map +1 -0
- package/dist/toolbar-CJu2wKTU.cjs +1659 -0
- package/dist/toolbar-CJu2wKTU.cjs.map +1 -0
- package/dist/toolbar-z9od3tKl.js +1564 -0
- package/dist/toolbar-z9od3tKl.js.map +1 -0
- package/dist/zh-cn-3tmMeHqv.cjs +566 -0
- package/dist/zh-cn-3tmMeHqv.cjs.map +1 -0
- package/dist/zh-cn-CxkUUBct.js +566 -0
- package/dist/zh-cn-CxkUUBct.js.map +1 -0
- package/package.json +6 -4
- package/src/styles.css +153 -89
- package/dist/commands.cjs.map +0 -1
- package/dist/commands.js.map +0 -1
- package/dist/es-DYwzfxyt.cjs +0 -293
- package/dist/es-DYwzfxyt.cjs.map +0 -1
- package/dist/es-sN6uqBgD.js +0 -293
- package/dist/es-sN6uqBgD.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,21 +1,114 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defaultLayout } from "./chrome.cjs";
|
|
2
2
|
import { defaultCommands } from "./commands.cjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { AddItemOptions, BarEdge, BarPlace, FloatPosition, Importance, Layout, LayoutBar, LayoutCommandItem, LayoutCustomItem, LayoutData, LayoutData as LayoutData$1, LayoutEnv, LayoutFunction, LayoutGroup, LayoutGroupObject, LayoutItem, LayoutMenu, LayoutMenuSection, LayoutOption, LayoutOption as LayoutOption$1, LayoutPanel, LayoutPanelPatch, LayoutSection, PanelPresentation, PanelPresentationBySize, PanelWidth, RemoveItemOptions, SectionName, SelectionTarget, TabsVisibility, Variant, ViewerSize, ViewerSize as ViewerSize$1, createLayout } from "@embedpdf/core-ui";
|
|
4
|
+
import { AnnotationCapability, AnnotationToken, annotationPlugin } from "@embedpdf/react/annotation";
|
|
5
|
+
import { CommandDef as CommandDef$1, CommandsCapability, CommandsCapability as CommandsCapability$1, CommandsToken, IconAccent, NotAllowedMode, NotAllowedMode as NotAllowedMode$1, ResolvedCommand, commandsPlugin } from "@embedpdf/react/commands";
|
|
5
6
|
import { ReactNode } from "react";
|
|
6
|
-
import { CapabilityToken, CapabilityToken as CapabilityToken$1,
|
|
7
|
-
import { I18nToken, TranslationDictionary } from "@embedpdf/react/i18n";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
7
|
+
import { CapabilityToken, CapabilityToken as CapabilityToken$1, DocumentInfo, DocumentsCapability, DocumentsCapability as DocumentsCapability$1, DocumentsToken, Engine, Engine as Engine$1, EngineFactory, EngineFactory as EngineFactory$1, Identity, Identity as Identity$1, InitialDocument, InitialDocument as InitialDocument$1, Kernel, Unsubscribe, Unsubscribe as Unsubscribe$1 } from "@embedpdf/react/runtime";
|
|
8
|
+
import { I18nCapability, I18nToken, TranslationDictionary, i18nPlugin } from "@embedpdf/react/i18n";
|
|
9
|
+
import { ActionsCapability, ActionsToken, actionsPlugin } from "@embedpdf/react/actions";
|
|
10
|
+
import { FormCapability, FormToken, formPlugin } from "@embedpdf/react/form";
|
|
11
|
+
import { InteractionCapability, InteractionToken, interactionPlugin } from "@embedpdf/react/interaction";
|
|
12
|
+
import { LinkCapability, LinkToken } from "@embedpdf/react/link";
|
|
13
|
+
import { MeasurementCapability, MeasurementCapability as MeasurementCapability$1, MeasurementConfig, MeasurementToken, ScaleChangeReport, measurementPlugin } from "@embedpdf/react/measurement";
|
|
14
|
+
import { MetadataCapability, MetadataToken } from "@embedpdf/react/metadata";
|
|
15
|
+
import { PageEditCapability, PageEditToken } from "@embedpdf/react/page-edit";
|
|
16
|
+
import { RedactionCapability, RedactionToken, redactionPlugin } from "@embedpdf/react/redaction";
|
|
17
|
+
import { RenderCapability, RenderToken, renderPlugin } from "@embedpdf/react/render";
|
|
18
|
+
import { SearchCapability, SearchToken, searchPlugin } from "@embedpdf/react/search";
|
|
19
|
+
import { SelectionCapability, SelectionToken, selectionPlugin } from "@embedpdf/react/selection";
|
|
20
|
+
import { ShellCapability, ShellToken } from "@embedpdf/react/shell";
|
|
21
|
+
import { Mark, SignFieldInput, SignatureCapability, SignatureMode, SignatureToken, SignerPort, TrustPort, createTestSigner, indexedDbKeyStore, memoryKeyStore, personalSigner, remoteSigner, signaturePlugin, webCryptoSigner } from "@embedpdf/react/signature";
|
|
22
|
+
import { StageCapability, StageToken, stagePlugin } from "@embedpdf/react/stage";
|
|
23
|
+
import { StampCapability, StampToken, stampPlugin } from "@embedpdf/react/stamp";
|
|
24
|
+
import "@embedpdf/react/toolbar";
|
|
25
|
+
//#region src/handle.d.ts
|
|
26
|
+
/** Each plugin's API, by the plugin's name: what `viewer.get(name)` returns. */
|
|
27
|
+
interface ViewerPlugins {
|
|
28
|
+
readonly stage: StageCapability;
|
|
29
|
+
/** The thumbnails panel's Stage: a second lens over the same document. */
|
|
30
|
+
readonly thumbnails: StageCapability;
|
|
31
|
+
readonly render: RenderCapability;
|
|
32
|
+
readonly link: LinkCapability;
|
|
33
|
+
readonly selection: SelectionCapability;
|
|
34
|
+
readonly search: SearchCapability;
|
|
35
|
+
readonly annotation: AnnotationCapability;
|
|
36
|
+
readonly stamp: StampCapability;
|
|
37
|
+
readonly measurement: MeasurementCapability$1;
|
|
38
|
+
readonly redaction: RedactionCapability;
|
|
39
|
+
readonly form: FormCapability;
|
|
40
|
+
readonly signature: SignatureCapability;
|
|
41
|
+
readonly pageEdit: PageEditCapability;
|
|
42
|
+
/** The document's title, author and your own fields; `ensureLoaded()` reads them. */
|
|
43
|
+
readonly metadata: MetadataCapability;
|
|
44
|
+
readonly actions: ActionsCapability;
|
|
45
|
+
readonly documents: DocumentsCapability$1;
|
|
46
|
+
readonly interaction: InteractionCapability;
|
|
47
|
+
readonly commands: CommandsCapability$1;
|
|
48
|
+
readonly shell: ShellCapability;
|
|
49
|
+
readonly i18n: I18nCapability;
|
|
50
|
+
}
|
|
51
|
+
/** A plugin's name, as `viewer.get()` and the `plugins` config take it. */
|
|
52
|
+
type PluginName = keyof ViewerPlugins;
|
|
53
|
+
/**
|
|
54
|
+
* The viewer's plugins by name: the names `get()` takes, the same as the `plugins` config's.
|
|
55
|
+
* Only plugins the viewer registers are here, so every name resolves.
|
|
56
|
+
*/
|
|
57
|
+
declare const VIEWER_PLUGINS: { readonly [Name in PluginName]: CapabilityToken$1<ViewerPlugins[Name]>; };
|
|
58
|
+
/** `get`/`tryGet` bound to one document (see {@link Viewer.forDocument}). */
|
|
59
|
+
interface ScopedViewer {
|
|
60
|
+
/**
|
|
61
|
+
* A plugin's API, by its name (`'search'`) or its token (`SearchToken`). Throws when the
|
|
62
|
+
* viewer has no such plugin, when the plugin belongs to a document and none is open, and
|
|
63
|
+
* `instance-closed` once the viewer is done.
|
|
64
|
+
*/
|
|
65
|
+
get<Name extends PluginName>(name: Name): ViewerPlugins[Name];
|
|
66
|
+
get<Capability>(token: CapabilityToken$1<Capability>): Capability;
|
|
67
|
+
/**
|
|
68
|
+
* Like `get`, but `null` when the plugin isn't available: none by that name, no document, one
|
|
69
|
+
* still opening, or the viewer is done.
|
|
70
|
+
*/
|
|
71
|
+
tryGet<Name extends PluginName>(name: Name): ViewerPlugins[Name] | null;
|
|
72
|
+
tryGet<Capability>(token: CapabilityToken$1<Capability>): Capability | null;
|
|
73
|
+
}
|
|
74
|
+
/** The viewer, from code: `element.viewer`, and what `onReady` gets. */
|
|
75
|
+
interface Viewer extends ScopedViewer {
|
|
76
|
+
/** The documents: open, close, switch, download, and their events. `get('documents')`. */
|
|
77
|
+
readonly documents: DocumentsCapability$1;
|
|
78
|
+
/** The commands: run one, read one, turn features on and off, and their events. `get('commands')`. */
|
|
79
|
+
readonly commands: CommandsCapability$1;
|
|
80
|
+
/** `get`/`tryGet` for one document, whether it's the active one or not. */
|
|
81
|
+
forDocument(documentId: string): ScopedViewer;
|
|
82
|
+
/**
|
|
83
|
+
* Run `read` on every change in the viewer, and call `onChange` when what it returns changed
|
|
84
|
+
* (`isEqual`, default `Object.is`: capability getters return the same object until their value
|
|
85
|
+
* changes, so identity works). Returns a function that stops it.
|
|
86
|
+
*/
|
|
87
|
+
watch<T>(read: () => T, onChange: (value: T, previous: T) => void, isEqual?: (left: T, right: T) => boolean): Unsubscribe$1;
|
|
88
|
+
}
|
|
89
|
+
/** The plugins a viewer resolves by name: {@link VIEWER_PLUGINS}, or more. */
|
|
90
|
+
type PluginTokens = Readonly<Record<string, CapabilityToken$1<unknown>>>;
|
|
91
|
+
/** A `viewer`, and the end of its life. */
|
|
92
|
+
interface ViewerLifetime {
|
|
93
|
+
readonly viewer: Viewer;
|
|
94
|
+
/**
|
|
95
|
+
* The viewer it reaches is gone: every listener added through the `viewer` stops, and every
|
|
96
|
+
* call refuses with `instance-closed`. Idempotent.
|
|
97
|
+
*/
|
|
98
|
+
dispose(): void;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Make the `viewer` from a live kernel; `plugins` are the names its `get()` takes.
|
|
102
|
+
*
|
|
103
|
+
* Every API the `viewer` hands out (`get()`, `documents`, `commands`) is the plugin's own
|
|
104
|
+
* capability seen through a lens that ends with the viewer: while it lives, every member is the
|
|
105
|
+
* capability's; once {@link ViewerLifetime.dispose} runs, the listeners and registrations made
|
|
106
|
+
* through it are removed, a read (`get*`, `list*`, `is*`, `has*`, `can*`) throws
|
|
107
|
+
* `instance-closed`, every other call returns a promise that rejects with it, and a new
|
|
108
|
+
* subscription does nothing.
|
|
109
|
+
*/
|
|
110
|
+
declare function createViewer(kernel: Kernel, plugins: PluginTokens): ViewerLifetime;
|
|
111
|
+
//#endregion
|
|
19
112
|
//#region src/ui/icons.d.ts
|
|
20
113
|
type PathSpec = string | {
|
|
21
114
|
d: string;
|
|
@@ -25,101 +118,438 @@ type PathSpec = string | {
|
|
|
25
118
|
/** Stroke paint: a slot name = that accent color (currentColor when
|
|
26
119
|
* the accent is absent). */
|
|
27
120
|
stroke?: 'primary' | 'secondary';
|
|
121
|
+
strokeWidth?: number;
|
|
122
|
+
strokeDasharray?: string;
|
|
123
|
+
strokeOpacity?: number;
|
|
124
|
+
fillOpacity?: number;
|
|
125
|
+
};
|
|
126
|
+
/** An icon's path data: a string is one path, an array several. */
|
|
127
|
+
type IconPaths = string | readonly PathSpec[];
|
|
128
|
+
/**
|
|
129
|
+
* An icon of yours: 24 × 24 path data drawn as a line (Tabler and Lucide icons paste in as
|
|
130
|
+
* they are), or `{ paths, fill: true }` to fill the paths instead of drawing their outline.
|
|
131
|
+
*/
|
|
132
|
+
type IconDef = IconPaths | {
|
|
133
|
+
readonly paths: IconPaths;
|
|
134
|
+
readonly fill?: boolean;
|
|
28
135
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
136
|
+
declare const ICON_PATHS: {
|
|
137
|
+
ruler: string[];
|
|
138
|
+
distance: ({
|
|
139
|
+
d: string;
|
|
140
|
+
stroke: "primary";
|
|
141
|
+
strokeDasharray: string;
|
|
142
|
+
fill?: undefined;
|
|
143
|
+
fillOpacity?: undefined;
|
|
144
|
+
} | {
|
|
145
|
+
d: string;
|
|
146
|
+
stroke: "primary";
|
|
147
|
+
fill: "primary";
|
|
148
|
+
fillOpacity: number;
|
|
149
|
+
strokeDasharray?: undefined;
|
|
150
|
+
})[];
|
|
151
|
+
perimeter: PathSpec[];
|
|
152
|
+
area: PathSpec[];
|
|
153
|
+
alertTriangle: string[];
|
|
154
|
+
alignBottom: string[];
|
|
155
|
+
alignCenter: string[];
|
|
156
|
+
alignLeft: string[];
|
|
157
|
+
alignMiddle: string[];
|
|
158
|
+
alignRight: string[];
|
|
159
|
+
alignTop: string[];
|
|
160
|
+
arrowBackUp: string[];
|
|
161
|
+
arrowForwardUp: string[];
|
|
162
|
+
bold: string[];
|
|
163
|
+
book: string[];
|
|
164
|
+
book2: string[];
|
|
165
|
+
calibrate: string[];
|
|
166
|
+
callout: ({
|
|
167
|
+
d: string;
|
|
168
|
+
stroke: "primary";
|
|
169
|
+
fill: "secondary";
|
|
170
|
+
} | {
|
|
171
|
+
d: string;
|
|
172
|
+
stroke: "primary";
|
|
173
|
+
fill?: undefined;
|
|
174
|
+
})[];
|
|
175
|
+
check: string[];
|
|
176
|
+
chevronDown: string[];
|
|
177
|
+
chevronLeft: string[];
|
|
178
|
+
chevronRight: string[];
|
|
179
|
+
circle: {
|
|
180
|
+
d: string;
|
|
181
|
+
stroke: "primary";
|
|
182
|
+
fill: "secondary";
|
|
183
|
+
}[];
|
|
184
|
+
comment: string[];
|
|
185
|
+
copy: string[];
|
|
186
|
+
deviceFloppy: string[];
|
|
187
|
+
dots: string[];
|
|
188
|
+
doublePage: string[];
|
|
189
|
+
download: string[];
|
|
190
|
+
externalLink: string[];
|
|
191
|
+
eye: string[];
|
|
192
|
+
file: string[];
|
|
193
|
+
fileImport: string[];
|
|
194
|
+
fitToPage: string[];
|
|
195
|
+
fitToWidth: string[];
|
|
196
|
+
formButton: string[];
|
|
197
|
+
formCheckbox: string[];
|
|
198
|
+
formDesign: string[];
|
|
199
|
+
formListbox: string[];
|
|
200
|
+
formRadio: (string | {
|
|
201
|
+
d: string;
|
|
202
|
+
fill: true;
|
|
203
|
+
})[];
|
|
204
|
+
formSelect: string[];
|
|
205
|
+
formTextfield: string[];
|
|
206
|
+
freeText: {
|
|
207
|
+
d: string;
|
|
208
|
+
stroke: "primary";
|
|
209
|
+
}[];
|
|
210
|
+
fullscreen: string[];
|
|
211
|
+
fullscreenExit: string[];
|
|
212
|
+
group: string[];
|
|
213
|
+
hand: string[];
|
|
214
|
+
highlight: (string | {
|
|
215
|
+
d: string;
|
|
216
|
+
fill: "primary";
|
|
217
|
+
})[];
|
|
218
|
+
horizontal: string[];
|
|
219
|
+
inkHighlighter: (string | {
|
|
220
|
+
d: string;
|
|
221
|
+
stroke: "primary";
|
|
222
|
+
fill: "primary";
|
|
223
|
+
})[];
|
|
224
|
+
insertText: {
|
|
225
|
+
d: string;
|
|
226
|
+
stroke: "primary";
|
|
227
|
+
}[];
|
|
228
|
+
italic: string[];
|
|
229
|
+
line: {
|
|
230
|
+
d: string;
|
|
231
|
+
stroke: "primary";
|
|
232
|
+
}[];
|
|
233
|
+
lineArrow: {
|
|
234
|
+
d: string;
|
|
235
|
+
stroke: "primary";
|
|
236
|
+
}[];
|
|
237
|
+
link: string[];
|
|
238
|
+
linkOff: string[];
|
|
239
|
+
listTree: string[];
|
|
240
|
+
lock: string[];
|
|
241
|
+
marqueeSelect: string[];
|
|
242
|
+
menu: string[];
|
|
243
|
+
message: string[];
|
|
244
|
+
palette: string[];
|
|
245
|
+
paperclip: string[];
|
|
246
|
+
pencilMarker: (string | {
|
|
247
|
+
d: string;
|
|
248
|
+
stroke: "primary";
|
|
249
|
+
})[];
|
|
250
|
+
photo: string[];
|
|
251
|
+
plus: string[];
|
|
252
|
+
pointer: string[];
|
|
253
|
+
polygon: {
|
|
254
|
+
d: string;
|
|
255
|
+
stroke: "primary";
|
|
256
|
+
fill: "secondary";
|
|
257
|
+
}[];
|
|
258
|
+
print: string[];
|
|
259
|
+
redact: string[];
|
|
260
|
+
redactArea: string[];
|
|
261
|
+
redactCombined: string[];
|
|
262
|
+
redactionSidebar: string[];
|
|
263
|
+
replaceText: {
|
|
264
|
+
d: string;
|
|
265
|
+
stroke: "primary";
|
|
266
|
+
}[];
|
|
267
|
+
rotateClockwise: string[];
|
|
268
|
+
rotateCounterClockwise: string[];
|
|
269
|
+
rubberStamp: string[];
|
|
270
|
+
rubberStampPlus: string[];
|
|
271
|
+
save: string[];
|
|
272
|
+
screenshot: string[];
|
|
273
|
+
search: string[];
|
|
274
|
+
settings: string[];
|
|
275
|
+
sidebar: string[];
|
|
276
|
+
signature: string[];
|
|
277
|
+
singlePage: string[];
|
|
278
|
+
square: {
|
|
279
|
+
d: string;
|
|
280
|
+
stroke: "primary";
|
|
281
|
+
fill: "secondary";
|
|
282
|
+
}[];
|
|
283
|
+
squares: string[];
|
|
284
|
+
squiggly: (string | {
|
|
285
|
+
d: string;
|
|
286
|
+
stroke: "primary";
|
|
287
|
+
})[];
|
|
288
|
+
strikethrough: (string | {
|
|
289
|
+
d: string;
|
|
290
|
+
stroke: "primary";
|
|
291
|
+
})[];
|
|
292
|
+
text: string[];
|
|
293
|
+
trash: string[];
|
|
294
|
+
underline: (string | {
|
|
295
|
+
d: string;
|
|
296
|
+
stroke: "primary";
|
|
297
|
+
})[];
|
|
298
|
+
ungroup: string[];
|
|
299
|
+
unlock: string[];
|
|
300
|
+
updateScale: string[];
|
|
301
|
+
vertical: string[];
|
|
302
|
+
viewSettings: string[];
|
|
303
|
+
widgetEdit: string[];
|
|
304
|
+
x: string[];
|
|
305
|
+
zigzag: {
|
|
306
|
+
d: string;
|
|
307
|
+
stroke: "primary";
|
|
308
|
+
}[];
|
|
309
|
+
zoomIn: string[];
|
|
310
|
+
zoomInArea: string[];
|
|
311
|
+
zoomOut: string[];
|
|
312
|
+
};
|
|
313
|
+
/** The name of one of the viewer's own icons. */
|
|
314
|
+
type IconName = keyof typeof ICON_PATHS;
|
|
33
315
|
//#endregion
|
|
34
|
-
//#region src/config-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
readonly
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
readonly
|
|
53
|
-
/**
|
|
54
|
-
readonly
|
|
55
|
-
/**
|
|
56
|
-
readonly
|
|
57
|
-
/**
|
|
58
|
-
readonly
|
|
59
|
-
/**
|
|
60
|
-
readonly
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
316
|
+
//#region src/config/viewer-commands.d.ts
|
|
317
|
+
/** What a command's functions get: its document, any plugin by its name or token, and the viewer. */
|
|
318
|
+
interface CommandContext extends ScopedViewer {
|
|
319
|
+
/** The document it's for: the one named, else the active one; `null` with none open. */
|
|
320
|
+
readonly documentId: string | null;
|
|
321
|
+
/** What the caller passed: `execute(id, { args })`. */
|
|
322
|
+
readonly args?: unknown;
|
|
323
|
+
/** Fires when the caller cancels `execute()`: pass it on to the calls `run` makes. */
|
|
324
|
+
readonly signal?: AbortSignal;
|
|
325
|
+
/** The viewer, as `onReady` gets it. */
|
|
326
|
+
readonly viewer: Viewer;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* A command, as the `commands` config takes it: the headless command, its functions getting
|
|
330
|
+
* {@link CommandContext}. With a built-in command's id it changes that one, field by field.
|
|
331
|
+
*/
|
|
332
|
+
interface CommandDef extends Omit<CommandDef$1, 'icon' | 'iconAccent' | 'allowed' | 'enabled' | 'active' | 'visible' | 'run'> {
|
|
333
|
+
/** An icon's name: one of the viewer's, or one of yours (`icons`). */
|
|
334
|
+
readonly icon?: IconName | (string & {});
|
|
335
|
+
/** Colors for the icon, read from live state like `active`. */
|
|
336
|
+
readonly iconAccent?: (context: CommandContext) => IconAccent | null;
|
|
337
|
+
/** Whether the session may run it, from the plugins' `can*` checks. Prefer `requires`. */
|
|
338
|
+
readonly allowed?: (context: CommandContext) => boolean;
|
|
339
|
+
/** When it can run. When it can't, its button is greyed out. Default: always. */
|
|
340
|
+
readonly enabled?: (context: CommandContext) => boolean;
|
|
341
|
+
/** When it shows as pressed, or checked in a menu. */
|
|
342
|
+
readonly active?: (context: CommandContext) => boolean;
|
|
343
|
+
/** When it shows at all. Default: always. */
|
|
344
|
+
readonly visible?: (context: CommandContext) => boolean;
|
|
345
|
+
/** What it does; `execute()` resolves once it has. Not needed for a `menu` or `panel`. */
|
|
346
|
+
readonly run?: (context: CommandContext) => void | Promise<unknown>;
|
|
347
|
+
}
|
|
348
|
+
//#endregion
|
|
349
|
+
//#region src/plugin-settings.d.ts
|
|
350
|
+
/** What a plugin factory takes, or `never` for a factory that takes nothing. */
|
|
351
|
+
type ConfigOf<Factory extends (...args: never[]) => unknown> = Parameters<Factory> extends [] ? never : NonNullable<Parameters<Factory>[0]>;
|
|
352
|
+
/** What the viewer adds to the stamp plugin's settings, for its own panel and toolbar. Read once. */
|
|
353
|
+
interface ViewerStampSettings {
|
|
354
|
+
/**
|
|
355
|
+
* Where the standard stamps come from: `true`, the copy that ships inside your build (a lazy
|
|
356
|
+
* chunk, loaded when the stamps panel first opens); a URL with a `{locale}` slot, used exactly
|
|
357
|
+
* as given; `false`, none and no request. Default `true`.
|
|
358
|
+
*/
|
|
359
|
+
readonly standard?: boolean | string;
|
|
360
|
+
/**
|
|
361
|
+
* Stamps shown as buttons in the Insert toolbar, each as `library:name`: `standard` is the
|
|
362
|
+
* standard stamps (`'standard:Approved'`), any other library goes by its id. Default none.
|
|
363
|
+
*/
|
|
364
|
+
readonly quick?: readonly string[];
|
|
365
|
+
/** The kinds of library the stamps panel lists. Default `['stamps']`. */
|
|
366
|
+
readonly sidebar?: readonly string[];
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* A font for typed signatures: its TrueType or OpenType file, from `url` or as `data`, read and
|
|
370
|
+
* registered on the engine the first time someone types a mark in the signature maker.
|
|
371
|
+
*/
|
|
372
|
+
interface SignatureFont {
|
|
373
|
+
/** The engine's key for it. */
|
|
70
374
|
readonly key: string;
|
|
71
|
-
/**
|
|
72
|
-
readonly url: string;
|
|
73
|
-
/** The picker's label. */
|
|
375
|
+
/** What the font picker shows. */
|
|
74
376
|
readonly label: string;
|
|
75
|
-
/**
|
|
76
|
-
|
|
377
|
+
/** Where the file comes from (same-origin or CORS-enabled). */
|
|
378
|
+
readonly url?: string;
|
|
379
|
+
/** The file's bytes, in place of `url`. */
|
|
380
|
+
readonly data?: Uint8Array | ArrayBuffer;
|
|
381
|
+
}
|
|
382
|
+
/** What the viewer adds to the signature plugin's settings, for its own panel and dialogs. Read once. */
|
|
383
|
+
interface ViewerSignatureSettings {
|
|
384
|
+
/** Which marks people keep. Default both. */
|
|
385
|
+
readonly kinds?: readonly ('signature' | 'initials')[];
|
|
386
|
+
/** Fonts for typed signatures, in the order the maker offers them. Default three handwriting fonts. */
|
|
387
|
+
readonly fonts?: readonly SignatureFont[];
|
|
388
|
+
/** `'one'`: a single person per browser, so no new person once one exists. Default `'many'`. */
|
|
389
|
+
readonly libraries?: 'one' | 'many';
|
|
390
|
+
}
|
|
391
|
+
/** The settings each built-in plugin takes in `plugins`: what its factory takes. */
|
|
392
|
+
interface BuiltInSettings {
|
|
393
|
+
readonly stage: Omit<ConfigOf<typeof stagePlugin>, 'id' | 'token'>;
|
|
394
|
+
readonly thumbnails: Omit<ConfigOf<typeof stagePlugin>, 'id' | 'token'>;
|
|
395
|
+
readonly render: ConfigOf<typeof renderPlugin>;
|
|
396
|
+
readonly link: never;
|
|
397
|
+
readonly selection: ConfigOf<typeof selectionPlugin>;
|
|
398
|
+
readonly search: ConfigOf<typeof searchPlugin>;
|
|
399
|
+
readonly annotation: ConfigOf<typeof annotationPlugin>;
|
|
400
|
+
readonly stamp: ConfigOf<typeof stampPlugin> & ViewerStampSettings;
|
|
401
|
+
readonly measurement: ConfigOf<typeof measurementPlugin>;
|
|
402
|
+
readonly redaction: ConfigOf<typeof redactionPlugin>;
|
|
403
|
+
readonly form: ConfigOf<typeof formPlugin>;
|
|
404
|
+
readonly signature: ConfigOf<typeof signaturePlugin> & ViewerSignatureSettings;
|
|
405
|
+
readonly pageEdit: never;
|
|
406
|
+
readonly metadata: never;
|
|
407
|
+
readonly actions: ConfigOf<typeof actionsPlugin>;
|
|
408
|
+
readonly documents: never;
|
|
409
|
+
readonly interaction: ConfigOf<typeof interactionPlugin>;
|
|
410
|
+
readonly commands: ConfigOf<typeof commandsPlugin>;
|
|
411
|
+
readonly shell: never;
|
|
412
|
+
readonly i18n: ConfigOf<typeof i18nPlugin>;
|
|
413
|
+
}
|
|
414
|
+
/** A built-in plugin's settings, as its page in the headless docs lists them. */
|
|
415
|
+
type PluginSettings<Name extends PluginName> = BuiltInSettings[Name];
|
|
416
|
+
/**
|
|
417
|
+
* The `plugins` config: a built-in plugin's settings under its name (`stage: { spread: 'odd' }`),
|
|
418
|
+
* and a plugin of your own as its definition under a name of your choice
|
|
419
|
+
* (`analytics: analyticsPlugin()`), which `viewer.get('analytics')` then finds.
|
|
420
|
+
*/
|
|
421
|
+
type ViewerPluginsConfig = { readonly [Name in PluginName]?: PluginSettings<Name>; } & {
|
|
422
|
+
readonly [name: string]: object | undefined;
|
|
423
|
+
};
|
|
424
|
+
//#endregion
|
|
425
|
+
//#region src/config-context.d.ts
|
|
426
|
+
/**
|
|
427
|
+
* A font beyond the standard 14, for the engine: what `engine.fonts` lists. The style panel
|
|
428
|
+
* offers it for text boxes, once it's registered on the engine and mounted for the live editor.
|
|
429
|
+
*/
|
|
430
|
+
interface ViewerFont {
|
|
431
|
+
/** The id a free-text `fontFamily` carries, and the engine's key for it. Not one of the 14 standard names. */
|
|
432
|
+
readonly key: string;
|
|
433
|
+
/** Where the TTF or OTF file comes from (same-origin or CORS-enabled). */
|
|
434
|
+
readonly url?: string;
|
|
435
|
+
/** The file's bytes, in place of `url`. */
|
|
436
|
+
readonly data?: Uint8Array | ArrayBuffer;
|
|
437
|
+
/** The family's name, which the style panel shows (else the key); inferred from the file when left out. */
|
|
77
438
|
readonly familyName?: string;
|
|
78
439
|
readonly weight?: number;
|
|
79
440
|
readonly italic?: boolean;
|
|
80
441
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
* URL fails is skipped with a console warning. On the cloud engine (no
|
|
88
|
-
* `engine.fonts`) they are not offered: fonts there are a server policy.
|
|
89
|
-
*/
|
|
90
|
-
readonly fonts?: ReadonlyArray<AnnotationFontSpec>;
|
|
442
|
+
/** What `onPanelResize` hears: the panel, and the width the user gave it. */
|
|
443
|
+
interface PanelResizeEvent {
|
|
444
|
+
/** The panel's id. */
|
|
445
|
+
readonly id: string;
|
|
446
|
+
/** Its width now, in px. */
|
|
447
|
+
readonly width: number;
|
|
91
448
|
}
|
|
92
449
|
//#endregion
|
|
93
|
-
//#region src/
|
|
94
|
-
/** `
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
450
|
+
//#region src/features.d.ts
|
|
451
|
+
/** Every built-in feature and its parts: the names `disable` takes, as All features lists them. */
|
|
452
|
+
declare const FEATURE_PARTS: {
|
|
453
|
+
readonly annotations: readonly ["highlight", "markup", "drawing", "text", "notes", "links"];
|
|
454
|
+
readonly shapes: readonly [];
|
|
455
|
+
readonly stamps: readonly [];
|
|
456
|
+
readonly comments: readonly ["writing"];
|
|
457
|
+
readonly forms: readonly ["filling", "building"];
|
|
458
|
+
readonly signatures: readonly ["signing", "checking"];
|
|
459
|
+
readonly redaction: readonly [];
|
|
460
|
+
readonly measurement: readonly [];
|
|
461
|
+
readonly pages: readonly [];
|
|
462
|
+
readonly attachments: readonly ["adding"];
|
|
463
|
+
readonly text: readonly ["selection", "copy"];
|
|
464
|
+
readonly search: readonly [];
|
|
465
|
+
readonly thumbnails: readonly [];
|
|
466
|
+
readonly outline: readonly [];
|
|
467
|
+
readonly documents: readonly ["open", "download", "print", "tabs"];
|
|
468
|
+
};
|
|
469
|
+
type FeatureParts = typeof FEATURE_PARTS;
|
|
470
|
+
/** A built-in feature, or a part of one: `'annotations'`, `'annotations.highlight'`. */
|
|
471
|
+
type Feature = { [Name in keyof FeatureParts]: Name | `${Name}.${FeatureParts[Name][number]}`; }[keyof FeatureParts];
|
|
472
|
+
/** What `readOnly` keeps on: every feature it would turn off, minus these. */
|
|
473
|
+
interface ReadOnlyExceptions {
|
|
474
|
+
readonly except: readonly (Feature | (string & {}))[];
|
|
98
475
|
}
|
|
99
|
-
interface ViewerHandle extends ScopedViewerHandle {
|
|
100
|
-
/** The document registry — the tab model: list/open/close/setActive/…. */
|
|
101
|
-
readonly documents: DocumentsCapability$1;
|
|
102
|
-
/** `get`/`tryGet` with document-scoped tokens bound to `documentId`
|
|
103
|
-
* instead of the active document. */
|
|
104
|
-
forDocument(documentId: string): ScopedViewerHandle;
|
|
105
|
-
/**
|
|
106
|
-
* Re-run `select` on every kernel change; call `cb` when the selected value
|
|
107
|
-
* really changed (`isEqual`, default `Object.is` — capability getters return
|
|
108
|
-
* stable references between model changes, so identity works). Returns the
|
|
109
|
-
* unsubscribe. This is the ONLY reactivity primitive; DOM events on the
|
|
110
|
-
* element are sugar over it.
|
|
111
|
-
*/
|
|
112
|
-
watch<T>(select: () => T, cb: (value: T, previous: T) => void, isEqual?: (a: T, b: T) => boolean): Unsubscribe$1;
|
|
113
|
-
execute(id: string, documentId?: string): void;
|
|
114
|
-
resolve(id: string, documentId?: string): ResolvedCommand$1 | null;
|
|
115
|
-
/** `watch` sugar for one command's resolved state (label/icon/enabled/active). */
|
|
116
|
-
watchCommand(id: string, cb: (cmd: ResolvedCommand$1 | null) => void): Unsubscribe$1;
|
|
117
|
-
}
|
|
118
|
-
declare function createViewerHandle(kernel: Kernel): ViewerHandle;
|
|
119
476
|
//#endregion
|
|
120
477
|
//#region src/ui/theme.d.ts
|
|
121
478
|
type ThemeMode = 'light' | 'dark';
|
|
122
479
|
type ThemePreference = ThemeMode | 'system';
|
|
480
|
+
/**
|
|
481
|
+
* The viewer's look, by name: each is the CSS variable `--epdf-<name>`, which the chrome's
|
|
482
|
+
* stylesheet declares with a default for each mode and mixes every other shade from.
|
|
483
|
+
*/
|
|
484
|
+
declare const THEME_TOKENS: readonly ["accent", "background", "surface", "surface-raised", "text", "text-muted", "border", "hover", "canvas", "radius", "font"];
|
|
485
|
+
/** A token's name: `surface` is the CSS variable `--epdf-surface`. */
|
|
486
|
+
type ThemeToken = (typeof THEME_TOKENS)[number];
|
|
487
|
+
/** Token values by name, each a CSS value: `{ surface: '#fbfaf7', radius: '2px' }`. */
|
|
488
|
+
type ThemeTokens = { readonly [Name in ThemeToken]?: string; };
|
|
489
|
+
interface ThemeConfig {
|
|
490
|
+
/** 'system' (default) follows the OS. */
|
|
491
|
+
preference?: ThemePreference;
|
|
492
|
+
/** The accent color in both modes: the same as `tokens.accent`, which wins when both are set. */
|
|
493
|
+
accent?: string;
|
|
494
|
+
/** Token values for both modes, over the viewer's defaults. */
|
|
495
|
+
tokens?: ThemeTokens;
|
|
496
|
+
/** Token values for dark mode only, over `tokens`. */
|
|
497
|
+
dark?: ThemeTokens;
|
|
498
|
+
}
|
|
499
|
+
/** Normalize the shorthand — deliveries use this to read one shape. */
|
|
500
|
+
declare const themeConfigOf: (theme: ThemePreference | ThemeConfig | undefined) => ThemeConfig;
|
|
501
|
+
/**
|
|
502
|
+
* The CSS that applies a theme's tokens on the viewer's root (`root`, a selector), for a sheet
|
|
503
|
+
* after the chrome's: its tokens win over the defaults in both modes by coming later, and its
|
|
504
|
+
* dark ones win in dark by naming the class too. A value is a default only: the page's own
|
|
505
|
+
* `--epdf-*` variable still wins, read on the host as the chrome's stylesheet does. Empty when
|
|
506
|
+
* the theme sets no token.
|
|
507
|
+
*/
|
|
508
|
+
declare function themeTokenCss(theme: ThemePreference | ThemeConfig | undefined, root: string): string;
|
|
509
|
+
//#endregion
|
|
510
|
+
//#region src/ui/placed-components.d.ts
|
|
511
|
+
interface PlacedComponentBase {
|
|
512
|
+
/** The element in the page. */
|
|
513
|
+
readonly host: HTMLElement;
|
|
514
|
+
/** Its shadow root, where the viewer draws it. */
|
|
515
|
+
readonly root: ShadowRoot;
|
|
516
|
+
/** An icon by name, the viewer's or yours. */
|
|
517
|
+
readonly icon: string | null;
|
|
518
|
+
/** Its name, for its tooltip and screen readers. */
|
|
519
|
+
readonly label: string | null;
|
|
520
|
+
}
|
|
521
|
+
/** `<epdf-button>`: a command's button, or one with an icon and a label of your own. */
|
|
522
|
+
interface PlacedButton extends PlacedComponentBase {
|
|
523
|
+
readonly kind: 'button';
|
|
524
|
+
readonly command: string | null;
|
|
525
|
+
}
|
|
526
|
+
/** `<epdf-menu>`: a button that opens a menu of its rows. */
|
|
527
|
+
interface PlacedMenu extends PlacedComponentBase {
|
|
528
|
+
readonly kind: 'menu';
|
|
529
|
+
readonly items: readonly PlacedMenuItem[];
|
|
530
|
+
}
|
|
531
|
+
/** `<epdf-menu-item>`: a row, a command's or one with an icon and text of your own. */
|
|
532
|
+
interface PlacedMenuItem {
|
|
533
|
+
readonly command: string | null;
|
|
534
|
+
readonly icon: string | null;
|
|
535
|
+
/** Its text; a command's label when it has none. */
|
|
536
|
+
readonly label: string;
|
|
537
|
+
/** Says the row was picked (the element's `select` event). */
|
|
538
|
+
readonly select: () => void;
|
|
539
|
+
}
|
|
540
|
+
type PlacedComponent = PlacedButton | PlacedMenu;
|
|
541
|
+
/** The viewer's own components placed in one viewer. */
|
|
542
|
+
interface PlacedComponents {
|
|
543
|
+
/** Every one placed, in the order they were placed. */
|
|
544
|
+
list(): readonly PlacedComponent[];
|
|
545
|
+
/** Calls `listener` whenever the list changes. */
|
|
546
|
+
subscribe(listener: () => void): () => void;
|
|
547
|
+
/** Places a component, or replaces the one with the same `host`. */
|
|
548
|
+
place(component: PlacedComponent): void;
|
|
549
|
+
/** Takes the component of `host` away. */
|
|
550
|
+
remove(host: HTMLElement): void;
|
|
551
|
+
}
|
|
552
|
+
declare function createPlacedComponents(): PlacedComponents;
|
|
123
553
|
//#endregion
|
|
124
554
|
//#region src/viewer.d.ts
|
|
125
555
|
/**
|
|
@@ -127,50 +557,85 @@ type ThemePreference = ThemeMode | 'system';
|
|
|
127
557
|
* framework wrapper. See README.md for the ladder this implements.
|
|
128
558
|
*/
|
|
129
559
|
interface ViewerCustomization {
|
|
130
|
-
/**
|
|
131
|
-
|
|
132
|
-
|
|
560
|
+
/**
|
|
561
|
+
* Your commands, beside the built-in ones. One with a built-in id changes that one, field by
|
|
562
|
+
* field: what it leaves out stays. A shortcut of yours wins over a built-in one with the same
|
|
563
|
+
* keys.
|
|
564
|
+
*/
|
|
565
|
+
commands?: readonly CommandDef[];
|
|
566
|
+
/** Your icons by name: 24×24 path data. One with a built-in icon's name replaces it. */
|
|
133
567
|
icons?: Readonly<Record<string, IconDef>>;
|
|
134
|
-
/**
|
|
135
|
-
*
|
|
568
|
+
/**
|
|
569
|
+
* Words by language code, over the viewer's own: a built-in button's label under its command's
|
|
570
|
+
* id (`'document:download'`), your own keys (`labelKey`, `titleKey`), dotted keys expanded. A
|
|
571
|
+
* code the viewer has no language for becomes one, falling back to English, and reads right to
|
|
572
|
+
* left when its code's script does (`fa`, `ur`).
|
|
573
|
+
*/
|
|
136
574
|
strings?: Readonly<Record<string, TranslationDictionary>>;
|
|
137
|
-
/** 'auto' (default) negotiates from the browser languages. */
|
|
575
|
+
/** 'auto' (default) negotiates from the browser languages. Follows its prop. */
|
|
138
576
|
locale?: 'auto' | (string & {});
|
|
139
|
-
/**
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
*
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
*
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
577
|
+
/**
|
|
578
|
+
* What this viewer doesn't have, everywhere at once: features (`'annotations'`), their parts
|
|
579
|
+
* (`'annotations.highlight'`) and single commands (`'tool:highlight'`: a name with a colon).
|
|
580
|
+
* Follows its prop.
|
|
581
|
+
*/
|
|
582
|
+
disable?: readonly (Feature | (string & {}))[];
|
|
583
|
+
/**
|
|
584
|
+
* Every feature that changes the document off, or all of them but `except`, on top of
|
|
585
|
+
* `disable`. Only the interface: plugins keep working for your code. Follows its prop.
|
|
586
|
+
*/
|
|
587
|
+
readOnly?: boolean | ReadOnlyExceptions;
|
|
588
|
+
/**
|
|
589
|
+
* What the user may do: the permissions the engine checks on every call, from a button or
|
|
590
|
+
* from code. Left out, they may do everything. Documents opened after a change use the new one.
|
|
591
|
+
*/
|
|
592
|
+
scope?: readonly string[];
|
|
593
|
+
/** Who the user is: the author of what they write. */
|
|
594
|
+
identity?: Identity$1;
|
|
595
|
+
/** What the scope doesn't allow: `'hide'` it (default), or `'disable'` it with the reason. */
|
|
596
|
+
notAllowed?: NotAllowedMode$1;
|
|
597
|
+
/**
|
|
598
|
+
* Where every toolbar, button, menu and panel goes: a layout of your own, or a function that
|
|
599
|
+
* gets the default layout and the viewer's env (`size`, `width`, `touch`, `dir`) and returns
|
|
600
|
+
* yours. The function runs again when the env changes. Never merged.
|
|
601
|
+
*/
|
|
602
|
+
layout?: LayoutOption$1;
|
|
603
|
+
/**
|
|
604
|
+
* Each plugin's settings, by the plugin's name, as its page in the headless docs lists them
|
|
605
|
+
* (`stage: { spread: 'odd' }`), over the viewer's own; and a plugin of your own as its
|
|
606
|
+
* definition (`analytics: analyticsPlugin()`), which `viewer.get('analytics')` then finds.
|
|
607
|
+
* Where the viewer's own keys set a plugin's settings too, both count and each only takes
|
|
608
|
+
* away: the plugin's `disabledCategories` and `disabledCommands` add to what `disable` and
|
|
609
|
+
* `readOnly` turn off, and its `editable` and `fillable` keep only what both allow. A list of
|
|
610
|
+
* definitions (`annotation.tools`, `commands.commands`, `i18n.locales`) adds to the viewer's.
|
|
611
|
+
* The language is `locale`'s, and `notAllowed`, when given, wins over the plugin's. `stamp`
|
|
612
|
+
* and `signature` also take settings only the viewer has: the standard and quick stamps, and
|
|
613
|
+
* which marks people keep and their fonts. Read once.
|
|
614
|
+
*/
|
|
615
|
+
plugins?: ViewerPluginsConfig;
|
|
616
|
+
/** Light/dark preference (string shorthand), or the full theme config: the
|
|
617
|
+
* accent and the other tokens. Tokens are applied by the delivery (the
|
|
618
|
+
* custom element adopts them into its shadow root); direct
|
|
619
|
+
* consumers of this package set the `--epdf-*` variables in their own CSS
|
|
620
|
+
* instead. Follows its prop. */
|
|
160
621
|
theme?: ThemePreference | ThemeConfig;
|
|
622
|
+
/**
|
|
623
|
+
* Called with the `viewer` once it's live, before any document has opened: capabilities
|
|
624
|
+
* resolve from then on, and document-scoped calls wait for their document. Read once.
|
|
625
|
+
*/
|
|
626
|
+
onReady?: (viewer: Viewer) => void;
|
|
627
|
+
/**
|
|
628
|
+
* Called with the active document's id whenever it changes: the first document that opens,
|
|
629
|
+
* a switch to another tab, and `null` once the last one closes. Read once.
|
|
630
|
+
*/
|
|
631
|
+
onDocumentChange?: (documentId: string | null) => void;
|
|
632
|
+
/**
|
|
633
|
+
* Called when the user has resized a panel, with its id and new width in px: once a drag of
|
|
634
|
+
* its edge ends, and on each arrow key there. Keep the width to start the panel at it next
|
|
635
|
+
* time (`layout.panel(id, { width: { initial } })`). Read once.
|
|
636
|
+
*/
|
|
637
|
+
onPanelResize?: (event: PanelResizeEvent) => void;
|
|
161
638
|
}
|
|
162
|
-
/** Token overrides — names WITHOUT the `--ep-` prefix ('accent', 'surface'…). */
|
|
163
|
-
type ThemeTokens = Readonly<Record<string, string>>;
|
|
164
|
-
interface ThemeConfig {
|
|
165
|
-
/** 'system' (default) follows the OS. */
|
|
166
|
-
preference?: ThemePreference;
|
|
167
|
-
/** Applied in BOTH modes (a later sheet: wins over the defaults). */
|
|
168
|
-
tokens?: ThemeTokens;
|
|
169
|
-
/** Dark-mode-only overrides, applied over `tokens`. */
|
|
170
|
-
dark?: ThemeTokens;
|
|
171
|
-
}
|
|
172
|
-
/** Normalize the shorthand — deliveries use this to read one shape. */
|
|
173
|
-
declare const themeConfigOf: (theme: ThemePreference | ThemeConfig | undefined) => ThemeConfig;
|
|
174
639
|
interface FullViewerProps extends ViewerCustomization {
|
|
175
640
|
/** Instance (borrowed) or thunk (viewer-owned) — the Viewer's own contract. */
|
|
176
641
|
engine: Engine$1 | EngineFactory$1;
|
|
@@ -178,17 +643,45 @@ interface FullViewerProps extends ViewerCustomization {
|
|
|
178
643
|
initialDocuments?: InitialDocument$1[];
|
|
179
644
|
/** Shown while the workspace boots. Default: a translated pulse line. */
|
|
180
645
|
fallback?: ReactNode;
|
|
181
|
-
/** Where the theme's `.dark` class goes — a
|
|
646
|
+
/** Where the theme's `.dark` class goes — a delivery concern, not user
|
|
182
647
|
* config: the custom element passes its shadow wrapper so theming never
|
|
183
648
|
* touches the host page. Default: document.documentElement. */
|
|
184
649
|
themeTarget?: HTMLElement | null;
|
|
185
|
-
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
|
|
189
|
-
|
|
650
|
+
/**
|
|
651
|
+
* The viewer's own components placed in the page (`<epdf-button>`, `<epdf-menu>`), which the
|
|
652
|
+
* viewer draws — a delivery concern: the custom element passes the ones inside it.
|
|
653
|
+
*/
|
|
654
|
+
components?: PlacedComponents;
|
|
655
|
+
/**
|
|
656
|
+
* Fonts beyond the standard 14 for the engine (a delivery's `engine.fonts`): each is read
|
|
657
|
+
* once, registered on a local engine and mounted for the live text editor, and the style
|
|
658
|
+
* panel offers it. A cloud engine's fonts are its server's, so none are offered there.
|
|
659
|
+
*/
|
|
660
|
+
fonts?: readonly ViewerFont[];
|
|
190
661
|
}
|
|
191
|
-
declare function FullViewer({ engine, initialDocuments, fallback, commands, icons, strings, locale,
|
|
662
|
+
declare function FullViewer({ engine, initialDocuments, fallback, commands, icons, strings, locale, disable, readOnly, scope, identity, notAllowed, layout, plugins: pluginsConfig, fonts, theme, themeTarget, components, onReady, onDocumentChange, onPanelResize }: FullViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
663
|
+
//#endregion
|
|
664
|
+
//#region src/ui/item-context.d.ts
|
|
665
|
+
/** The place of the bar an item sits in: an edge, floating over the pages, or over a selection. */
|
|
666
|
+
type ToolbarItemEdge = 'top' | 'bottom' | 'start' | 'end' | 'float' | 'selection';
|
|
667
|
+
/** Where your own toolbar item sits. */
|
|
668
|
+
interface ToolbarItemContext {
|
|
669
|
+
/** Which way the bar runs. */
|
|
670
|
+
readonly orientation: 'horizontal' | 'vertical';
|
|
671
|
+
/** The bar's place. */
|
|
672
|
+
readonly edge: ToolbarItemEdge;
|
|
673
|
+
/** Which of the item's `variants` the toolbar picked, or null for an item without its own. */
|
|
674
|
+
readonly variant: string | null;
|
|
675
|
+
/** The viewer's size. */
|
|
676
|
+
readonly size: ViewerSize$1;
|
|
677
|
+
}
|
|
678
|
+
/** The attribute each field of a {@link ToolbarItemContext} is written to. */
|
|
679
|
+
declare const TOOLBAR_ITEM_CONTEXT_ATTRIBUTES: {
|
|
680
|
+
readonly orientation: "data-orientation";
|
|
681
|
+
readonly edge: "data-edge";
|
|
682
|
+
readonly variant: "data-variant";
|
|
683
|
+
readonly size: "data-size";
|
|
684
|
+
};
|
|
192
685
|
//#endregion
|
|
193
|
-
export { type
|
|
686
|
+
export { ActionsToken, type AddItemOptions, AnnotationToken, type BarEdge, type BarPlace, type CapabilityToken, type CommandContext, type CommandDef, type CommandsCapability, CommandsToken, type DocumentInfo, type DocumentsCapability, DocumentsToken, type Engine, type EngineFactory, type Feature, type FloatPosition, FormToken, FullViewer, type FullViewerProps, I18nToken, type IconDef, type IconName, type IconPaths, type Identity, type Importance, type InitialDocument, InteractionToken, type Layout, type LayoutBar, type LayoutCommandItem, type LayoutCustomItem, type LayoutData, type LayoutEnv, type LayoutFunction, type LayoutGroup, type LayoutGroupObject, type LayoutItem, type LayoutMenu, type LayoutMenuSection, type LayoutOption, type LayoutPanel, type LayoutPanelPatch, type LayoutSection, LinkToken, type Mark, type MeasurementCapability, type MeasurementConfig, MeasurementToken, MetadataToken, type NotAllowedMode, PageEditToken, type PanelPresentation, type PanelPresentationBySize, type PanelResizeEvent, type PanelWidth, type PathSpec, type PlacedButton, type PlacedComponent, type PlacedComponents, type PlacedMenu, type PlacedMenuItem, type PluginName, type PluginSettings, type PluginTokens, type ReadOnlyExceptions, RedactionToken, type RemoveItemOptions, RenderToken, type ResolvedCommand, type ScaleChangeReport, type ScopedViewer, SearchToken, type SectionName, type SelectionTarget, SelectionToken, ShellToken, type SignFieldInput, type SignatureFont, type SignatureMode, SignatureToken, type SignerPort, StageToken, StampToken, THEME_TOKENS, TOOLBAR_ITEM_CONTEXT_ATTRIBUTES, type TabsVisibility, type ThemeConfig, type ThemeMode, type ThemePreference, type ThemeToken, type ThemeTokens, type ToolbarItemContext, type ToolbarItemEdge, type TrustPort, type Unsubscribe, VIEWER_PLUGINS, type Variant, type Viewer, type ViewerCustomization, type ViewerFont, type ViewerLifetime, type ViewerPlugins, type ViewerPluginsConfig, type ViewerSignatureSettings, type ViewerSize, type ViewerStampSettings, createLayout, createPlacedComponents, createTestSigner, createViewer, defaultCommands, ICON_PATHS as defaultIcons, defaultLayout, indexedDbKeyStore, memoryKeyStore, personalSigner, remoteSigner, themeConfigOf, themeTokenCss, webCryptoSigner };
|
|
194
687
|
//# sourceMappingURL=index.d.cts.map
|