@embedpdf/plugin-signature 2.13.0
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/LICENSE +21 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +516 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/actions.d.ts +14 -0
- package/dist/lib/handlers/signature-ink.handler.d.ts +4 -0
- package/dist/lib/handlers/signature-stamp.handler.d.ts +4 -0
- package/dist/lib/index.d.ts +12 -0
- package/dist/lib/manifest.d.ts +4 -0
- package/dist/lib/reducer.d.ts +5 -0
- package/dist/lib/serialization.d.ts +30 -0
- package/dist/lib/signature-plugin.d.ts +27 -0
- package/dist/lib/tools.d.ts +113 -0
- package/dist/lib/types.d.ts +114 -0
- package/dist/preact/adapter.d.ts +5 -0
- package/dist/preact/annotation.d.ts +1 -0
- package/dist/preact/core.d.ts +1 -0
- package/dist/preact/index.cjs +2 -0
- package/dist/preact/index.cjs.map +1 -0
- package/dist/preact/index.d.ts +1 -0
- package/dist/preact/index.js +464 -0
- package/dist/preact/index.js.map +1 -0
- package/dist/react/adapter.d.ts +2 -0
- package/dist/react/annotation.d.ts +1 -0
- package/dist/react/core.d.ts +1 -0
- package/dist/react/index.cjs +2 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +463 -0
- package/dist/react/index.js.map +1 -0
- package/dist/shared/components/crop-canvas.d.ts +14 -0
- package/dist/shared/components/index.d.ts +2 -0
- package/dist/shared/components/signature-draw-pad.d.ts +12 -0
- package/dist/shared/components/signature-type-pad.d.ts +14 -0
- package/dist/shared/hooks/index.d.ts +2 -0
- package/dist/shared/hooks/use-signature-upload.d.ts +21 -0
- package/dist/shared/hooks/use-signature.d.ts +16 -0
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared-preact/components/crop-canvas.d.ts +14 -0
- package/dist/shared-preact/components/index.d.ts +2 -0
- package/dist/shared-preact/components/signature-draw-pad.d.ts +12 -0
- package/dist/shared-preact/components/signature-type-pad.d.ts +14 -0
- package/dist/shared-preact/hooks/index.d.ts +2 -0
- package/dist/shared-preact/hooks/use-signature-upload.d.ts +21 -0
- package/dist/shared-preact/hooks/use-signature.d.ts +16 -0
- package/dist/shared-preact/index.d.ts +4 -0
- package/dist/shared-react/components/crop-canvas.d.ts +14 -0
- package/dist/shared-react/components/index.d.ts +2 -0
- package/dist/shared-react/components/signature-draw-pad.d.ts +12 -0
- package/dist/shared-react/components/signature-type-pad.d.ts +14 -0
- package/dist/shared-react/hooks/index.d.ts +2 -0
- package/dist/shared-react/hooks/use-signature-upload.d.ts +21 -0
- package/dist/shared-react/hooks/use-signature.d.ts +16 -0
- package/dist/shared-react/index.d.ts +4 -0
- package/dist/shared-vue/components/crop-canvas.d.ts +14 -0
- package/dist/svelte/components/SignatureDrawPad.svelte.d.ts +12 -0
- package/dist/svelte/components/SignatureTypePad.svelte.d.ts +14 -0
- package/dist/svelte/components/index.d.ts +2 -0
- package/dist/svelte/hooks/index.d.ts +2 -0
- package/dist/svelte/hooks/use-signature-upload.svelte.d.ts +21 -0
- package/dist/svelte/hooks/use-signature.svelte.d.ts +17 -0
- package/dist/svelte/index.cjs +2 -0
- package/dist/svelte/index.cjs.map +1 -0
- package/dist/svelte/index.d.ts +4 -0
- package/dist/svelte/index.js +415 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/vue/components/SignatureDrawPad.vue.d.ts +15 -0
- package/dist/vue/components/SignatureTypePad.vue.d.ts +19 -0
- package/dist/vue/components/index.d.ts +2 -0
- package/dist/vue/hooks/index.d.ts +2 -0
- package/dist/vue/hooks/use-signature-upload.d.ts +20 -0
- package/dist/vue/hooks/use-signature.d.ts +176 -0
- package/dist/vue/index.cjs +2 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.ts +4 -0
- package/dist/vue/index.js +453 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +82 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 CloudPDF
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@embedpdf/core"),e=require("@embedpdf/models"),i=require("@embedpdf/plugin-annotation");var n=(t=>(t.SignatureOnly="signature-only",t.SignatureAndInitials="signature-and-initials",t))(n||{}),a=(t=>(t.Draw="draw",t.Type="type",t.Upload="upload",t))(a||{}),r=(t=>(t.Signature="signature",t.Initials="initials",t))(r||{});const o="signature",s={id:o,name:"Signature Plugin",version:"1.0.0",provides:["signature"],requires:["annotation"],optional:[],defaultConfig:{mode:n.SignatureOnly}},l="SIGNATURE/ADD_ENTRY",h="SIGNATURE/REMOVE_ENTRY";function c(t){return{type:l,payload:t}}function u(t){return{type:h,payload:t}}const g={annotationType:e.PdfAnnotationSubtype.STAMP,create(t){const{onPreview:n,onCommit:a,getTool:r,pageSize:o,pageRotation:s,getToolContext:l}=t;return{onPointerMove:t=>{const i=l();if(!(null==i?void 0:i.targetSize))return;const{width:a,height:r}=i.targetSize;n({type:e.PdfAnnotationSubtype.STAMP,bounds:{origin:{x:t.x-a/2,y:t.y-r/2},size:{width:a,height:r}},data:{rect:{origin:{x:t.x-a/2,y:t.y-r/2},size:{width:a,height:r}},ghostUrl:i.ghostUrl,pageRotation:s}})},onPointerDown:h=>{var c;const u=r(),g=l();if(!u||!(null==g?void 0:g.targetSize))return;const{width:d,height:p}=g.targetSize,m={origin:{x:h.x-d/2,y:h.y-p/2},size:{width:d,height:p}};let y={...u.defaults,rect:m,type:e.PdfAnnotationSubtype.STAMP,name:e.PdfAnnotationName.Custom,subject:"Signature",flags:u.defaults.flags??["print"],pageIndex:t.pageIndex,id:e.uuidV4(),created:new Date};(null==(c=u.behavior)?void 0:c.insertUpright)&&(y=i.applyInsertUpright(y,s,!1)),y=i.clampAnnotationToPage(y,o),a(y,{data:g.imageData}),n(null)},onPointerLeave:()=>{n(null)}}}};function d(t,e,i){const n=e.width/t.size.width,a=e.height/t.size.height,r=Math.min(n,a),o=t.size.width*r,s=t.size.height*r,l=i.x-o/2,h=i.y-s/2;return{inkList:t.inkList.map(t=>({points:t.points.map(t=>({x:t.x*r+l,y:t.y*r+h}))})),strokeWidth:Math.round(t.strokeWidth*r*10)/10}}const p={annotationType:e.PdfAnnotationSubtype.INK,create(t){const{onPreview:n,onCommit:a,getTool:r,pageSize:o,getToolContext:s}=t;return{onPointerMove:t=>{const i=s();if(!(null==i?void 0:i.inkData)||!(null==i?void 0:i.targetSize))return;const{inkList:a,strokeWidth:r}=d(i.inkData,i.targetSize,t),o=a.flatMap(t=>t.points);if(0===o.length)return;const l=e.expandRect({origin:{x:Math.min(...o.map(t=>t.x)),y:Math.min(...o.map(t=>t.y))},size:{width:Math.max(...o.map(t=>t.x))-Math.min(...o.map(t=>t.x)),height:Math.max(...o.map(t=>t.y))-Math.min(...o.map(t=>t.y))}},r/2);n({type:e.PdfAnnotationSubtype.INK,bounds:l,data:{rect:l,inkList:a,strokeWidth:r,strokeColor:i.inkData.strokeColor,opacity:.5}})},onPointerDown:l=>{const h=r(),c=s();if(!h||!(null==c?void 0:c.inkData)||!(null==c?void 0:c.targetSize))return;const{inkList:u,strokeWidth:g}=d(c.inkData,c.targetSize,l),p=u.flatMap(t=>t.points);if(0===p.length)return;const m=e.expandRect({origin:{x:Math.min(...p.map(t=>t.x)),y:Math.min(...p.map(t=>t.y))},size:{width:Math.max(...p.map(t=>t.x))-Math.min(...p.map(t=>t.x)),height:Math.max(...p.map(t=>t.y))-Math.min(...p.map(t=>t.y))}},g/2);let y={...h.defaults,inkList:u,rect:m,strokeWidth:g,strokeColor:c.inkData.strokeColor,opacity:1,type:e.PdfAnnotationSubtype.INK,subject:"Signature",flags:h.defaults.flags??["print"],pageIndex:t.pageIndex,id:e.uuidV4(),created:new Date};const f=y.rect;y=i.clampAnnotationToPage(y,o);const S=y.rect.origin.x-f.origin.x,v=y.rect.origin.y-f.origin.y;0===S&&0===v||(y={...y,inkList:y.inkList.map(t=>({points:t.points.map(t=>({x:t.x+S,y:t.y+v}))}))}),a(y),n(null)},onPointerLeave:()=>{n(null)}}}},m="signatureStamp",y="signatureInk",f=[i.defineAnnotationTool({id:m,name:"Signature Stamp",labelKey:"signature.stamp",categories:["annotation","signature","insert"],matchScore:()=>0,interaction:{exclusive:!0,cursor:"copy",isDraggable:!0,isResizable:!0,isRotatable:!1,lockAspectRatio:!0,isGroupDraggable:!0,isGroupResizable:!1,isGroupRotatable:!1},defaults:{type:e.PdfAnnotationSubtype.STAMP},behavior:{deactivateToolAfterCreate:!0,selectAfterCreate:!0,insertUpright:!0,useAppearanceStream:!0},pointerHandler:g}),i.defineAnnotationTool({id:y,name:"Signature Ink",labelKey:"signature.ink",categories:["annotation","signature","insert"],matchScore:t=>t.type===e.PdfAnnotationSubtype.INK&&"Signature"===t.subject?20:0,interaction:{exclusive:!0,cursor:"copy",isDraggable:!0,isResizable:!0,isRotatable:!1,lockAspectRatio:!0,isGroupDraggable:!0,isGroupResizable:!1,isGroupRotatable:!1},defaults:{type:e.PdfAnnotationSubtype.INK},behavior:{deactivateToolAfterCreate:!0,selectAfterCreate:!0},transform:i.patching.patchInk,pointerHandler:p})],S=class extends t.BasePlugin{constructor(e,i,n){var a;if(super(e,i),this.config=n,this.entries=new Map,this.entriesChange$=t.createEmitter(),this.activePlacement$=t.createScopedEmitter((t,e)=>({documentId:t,activePlacement:e})),this.annotation=null,this.toolChangeUnsubscribe=null,this.currentGhostUrl=null,this.annotation=(null==(a=i.getPlugin("annotation"))?void 0:a.provides())??null,this.annotation){for(const t of f)this.annotation.addTool(t);this.toolChangeUnsubscribe=this.annotation.onActiveToolChange(({documentId:t,tool:e})=>{(null==e?void 0:e.id)!==m&&(null==e?void 0:e.id)!==y&&(this.revokeGhostUrl(),this.activePlacement$.emit(t,null))})}}async initialize(){}buildCapability(){return{mode:this.config.mode,getEntries:()=>this.getEntries(),addEntry:t=>this.addEntry(t),removeEntry:t=>this.removeEntry(t),loadEntries:t=>this.loadEntries(t),exportEntries:()=>this.exportEntries(),onEntriesChange:this.entriesChange$.on,forDocument:t=>this.createSignatureScope(t),onActivePlacementChange:this.activePlacement$.onGlobal}}getEntries(){return Array.from(this.entries.values())}addEntry(t){const i=e.uuidV4(),n={...t,id:i,createdAt:Date.now()};return this.entries.set(i,n),this.dispatch(c(i)),this.emitEntriesChange(),i}removeEntry(t){this.entries.has(t)&&(this.entries.delete(t),this.dispatch(u(t)),this.emitEntriesChange())}loadEntries(t){for(const e of t)this.entries.set(e.id,e),this.dispatch(c(e.id));this.emitEntriesChange()}exportEntries(){return this.getEntries()}createSignatureScope(t){return{activateSignaturePlacement:e=>this.activatePlacement(t,e,r.Signature),activateInitialsPlacement:e=>this.activatePlacement(t,e,r.Initials),deactivatePlacement:()=>this.deactivatePlacement(t),getActivePlacement:()=>this.activePlacement$.getValue(t)??null,onActivePlacementChange:this.activePlacement$.forScope(t)}}activatePlacement(t,e,i){const n=this.entries.get(e);if(!n||!this.annotation)return;const o=i===r.Initials?n.initials:n.signature;if(o){if(this.revokeGhostUrl(),o.creationType===a.Draw){if(n.signature.creationType!==a.Draw)return;const t=this.config.defaultSize??{width:150,height:50},r=n.signature.inkData.size,s=Math.min(t.width/r.width,t.height/r.height),l={width:o.inkData.size.width*s,height:o.inkData.size.height*s};this.annotation.setActiveTool(y,{inkData:o.inkData,targetSize:l,entryId:e,kind:i})}else{if(!o.imageData)return;const t=URL.createObjectURL(new Blob([o.imageData],{type:o.imageMimeType??"image/png"}));this.currentGhostUrl=t;const r=this.config.defaultSize??{width:150,height:50};let s=r;if(o.imageSize){const t=n.signature.creationType!==a.Draw?n.signature.imageSize??o.imageSize:o.imageSize,e=Math.min(r.width/t.width,r.height/t.height);s={width:o.imageSize.width*e,height:o.imageSize.height*e}}this.annotation.setActiveTool(m,{imageData:o.imageData,ghostUrl:t,targetSize:s,entryId:e,kind:i})}this.activePlacement$.emit(t,{entryId:e,kind:i})}}deactivatePlacement(t){this.annotation&&(this.annotation.setActiveTool(null),this.revokeGhostUrl(),this.activePlacement$.emit(t,null))}revokeGhostUrl(){this.currentGhostUrl&&(URL.revokeObjectURL(this.currentGhostUrl),this.currentGhostUrl=null)}emitEntriesChange(){this.entriesChange$.emit(this.getEntries())}async destroy(){var t;this.revokeGhostUrl(),null==(t=this.toolChangeUnsubscribe)||t.call(this),this.entries.clear()}};S.id=o;let v=S;const x={entryIds:[]},A=(t=x,e)=>{switch(e.type){case l:return{...t,entryIds:[...t.entryIds,e.payload]};case h:return{...t,entryIds:t.entryIds.filter(t=>t!==e.payload)};default:return t}};function P(t){const e=new Uint8Array(t);let i="";for(let n=0;n<e.length;n++)i+=String.fromCharCode(e[n]);return btoa(i)}function b(t){const e=atob(t),i=new Uint8Array(e.length);for(let n=0;n<e.length;n++)i[n]=e.charCodeAt(n);return i.buffer}function k(t){if(t.creationType===a.Draw)return t;const{imageData:e,...i}=t;return{...i,imageData:e?P(e):void 0}}function T(t){if(t.creationType===a.Draw)return t;const{imageData:e,...i}=t;return{...i,imageData:e?b(e):void 0}}const D={manifest:s,create:(t,e)=>new v(o,t,e),reducer:A,initialState:x};exports.ADD_SIGNATURE_ENTRY=l,exports.REMOVE_SIGNATURE_ENTRY=h,exports.SIGNATURE_INK_TOOL_ID=y,exports.SIGNATURE_PLUGIN_ID=o,exports.SIGNATURE_STAMP_TOOL_ID=m,exports.SignatureCreationType=a,exports.SignatureFieldKind=r,exports.SignatureMode=n,exports.SignaturePlugin=v,exports.SignaturePluginPackage=D,exports.addSignatureEntry=c,exports.deserializeEntries=function(t){return t.map(t=>({id:t.id,createdAt:t.createdAt,signature:T(t.signature),...t.initials&&{initials:T(t.initials)}}))},exports.initialState=x,exports.manifest=s,exports.removeSignatureEntry=u,exports.serializeEntries=function(t){return t.map(t=>({id:t.id,createdAt:t.createdAt,signature:k(t.signature),...t.initials&&{initials:k(t.initials)}}))},exports.signatureReducer=A;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/types.ts","../src/lib/manifest.ts","../src/lib/actions.ts","../src/lib/handlers/signature-stamp.handler.ts","../src/lib/handlers/signature-ink.handler.ts","../src/lib/tools.ts","../src/lib/signature-plugin.ts","../src/lib/reducer.ts","../src/lib/serialization.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePluginConfig, EventHook } from '@embedpdf/core';\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport enum SignatureMode {\n SignatureOnly = 'signature-only',\n SignatureAndInitials = 'signature-and-initials',\n}\n\nexport enum SignatureCreationType {\n Draw = 'draw',\n Type = 'type',\n Upload = 'upload',\n}\n\nexport enum SignatureFieldKind {\n Signature = 'signature',\n Initials = 'initials',\n}\n\n// ---------------------------------------------------------------------------\n// Data model\n// ---------------------------------------------------------------------------\n\nexport interface SignatureInkData {\n inkList: Array<{ points: Array<{ x: number; y: number }> }>;\n strokeWidth: number;\n strokeColor: string;\n size: { width: number; height: number };\n}\n\ninterface SignatureFieldBase {\n label?: string;\n previewDataUrl: string;\n}\n\nexport interface SignatureInkFieldDefinition extends SignatureFieldBase {\n creationType: SignatureCreationType.Draw;\n inkData: SignatureInkData;\n}\n\nexport interface SignatureStampFieldDefinition extends SignatureFieldBase {\n creationType: SignatureCreationType.Type | SignatureCreationType.Upload;\n imageMimeType?: string;\n imageSize?: { width: number; height: number };\n imageData?: ArrayBuffer;\n}\n\nexport type SignatureFieldDefinition = SignatureInkFieldDefinition | SignatureStampFieldDefinition;\n\nexport interface SignatureEntry {\n id: string;\n createdAt: number;\n signature: SignatureFieldDefinition;\n initials?: SignatureFieldDefinition;\n}\n\n// ---------------------------------------------------------------------------\n// Plugin config\n// ---------------------------------------------------------------------------\n\nexport interface SignaturePluginConfig extends BasePluginConfig {\n mode: SignatureMode;\n defaultSize?: { width: number; height: number };\n}\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\nexport interface SignatureState {\n entryIds: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Tool context types (declaration-merged into ToolContextMap)\n// ---------------------------------------------------------------------------\n\nexport interface SignatureStampToolContext {\n imageData: ArrayBuffer;\n ghostUrl: string;\n targetSize: { width: number; height: number };\n entryId: string;\n kind: SignatureFieldKind;\n}\n\nexport interface SignatureInkToolContext {\n inkData: SignatureInkData;\n targetSize: { width: number; height: number };\n entryId: string;\n kind: SignatureFieldKind;\n}\n\ndeclare module '@embedpdf/plugin-annotation' {\n interface ToolContextMap {\n signatureStamp: SignatureStampToolContext;\n signatureInk: SignatureInkToolContext;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Capability / Scope\n// ---------------------------------------------------------------------------\n\nexport interface ActivePlacementInfo {\n entryId: string;\n kind: SignatureFieldKind;\n}\n\nexport interface ActivePlacementChangeEvent {\n documentId: string;\n activePlacement: ActivePlacementInfo | null;\n}\n\nexport interface SignatureScope {\n activateSignaturePlacement(entryId: string): void;\n activateInitialsPlacement(entryId: string): void;\n deactivatePlacement(): void;\n getActivePlacement(): ActivePlacementInfo | null;\n onActivePlacementChange: EventHook<ActivePlacementInfo | null>;\n}\n\nexport interface SignatureCapability {\n readonly mode: SignatureMode;\n getEntries(): SignatureEntry[];\n addEntry(entry: Omit<SignatureEntry, 'id' | 'createdAt'>): string;\n removeEntry(id: string): void;\n loadEntries(entries: SignatureEntry[]): void;\n exportEntries(): SignatureEntry[];\n onEntriesChange: EventHook<SignatureEntry[]>;\n forDocument(documentId: string): SignatureScope;\n onActivePlacementChange: EventHook<ActivePlacementChangeEvent>;\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { SignatureMode, SignaturePluginConfig } from './types';\n\nexport const SIGNATURE_PLUGIN_ID = 'signature';\n\nexport const manifest: PluginManifest<SignaturePluginConfig> = {\n id: SIGNATURE_PLUGIN_ID,\n name: 'Signature Plugin',\n version: '1.0.0',\n provides: ['signature'],\n requires: ['annotation'],\n optional: [],\n defaultConfig: {\n mode: SignatureMode.SignatureOnly,\n },\n};\n","import { Action } from '@embedpdf/core';\n\nexport const ADD_SIGNATURE_ENTRY = 'SIGNATURE/ADD_ENTRY';\nexport const REMOVE_SIGNATURE_ENTRY = 'SIGNATURE/REMOVE_ENTRY';\n\nexport interface AddSignatureEntryAction extends Action {\n type: typeof ADD_SIGNATURE_ENTRY;\n payload: string;\n}\n\nexport interface RemoveSignatureEntryAction extends Action {\n type: typeof REMOVE_SIGNATURE_ENTRY;\n payload: string;\n}\n\nexport type SignatureAction = AddSignatureEntryAction | RemoveSignatureEntryAction;\n\nexport function addSignatureEntry(id: string): AddSignatureEntryAction {\n return { type: ADD_SIGNATURE_ENTRY, payload: id };\n}\n\nexport function removeSignatureEntry(id: string): RemoveSignatureEntryAction {\n return { type: REMOVE_SIGNATURE_ENTRY, payload: id };\n}\n","import {\n PdfAnnotationName,\n PdfAnnotationSubtype,\n PdfStampAnnoObject,\n Rect,\n uuidV4,\n} from '@embedpdf/models';\nimport { HandlerFactory } from '@embedpdf/plugin-annotation';\nimport { applyInsertUpright, clampAnnotationToPage } from '@embedpdf/plugin-annotation';\nimport { SIGNATURE_STAMP_TOOL_ID } from '../tools';\nimport { SignatureFieldKind } from '../types';\n\nexport const signatureStampHandlerFactory: HandlerFactory<\n PdfStampAnnoObject,\n typeof SIGNATURE_STAMP_TOOL_ID\n> = {\n annotationType: PdfAnnotationSubtype.STAMP,\n create(context) {\n const { onPreview, onCommit, getTool, pageSize, pageRotation, getToolContext } = context;\n\n return {\n onPointerMove: (pos) => {\n const ctx = getToolContext();\n if (!ctx?.targetSize) return;\n const { width, height } = ctx.targetSize;\n onPreview({\n type: PdfAnnotationSubtype.STAMP,\n bounds: {\n origin: { x: pos.x - width / 2, y: pos.y - height / 2 },\n size: { width, height },\n },\n data: {\n rect: {\n origin: { x: pos.x - width / 2, y: pos.y - height / 2 },\n size: { width, height },\n },\n ghostUrl: ctx.ghostUrl,\n pageRotation,\n },\n });\n },\n\n onPointerDown: (pos) => {\n const tool = getTool();\n const ctx = getToolContext();\n if (!tool || !ctx?.targetSize) return;\n\n const { width, height } = ctx.targetSize;\n const rect: Rect = {\n origin: { x: pos.x - width / 2, y: pos.y - height / 2 },\n size: { width, height },\n };\n\n let anno: PdfStampAnnoObject = {\n ...tool.defaults,\n rect,\n type: PdfAnnotationSubtype.STAMP,\n name: PdfAnnotationName.Custom,\n subject: 'Signature',\n flags: tool.defaults.flags ?? ['print'],\n pageIndex: context.pageIndex,\n id: uuidV4(),\n created: new Date(),\n };\n\n if (tool.behavior?.insertUpright) {\n anno = applyInsertUpright(anno, pageRotation, false);\n }\n anno = clampAnnotationToPage(anno, pageSize);\n\n onCommit(anno, { data: ctx.imageData });\n onPreview(null);\n },\n\n onPointerLeave: () => {\n onPreview(null);\n },\n };\n },\n};\n","import { PdfAnnotationSubtype, PdfInkAnnoObject, Rect, expandRect, uuidV4 } from '@embedpdf/models';\nimport { HandlerFactory } from '@embedpdf/plugin-annotation';\nimport { clampAnnotationToPage } from '@embedpdf/plugin-annotation';\nimport { SIGNATURE_INK_TOOL_ID } from '../tools';\nimport { SignatureFieldKind, SignatureInkData } from '../types';\n\nfunction translateAndScaleInk(\n inkData: SignatureInkData,\n targetSize: { width: number; height: number },\n centerPos: { x: number; y: number },\n): { inkList: Array<{ points: Array<{ x: number; y: number }> }>; strokeWidth: number } {\n const scaleX = targetSize.width / inkData.size.width;\n const scaleY = targetSize.height / inkData.size.height;\n const scale = Math.min(scaleX, scaleY);\n const scaledW = inkData.size.width * scale;\n const scaledH = inkData.size.height * scale;\n const offsetX = centerPos.x - scaledW / 2;\n const offsetY = centerPos.y - scaledH / 2;\n\n const inkList = inkData.inkList.map((stroke) => ({\n points: stroke.points.map((p) => ({\n x: p.x * scale + offsetX,\n y: p.y * scale + offsetY,\n })),\n }));\n\n return { inkList, strokeWidth: Math.round(inkData.strokeWidth * scale * 10) / 10 };\n}\n\nexport const signatureInkHandlerFactory: HandlerFactory<\n PdfInkAnnoObject,\n typeof SIGNATURE_INK_TOOL_ID\n> = {\n annotationType: PdfAnnotationSubtype.INK,\n create(context) {\n const { onPreview, onCommit, getTool, pageSize, getToolContext } = context;\n\n return {\n onPointerMove: (pos) => {\n const ctx = getToolContext();\n if (!ctx?.inkData || !ctx?.targetSize) return;\n\n const { inkList, strokeWidth } = translateAndScaleInk(ctx.inkData, ctx.targetSize, pos);\n\n const allPoints = inkList.flatMap((s) => s.points);\n if (allPoints.length === 0) return;\n\n const rect = expandRect(\n {\n origin: {\n x: Math.min(...allPoints.map((p) => p.x)),\n y: Math.min(...allPoints.map((p) => p.y)),\n },\n size: {\n width:\n Math.max(...allPoints.map((p) => p.x)) - Math.min(...allPoints.map((p) => p.x)),\n height:\n Math.max(...allPoints.map((p) => p.y)) - Math.min(...allPoints.map((p) => p.y)),\n },\n },\n strokeWidth / 2,\n );\n\n onPreview({\n type: PdfAnnotationSubtype.INK,\n bounds: rect,\n data: {\n rect,\n inkList,\n strokeWidth,\n strokeColor: ctx.inkData.strokeColor,\n opacity: 0.5,\n },\n });\n },\n\n onPointerDown: (pos) => {\n const tool = getTool();\n const ctx = getToolContext();\n if (!tool || !ctx?.inkData || !ctx?.targetSize) return;\n\n const { inkList, strokeWidth } = translateAndScaleInk(ctx.inkData, ctx.targetSize, pos);\n\n const allPoints = inkList.flatMap((s) => s.points);\n if (allPoints.length === 0) return;\n\n const rect = expandRect(\n {\n origin: {\n x: Math.min(...allPoints.map((p) => p.x)),\n y: Math.min(...allPoints.map((p) => p.y)),\n },\n size: {\n width:\n Math.max(...allPoints.map((p) => p.x)) - Math.min(...allPoints.map((p) => p.x)),\n height:\n Math.max(...allPoints.map((p) => p.y)) - Math.min(...allPoints.map((p) => p.y)),\n },\n },\n strokeWidth / 2,\n );\n\n let anno: PdfInkAnnoObject = {\n ...tool.defaults,\n inkList,\n rect,\n strokeWidth,\n strokeColor: ctx.inkData.strokeColor,\n opacity: 1,\n type: PdfAnnotationSubtype.INK,\n subject: 'Signature',\n flags: tool.defaults.flags ?? ['print'],\n pageIndex: context.pageIndex,\n id: uuidV4(),\n created: new Date(),\n };\n\n const unclamped = anno.rect;\n anno = clampAnnotationToPage(anno, pageSize);\n const dx = anno.rect.origin.x - unclamped.origin.x;\n const dy = anno.rect.origin.y - unclamped.origin.y;\n if (dx !== 0 || dy !== 0) {\n anno = {\n ...anno,\n inkList: anno.inkList.map((s) => ({\n points: s.points.map((p) => ({ x: p.x + dx, y: p.y + dy })),\n })),\n };\n }\n\n onCommit(anno);\n onPreview(null);\n },\n\n onPointerLeave: () => {\n onPreview(null);\n },\n };\n },\n};\n","import { PdfAnnotationSubtype } from '@embedpdf/models';\nimport { defineAnnotationTool, patching } from '@embedpdf/plugin-annotation';\nimport { signatureStampHandlerFactory } from './handlers/signature-stamp.handler';\nimport { signatureInkHandlerFactory } from './handlers/signature-ink.handler';\n\nexport const SIGNATURE_STAMP_TOOL_ID = 'signatureStamp' as const;\nexport const SIGNATURE_INK_TOOL_ID = 'signatureInk' as const;\n\nexport const signatureStampTool = defineAnnotationTool({\n id: SIGNATURE_STAMP_TOOL_ID,\n name: 'Signature Stamp',\n labelKey: 'signature.stamp',\n categories: ['annotation', 'signature', 'insert'],\n matchScore: () => 0,\n interaction: {\n exclusive: true,\n cursor: 'copy',\n isDraggable: true,\n isResizable: true,\n isRotatable: false,\n lockAspectRatio: true,\n isGroupDraggable: true,\n isGroupResizable: false,\n isGroupRotatable: false,\n },\n defaults: {\n type: PdfAnnotationSubtype.STAMP,\n },\n behavior: {\n deactivateToolAfterCreate: true,\n selectAfterCreate: true,\n insertUpright: true,\n useAppearanceStream: true,\n },\n pointerHandler: signatureStampHandlerFactory,\n});\n\nexport const signatureInkTool = defineAnnotationTool({\n id: SIGNATURE_INK_TOOL_ID,\n name: 'Signature Ink',\n labelKey: 'signature.ink',\n categories: ['annotation', 'signature', 'insert'],\n matchScore: (a) => (a.type === PdfAnnotationSubtype.INK && a.subject === 'Signature' ? 20 : 0),\n interaction: {\n exclusive: true,\n cursor: 'copy',\n isDraggable: true,\n isResizable: true,\n isRotatable: false,\n lockAspectRatio: true,\n isGroupDraggable: true,\n isGroupResizable: false,\n isGroupRotatable: false,\n },\n defaults: {\n type: PdfAnnotationSubtype.INK,\n },\n behavior: {\n deactivateToolAfterCreate: true,\n selectAfterCreate: true,\n },\n transform: patching.patchInk,\n pointerHandler: signatureInkHandlerFactory,\n});\n\nexport const signatureTools = [signatureStampTool, signatureInkTool];\n","import { BasePlugin, createEmitter, createScopedEmitter, PluginRegistry } from '@embedpdf/core';\nimport { uuidV4 } from '@embedpdf/models';\nimport { AnnotationCapability, AnnotationPlugin } from '@embedpdf/plugin-annotation';\nimport {\n SignatureCapability,\n SignatureScope,\n SignatureEntry,\n SignatureFieldKind,\n SignatureCreationType,\n SignaturePluginConfig,\n SignatureState,\n ActivePlacementInfo,\n ActivePlacementChangeEvent,\n} from './types';\nimport { addSignatureEntry, removeSignatureEntry, SignatureAction } from './actions';\nimport { SIGNATURE_PLUGIN_ID } from './manifest';\nimport { SIGNATURE_STAMP_TOOL_ID, SIGNATURE_INK_TOOL_ID, signatureTools } from './tools';\n\nexport class SignaturePlugin extends BasePlugin<\n SignaturePluginConfig,\n SignatureCapability,\n SignatureState,\n SignatureAction\n> {\n static readonly id = SIGNATURE_PLUGIN_ID;\n\n private readonly entries = new Map<string, SignatureEntry>();\n private readonly entriesChange$ = createEmitter<SignatureEntry[]>();\n private readonly activePlacement$ = createScopedEmitter<\n ActivePlacementInfo | null,\n ActivePlacementChangeEvent,\n string\n >((documentId, activePlacement) => ({ documentId, activePlacement }));\n\n private annotation: AnnotationCapability | null = null;\n private toolChangeUnsubscribe: (() => void) | null = null;\n private currentGhostUrl: string | null = null;\n\n constructor(\n id: string,\n registry: PluginRegistry,\n private config: SignaturePluginConfig,\n ) {\n super(id, registry);\n\n this.annotation = registry.getPlugin<AnnotationPlugin>('annotation')?.provides() ?? null;\n if (this.annotation) {\n for (const tool of signatureTools) {\n this.annotation.addTool(tool);\n }\n this.toolChangeUnsubscribe = this.annotation.onActiveToolChange(({ documentId, tool }) => {\n if (tool?.id !== SIGNATURE_STAMP_TOOL_ID && tool?.id !== SIGNATURE_INK_TOOL_ID) {\n this.revokeGhostUrl();\n this.activePlacement$.emit(documentId, null);\n }\n });\n }\n }\n\n async initialize(): Promise<void> {}\n\n protected buildCapability(): SignatureCapability {\n return {\n mode: this.config.mode,\n getEntries: () => this.getEntries(),\n addEntry: (entry) => this.addEntry(entry),\n removeEntry: (id) => this.removeEntry(id),\n loadEntries: (entries) => this.loadEntries(entries),\n exportEntries: () => this.exportEntries(),\n onEntriesChange: this.entriesChange$.on,\n forDocument: (documentId) => this.createSignatureScope(documentId),\n onActivePlacementChange: this.activePlacement$.onGlobal,\n };\n }\n\n getEntries(): SignatureEntry[] {\n return Array.from(this.entries.values());\n }\n\n addEntry(entry: Omit<SignatureEntry, 'id' | 'createdAt'>): string {\n const id = uuidV4();\n const fullEntry: SignatureEntry = {\n ...entry,\n id,\n createdAt: Date.now(),\n };\n\n this.entries.set(id, fullEntry);\n this.dispatch(addSignatureEntry(id));\n this.emitEntriesChange();\n\n return id;\n }\n\n removeEntry(id: string): void {\n if (!this.entries.has(id)) return;\n\n this.entries.delete(id);\n this.dispatch(removeSignatureEntry(id));\n this.emitEntriesChange();\n }\n\n loadEntries(entries: SignatureEntry[]): void {\n for (const entry of entries) {\n this.entries.set(entry.id, entry);\n this.dispatch(addSignatureEntry(entry.id));\n }\n\n this.emitEntriesChange();\n }\n\n exportEntries(): SignatureEntry[] {\n return this.getEntries();\n }\n\n private createSignatureScope(documentId: string): SignatureScope {\n return {\n activateSignaturePlacement: (entryId) =>\n this.activatePlacement(documentId, entryId, SignatureFieldKind.Signature),\n activateInitialsPlacement: (entryId) =>\n this.activatePlacement(documentId, entryId, SignatureFieldKind.Initials),\n deactivatePlacement: () => this.deactivatePlacement(documentId),\n getActivePlacement: () => this.activePlacement$.getValue(documentId) ?? null,\n onActivePlacementChange: this.activePlacement$.forScope(documentId),\n };\n }\n\n private activatePlacement(documentId: string, entryId: string, kind: SignatureFieldKind): void {\n const entry = this.entries.get(entryId);\n if (!entry || !this.annotation) return;\n\n const field = kind === SignatureFieldKind.Initials ? entry.initials : entry.signature;\n if (!field) return;\n\n this.revokeGhostUrl();\n\n if (field.creationType === SignatureCreationType.Draw) {\n if (entry.signature.creationType !== SignatureCreationType.Draw) return;\n const defaultSize = this.config.defaultSize ?? { width: 150, height: 50 };\n const referenceSize = entry.signature.inkData.size;\n const scale = Math.min(\n defaultSize.width / referenceSize.width,\n defaultSize.height / referenceSize.height,\n );\n const targetSize = {\n width: field.inkData.size.width * scale,\n height: field.inkData.size.height * scale,\n };\n\n this.annotation.setActiveTool(SIGNATURE_INK_TOOL_ID, {\n inkData: field.inkData,\n targetSize,\n entryId,\n kind,\n });\n } else {\n if (!field.imageData) return;\n\n const ghostUrl = URL.createObjectURL(\n new Blob([field.imageData], { type: field.imageMimeType ?? 'image/png' }),\n );\n this.currentGhostUrl = ghostUrl;\n\n const defaultSize = this.config.defaultSize ?? { width: 150, height: 50 };\n let targetSize = defaultSize;\n if (field.imageSize) {\n const referenceSize =\n entry.signature.creationType !== SignatureCreationType.Draw\n ? (entry.signature.imageSize ?? field.imageSize)\n : field.imageSize;\n const scale = Math.min(\n defaultSize.width / referenceSize.width,\n defaultSize.height / referenceSize.height,\n );\n targetSize = {\n width: field.imageSize.width * scale,\n height: field.imageSize.height * scale,\n };\n }\n\n this.annotation.setActiveTool(SIGNATURE_STAMP_TOOL_ID, {\n imageData: field.imageData,\n ghostUrl,\n targetSize,\n entryId,\n kind,\n });\n }\n\n this.activePlacement$.emit(documentId, { entryId, kind });\n }\n\n private deactivatePlacement(documentId: string): void {\n if (!this.annotation) return;\n this.annotation.setActiveTool(null);\n this.revokeGhostUrl();\n this.activePlacement$.emit(documentId, null);\n }\n\n private revokeGhostUrl(): void {\n if (this.currentGhostUrl) {\n URL.revokeObjectURL(this.currentGhostUrl);\n this.currentGhostUrl = null;\n }\n }\n\n private emitEntriesChange(): void {\n this.entriesChange$.emit(this.getEntries());\n }\n\n override async destroy(): Promise<void> {\n this.revokeGhostUrl();\n this.toolChangeUnsubscribe?.();\n this.entries.clear();\n }\n}\n","import { Reducer } from '@embedpdf/core';\nimport { SignatureAction, ADD_SIGNATURE_ENTRY, REMOVE_SIGNATURE_ENTRY } from './actions';\nimport { SignatureState } from './types';\n\nexport const initialState: SignatureState = {\n entryIds: [],\n};\n\nexport const signatureReducer: Reducer<SignatureState, SignatureAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case ADD_SIGNATURE_ENTRY:\n return {\n ...state,\n entryIds: [...state.entryIds, action.payload],\n };\n\n case REMOVE_SIGNATURE_ENTRY:\n return {\n ...state,\n entryIds: state.entryIds.filter((id) => id !== action.payload),\n };\n\n default:\n return state;\n }\n};\n","import {\n SignatureEntry,\n SignatureFieldDefinition,\n SignatureCreationType,\n SignatureStampFieldDefinition,\n} from './types';\n\n// ---------------------------------------------------------------------------\n// Serialized types (JSON-safe — ArrayBuffer replaced with base64 strings)\n// ---------------------------------------------------------------------------\n\nexport interface SerializedSignatureStampField {\n creationType: SignatureCreationType.Type | SignatureCreationType.Upload;\n label?: string;\n previewDataUrl: string;\n imageMimeType?: string;\n imageSize?: { width: number; height: number };\n imageData?: string;\n}\n\nexport type SerializedSignatureFieldDefinition =\n | import('./types').SignatureInkFieldDefinition\n | SerializedSignatureStampField;\n\nexport interface SerializedSignatureEntry {\n id: string;\n createdAt: number;\n signature: SerializedSignatureFieldDefinition;\n initials?: SerializedSignatureFieldDefinition;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nfunction serializeField(field: SignatureFieldDefinition): SerializedSignatureFieldDefinition {\n if (field.creationType === SignatureCreationType.Draw) {\n return field;\n }\n const { imageData, ...rest } = field;\n return {\n ...rest,\n imageData: imageData ? arrayBufferToBase64(imageData) : undefined,\n };\n}\n\nfunction deserializeField(field: SerializedSignatureFieldDefinition): SignatureFieldDefinition {\n if (field.creationType === SignatureCreationType.Draw) {\n return field;\n }\n const { imageData, ...rest } = field;\n return {\n ...rest,\n imageData: imageData ? base64ToArrayBuffer(imageData) : undefined,\n } as SignatureStampFieldDefinition;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Converts signature entries into a JSON-safe format by encoding\n * ArrayBuffer fields as base64 strings. Use with `JSON.stringify`\n * for persistence (e.g. localStorage, IndexedDB, or a backend API).\n */\nexport function serializeEntries(entries: SignatureEntry[]): SerializedSignatureEntry[] {\n return entries.map((entry) => ({\n id: entry.id,\n createdAt: entry.createdAt,\n signature: serializeField(entry.signature),\n ...(entry.initials && { initials: serializeField(entry.initials) }),\n }));\n}\n\n/**\n * Restores signature entries from the JSON-safe format produced by\n * `serializeEntries`, converting base64 strings back to ArrayBuffers.\n */\nexport function deserializeEntries(data: SerializedSignatureEntry[]): SignatureEntry[] {\n return data.map((entry) => ({\n id: entry.id,\n createdAt: entry.createdAt,\n signature: deserializeField(entry.signature),\n ...(entry.initials && { initials: deserializeField(entry.initials) }),\n }));\n}\n","import { PluginPackage } from '@embedpdf/core';\nimport { manifest, SIGNATURE_PLUGIN_ID } from './manifest';\nimport { SignaturePluginConfig, SignatureState } from './types';\nimport { SignaturePlugin } from './signature-plugin';\nimport { signatureReducer, initialState } from './reducer';\nimport { SignatureAction } from './actions';\n\nexport const SignaturePluginPackage: PluginPackage<\n SignaturePlugin,\n SignaturePluginConfig,\n SignatureState,\n SignatureAction\n> = {\n manifest,\n create: (registry, config) => new SignaturePlugin(SIGNATURE_PLUGIN_ID, registry, config),\n reducer: signatureReducer,\n initialState,\n};\n\nexport * from './signature-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\nexport * from './reducer';\nexport { SIGNATURE_STAMP_TOOL_ID, SIGNATURE_INK_TOOL_ID } from './tools';\nexport * from './serialization';\n"],"names":["SignatureMode","SignatureCreationType","SignatureFieldKind","SIGNATURE_PLUGIN_ID","manifest","id","name","version","provides","requires","optional","defaultConfig","mode","SignatureOnly","ADD_SIGNATURE_ENTRY","REMOVE_SIGNATURE_ENTRY","addSignatureEntry","type","payload","removeSignatureEntry","signatureStampHandlerFactory","annotationType","PdfAnnotationSubtype","STAMP","create","context","onPreview","onCommit","getTool","pageSize","pageRotation","getToolContext","onPointerMove","pos","ctx","targetSize","width","height","bounds","origin","x","y","size","data","rect","ghostUrl","onPointerDown","tool","anno","defaults","PdfAnnotationName","Custom","subject","flags","pageIndex","uuidV4","created","Date","_a","behavior","insertUpright","applyInsertUpright","clampAnnotationToPage","imageData","onPointerLeave","translateAndScaleInk","inkData","centerPos","scaleX","scaleY","scale","Math","min","scaledW","scaledH","offsetX","offsetY","inkList","map","stroke","points","p","strokeWidth","round","signatureInkHandlerFactory","INK","allPoints","flatMap","s","length","expandRect","max","strokeColor","opacity","unclamped","dx","dy","SIGNATURE_STAMP_TOOL_ID","SIGNATURE_INK_TOOL_ID","signatureTools","defineAnnotationTool","labelKey","categories","matchScore","interaction","exclusive","cursor","isDraggable","isResizable","isRotatable","lockAspectRatio","isGroupDraggable","isGroupResizable","isGroupRotatable","deactivateToolAfterCreate","selectAfterCreate","useAppearanceStream","pointerHandler","a","transform","patching","patchInk","_SignaturePlugin","BasePlugin","constructor","registry","config","super","this","entries","Map","entriesChange$","createEmitter","activePlacement$","createScopedEmitter","documentId","activePlacement","annotation","toolChangeUnsubscribe","currentGhostUrl","getPlugin","addTool","onActiveToolChange","revokeGhostUrl","emit","initialize","buildCapability","getEntries","addEntry","entry","removeEntry","loadEntries","exportEntries","onEntriesChange","on","forDocument","createSignatureScope","onActivePlacementChange","onGlobal","Array","from","values","fullEntry","createdAt","now","set","dispatch","emitEntriesChange","has","delete","activateSignaturePlacement","entryId","activatePlacement","Signature","activateInitialsPlacement","Initials","deactivatePlacement","getActivePlacement","getValue","forScope","kind","get","field","initials","signature","creationType","Draw","defaultSize","referenceSize","setActiveTool","URL","createObjectURL","Blob","imageMimeType","imageSize","revokeObjectURL","destroy","call","clear","SignaturePlugin","initialState","entryIds","signatureReducer","state","action","filter","arrayBufferToBase64","buffer","bytes","Uint8Array","binary","i","String","fromCharCode","btoa","base64ToArrayBuffer","base64","atob","charCodeAt","serializeField","rest","deserializeField","SignaturePluginPackage","reducer"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
import { BasePlugin, createEmitter, createScopedEmitter } from "@embedpdf/core";
|
|
2
|
+
import { PdfAnnotationSubtype, uuidV4, PdfAnnotationName, expandRect } from "@embedpdf/models";
|
|
3
|
+
import { applyInsertUpright, clampAnnotationToPage, defineAnnotationTool, patching } from "@embedpdf/plugin-annotation";
|
|
4
|
+
var SignatureMode = /* @__PURE__ */ ((SignatureMode2) => {
|
|
5
|
+
SignatureMode2["SignatureOnly"] = "signature-only";
|
|
6
|
+
SignatureMode2["SignatureAndInitials"] = "signature-and-initials";
|
|
7
|
+
return SignatureMode2;
|
|
8
|
+
})(SignatureMode || {});
|
|
9
|
+
var SignatureCreationType = /* @__PURE__ */ ((SignatureCreationType2) => {
|
|
10
|
+
SignatureCreationType2["Draw"] = "draw";
|
|
11
|
+
SignatureCreationType2["Type"] = "type";
|
|
12
|
+
SignatureCreationType2["Upload"] = "upload";
|
|
13
|
+
return SignatureCreationType2;
|
|
14
|
+
})(SignatureCreationType || {});
|
|
15
|
+
var SignatureFieldKind = /* @__PURE__ */ ((SignatureFieldKind2) => {
|
|
16
|
+
SignatureFieldKind2["Signature"] = "signature";
|
|
17
|
+
SignatureFieldKind2["Initials"] = "initials";
|
|
18
|
+
return SignatureFieldKind2;
|
|
19
|
+
})(SignatureFieldKind || {});
|
|
20
|
+
const SIGNATURE_PLUGIN_ID = "signature";
|
|
21
|
+
const manifest = {
|
|
22
|
+
id: SIGNATURE_PLUGIN_ID,
|
|
23
|
+
name: "Signature Plugin",
|
|
24
|
+
version: "1.0.0",
|
|
25
|
+
provides: ["signature"],
|
|
26
|
+
requires: ["annotation"],
|
|
27
|
+
optional: [],
|
|
28
|
+
defaultConfig: {
|
|
29
|
+
mode: SignatureMode.SignatureOnly
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const ADD_SIGNATURE_ENTRY = "SIGNATURE/ADD_ENTRY";
|
|
33
|
+
const REMOVE_SIGNATURE_ENTRY = "SIGNATURE/REMOVE_ENTRY";
|
|
34
|
+
function addSignatureEntry(id) {
|
|
35
|
+
return { type: ADD_SIGNATURE_ENTRY, payload: id };
|
|
36
|
+
}
|
|
37
|
+
function removeSignatureEntry(id) {
|
|
38
|
+
return { type: REMOVE_SIGNATURE_ENTRY, payload: id };
|
|
39
|
+
}
|
|
40
|
+
const signatureStampHandlerFactory = {
|
|
41
|
+
annotationType: PdfAnnotationSubtype.STAMP,
|
|
42
|
+
create(context) {
|
|
43
|
+
const { onPreview, onCommit, getTool, pageSize, pageRotation, getToolContext } = context;
|
|
44
|
+
return {
|
|
45
|
+
onPointerMove: (pos) => {
|
|
46
|
+
const ctx = getToolContext();
|
|
47
|
+
if (!(ctx == null ? void 0 : ctx.targetSize)) return;
|
|
48
|
+
const { width, height } = ctx.targetSize;
|
|
49
|
+
onPreview({
|
|
50
|
+
type: PdfAnnotationSubtype.STAMP,
|
|
51
|
+
bounds: {
|
|
52
|
+
origin: { x: pos.x - width / 2, y: pos.y - height / 2 },
|
|
53
|
+
size: { width, height }
|
|
54
|
+
},
|
|
55
|
+
data: {
|
|
56
|
+
rect: {
|
|
57
|
+
origin: { x: pos.x - width / 2, y: pos.y - height / 2 },
|
|
58
|
+
size: { width, height }
|
|
59
|
+
},
|
|
60
|
+
ghostUrl: ctx.ghostUrl,
|
|
61
|
+
pageRotation
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
onPointerDown: (pos) => {
|
|
66
|
+
var _a;
|
|
67
|
+
const tool = getTool();
|
|
68
|
+
const ctx = getToolContext();
|
|
69
|
+
if (!tool || !(ctx == null ? void 0 : ctx.targetSize)) return;
|
|
70
|
+
const { width, height } = ctx.targetSize;
|
|
71
|
+
const rect = {
|
|
72
|
+
origin: { x: pos.x - width / 2, y: pos.y - height / 2 },
|
|
73
|
+
size: { width, height }
|
|
74
|
+
};
|
|
75
|
+
let anno = {
|
|
76
|
+
...tool.defaults,
|
|
77
|
+
rect,
|
|
78
|
+
type: PdfAnnotationSubtype.STAMP,
|
|
79
|
+
name: PdfAnnotationName.Custom,
|
|
80
|
+
subject: "Signature",
|
|
81
|
+
flags: tool.defaults.flags ?? ["print"],
|
|
82
|
+
pageIndex: context.pageIndex,
|
|
83
|
+
id: uuidV4(),
|
|
84
|
+
created: /* @__PURE__ */ new Date()
|
|
85
|
+
};
|
|
86
|
+
if ((_a = tool.behavior) == null ? void 0 : _a.insertUpright) {
|
|
87
|
+
anno = applyInsertUpright(anno, pageRotation, false);
|
|
88
|
+
}
|
|
89
|
+
anno = clampAnnotationToPage(anno, pageSize);
|
|
90
|
+
onCommit(anno, { data: ctx.imageData });
|
|
91
|
+
onPreview(null);
|
|
92
|
+
},
|
|
93
|
+
onPointerLeave: () => {
|
|
94
|
+
onPreview(null);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
function translateAndScaleInk(inkData, targetSize, centerPos) {
|
|
100
|
+
const scaleX = targetSize.width / inkData.size.width;
|
|
101
|
+
const scaleY = targetSize.height / inkData.size.height;
|
|
102
|
+
const scale = Math.min(scaleX, scaleY);
|
|
103
|
+
const scaledW = inkData.size.width * scale;
|
|
104
|
+
const scaledH = inkData.size.height * scale;
|
|
105
|
+
const offsetX = centerPos.x - scaledW / 2;
|
|
106
|
+
const offsetY = centerPos.y - scaledH / 2;
|
|
107
|
+
const inkList = inkData.inkList.map((stroke) => ({
|
|
108
|
+
points: stroke.points.map((p) => ({
|
|
109
|
+
x: p.x * scale + offsetX,
|
|
110
|
+
y: p.y * scale + offsetY
|
|
111
|
+
}))
|
|
112
|
+
}));
|
|
113
|
+
return { inkList, strokeWidth: Math.round(inkData.strokeWidth * scale * 10) / 10 };
|
|
114
|
+
}
|
|
115
|
+
const signatureInkHandlerFactory = {
|
|
116
|
+
annotationType: PdfAnnotationSubtype.INK,
|
|
117
|
+
create(context) {
|
|
118
|
+
const { onPreview, onCommit, getTool, pageSize, getToolContext } = context;
|
|
119
|
+
return {
|
|
120
|
+
onPointerMove: (pos) => {
|
|
121
|
+
const ctx = getToolContext();
|
|
122
|
+
if (!(ctx == null ? void 0 : ctx.inkData) || !(ctx == null ? void 0 : ctx.targetSize)) return;
|
|
123
|
+
const { inkList, strokeWidth } = translateAndScaleInk(ctx.inkData, ctx.targetSize, pos);
|
|
124
|
+
const allPoints = inkList.flatMap((s) => s.points);
|
|
125
|
+
if (allPoints.length === 0) return;
|
|
126
|
+
const rect = expandRect(
|
|
127
|
+
{
|
|
128
|
+
origin: {
|
|
129
|
+
x: Math.min(...allPoints.map((p) => p.x)),
|
|
130
|
+
y: Math.min(...allPoints.map((p) => p.y))
|
|
131
|
+
},
|
|
132
|
+
size: {
|
|
133
|
+
width: Math.max(...allPoints.map((p) => p.x)) - Math.min(...allPoints.map((p) => p.x)),
|
|
134
|
+
height: Math.max(...allPoints.map((p) => p.y)) - Math.min(...allPoints.map((p) => p.y))
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
strokeWidth / 2
|
|
138
|
+
);
|
|
139
|
+
onPreview({
|
|
140
|
+
type: PdfAnnotationSubtype.INK,
|
|
141
|
+
bounds: rect,
|
|
142
|
+
data: {
|
|
143
|
+
rect,
|
|
144
|
+
inkList,
|
|
145
|
+
strokeWidth,
|
|
146
|
+
strokeColor: ctx.inkData.strokeColor,
|
|
147
|
+
opacity: 0.5
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
onPointerDown: (pos) => {
|
|
152
|
+
const tool = getTool();
|
|
153
|
+
const ctx = getToolContext();
|
|
154
|
+
if (!tool || !(ctx == null ? void 0 : ctx.inkData) || !(ctx == null ? void 0 : ctx.targetSize)) return;
|
|
155
|
+
const { inkList, strokeWidth } = translateAndScaleInk(ctx.inkData, ctx.targetSize, pos);
|
|
156
|
+
const allPoints = inkList.flatMap((s) => s.points);
|
|
157
|
+
if (allPoints.length === 0) return;
|
|
158
|
+
const rect = expandRect(
|
|
159
|
+
{
|
|
160
|
+
origin: {
|
|
161
|
+
x: Math.min(...allPoints.map((p) => p.x)),
|
|
162
|
+
y: Math.min(...allPoints.map((p) => p.y))
|
|
163
|
+
},
|
|
164
|
+
size: {
|
|
165
|
+
width: Math.max(...allPoints.map((p) => p.x)) - Math.min(...allPoints.map((p) => p.x)),
|
|
166
|
+
height: Math.max(...allPoints.map((p) => p.y)) - Math.min(...allPoints.map((p) => p.y))
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
strokeWidth / 2
|
|
170
|
+
);
|
|
171
|
+
let anno = {
|
|
172
|
+
...tool.defaults,
|
|
173
|
+
inkList,
|
|
174
|
+
rect,
|
|
175
|
+
strokeWidth,
|
|
176
|
+
strokeColor: ctx.inkData.strokeColor,
|
|
177
|
+
opacity: 1,
|
|
178
|
+
type: PdfAnnotationSubtype.INK,
|
|
179
|
+
subject: "Signature",
|
|
180
|
+
flags: tool.defaults.flags ?? ["print"],
|
|
181
|
+
pageIndex: context.pageIndex,
|
|
182
|
+
id: uuidV4(),
|
|
183
|
+
created: /* @__PURE__ */ new Date()
|
|
184
|
+
};
|
|
185
|
+
const unclamped = anno.rect;
|
|
186
|
+
anno = clampAnnotationToPage(anno, pageSize);
|
|
187
|
+
const dx = anno.rect.origin.x - unclamped.origin.x;
|
|
188
|
+
const dy = anno.rect.origin.y - unclamped.origin.y;
|
|
189
|
+
if (dx !== 0 || dy !== 0) {
|
|
190
|
+
anno = {
|
|
191
|
+
...anno,
|
|
192
|
+
inkList: anno.inkList.map((s) => ({
|
|
193
|
+
points: s.points.map((p) => ({ x: p.x + dx, y: p.y + dy }))
|
|
194
|
+
}))
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
onCommit(anno);
|
|
198
|
+
onPreview(null);
|
|
199
|
+
},
|
|
200
|
+
onPointerLeave: () => {
|
|
201
|
+
onPreview(null);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const SIGNATURE_STAMP_TOOL_ID = "signatureStamp";
|
|
207
|
+
const SIGNATURE_INK_TOOL_ID = "signatureInk";
|
|
208
|
+
const signatureStampTool = defineAnnotationTool({
|
|
209
|
+
id: SIGNATURE_STAMP_TOOL_ID,
|
|
210
|
+
name: "Signature Stamp",
|
|
211
|
+
labelKey: "signature.stamp",
|
|
212
|
+
categories: ["annotation", "signature", "insert"],
|
|
213
|
+
matchScore: () => 0,
|
|
214
|
+
interaction: {
|
|
215
|
+
exclusive: true,
|
|
216
|
+
cursor: "copy",
|
|
217
|
+
isDraggable: true,
|
|
218
|
+
isResizable: true,
|
|
219
|
+
isRotatable: false,
|
|
220
|
+
lockAspectRatio: true,
|
|
221
|
+
isGroupDraggable: true,
|
|
222
|
+
isGroupResizable: false,
|
|
223
|
+
isGroupRotatable: false
|
|
224
|
+
},
|
|
225
|
+
defaults: {
|
|
226
|
+
type: PdfAnnotationSubtype.STAMP
|
|
227
|
+
},
|
|
228
|
+
behavior: {
|
|
229
|
+
deactivateToolAfterCreate: true,
|
|
230
|
+
selectAfterCreate: true,
|
|
231
|
+
insertUpright: true,
|
|
232
|
+
useAppearanceStream: true
|
|
233
|
+
},
|
|
234
|
+
pointerHandler: signatureStampHandlerFactory
|
|
235
|
+
});
|
|
236
|
+
const signatureInkTool = defineAnnotationTool({
|
|
237
|
+
id: SIGNATURE_INK_TOOL_ID,
|
|
238
|
+
name: "Signature Ink",
|
|
239
|
+
labelKey: "signature.ink",
|
|
240
|
+
categories: ["annotation", "signature", "insert"],
|
|
241
|
+
matchScore: (a) => a.type === PdfAnnotationSubtype.INK && a.subject === "Signature" ? 20 : 0,
|
|
242
|
+
interaction: {
|
|
243
|
+
exclusive: true,
|
|
244
|
+
cursor: "copy",
|
|
245
|
+
isDraggable: true,
|
|
246
|
+
isResizable: true,
|
|
247
|
+
isRotatable: false,
|
|
248
|
+
lockAspectRatio: true,
|
|
249
|
+
isGroupDraggable: true,
|
|
250
|
+
isGroupResizable: false,
|
|
251
|
+
isGroupRotatable: false
|
|
252
|
+
},
|
|
253
|
+
defaults: {
|
|
254
|
+
type: PdfAnnotationSubtype.INK
|
|
255
|
+
},
|
|
256
|
+
behavior: {
|
|
257
|
+
deactivateToolAfterCreate: true,
|
|
258
|
+
selectAfterCreate: true
|
|
259
|
+
},
|
|
260
|
+
transform: patching.patchInk,
|
|
261
|
+
pointerHandler: signatureInkHandlerFactory
|
|
262
|
+
});
|
|
263
|
+
const signatureTools = [signatureStampTool, signatureInkTool];
|
|
264
|
+
const _SignaturePlugin = class _SignaturePlugin extends BasePlugin {
|
|
265
|
+
constructor(id, registry, config) {
|
|
266
|
+
var _a;
|
|
267
|
+
super(id, registry);
|
|
268
|
+
this.config = config;
|
|
269
|
+
this.entries = /* @__PURE__ */ new Map();
|
|
270
|
+
this.entriesChange$ = createEmitter();
|
|
271
|
+
this.activePlacement$ = createScopedEmitter((documentId, activePlacement) => ({ documentId, activePlacement }));
|
|
272
|
+
this.annotation = null;
|
|
273
|
+
this.toolChangeUnsubscribe = null;
|
|
274
|
+
this.currentGhostUrl = null;
|
|
275
|
+
this.annotation = ((_a = registry.getPlugin("annotation")) == null ? void 0 : _a.provides()) ?? null;
|
|
276
|
+
if (this.annotation) {
|
|
277
|
+
for (const tool of signatureTools) {
|
|
278
|
+
this.annotation.addTool(tool);
|
|
279
|
+
}
|
|
280
|
+
this.toolChangeUnsubscribe = this.annotation.onActiveToolChange(({ documentId, tool }) => {
|
|
281
|
+
if ((tool == null ? void 0 : tool.id) !== SIGNATURE_STAMP_TOOL_ID && (tool == null ? void 0 : tool.id) !== SIGNATURE_INK_TOOL_ID) {
|
|
282
|
+
this.revokeGhostUrl();
|
|
283
|
+
this.activePlacement$.emit(documentId, null);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
async initialize() {
|
|
289
|
+
}
|
|
290
|
+
buildCapability() {
|
|
291
|
+
return {
|
|
292
|
+
mode: this.config.mode,
|
|
293
|
+
getEntries: () => this.getEntries(),
|
|
294
|
+
addEntry: (entry) => this.addEntry(entry),
|
|
295
|
+
removeEntry: (id) => this.removeEntry(id),
|
|
296
|
+
loadEntries: (entries) => this.loadEntries(entries),
|
|
297
|
+
exportEntries: () => this.exportEntries(),
|
|
298
|
+
onEntriesChange: this.entriesChange$.on,
|
|
299
|
+
forDocument: (documentId) => this.createSignatureScope(documentId),
|
|
300
|
+
onActivePlacementChange: this.activePlacement$.onGlobal
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
getEntries() {
|
|
304
|
+
return Array.from(this.entries.values());
|
|
305
|
+
}
|
|
306
|
+
addEntry(entry) {
|
|
307
|
+
const id = uuidV4();
|
|
308
|
+
const fullEntry = {
|
|
309
|
+
...entry,
|
|
310
|
+
id,
|
|
311
|
+
createdAt: Date.now()
|
|
312
|
+
};
|
|
313
|
+
this.entries.set(id, fullEntry);
|
|
314
|
+
this.dispatch(addSignatureEntry(id));
|
|
315
|
+
this.emitEntriesChange();
|
|
316
|
+
return id;
|
|
317
|
+
}
|
|
318
|
+
removeEntry(id) {
|
|
319
|
+
if (!this.entries.has(id)) return;
|
|
320
|
+
this.entries.delete(id);
|
|
321
|
+
this.dispatch(removeSignatureEntry(id));
|
|
322
|
+
this.emitEntriesChange();
|
|
323
|
+
}
|
|
324
|
+
loadEntries(entries) {
|
|
325
|
+
for (const entry of entries) {
|
|
326
|
+
this.entries.set(entry.id, entry);
|
|
327
|
+
this.dispatch(addSignatureEntry(entry.id));
|
|
328
|
+
}
|
|
329
|
+
this.emitEntriesChange();
|
|
330
|
+
}
|
|
331
|
+
exportEntries() {
|
|
332
|
+
return this.getEntries();
|
|
333
|
+
}
|
|
334
|
+
createSignatureScope(documentId) {
|
|
335
|
+
return {
|
|
336
|
+
activateSignaturePlacement: (entryId) => this.activatePlacement(documentId, entryId, SignatureFieldKind.Signature),
|
|
337
|
+
activateInitialsPlacement: (entryId) => this.activatePlacement(documentId, entryId, SignatureFieldKind.Initials),
|
|
338
|
+
deactivatePlacement: () => this.deactivatePlacement(documentId),
|
|
339
|
+
getActivePlacement: () => this.activePlacement$.getValue(documentId) ?? null,
|
|
340
|
+
onActivePlacementChange: this.activePlacement$.forScope(documentId)
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
activatePlacement(documentId, entryId, kind) {
|
|
344
|
+
const entry = this.entries.get(entryId);
|
|
345
|
+
if (!entry || !this.annotation) return;
|
|
346
|
+
const field = kind === SignatureFieldKind.Initials ? entry.initials : entry.signature;
|
|
347
|
+
if (!field) return;
|
|
348
|
+
this.revokeGhostUrl();
|
|
349
|
+
if (field.creationType === SignatureCreationType.Draw) {
|
|
350
|
+
if (entry.signature.creationType !== SignatureCreationType.Draw) return;
|
|
351
|
+
const defaultSize = this.config.defaultSize ?? { width: 150, height: 50 };
|
|
352
|
+
const referenceSize = entry.signature.inkData.size;
|
|
353
|
+
const scale = Math.min(
|
|
354
|
+
defaultSize.width / referenceSize.width,
|
|
355
|
+
defaultSize.height / referenceSize.height
|
|
356
|
+
);
|
|
357
|
+
const targetSize = {
|
|
358
|
+
width: field.inkData.size.width * scale,
|
|
359
|
+
height: field.inkData.size.height * scale
|
|
360
|
+
};
|
|
361
|
+
this.annotation.setActiveTool(SIGNATURE_INK_TOOL_ID, {
|
|
362
|
+
inkData: field.inkData,
|
|
363
|
+
targetSize,
|
|
364
|
+
entryId,
|
|
365
|
+
kind
|
|
366
|
+
});
|
|
367
|
+
} else {
|
|
368
|
+
if (!field.imageData) return;
|
|
369
|
+
const ghostUrl = URL.createObjectURL(
|
|
370
|
+
new Blob([field.imageData], { type: field.imageMimeType ?? "image/png" })
|
|
371
|
+
);
|
|
372
|
+
this.currentGhostUrl = ghostUrl;
|
|
373
|
+
const defaultSize = this.config.defaultSize ?? { width: 150, height: 50 };
|
|
374
|
+
let targetSize = defaultSize;
|
|
375
|
+
if (field.imageSize) {
|
|
376
|
+
const referenceSize = entry.signature.creationType !== SignatureCreationType.Draw ? entry.signature.imageSize ?? field.imageSize : field.imageSize;
|
|
377
|
+
const scale = Math.min(
|
|
378
|
+
defaultSize.width / referenceSize.width,
|
|
379
|
+
defaultSize.height / referenceSize.height
|
|
380
|
+
);
|
|
381
|
+
targetSize = {
|
|
382
|
+
width: field.imageSize.width * scale,
|
|
383
|
+
height: field.imageSize.height * scale
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
this.annotation.setActiveTool(SIGNATURE_STAMP_TOOL_ID, {
|
|
387
|
+
imageData: field.imageData,
|
|
388
|
+
ghostUrl,
|
|
389
|
+
targetSize,
|
|
390
|
+
entryId,
|
|
391
|
+
kind
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
this.activePlacement$.emit(documentId, { entryId, kind });
|
|
395
|
+
}
|
|
396
|
+
deactivatePlacement(documentId) {
|
|
397
|
+
if (!this.annotation) return;
|
|
398
|
+
this.annotation.setActiveTool(null);
|
|
399
|
+
this.revokeGhostUrl();
|
|
400
|
+
this.activePlacement$.emit(documentId, null);
|
|
401
|
+
}
|
|
402
|
+
revokeGhostUrl() {
|
|
403
|
+
if (this.currentGhostUrl) {
|
|
404
|
+
URL.revokeObjectURL(this.currentGhostUrl);
|
|
405
|
+
this.currentGhostUrl = null;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
emitEntriesChange() {
|
|
409
|
+
this.entriesChange$.emit(this.getEntries());
|
|
410
|
+
}
|
|
411
|
+
async destroy() {
|
|
412
|
+
var _a;
|
|
413
|
+
this.revokeGhostUrl();
|
|
414
|
+
(_a = this.toolChangeUnsubscribe) == null ? void 0 : _a.call(this);
|
|
415
|
+
this.entries.clear();
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
_SignaturePlugin.id = SIGNATURE_PLUGIN_ID;
|
|
419
|
+
let SignaturePlugin = _SignaturePlugin;
|
|
420
|
+
const initialState = {
|
|
421
|
+
entryIds: []
|
|
422
|
+
};
|
|
423
|
+
const signatureReducer = (state = initialState, action) => {
|
|
424
|
+
switch (action.type) {
|
|
425
|
+
case ADD_SIGNATURE_ENTRY:
|
|
426
|
+
return {
|
|
427
|
+
...state,
|
|
428
|
+
entryIds: [...state.entryIds, action.payload]
|
|
429
|
+
};
|
|
430
|
+
case REMOVE_SIGNATURE_ENTRY:
|
|
431
|
+
return {
|
|
432
|
+
...state,
|
|
433
|
+
entryIds: state.entryIds.filter((id) => id !== action.payload)
|
|
434
|
+
};
|
|
435
|
+
default:
|
|
436
|
+
return state;
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
function arrayBufferToBase64(buffer) {
|
|
440
|
+
const bytes = new Uint8Array(buffer);
|
|
441
|
+
let binary = "";
|
|
442
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
443
|
+
binary += String.fromCharCode(bytes[i]);
|
|
444
|
+
}
|
|
445
|
+
return btoa(binary);
|
|
446
|
+
}
|
|
447
|
+
function base64ToArrayBuffer(base64) {
|
|
448
|
+
const binary = atob(base64);
|
|
449
|
+
const bytes = new Uint8Array(binary.length);
|
|
450
|
+
for (let i = 0; i < binary.length; i++) {
|
|
451
|
+
bytes[i] = binary.charCodeAt(i);
|
|
452
|
+
}
|
|
453
|
+
return bytes.buffer;
|
|
454
|
+
}
|
|
455
|
+
function serializeField(field) {
|
|
456
|
+
if (field.creationType === SignatureCreationType.Draw) {
|
|
457
|
+
return field;
|
|
458
|
+
}
|
|
459
|
+
const { imageData, ...rest } = field;
|
|
460
|
+
return {
|
|
461
|
+
...rest,
|
|
462
|
+
imageData: imageData ? arrayBufferToBase64(imageData) : void 0
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
function deserializeField(field) {
|
|
466
|
+
if (field.creationType === SignatureCreationType.Draw) {
|
|
467
|
+
return field;
|
|
468
|
+
}
|
|
469
|
+
const { imageData, ...rest } = field;
|
|
470
|
+
return {
|
|
471
|
+
...rest,
|
|
472
|
+
imageData: imageData ? base64ToArrayBuffer(imageData) : void 0
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
function serializeEntries(entries) {
|
|
476
|
+
return entries.map((entry) => ({
|
|
477
|
+
id: entry.id,
|
|
478
|
+
createdAt: entry.createdAt,
|
|
479
|
+
signature: serializeField(entry.signature),
|
|
480
|
+
...entry.initials && { initials: serializeField(entry.initials) }
|
|
481
|
+
}));
|
|
482
|
+
}
|
|
483
|
+
function deserializeEntries(data) {
|
|
484
|
+
return data.map((entry) => ({
|
|
485
|
+
id: entry.id,
|
|
486
|
+
createdAt: entry.createdAt,
|
|
487
|
+
signature: deserializeField(entry.signature),
|
|
488
|
+
...entry.initials && { initials: deserializeField(entry.initials) }
|
|
489
|
+
}));
|
|
490
|
+
}
|
|
491
|
+
const SignaturePluginPackage = {
|
|
492
|
+
manifest,
|
|
493
|
+
create: (registry, config) => new SignaturePlugin(SIGNATURE_PLUGIN_ID, registry, config),
|
|
494
|
+
reducer: signatureReducer,
|
|
495
|
+
initialState
|
|
496
|
+
};
|
|
497
|
+
export {
|
|
498
|
+
ADD_SIGNATURE_ENTRY,
|
|
499
|
+
REMOVE_SIGNATURE_ENTRY,
|
|
500
|
+
SIGNATURE_INK_TOOL_ID,
|
|
501
|
+
SIGNATURE_PLUGIN_ID,
|
|
502
|
+
SIGNATURE_STAMP_TOOL_ID,
|
|
503
|
+
SignatureCreationType,
|
|
504
|
+
SignatureFieldKind,
|
|
505
|
+
SignatureMode,
|
|
506
|
+
SignaturePlugin,
|
|
507
|
+
SignaturePluginPackage,
|
|
508
|
+
addSignatureEntry,
|
|
509
|
+
deserializeEntries,
|
|
510
|
+
initialState,
|
|
511
|
+
manifest,
|
|
512
|
+
removeSignatureEntry,
|
|
513
|
+
serializeEntries,
|
|
514
|
+
signatureReducer
|
|
515
|
+
};
|
|
516
|
+
//# sourceMappingURL=index.js.map
|