@drvillo/react-browser-e-signing 0.1.0 → 0.1.2

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 CHANGED
@@ -21,6 +21,7 @@ pnpm add @drvillo/react-browser-e-signing
21
21
 
22
22
  ```tsx
23
23
  import { defaults, modifyPdf, sha256, useFieldPlacement } from '@drvillo/react-browser-e-signing'
24
+ import '@drvillo/react-browser-e-signing/styles.css'
24
25
  ```
25
26
 
26
27
  Use the demo app for a complete end-to-end integration:
@@ -67,18 +68,46 @@ pnpm demo
67
68
  - `SigningResult`
68
69
  - `PdfPageDimensions`
69
70
 
70
- ## Tailwind Consumer Setup
71
+ ## Styling and Theming
71
72
 
72
- This package ships Tailwind classes in components. Add the package path to your Tailwind content scan:
73
+ Library components are style-agnostic:
73
74
 
74
- ```js
75
- // tailwind.config.js
76
- export default {
77
- content: [
78
- './src/**/*.{ts,tsx}',
79
- './node_modules/@drvillo/react-browser-e-signing/src/**/*.{ts,tsx}',
80
- ],
75
+ - components expose `data-slot` attributes for all key DOM parts
76
+ - stateful elements expose `data-state`
77
+ - each component root accepts `className`
78
+ - no Tailwind setup is required in consumer apps
79
+
80
+ ### Option 1: Use default styles
81
+
82
+ ```tsx
83
+ import '@drvillo/react-browser-e-signing/styles.css'
84
+ ```
85
+
86
+ ### Option 2: Bring your own styles
87
+
88
+ Skip the default stylesheet and target slots from your app CSS:
89
+
90
+ ```css
91
+ [data-slot='field-palette-button'] {
92
+ border-radius: 999px;
93
+ border: 1px solid #111827;
94
+ background: #ffffff;
81
95
  }
96
+
97
+ [data-slot='field-palette-button'][data-state='selected'] {
98
+ background: #111827;
99
+ color: #ffffff;
100
+ }
101
+ ```
102
+
103
+ ### Slot constants
104
+
105
+ Use exported slot constants to avoid string literals:
106
+
107
+ ```tsx
108
+ import { SLOTS } from '@drvillo/react-browser-e-signing'
109
+
110
+ const selector = `[data-slot="${SLOTS.fieldPaletteButton}"]`
82
111
  ```
83
112
 
84
113
  ## Development Scripts
@@ -96,6 +125,7 @@ pnpm typecheck
96
125
 
97
126
  - `PdfViewer` sets `react-pdf` worker from CDN by default using the runtime PDF.js version.
98
127
  - Browser test config skips execution when Playwright Chromium is not available in the environment.
128
+ - Demo theme switcher (`default` / `custom`) shows how a container app can fully re-theme the same components.
99
129
 
100
130
  ## Limitations
101
131
 
package/dist/index.d.ts CHANGED
@@ -2,6 +2,9 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
3
  import { ReactNode } from 'react';
4
4
 
5
+ declare const SIGNATURE_FONTS: readonly ["Caveat", "Homemade Apple", "Reenie Beanie", "Mr Dafoe", "Pacifico", "Qwitcher Grypen"];
6
+ declare function loadSignatureFont(fontFamily: string): Promise<void>;
7
+
5
8
  interface PdfViewerProps {
6
9
  pdfData: ArrayBuffer | null;
7
10
  numPages: number;
@@ -14,8 +17,9 @@ interface PdfViewerProps {
14
17
  heightPt: number;
15
18
  }) => void;
16
19
  renderOverlay?: (pageIndex: number) => ReactNode;
20
+ className?: string;
17
21
  }
18
- declare function PdfViewer({ pdfData, numPages, scale, onScaleChange, onDocumentLoadSuccess, onPageDimensions, renderOverlay, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
22
+ declare function PdfViewer({ pdfData, numPages, scale, onScaleChange, onDocumentLoadSuccess, onPageDimensions, renderOverlay, className, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
19
23
 
20
24
  type FieldType = 'signature' | 'fullName' | 'title' | 'date';
21
25
  interface FieldPlacement {
@@ -76,28 +80,32 @@ interface FieldOverlayProps {
76
80
  onUpdateField: (fieldId: string, partial: Partial<FieldPlacement>) => void;
77
81
  onRemoveField: (fieldId: string) => void;
78
82
  preview: SignatureFieldPreview;
83
+ className?: string;
79
84
  }
80
- declare function FieldOverlay({ pageIndex, fields, selectedFieldType, onAddField, onUpdateField, onRemoveField, preview, }: FieldOverlayProps): react_jsx_runtime.JSX.Element;
85
+ declare function FieldOverlay({ pageIndex, fields, selectedFieldType, onAddField, onUpdateField, onRemoveField, preview, className, }: FieldOverlayProps): react_jsx_runtime.JSX.Element;
81
86
 
82
87
  interface SignatureFieldProps {
83
88
  field: FieldPlacement;
84
89
  onUpdateField: (fieldId: string, partial: Partial<FieldPlacement>) => void;
85
90
  onRemoveField: (fieldId: string) => void;
86
91
  preview: SignatureFieldPreview;
92
+ className?: string;
87
93
  }
88
- declare function SignatureField({ field, onUpdateField, onRemoveField, preview }: SignatureFieldProps): react_jsx_runtime.JSX.Element;
94
+ declare function SignatureField({ field, onUpdateField, onRemoveField, preview, className }: SignatureFieldProps): react_jsx_runtime.JSX.Element;
89
95
 
90
96
  interface FieldPaletteProps {
91
97
  selectedFieldType: FieldType | null;
92
98
  onSelectFieldType: (fieldType: FieldType | null) => void;
99
+ className?: string;
93
100
  }
94
- declare function FieldPalette({ selectedFieldType, onSelectFieldType }: FieldPaletteProps): react_jsx_runtime.JSX.Element;
101
+ declare function FieldPalette({ selectedFieldType, onSelectFieldType, className }: FieldPaletteProps): react_jsx_runtime.JSX.Element;
95
102
 
96
103
  interface SignerDetailsPanelProps {
97
104
  signerInfo: SignerInfo;
98
105
  onSignerInfoChange: (nextSignerInfo: SignerInfo) => void;
106
+ className?: string;
99
107
  }
100
- declare function SignerDetailsPanel({ signerInfo, onSignerInfoChange }: SignerDetailsPanelProps): react_jsx_runtime.JSX.Element;
108
+ declare function SignerDetailsPanel({ signerInfo, onSignerInfoChange, className }: SignerDetailsPanelProps): react_jsx_runtime.JSX.Element;
101
109
 
102
110
  interface SignaturePreviewProps {
103
111
  signerName: string;
@@ -105,13 +113,15 @@ interface SignaturePreviewProps {
105
113
  signatureDataUrl: string | null;
106
114
  isRendering: boolean;
107
115
  onStyleChange: (nextStyle: SignatureStyle) => void;
116
+ className?: string;
108
117
  }
109
- declare function SignaturePreview({ signerName, style, signatureDataUrl, isRendering, onStyleChange, }: SignaturePreviewProps): react_jsx_runtime.JSX.Element;
118
+ declare function SignaturePreview({ signerName, style, signatureDataUrl, isRendering, onStyleChange, className, }: SignaturePreviewProps): react_jsx_runtime.JSX.Element;
110
119
 
111
120
  interface SignaturePadProps {
112
121
  onDrawn: (signatureDataUrl: string) => void;
122
+ className?: string;
113
123
  }
114
- declare function SignaturePad({ onDrawn }: SignaturePadProps): react_jsx_runtime.JSX.Element;
124
+ declare function SignaturePad({ onDrawn, className }: SignaturePadProps): react_jsx_runtime.JSX.Element;
115
125
 
116
126
  interface SigningCompleteProps {
117
127
  signerName: string;
@@ -121,8 +131,9 @@ interface SigningCompleteProps {
121
131
  downloadUrl: string;
122
132
  fileName?: string;
123
133
  onReset: () => void;
134
+ className?: string;
124
135
  }
125
- declare function SigningComplete({ signerName, fieldCount, signedAt, documentHash, downloadUrl, fileName, onReset, }: SigningCompleteProps): react_jsx_runtime.JSX.Element;
136
+ declare function SigningComplete({ signerName, fieldCount, signedAt, documentHash, downloadUrl, fileName, onReset, className, }: SigningCompleteProps): react_jsx_runtime.JSX.Element;
126
137
 
127
138
  type PdfInput = File | Blob | ArrayBuffer | Uint8Array | null;
128
139
  declare function usePdfDocument(pdfInput: PdfInput): {
@@ -178,15 +189,63 @@ declare function modifyPdf({ pdfBytes, fields, signer, signatureDataUrl, pageDim
178
189
  declare function mapToPoints(field: FieldPlacement, page: PdfPageDimensions): PointRect;
179
190
  declare function mapFromPoints(rect: PointRect, page: PdfPageDimensions): Pick<FieldPlacement, 'xPercent' | 'yPercent' | 'widthPercent' | 'heightPercent'>;
180
191
 
181
- declare const SIGNATURE_FONTS: readonly ["Dancing Script", "Great Vibes", "Sacramento", "Alex Brush"];
182
- declare function loadSignatureFont(fontFamily: string): Promise<void>;
183
-
184
192
  declare function sha256(data: Uint8Array): Promise<string>;
185
193
 
194
+ declare const SLOTS: {
195
+ readonly pdfViewer: "pdf-viewer";
196
+ readonly pdfViewerEmpty: "pdf-viewer-empty";
197
+ readonly pdfViewerToolbar: "pdf-viewer-toolbar";
198
+ readonly pdfViewerPageCount: "pdf-viewer-page-count";
199
+ readonly pdfViewerZoom: "pdf-viewer-zoom";
200
+ readonly pdfViewerZoomButton: "pdf-viewer-zoom-button";
201
+ readonly pdfViewerZoomValue: "pdf-viewer-zoom-value";
202
+ readonly pdfViewerPages: "pdf-viewer-pages";
203
+ readonly pdfViewerPage: "pdf-viewer-page";
204
+ readonly pdfViewerLoading: "pdf-viewer-loading";
205
+ readonly pdfViewerError: "pdf-viewer-error";
206
+ readonly fieldOverlay: "field-overlay";
207
+ readonly signatureField: "signature-field";
208
+ readonly signatureFieldContent: "signature-field-content";
209
+ readonly signatureFieldLabel: "signature-field-label";
210
+ readonly signatureFieldPreview: "signature-field-preview";
211
+ readonly signatureFieldPreviewImage: "signature-field-preview-image";
212
+ readonly signatureFieldPreviewText: "signature-field-preview-text";
213
+ readonly signatureFieldRemove: "signature-field-remove";
214
+ readonly signatureFieldResize: "signature-field-resize";
215
+ readonly fieldPalette: "field-palette";
216
+ readonly fieldPaletteButton: "field-palette-button";
217
+ readonly signerPanel: "signer-panel";
218
+ readonly signerPanelHeading: "signer-panel-heading";
219
+ readonly signerPanelLabel: "signer-panel-label";
220
+ readonly signerPanelInput: "signer-panel-input";
221
+ readonly signaturePreview: "signature-preview";
222
+ readonly signaturePreviewHeading: "signature-preview-heading";
223
+ readonly signaturePreviewModeToggle: "signature-preview-mode-toggle";
224
+ readonly signaturePreviewModeButton: "signature-preview-mode-button";
225
+ readonly signaturePreviewFontLabel: "signature-preview-font-label";
226
+ readonly signaturePreviewFontSelect: "signature-preview-font-select";
227
+ readonly signaturePreviewDisplay: "signature-preview-display";
228
+ readonly signaturePreviewImage: "signature-preview-image";
229
+ readonly signaturePreviewPlaceholder: "signature-preview-placeholder";
230
+ readonly signaturePad: "signature-pad";
231
+ readonly signaturePadCanvas: "signature-pad-canvas";
232
+ readonly signaturePadActions: "signature-pad-actions";
233
+ readonly signaturePadClear: "signature-pad-clear";
234
+ readonly signingComplete: "signing-complete";
235
+ readonly signingCompleteHeading: "signing-complete-heading";
236
+ readonly signingCompleteDetails: "signing-complete-details";
237
+ readonly signingCompleteHash: "signing-complete-hash";
238
+ readonly signingCompleteHashLabel: "signing-complete-hash-label";
239
+ readonly signingCompleteHashValue: "signing-complete-hash-value";
240
+ readonly signingCompleteActions: "signing-complete-actions";
241
+ readonly signingCompleteDownload: "signing-complete-download";
242
+ readonly signingCompleteReset: "signing-complete-reset";
243
+ };
244
+
186
245
  declare const defaults: {
187
- readonly SIGNATURE_FONTS: readonly ["Dancing Script", "Great Vibes", "Sacramento", "Alex Brush"];
246
+ readonly SIGNATURE_FONTS: readonly ["Caveat", "Homemade Apple", "Reenie Beanie", "Mr Dafoe", "Pacifico", "Qwitcher Grypen"];
188
247
  readonly DEFAULT_FIELD_WIDTH_PERCENT: 25;
189
248
  readonly DEFAULT_FIELD_HEIGHT_PERCENT: 5;
190
249
  };
191
250
 
192
- export { FieldOverlay, FieldPalette, type FieldPlacement, type FieldType, type PdfPageDimensions, PdfViewer, SIGNATURE_FONTS, SignatureField, type SignatureFieldPreview, SignaturePad, SignaturePreview, type SignatureStyle, SignerDetailsPanel, type SignerInfo, SigningComplete, type SigningResult, defaults, loadSignatureFont, mapFromPoints, mapToPoints, modifyPdf, sha256, useFieldPlacement, usePdfDocument, useSignatureRenderer };
251
+ export { FieldOverlay, FieldPalette, type FieldPlacement, type FieldType, type PdfPageDimensions, PdfViewer, SIGNATURE_FONTS, SLOTS, SignatureField, type SignatureFieldPreview, SignaturePad, SignaturePreview, type SignatureStyle, SignerDetailsPanel, type SignerInfo, SigningComplete, type SigningResult, defaults, loadSignatureFont, mapFromPoints, mapToPoints, modifyPdf, sha256, useFieldPlacement, usePdfDocument, useSignatureRenderer };