@arbidocs/blocks 0.4.101 → 0.4.103

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.
Files changed (209) hide show
  1. package/dist/chunk-6MG62I5B.cjs +272 -0
  2. package/dist/chunk-6MG62I5B.cjs.map +1 -0
  3. package/dist/{chunk-MYALCKDR.js → chunk-CVYY4X5R.js} +306 -75
  4. package/dist/chunk-CVYY4X5R.js.map +1 -0
  5. package/dist/chunk-EQB3WELX.js +269 -0
  6. package/dist/chunk-EQB3WELX.js.map +1 -0
  7. package/dist/{chunk-G5JH2YMQ.js → chunk-GQTIAATM.js} +3 -3
  8. package/dist/{chunk-G5JH2YMQ.js.map → chunk-GQTIAATM.js.map} +1 -1
  9. package/dist/{chunk-YGREW5TZ.js → chunk-H6DFXG5N.js} +3 -3
  10. package/dist/{chunk-YGREW5TZ.js.map → chunk-H6DFXG5N.js.map} +1 -1
  11. package/dist/{chunk-ZT2EBBSC.cjs → chunk-N36PWG7A.cjs} +5 -5
  12. package/dist/{chunk-ZT2EBBSC.cjs.map → chunk-N36PWG7A.cjs.map} +1 -1
  13. package/dist/{chunk-FAGQTB3D.cjs → chunk-O33EBMIX.cjs} +305 -74
  14. package/dist/chunk-O33EBMIX.cjs.map +1 -0
  15. package/dist/{chunk-Y5XW57U4.cjs → chunk-TFDU2KGS.cjs} +5 -5
  16. package/dist/{chunk-Y5XW57U4.cjs.map → chunk-TFDU2KGS.cjs.map} +1 -1
  17. package/dist/connect/docx.cjs +6 -6
  18. package/dist/connect/docx.js +4 -4
  19. package/dist/connect/index.cjs +3 -3
  20. package/dist/connect/index.js +2 -2
  21. package/dist/document-tools/AdoptSignatureDialog.d.ts +25 -0
  22. package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
  23. package/dist/document-tools/SignatureRequestBanner.d.ts +18 -0
  24. package/dist/document-tools/index.cjs +175 -0
  25. package/dist/document-tools/index.cjs.map +1 -1
  26. package/dist/document-tools/index.d.ts +3 -1
  27. package/dist/document-tools/index.js +168 -3
  28. package/dist/document-tools/index.js.map +1 -1
  29. package/dist/document-tools/viewer/GuidedSigningViewer.d.ts +26 -0
  30. package/dist/document-tools/viewer/SignatureFieldsOverlay.d.ts +41 -0
  31. package/dist/document-tools/viewer/SignatureRequestEditor.d.ts +26 -0
  32. package/dist/document-tools/viewer/index.cjs +983 -0
  33. package/dist/document-tools/viewer/index.cjs.map +1 -1
  34. package/dist/document-tools/viewer/index.d.ts +3 -0
  35. package/dist/document-tools/viewer/index.js +983 -5
  36. package/dist/document-tools/viewer/index.js.map +1 -1
  37. package/dist/docx/RibbonMenu.d.ts +4 -1
  38. package/dist/docx/RibbonOverflow.d.ts +27 -0
  39. package/dist/docx/WordReferences.d.ts +3 -2
  40. package/dist/docx/index.cjs +35 -35
  41. package/dist/docx/index.js +3 -3
  42. package/dist/docx/noteStyles.d.ts +46 -0
  43. package/dist/docx/overflowPlan.d.ts +15 -0
  44. package/dist/index.cjs +5 -5
  45. package/dist/index.js +1 -1
  46. package/node_modules/@arbidocs/coedit/LICENSE +21 -0
  47. package/node_modules/@arbidocs/coedit/dist/encoding.cjs +751 -0
  48. package/node_modules/@arbidocs/coedit/dist/encoding.cjs.map +1 -0
  49. package/node_modules/@arbidocs/coedit/dist/encoding.d.cts +192 -0
  50. package/node_modules/@arbidocs/coedit/dist/encoding.d.ts +192 -0
  51. package/node_modules/@arbidocs/coedit/dist/encoding.js +716 -0
  52. package/node_modules/@arbidocs/coedit/dist/encoding.js.map +1 -0
  53. package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs +1759 -0
  54. package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs.map +1 -0
  55. package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.cts +39 -0
  56. package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.ts +39 -0
  57. package/node_modules/@arbidocs/coedit/dist/hocuspocus.js +1736 -0
  58. package/node_modules/@arbidocs/coedit/dist/hocuspocus.js.map +1 -0
  59. package/node_modules/@arbidocs/coedit/dist/index.cjs +1692 -0
  60. package/node_modules/@arbidocs/coedit/dist/index.cjs.map +1 -0
  61. package/node_modules/@arbidocs/coedit/dist/index.d.cts +16 -0
  62. package/node_modules/@arbidocs/coedit/dist/index.d.ts +16 -0
  63. package/node_modules/@arbidocs/coedit/dist/index.js +1664 -0
  64. package/node_modules/@arbidocs/coedit/dist/index.js.map +1 -0
  65. package/node_modules/@arbidocs/coedit/dist/server.cjs +1852 -0
  66. package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -0
  67. package/node_modules/@arbidocs/coedit/dist/server.d.cts +43 -0
  68. package/node_modules/@arbidocs/coedit/dist/server.d.ts +43 -0
  69. package/node_modules/@arbidocs/coedit/dist/server.js +1822 -0
  70. package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -0
  71. package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.cts +82 -0
  72. package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.ts +82 -0
  73. package/node_modules/@arbidocs/coedit/dist/template.cjs +1627 -0
  74. package/node_modules/@arbidocs/coedit/dist/template.cjs.map +1 -0
  75. package/node_modules/@arbidocs/coedit/dist/template.d.cts +125 -0
  76. package/node_modules/@arbidocs/coedit/dist/template.d.ts +125 -0
  77. package/node_modules/@arbidocs/coedit/dist/template.js +1612 -0
  78. package/node_modules/@arbidocs/coedit/dist/template.js.map +1 -0
  79. package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.cts +8 -0
  80. package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.ts +8 -0
  81. package/node_modules/@arbidocs/coedit/package.json +68 -0
  82. package/node_modules/@docx-editor.dev/core/LICENSE +201 -0
  83. package/node_modules/@docx-editor.dev/core/README.md +125 -0
  84. package/node_modules/@docx-editor.dev/core/THIRD_PARTY_NOTICES.md +56 -0
  85. package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -0
  86. package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +162 -0
  87. package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -0
  88. package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -0
  89. package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +164 -0
  90. package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -0
  91. package/node_modules/@docx-editor.dev/core/dist/chunk-2GO5T2JU.cjs +1 -0
  92. package/node_modules/@docx-editor.dev/core/dist/chunk-2RC2EPND.js +3 -0
  93. package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +28 -0
  94. package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +18 -0
  95. package/node_modules/@docx-editor.dev/core/dist/chunk-5CSUYANV.js +1 -0
  96. package/node_modules/@docx-editor.dev/core/dist/chunk-6APGXLBB.cjs +3 -0
  97. package/node_modules/@docx-editor.dev/core/dist/chunk-6AWEKBLB.cjs +1 -0
  98. package/node_modules/@docx-editor.dev/core/dist/chunk-6EYYL7FL.js +1 -0
  99. package/node_modules/@docx-editor.dev/core/dist/chunk-6JIJOZDW.js +1 -0
  100. package/node_modules/@docx-editor.dev/core/dist/chunk-BTQKU64Q.cjs +1 -0
  101. package/node_modules/@docx-editor.dev/core/dist/chunk-E7BQA6UP.js +2 -0
  102. package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +2 -0
  103. package/node_modules/@docx-editor.dev/core/dist/chunk-ETTO6GK3.js +1 -0
  104. package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +18 -0
  105. package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +28 -0
  106. package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +2 -0
  107. package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +2 -0
  108. package/node_modules/@docx-editor.dev/core/dist/chunk-K5U2PLDP.cjs +2 -0
  109. package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +2 -0
  110. package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +27 -0
  111. package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +1 -0
  112. package/node_modules/@docx-editor.dev/core/dist/chunk-O2AL2HSJ.cjs +1 -0
  113. package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +1 -0
  114. package/node_modules/@docx-editor.dev/core/dist/chunk-QMLCVPCD.cjs +1 -0
  115. package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +27 -0
  116. package/node_modules/@docx-editor.dev/core/dist/chunk-RIYSCEFQ.js +2 -0
  117. package/node_modules/@docx-editor.dev/core/dist/chunk-S6J4O5XP.js +1 -0
  118. package/node_modules/@docx-editor.dev/core/dist/chunk-SRPILEWV.cjs +5 -0
  119. package/node_modules/@docx-editor.dev/core/dist/chunk-TSLBZ26X.js +1 -0
  120. package/node_modules/@docx-editor.dev/core/dist/chunk-UKVVUHZL.cjs +1 -0
  121. package/node_modules/@docx-editor.dev/core/dist/chunk-VDNNLG6X.js +2 -0
  122. package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +7 -0
  123. package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +7 -0
  124. package/node_modules/@docx-editor.dev/core/dist/chunk-Z6WBFXJU.js +5 -0
  125. package/node_modules/@docx-editor.dev/core/dist/chunk-ZUHOMK52.cjs +2 -0
  126. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -0
  127. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +270 -0
  128. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -0
  129. package/node_modules/@docx-editor.dev/core/dist/collaboration.cjs +1 -0
  130. package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +269 -0
  131. package/node_modules/@docx-editor.dev/core/dist/collaboration.js +1 -0
  132. package/node_modules/@docx-editor.dev/core/dist/contracts/document.cjs +1 -0
  133. package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +290 -0
  134. package/node_modules/@docx-editor.dev/core/dist/contracts/document.js +0 -0
  135. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.cjs +1 -0
  136. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +22 -0
  137. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.js +1 -0
  138. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.cjs +1 -0
  139. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +103 -0
  140. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.js +0 -0
  141. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -0
  142. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +143 -0
  143. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -0
  144. package/node_modules/@docx-editor.dev/core/dist/contracts/types.cjs +1 -0
  145. package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +11 -0
  146. package/node_modules/@docx-editor.dev/core/dist/contracts/types.js +0 -0
  147. package/node_modules/@docx-editor.dev/core/dist/custom-node-writes-cvL5rhcD.d.ts +323 -0
  148. package/node_modules/@docx-editor.dev/core/dist/dist-PKZR6RSH.js +2 -0
  149. package/node_modules/@docx-editor.dev/core/dist/document-protection-BAGVGqaP.d.ts +20 -0
  150. package/node_modules/@docx-editor.dev/core/dist/editor-Ci7IZGmG.d.ts +2448 -0
  151. package/node_modules/@docx-editor.dev/core/dist/editor-scope-OHPwVQ5l.d.ts +84 -0
  152. package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -0
  153. package/node_modules/@docx-editor.dev/core/dist/editor.css +15 -0
  154. package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +1394 -0
  155. package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -0
  156. package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -0
  157. package/node_modules/@docx-editor.dev/core/dist/export.d.ts +391 -0
  158. package/node_modules/@docx-editor.dev/core/dist/export.js +2 -0
  159. package/node_modules/@docx-editor.dev/core/dist/failure-NS2lsya4.d.ts +115 -0
  160. package/node_modules/@docx-editor.dev/core/dist/font-resolver-BVQB14qT.d.ts +256 -0
  161. package/node_modules/@docx-editor.dev/core/dist/harfbuzz.wasm +0 -0
  162. package/node_modules/@docx-editor.dev/core/dist/headless-document-view-qH331moE.d.ts +143 -0
  163. package/node_modules/@docx-editor.dev/core/dist/image-resources-BN-hUgCn.d.ts +211 -0
  164. package/node_modules/@docx-editor.dev/core/dist/index-Bsg7oIKP.d.ts +3869 -0
  165. package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -0
  166. package/node_modules/@docx-editor.dev/core/dist/index.d.ts +53 -0
  167. package/node_modules/@docx-editor.dev/core/dist/index.js +1 -0
  168. package/node_modules/@docx-editor.dev/core/dist/layout-shaping-BEyuiQOk.d.ts +246 -0
  169. package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -0
  170. package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +3151 -0
  171. package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -0
  172. package/node_modules/@docx-editor.dev/core/dist/node-module-shim-TTKTT66I.js +1 -0
  173. package/node_modules/@docx-editor.dev/core/dist/note-properties-4Y9o6Gyk.d.ts +68 -0
  174. package/node_modules/@docx-editor.dev/core/dist/omml-equation-CuzBL5DD.d.ts +85 -0
  175. package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -0
  176. package/node_modules/@docx-editor.dev/core/dist/output.d.ts +97 -0
  177. package/node_modules/@docx-editor.dev/core/dist/output.js +1 -0
  178. package/node_modules/@docx-editor.dev/core/dist/protocol-Bqk4Izjc.d.ts +1651 -0
  179. package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +128 -0
  180. package/node_modules/@docx-editor.dev/core/dist/review-paragraph-order-DT-n6ouC.d.ts +85 -0
  181. package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +242 -0
  182. package/node_modules/@docx-editor.dev/core/dist/semantic-cell-selection-D9D1KSXq.d.ts +464 -0
  183. package/node_modules/@docx-editor.dev/core/dist/semantic-interaction-CIC-PooQ.d.ts +135 -0
  184. package/node_modules/@docx-editor.dev/core/dist/semantic-paint-BME37OMv.d.ts +326 -0
  185. package/node_modules/@docx-editor.dev/core/dist/semantic-record-queries-CBlZqZNa.d.ts +177 -0
  186. package/node_modules/@docx-editor.dev/core/dist/semantic-records-4B3WwFAi.d.ts +3532 -0
  187. package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -0
  188. package/node_modules/@docx-editor.dev/core/dist/store.d.ts +2706 -0
  189. package/node_modules/@docx-editor.dev/core/dist/store.js +1 -0
  190. package/node_modules/@docx-editor.dev/core/dist/tree-package-fragment-BeeKxDw8.d.ts +1201 -0
  191. package/node_modules/@docx-editor.dev/core/dist/tree-session-contract-CVbmlMlq.d.ts +664 -0
  192. package/node_modules/@docx-editor.dev/core/dist/types-barrel-D3xCgQX6.d.ts +4269 -0
  193. package/node_modules/@docx-editor.dev/core/licenses/HarfBuzz-COPYING.txt +42 -0
  194. package/node_modules/@docx-editor.dev/core/package.json +140 -0
  195. package/node_modules/@docx-editor.dev/react/LICENSE +201 -0
  196. package/node_modules/@docx-editor.dev/react/README.md +141 -0
  197. package/node_modules/@docx-editor.dev/react/THIRD_PARTY_NOTICES.md +18 -0
  198. package/node_modules/@docx-editor.dev/react/dist/index.d.mts +4928 -0
  199. package/node_modules/@docx-editor.dev/react/dist/index.d.ts +4928 -0
  200. package/node_modules/@docx-editor.dev/react/dist/index.js +4 -0
  201. package/node_modules/@docx-editor.dev/react/dist/index.mjs +4 -0
  202. package/node_modules/@docx-editor.dev/react/package.json +74 -0
  203. package/node_modules/@docx-editor.dev/react/src/styles/editor.css +6 -0
  204. package/node_modules/@docx-editor.dev/react/src/styles/zIndex.ts +28 -0
  205. package/package.json +26 -15
  206. package/src/docx/README.md +10 -0
  207. package/src/docx/styles.css +73 -5
  208. package/dist/chunk-FAGQTB3D.cjs.map +0 -1
  209. package/dist/chunk-MYALCKDR.js.map +0 -1
@@ -0,0 +1,272 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
5
+ var react = require('react');
6
+ var documentTools = require('@arbidocs/react/document-tools');
7
+ var ui = require('@arbidocs/react/ui');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var CANVAS_W = 600;
11
+ var CANVAS_H = 200;
12
+ var TYPED_SIGNATURE_STYLE = {
13
+ fontFamily: '"Times New Roman", Times, serif',
14
+ fontStyle: "italic",
15
+ color: "#0d1a59"
16
+ };
17
+ function blank(canvas) {
18
+ const ctx = canvas?.getContext("2d");
19
+ if (!canvas || !ctx) return true;
20
+ const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height);
21
+ for (let i = 3; i < data.length; i += 4) if (data[i] > 0) return false;
22
+ return true;
23
+ }
24
+ async function drawUpload(canvas, file) {
25
+ const url = URL.createObjectURL(file);
26
+ try {
27
+ const img = new Image();
28
+ await new Promise((resolve, reject) => {
29
+ img.onload = () => resolve();
30
+ img.onerror = () => reject(new Error("That file is not an image"));
31
+ img.src = url;
32
+ });
33
+ const ctx = canvas.getContext("2d");
34
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
35
+ const scale = Math.min(canvas.width / img.width, canvas.height / img.height);
36
+ const w = img.width * scale;
37
+ const h = img.height * scale;
38
+ ctx.drawImage(img, (canvas.width - w) / 2, (canvas.height - h) / 2, w, h);
39
+ const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
40
+ for (let i = 0; i < pixels.data.length; i += 4) {
41
+ const [r, g, b] = [pixels.data[i], pixels.data[i + 1], pixels.data[i + 2]];
42
+ if (r > 225 && g > 225 && b > 225) pixels.data[i + 3] = 0;
43
+ }
44
+ ctx.putImageData(pixels, 0, 0);
45
+ } finally {
46
+ URL.revokeObjectURL(url);
47
+ }
48
+ }
49
+ function AdoptSignatureDialog({
50
+ open,
51
+ onOpenChange,
52
+ defaultName,
53
+ onAdopt
54
+ }) {
55
+ const [name, setName] = react.useState(defaultName);
56
+ const [initials, setInitials] = react.useState(() => documentTools.initialsOf(defaultName));
57
+ const [style, setStyle] = react.useState("typed");
58
+ const [hasInk, setHasInk] = react.useState(false);
59
+ const [error, setError] = react.useState(null);
60
+ const drawRef = react.useRef(null);
61
+ const uploadRef = react.useRef(null);
62
+ const drawing = react.useRef(false);
63
+ react.useEffect(() => {
64
+ if (open) {
65
+ setName(defaultName);
66
+ setInitials(documentTools.initialsOf(defaultName));
67
+ }
68
+ }, [open, defaultName]);
69
+ const canvas = () => style === "drawn" ? drawRef.current : uploadRef.current;
70
+ const pos = (e) => {
71
+ const r = e.currentTarget.getBoundingClientRect();
72
+ return {
73
+ x: (e.clientX - r.left) / r.width * CANVAS_W,
74
+ y: (e.clientY - r.top) / r.height * CANVAS_H
75
+ };
76
+ };
77
+ const start = (e) => {
78
+ const ctx = e.currentTarget.getContext("2d");
79
+ if (!ctx) return;
80
+ e.currentTarget.setPointerCapture?.(e.pointerId);
81
+ drawing.current = true;
82
+ const p = pos(e);
83
+ ctx.lineWidth = 3.5;
84
+ ctx.lineCap = "round";
85
+ ctx.lineJoin = "round";
86
+ ctx.strokeStyle = TYPED_SIGNATURE_STYLE.color;
87
+ ctx.beginPath();
88
+ ctx.moveTo(p.x, p.y);
89
+ };
90
+ const move = (e) => {
91
+ if (!drawing.current) return;
92
+ const ctx = e.currentTarget.getContext("2d");
93
+ const p = pos(e);
94
+ ctx?.lineTo(p.x, p.y);
95
+ ctx?.stroke();
96
+ setHasInk(true);
97
+ };
98
+ const clear = () => {
99
+ const c = canvas();
100
+ c?.getContext("2d")?.clearRect(0, 0, CANVAS_W, CANVAS_H);
101
+ setHasInk(false);
102
+ };
103
+ const adopt = () => {
104
+ setError(null);
105
+ if (!name.trim() || !initials.trim()) return;
106
+ if (style === "typed") {
107
+ onAdopt({
108
+ adopted: { name: name.trim(), initials: initials.trim(), style },
109
+ signatureUrl: null
110
+ });
111
+ return;
112
+ }
113
+ const c = canvas();
114
+ if (!c || blank(c)) {
115
+ setError(style === "drawn" ? "Draw your signature first." : "Choose an image first.");
116
+ return;
117
+ }
118
+ const url = c.toDataURL("image/png");
119
+ onAdopt({
120
+ adopted: {
121
+ name: name.trim(),
122
+ initials: initials.trim(),
123
+ style,
124
+ signature_image: url.slice(url.indexOf(",") + 1)
125
+ },
126
+ signatureUrl: url
127
+ });
128
+ };
129
+ return /* @__PURE__ */ jsxRuntime.jsxs(
130
+ chunkULWRNGGE_cjs.ModalScaffold,
131
+ {
132
+ open,
133
+ onOpenChange,
134
+ title: "Adopt your signature",
135
+ description: "You adopt it once and apply it at each place you are asked to sign.",
136
+ showDescription: true,
137
+ testId: "adopt-signature-dialog",
138
+ children: [
139
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalScaffold.Body, { children: [
140
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_7rem] gap-3", children: [
141
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
142
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "adopt-name", children: "Full name" }),
143
+ /* @__PURE__ */ jsxRuntime.jsx(
144
+ ui.Input,
145
+ {
146
+ id: "adopt-name",
147
+ value: name,
148
+ onChange: (e) => {
149
+ setName(e.target.value);
150
+ setInitials(documentTools.initialsOf(e.target.value));
151
+ },
152
+ "data-testid": "adopt-signature-name"
153
+ }
154
+ )
155
+ ] }),
156
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
157
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "adopt-initials", children: "Initials" }),
158
+ /* @__PURE__ */ jsxRuntime.jsx(
159
+ ui.Input,
160
+ {
161
+ id: "adopt-initials",
162
+ value: initials,
163
+ maxLength: 12,
164
+ onChange: (e) => setInitials(e.target.value),
165
+ "data-testid": "adopt-signature-initials"
166
+ }
167
+ )
168
+ ] })
169
+ ] }),
170
+ /* @__PURE__ */ jsxRuntime.jsxs(
171
+ ui.Tabs,
172
+ {
173
+ value: style,
174
+ onValueChange: (v) => {
175
+ setStyle(v);
176
+ setError(null);
177
+ },
178
+ children: [
179
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.TabsList, { className: "grid w-full grid-cols-3", children: [
180
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TabsTrigger, { value: "typed", "data-testid": "adopt-tab-typed", children: "Type" }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TabsTrigger, { value: "drawn", "data-testid": "adopt-tab-drawn", children: "Draw" }),
182
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TabsTrigger, { value: "uploaded", "data-testid": "adopt-tab-uploaded", children: "Upload" })
183
+ ] }),
184
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TabsContent, { value: "typed", children: /* @__PURE__ */ jsxRuntime.jsx(
185
+ "div",
186
+ {
187
+ className: "flex h-28 items-center justify-center rounded-md border bg-white px-4 text-4xl",
188
+ style: TYPED_SIGNATURE_STYLE,
189
+ "data-testid": "adopt-signature-typed-preview",
190
+ children: name.trim() || "Your name"
191
+ }
192
+ ) }),
193
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TabsContent, { value: "drawn", forceMount: true, hidden: style !== "drawn", children: /* @__PURE__ */ jsxRuntime.jsx(
194
+ "canvas",
195
+ {
196
+ ref: drawRef,
197
+ width: CANVAS_W,
198
+ height: CANVAS_H,
199
+ className: "h-28 w-full touch-none rounded-md border bg-white",
200
+ "aria-label": "Draw your signature",
201
+ onPointerDown: start,
202
+ onPointerMove: move,
203
+ onPointerUp: () => drawing.current = false,
204
+ onPointerLeave: () => drawing.current = false,
205
+ "data-testid": "adopt-signature-canvas"
206
+ }
207
+ ) }),
208
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.TabsContent, { value: "uploaded", forceMount: true, hidden: style !== "uploaded", children: [
209
+ /* @__PURE__ */ jsxRuntime.jsx(
210
+ "canvas",
211
+ {
212
+ ref: uploadRef,
213
+ width: CANVAS_W,
214
+ height: CANVAS_H,
215
+ className: "h-28 w-full rounded-md border bg-white",
216
+ "aria-label": "Uploaded signature"
217
+ }
218
+ ),
219
+ /* @__PURE__ */ jsxRuntime.jsx(
220
+ ui.Input,
221
+ {
222
+ type: "file",
223
+ accept: "image/png,image/jpeg,image/webp",
224
+ className: "mt-2",
225
+ onChange: async (e) => {
226
+ const file = e.target.files?.[0];
227
+ if (!file || !uploadRef.current) return;
228
+ try {
229
+ await drawUpload(uploadRef.current, file);
230
+ setHasInk(true);
231
+ setError(null);
232
+ } catch (err) {
233
+ setError(err instanceof Error ? err.message : "The image could not be read");
234
+ }
235
+ },
236
+ "data-testid": "adopt-signature-upload"
237
+ }
238
+ )
239
+ ] })
240
+ ]
241
+ }
242
+ ),
243
+ style !== "typed" && /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { type: "button", variant: "ghost", size: "sm", onClick: clear, disabled: !hasInk, children: "Clear" }),
244
+ name.trim() && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
245
+ "By adopting it you agree to sign electronically: \u201C",
246
+ documentTools.intentText({ name }),
247
+ "\u201D"
248
+ ] }),
249
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-text", role: "alert", children: error })
250
+ ] }),
251
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalScaffold.Footer, { children: [
252
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: "Cancel" }),
253
+ /* @__PURE__ */ jsxRuntime.jsx(
254
+ ui.Button,
255
+ {
256
+ type: "button",
257
+ onClick: adopt,
258
+ disabled: !name.trim() || !initials.trim(),
259
+ "data-testid": "adopt-signature-submit",
260
+ children: "Adopt and sign"
261
+ }
262
+ )
263
+ ] })
264
+ ]
265
+ }
266
+ );
267
+ }
268
+
269
+ exports.AdoptSignatureDialog = AdoptSignatureDialog;
270
+ exports.TYPED_SIGNATURE_STYLE = TYPED_SIGNATURE_STYLE;
271
+ //# sourceMappingURL=chunk-6MG62I5B.cjs.map
272
+ //# sourceMappingURL=chunk-6MG62I5B.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/document-tools/AdoptSignatureDialog.tsx"],"names":["useState","initialsOf","useRef","useEffect","jsxs","ModalScaffold","jsx","Label","Input","Tabs","TabsList","TabsTrigger","TabsContent","Button","intentText"],"mappings":"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","file":"chunk-6MG62I5B.cjs","sourcesContent":["/**\n * Adopt a signature once, before applying it at each field: type it (the name in a signature\n * face, as the signed PDF draws it), draw it, or upload an image of it. Initials are typed. A drawn\n * or uploaded signature is handed on as a PNG (white made transparent); the server re-encodes it.\n */\n\nimport { useEffect, useRef, useState, type PointerEvent, type ReactElement } from 'react'\nimport { initialsOf, intentText, type AdoptedSignature } from '@arbidocs/react/document-tools'\nimport { Button, Input, Label, Tabs, TabsContent, TabsList, TabsTrigger } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\nexport interface AdoptedMark {\n adopted: AdoptedSignature\n /** A data URL of the drawn/uploaded signature, for showing it at each field; null when typed. */\n signatureUrl: string | null\n}\n\nexport interface AdoptSignatureDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n defaultName: string\n onAdopt: (mark: AdoptedMark) => void\n}\n\nconst CANVAS_W = 600\nconst CANVAS_H = 200\n/** Typed signatures look like the PDF will: an italic serif in ink blue. */\nexport const TYPED_SIGNATURE_STYLE = {\n fontFamily: '\"Times New Roman\", Times, serif',\n fontStyle: 'italic',\n color: '#0d1a59',\n} as const\n\ntype Style = AdoptedSignature['style']\n\nfunction blank(canvas: HTMLCanvasElement | null): boolean {\n const ctx = canvas?.getContext('2d')\n if (!canvas || !ctx) return true\n const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height)\n for (let i = 3; i < data.length; i += 4) if (data[i]! > 0) return false\n return true\n}\n\n/** Draw an uploaded image into the canvas, fitted, with near-white made transparent. */\nasync function drawUpload(canvas: HTMLCanvasElement, file: File): Promise<void> {\n const url = URL.createObjectURL(file)\n try {\n const img = new Image()\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve()\n img.onerror = () => reject(new Error('That file is not an image'))\n img.src = url\n })\n const ctx = canvas.getContext('2d')!\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n const scale = Math.min(canvas.width / img.width, canvas.height / img.height)\n const w = img.width * scale\n const h = img.height * scale\n ctx.drawImage(img, (canvas.width - w) / 2, (canvas.height - h) / 2, w, h)\n const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height)\n for (let i = 0; i < pixels.data.length; i += 4) {\n const [r, g, b] = [pixels.data[i]!, pixels.data[i + 1]!, pixels.data[i + 2]!]\n if (r > 225 && g > 225 && b > 225) pixels.data[i + 3] = 0\n }\n ctx.putImageData(pixels, 0, 0)\n } finally {\n URL.revokeObjectURL(url)\n }\n}\n\nexport function AdoptSignatureDialog({\n open,\n onOpenChange,\n defaultName,\n onAdopt,\n}: AdoptSignatureDialogProps): ReactElement {\n const [name, setName] = useState(defaultName)\n const [initials, setInitials] = useState(() => initialsOf(defaultName))\n const [style, setStyle] = useState<Style>('typed')\n const [hasInk, setHasInk] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const drawRef = useRef<HTMLCanvasElement>(null)\n const uploadRef = useRef<HTMLCanvasElement>(null)\n const drawing = useRef(false)\n\n useEffect(() => {\n if (open) {\n setName(defaultName)\n setInitials(initialsOf(defaultName))\n }\n }, [open, defaultName])\n\n const canvas = () => (style === 'drawn' ? drawRef.current : uploadRef.current)\n\n const pos = (e: PointerEvent<HTMLCanvasElement>) => {\n const r = e.currentTarget.getBoundingClientRect()\n return {\n x: ((e.clientX - r.left) / r.width) * CANVAS_W,\n y: ((e.clientY - r.top) / r.height) * CANVAS_H,\n }\n }\n\n const start = (e: PointerEvent<HTMLCanvasElement>) => {\n const ctx = e.currentTarget.getContext('2d')\n if (!ctx) return\n e.currentTarget.setPointerCapture?.(e.pointerId)\n drawing.current = true\n const p = pos(e)\n ctx.lineWidth = 3.5\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n ctx.strokeStyle = TYPED_SIGNATURE_STYLE.color\n ctx.beginPath()\n ctx.moveTo(p.x, p.y)\n }\n const move = (e: PointerEvent<HTMLCanvasElement>) => {\n if (!drawing.current) return\n const ctx = e.currentTarget.getContext('2d')\n const p = pos(e)\n ctx?.lineTo(p.x, p.y)\n ctx?.stroke()\n setHasInk(true)\n }\n const clear = () => {\n const c = canvas()\n c?.getContext('2d')?.clearRect(0, 0, CANVAS_W, CANVAS_H)\n setHasInk(false)\n }\n\n const adopt = () => {\n setError(null)\n if (!name.trim() || !initials.trim()) return\n if (style === 'typed') {\n onAdopt({\n adopted: { name: name.trim(), initials: initials.trim(), style },\n signatureUrl: null,\n })\n return\n }\n const c = canvas()\n if (!c || blank(c)) {\n setError(style === 'drawn' ? 'Draw your signature first.' : 'Choose an image first.')\n return\n }\n const url = c.toDataURL('image/png')\n onAdopt({\n adopted: {\n name: name.trim(),\n initials: initials.trim(),\n style,\n signature_image: url.slice(url.indexOf(',') + 1),\n },\n signatureUrl: url,\n })\n }\n\n return (\n <ModalScaffold\n open={open}\n onOpenChange={onOpenChange}\n title=\"Adopt your signature\"\n description=\"You adopt it once and apply it at each place you are asked to sign.\"\n showDescription\n testId=\"adopt-signature-dialog\"\n >\n <ModalScaffold.Body>\n <div className=\"grid grid-cols-[1fr_7rem] gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"adopt-name\">Full name</Label>\n <Input\n id=\"adopt-name\"\n value={name}\n onChange={(e) => {\n setName(e.target.value)\n setInitials(initialsOf(e.target.value))\n }}\n data-testid=\"adopt-signature-name\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"adopt-initials\">Initials</Label>\n <Input\n id=\"adopt-initials\"\n value={initials}\n maxLength={12}\n onChange={(e) => setInitials(e.target.value)}\n data-testid=\"adopt-signature-initials\"\n />\n </div>\n </div>\n <Tabs\n value={style}\n onValueChange={(v) => {\n setStyle(v as Style)\n setError(null)\n }}\n >\n <TabsList className=\"grid w-full grid-cols-3\">\n <TabsTrigger value=\"typed\" data-testid=\"adopt-tab-typed\">\n Type\n </TabsTrigger>\n <TabsTrigger value=\"drawn\" data-testid=\"adopt-tab-drawn\">\n Draw\n </TabsTrigger>\n <TabsTrigger value=\"uploaded\" data-testid=\"adopt-tab-uploaded\">\n Upload\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"typed\">\n <div\n className=\"flex h-28 items-center justify-center rounded-md border bg-white px-4 text-4xl\"\n style={TYPED_SIGNATURE_STYLE}\n data-testid=\"adopt-signature-typed-preview\"\n >\n {name.trim() || 'Your name'}\n </div>\n </TabsContent>\n <TabsContent value=\"drawn\" forceMount hidden={style !== 'drawn'}>\n <canvas\n ref={drawRef}\n width={CANVAS_W}\n height={CANVAS_H}\n className=\"h-28 w-full touch-none rounded-md border bg-white\"\n aria-label=\"Draw your signature\"\n onPointerDown={start}\n onPointerMove={move}\n onPointerUp={() => (drawing.current = false)}\n onPointerLeave={() => (drawing.current = false)}\n data-testid=\"adopt-signature-canvas\"\n />\n </TabsContent>\n <TabsContent value=\"uploaded\" forceMount hidden={style !== 'uploaded'}>\n <canvas\n ref={uploadRef}\n width={CANVAS_W}\n height={CANVAS_H}\n className=\"h-28 w-full rounded-md border bg-white\"\n aria-label=\"Uploaded signature\"\n />\n <Input\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp\"\n className=\"mt-2\"\n onChange={async (e) => {\n const file = e.target.files?.[0]\n if (!file || !uploadRef.current) return\n try {\n await drawUpload(uploadRef.current, file)\n setHasInk(true)\n setError(null)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'The image could not be read')\n }\n }}\n data-testid=\"adopt-signature-upload\"\n />\n </TabsContent>\n </Tabs>\n {style !== 'typed' && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={clear} disabled={!hasInk}>\n Clear\n </Button>\n )}\n {name.trim() && (\n <p className=\"text-xs text-muted-foreground\">\n By adopting it you agree to sign electronically: “{intentText({ name })}”\n </p>\n )}\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n type=\"button\"\n onClick={adopt}\n disabled={!name.trim() || !initials.trim()}\n data-testid=\"adopt-signature-submit\"\n >\n Adopt and sign\n </Button>\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n"]}