@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,269 @@
1
+ "use client";
2
+ import { ModalScaffold } from './chunk-TX2ZICS7.js';
3
+ import { useState, useRef, useEffect } from 'react';
4
+ import { initialsOf, intentText } from '@arbidocs/react/document-tools';
5
+ import { Label, Input, Tabs, TabsList, TabsTrigger, TabsContent, Button } from '@arbidocs/react/ui';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var CANVAS_W = 600;
9
+ var CANVAS_H = 200;
10
+ var TYPED_SIGNATURE_STYLE = {
11
+ fontFamily: '"Times New Roman", Times, serif',
12
+ fontStyle: "italic",
13
+ color: "#0d1a59"
14
+ };
15
+ function blank(canvas) {
16
+ const ctx = canvas?.getContext("2d");
17
+ if (!canvas || !ctx) return true;
18
+ const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height);
19
+ for (let i = 3; i < data.length; i += 4) if (data[i] > 0) return false;
20
+ return true;
21
+ }
22
+ async function drawUpload(canvas, file) {
23
+ const url = URL.createObjectURL(file);
24
+ try {
25
+ const img = new Image();
26
+ await new Promise((resolve, reject) => {
27
+ img.onload = () => resolve();
28
+ img.onerror = () => reject(new Error("That file is not an image"));
29
+ img.src = url;
30
+ });
31
+ const ctx = canvas.getContext("2d");
32
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
33
+ const scale = Math.min(canvas.width / img.width, canvas.height / img.height);
34
+ const w = img.width * scale;
35
+ const h = img.height * scale;
36
+ ctx.drawImage(img, (canvas.width - w) / 2, (canvas.height - h) / 2, w, h);
37
+ const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
38
+ for (let i = 0; i < pixels.data.length; i += 4) {
39
+ const [r, g, b] = [pixels.data[i], pixels.data[i + 1], pixels.data[i + 2]];
40
+ if (r > 225 && g > 225 && b > 225) pixels.data[i + 3] = 0;
41
+ }
42
+ ctx.putImageData(pixels, 0, 0);
43
+ } finally {
44
+ URL.revokeObjectURL(url);
45
+ }
46
+ }
47
+ function AdoptSignatureDialog({
48
+ open,
49
+ onOpenChange,
50
+ defaultName,
51
+ onAdopt
52
+ }) {
53
+ const [name, setName] = useState(defaultName);
54
+ const [initials, setInitials] = useState(() => initialsOf(defaultName));
55
+ const [style, setStyle] = useState("typed");
56
+ const [hasInk, setHasInk] = useState(false);
57
+ const [error, setError] = useState(null);
58
+ const drawRef = useRef(null);
59
+ const uploadRef = useRef(null);
60
+ const drawing = useRef(false);
61
+ useEffect(() => {
62
+ if (open) {
63
+ setName(defaultName);
64
+ setInitials(initialsOf(defaultName));
65
+ }
66
+ }, [open, defaultName]);
67
+ const canvas = () => style === "drawn" ? drawRef.current : uploadRef.current;
68
+ const pos = (e) => {
69
+ const r = e.currentTarget.getBoundingClientRect();
70
+ return {
71
+ x: (e.clientX - r.left) / r.width * CANVAS_W,
72
+ y: (e.clientY - r.top) / r.height * CANVAS_H
73
+ };
74
+ };
75
+ const start = (e) => {
76
+ const ctx = e.currentTarget.getContext("2d");
77
+ if (!ctx) return;
78
+ e.currentTarget.setPointerCapture?.(e.pointerId);
79
+ drawing.current = true;
80
+ const p = pos(e);
81
+ ctx.lineWidth = 3.5;
82
+ ctx.lineCap = "round";
83
+ ctx.lineJoin = "round";
84
+ ctx.strokeStyle = TYPED_SIGNATURE_STYLE.color;
85
+ ctx.beginPath();
86
+ ctx.moveTo(p.x, p.y);
87
+ };
88
+ const move = (e) => {
89
+ if (!drawing.current) return;
90
+ const ctx = e.currentTarget.getContext("2d");
91
+ const p = pos(e);
92
+ ctx?.lineTo(p.x, p.y);
93
+ ctx?.stroke();
94
+ setHasInk(true);
95
+ };
96
+ const clear = () => {
97
+ const c = canvas();
98
+ c?.getContext("2d")?.clearRect(0, 0, CANVAS_W, CANVAS_H);
99
+ setHasInk(false);
100
+ };
101
+ const adopt = () => {
102
+ setError(null);
103
+ if (!name.trim() || !initials.trim()) return;
104
+ if (style === "typed") {
105
+ onAdopt({
106
+ adopted: { name: name.trim(), initials: initials.trim(), style },
107
+ signatureUrl: null
108
+ });
109
+ return;
110
+ }
111
+ const c = canvas();
112
+ if (!c || blank(c)) {
113
+ setError(style === "drawn" ? "Draw your signature first." : "Choose an image first.");
114
+ return;
115
+ }
116
+ const url = c.toDataURL("image/png");
117
+ onAdopt({
118
+ adopted: {
119
+ name: name.trim(),
120
+ initials: initials.trim(),
121
+ style,
122
+ signature_image: url.slice(url.indexOf(",") + 1)
123
+ },
124
+ signatureUrl: url
125
+ });
126
+ };
127
+ return /* @__PURE__ */ jsxs(
128
+ ModalScaffold,
129
+ {
130
+ open,
131
+ onOpenChange,
132
+ title: "Adopt your signature",
133
+ description: "You adopt it once and apply it at each place you are asked to sign.",
134
+ showDescription: true,
135
+ testId: "adopt-signature-dialog",
136
+ children: [
137
+ /* @__PURE__ */ jsxs(ModalScaffold.Body, { children: [
138
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[1fr_7rem] gap-3", children: [
139
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
140
+ /* @__PURE__ */ jsx(Label, { htmlFor: "adopt-name", children: "Full name" }),
141
+ /* @__PURE__ */ jsx(
142
+ Input,
143
+ {
144
+ id: "adopt-name",
145
+ value: name,
146
+ onChange: (e) => {
147
+ setName(e.target.value);
148
+ setInitials(initialsOf(e.target.value));
149
+ },
150
+ "data-testid": "adopt-signature-name"
151
+ }
152
+ )
153
+ ] }),
154
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
155
+ /* @__PURE__ */ jsx(Label, { htmlFor: "adopt-initials", children: "Initials" }),
156
+ /* @__PURE__ */ jsx(
157
+ Input,
158
+ {
159
+ id: "adopt-initials",
160
+ value: initials,
161
+ maxLength: 12,
162
+ onChange: (e) => setInitials(e.target.value),
163
+ "data-testid": "adopt-signature-initials"
164
+ }
165
+ )
166
+ ] })
167
+ ] }),
168
+ /* @__PURE__ */ jsxs(
169
+ Tabs,
170
+ {
171
+ value: style,
172
+ onValueChange: (v) => {
173
+ setStyle(v);
174
+ setError(null);
175
+ },
176
+ children: [
177
+ /* @__PURE__ */ jsxs(TabsList, { className: "grid w-full grid-cols-3", children: [
178
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "typed", "data-testid": "adopt-tab-typed", children: "Type" }),
179
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "drawn", "data-testid": "adopt-tab-drawn", children: "Draw" }),
180
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "uploaded", "data-testid": "adopt-tab-uploaded", children: "Upload" })
181
+ ] }),
182
+ /* @__PURE__ */ jsx(TabsContent, { value: "typed", children: /* @__PURE__ */ jsx(
183
+ "div",
184
+ {
185
+ className: "flex h-28 items-center justify-center rounded-md border bg-white px-4 text-4xl",
186
+ style: TYPED_SIGNATURE_STYLE,
187
+ "data-testid": "adopt-signature-typed-preview",
188
+ children: name.trim() || "Your name"
189
+ }
190
+ ) }),
191
+ /* @__PURE__ */ jsx(TabsContent, { value: "drawn", forceMount: true, hidden: style !== "drawn", children: /* @__PURE__ */ jsx(
192
+ "canvas",
193
+ {
194
+ ref: drawRef,
195
+ width: CANVAS_W,
196
+ height: CANVAS_H,
197
+ className: "h-28 w-full touch-none rounded-md border bg-white",
198
+ "aria-label": "Draw your signature",
199
+ onPointerDown: start,
200
+ onPointerMove: move,
201
+ onPointerUp: () => drawing.current = false,
202
+ onPointerLeave: () => drawing.current = false,
203
+ "data-testid": "adopt-signature-canvas"
204
+ }
205
+ ) }),
206
+ /* @__PURE__ */ jsxs(TabsContent, { value: "uploaded", forceMount: true, hidden: style !== "uploaded", children: [
207
+ /* @__PURE__ */ jsx(
208
+ "canvas",
209
+ {
210
+ ref: uploadRef,
211
+ width: CANVAS_W,
212
+ height: CANVAS_H,
213
+ className: "h-28 w-full rounded-md border bg-white",
214
+ "aria-label": "Uploaded signature"
215
+ }
216
+ ),
217
+ /* @__PURE__ */ jsx(
218
+ Input,
219
+ {
220
+ type: "file",
221
+ accept: "image/png,image/jpeg,image/webp",
222
+ className: "mt-2",
223
+ onChange: async (e) => {
224
+ const file = e.target.files?.[0];
225
+ if (!file || !uploadRef.current) return;
226
+ try {
227
+ await drawUpload(uploadRef.current, file);
228
+ setHasInk(true);
229
+ setError(null);
230
+ } catch (err) {
231
+ setError(err instanceof Error ? err.message : "The image could not be read");
232
+ }
233
+ },
234
+ "data-testid": "adopt-signature-upload"
235
+ }
236
+ )
237
+ ] })
238
+ ]
239
+ }
240
+ ),
241
+ style !== "typed" && /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: clear, disabled: !hasInk, children: "Clear" }),
242
+ name.trim() && /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
243
+ "By adopting it you agree to sign electronically: \u201C",
244
+ intentText({ name }),
245
+ "\u201D"
246
+ ] }),
247
+ error && /* @__PURE__ */ jsx("p", { className: "text-sm text-red-text", role: "alert", children: error })
248
+ ] }),
249
+ /* @__PURE__ */ jsxs(ModalScaffold.Footer, { children: [
250
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: "Cancel" }),
251
+ /* @__PURE__ */ jsx(
252
+ Button,
253
+ {
254
+ type: "button",
255
+ onClick: adopt,
256
+ disabled: !name.trim() || !initials.trim(),
257
+ "data-testid": "adopt-signature-submit",
258
+ children: "Adopt and sign"
259
+ }
260
+ )
261
+ ] })
262
+ ]
263
+ }
264
+ );
265
+ }
266
+
267
+ export { AdoptSignatureDialog, TYPED_SIGNATURE_STYLE };
268
+ //# sourceMappingURL=chunk-EQB3WELX.js.map
269
+ //# sourceMappingURL=chunk-EQB3WELX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/document-tools/AdoptSignatureDialog.tsx"],"names":[],"mappings":"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","file":"chunk-EQB3WELX.js","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"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useConnection } from './chunk-OYMWV45N.js';
3
- import { NativeDocxEditor, loadDocxFonts } from './chunk-MYALCKDR.js';
3
+ import { NativeDocxEditor, loadDocxFonts } from './chunk-CVYY4X5R.js';
4
4
  import { useMemo } from 'react';
5
5
  import { useQueryClient, useQuery } from '@tanstack/react-query';
6
6
  import { useArbi, notify, arbiQueryKeys } from '@arbidocs/react';
@@ -88,5 +88,5 @@ function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
88
88
  }
89
89
 
90
90
  export { ConnectedNativeDocxEditor, useConnectedNativeDocxAdapter };
91
- //# sourceMappingURL=chunk-G5JH2YMQ.js.map
92
- //# sourceMappingURL=chunk-G5JH2YMQ.js.map
91
+ //# sourceMappingURL=chunk-GQTIAATM.js.map
92
+ //# sourceMappingURL=chunk-GQTIAATM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ConnectedNativeDocxEditor.tsx"],"names":[],"mappings":";;;;;;;AAYO,SAAS,yBAAA,CAA0B;AAAA,EACxC,WAAA,GAAc,oBAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAsE;AACpE,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,uBAAO,GAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AACxD;AAEO,SAAS,6BAAA,CAA8B,cAAc,oBAAA,EAAsB;AAChF,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAQ,IAAA,EAAM,mBAAA,KAAwB,aAAA,EAAc;AACzE,EAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,QAAA,CAAS;AAAA,IACjC,UAAU,CAAC,qBAAA,EAAuB,MAAA,EAAQ,IAAA,EAAM,YAAY,WAAW,CAAA;AAAA,IACvE,OAAA,EAAS,IAAA,CAAK,UAAA,IAAc,CAAC,CAAC,WAAA;AAAA,IAC9B,SAAS,YAAY;AACnB,MAAA,MAAM,mBAAA,EAAoB;AAC1B,MAAA,OAAO,IAAA,CAAK,WAAW,SAAA,EAAU;AAAA,IACnC;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,OAAA;AAAA,IACd,OAAO;AAAA,MACL,OAAA,EAAS,OAAO,IAAA,EAAM,OAAA,KAAY;AAChC,QAAA,MAAM,mBAAA,EAAoB;AAC1B,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAAA,MAC1C,CAAA;AAAA,MACA,IAAA,EAAM,OAAO,EAAA,KAAO;AAClB,QAAA,MAAM,mBAAA,EAAoB;AAC1B,QAAA,OAAA,CACE,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,QAAA,CAAA,EAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,GAClF,IAAA,EAAK;AAAA,MACT,CAAA;AAAA,MACA,IAAA,EAAM,OAAO,EAAA,EAAI,KAAA,KAAA,CAEb,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,KAAA,CAAA,EAAS;AAAA,QAC3D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,OAC/B,GACD,IAAA,EAAK;AAAA,MACT,SAAA,EAAW,MAAM,aAAA,CAAc,WAAW,CAAA;AAAA,MAC1C,OAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAQ,MAAM,IAAA,IAAQ,KAAA;AAAA,MACtB,cAAA,EAAgB,OAAO,EAAA,KAAO;AAC5B,QAAA,IAAI,CAAC,WAAA,EAAa;AAClB,QAAA,MAAM,GAAA,GAAM,aAAA,CAAc,SAAA,CAAU,WAAW,CAAA;AAC/C,QAAA,IAAI;AACF,UAAA,MAAM,YAAY,MAAM,IAAA,CAAK,UAAU,GAAA,CAAI,CAAC,EAAE,CAAC,CAAA;AAC/C,UAAA,IAAI,CAAC,SAAA,CAAU,MAAA,EAAQ,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAChF,UAAA,OAAA,CAAQ,YAAA,CAA8D,GAAA,EAAK,CAAC,QAAA,KAAa;AAAA,YACvF,GAAG,SAAA;AAAA,YACH,GAAA,CAAI,QAAA,IAAY,EAAC,EAAG,MAAA;AAAA,cAClB,CAAC,GAAA,KAAQ,CAAC,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,WAAA,KAAgB,GAAA,CAAI,WAAW;AAAA;AAC3E,WACD,CAAA;AAAA,QACH,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,OAAA,CAAQ,iBAAA,CAAkB,EAAE,QAAA,EAAU,KAAK,CAAA;AAAA,QACnD;AAAA,MACF,CAAA;AAAA,MACA,QAAQ,CAAC,OAAA,EAAS,SAAS,MAAA,CAAO,IAAI,EAAE,OAAO,CAAA;AAAA,MAC/C,UAAU,OAAA,EAAS,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,QAAO,MAAO;AAAA,QAC5C,IAAI,MAAA,CAAO,WAAA;AAAA,QACX,IAAA,EAAM,CAAC,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,QACtE,MAAM,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,MAAM,IAAI,OAAA,GAAU;AAAA,OAC1D,CAAE,CAAA;AAAA,MACF,YAAA,EAAc,OAAO,EAAA,EAAI,OAAA,KAAY;AACnC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,SAAA,CAAA,EAAa;AAAA,UAChF,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,YAAY,OAAA,CAAQ,SAAA;AAAA,YACpB,aAAa,OAAA,CAAQ,WAAA;AAAA,YACrB,YAAY,OAAA,CAAQ,SAAA;AAAA,YACpB,eAAe,OAAA,CAAQ;AAAA,WACxB;AAAA,SACF,CAAA;AACD,QAAA,MAAM,QAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,QAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AACnC,QAAA,OAAO,EAAE,WAAA,EAAa,QAAA,CAAS,YAAA,IAAgB,EAAC,EAAE;AAAA,MACpD,CAAA;AAAA,MACA,cAAA,EAAgB,OAAO,UAAA,KAAA,CAAgB,MAAM,KAAK,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA,EAAG;AAAA,KACvF,CAAA;AAAA,IACA,CAAC,MAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,OAAA,EAAS,mBAAA,EAAqB,WAAA,EAAa,OAAA,EAAS,WAAW;AAAA,GAC5F;AACA,EAAA,OAAO,OAAA;AACT","file":"chunk-G5JH2YMQ.js","sourcesContent":["import { useMemo } from 'react'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useArbi, notify, arbiQueryKeys } from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../docx/fonts'\n\n/** Native Word widget bound to the standard blocks connection and SDK session. */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: Omit<NativeDocxEditorProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <NativeDocxEditor {...props} adapter={adapter} />\n}\n\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, apiUrl, user, ensureWorkspaceOpen } = useConnection()\n const queries = useQueryClient()\n const { data: members } = useQuery({\n queryKey: ['native-docx-members', apiUrl, user?.externalId, workspaceId],\n enabled: arbi.isLoggedIn && !!workspaceId,\n queryFn: async () => {\n await ensureWorkspaceOpen()\n return arbi.workspaces.listUsers()\n },\n })\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: apiUrl,\n author: user?.name || 'You',\n onVersionSaved: async (id) => {\n if (!workspaceId) return\n const key = arbiQueryKeys.documents(workspaceId)\n try {\n const documents = await arbi.documents.get([id])\n if (!documents.length) throw new Error('The saved version is not available yet.')\n queries.setQueryData<Awaited<ReturnType<typeof arbi.documents.list>>>(key, (previous) => [\n ...documents,\n ...(previous || []).filter(\n (doc) => !documents.some((saved) => saved.external_id === doc.external_id)\n ),\n ])\n } catch {\n await queries.invalidateQueries({ queryKey: key })\n }\n },\n notify: (message, kind) => notify[kind](message),\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify.success('Mention delivered.')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n }),\n [arbi, apiUrl, user?.name, members, ensureWorkspaceOpen, fontBaseUrl, queries, workspaceId]\n )\n return adapter\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/ConnectedNativeDocxEditor.tsx"],"names":[],"mappings":"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","file":"chunk-GQTIAATM.js","sourcesContent":["import { useMemo } from 'react'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useArbi, notify, arbiQueryKeys } from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport {\n NativeDocxEditor,\n type NativeDocxAdapter,\n type NativeDocxEditorProps,\n} from '../docx/NativeDocxEditor'\nimport { loadDocxFonts } from '../docx/fonts'\n\n/** Native Word widget bound to the standard blocks connection and SDK session. */\nexport function ConnectedNativeDocxEditor({\n fontBaseUrl = '/native-docx/fonts',\n ...props\n}: Omit<NativeDocxEditorProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <NativeDocxEditor {...props} adapter={adapter} />\n}\n\nexport function useConnectedNativeDocxAdapter(fontBaseUrl = '/native-docx/fonts') {\n const arbi = useArbi()\n const { workspaceId, apiUrl, user, ensureWorkspaceOpen } = useConnection()\n const queries = useQueryClient()\n const { data: members } = useQuery({\n queryKey: ['native-docx-members', apiUrl, user?.externalId, workspaceId],\n enabled: arbi.isLoggedIn && !!workspaceId,\n queryFn: async () => {\n await ensureWorkspaceOpen()\n return arbi.workspaces.listUsers()\n },\n })\n const adapter = useMemo<NativeDocxAdapter>(\n () => ({\n request: async (path, options) => {\n await ensureWorkspaceOpen()\n return arbi.editor.request(path, options)\n },\n open: async (id) => {\n await ensureWorkspaceOpen()\n return (\n await arbi.editor.request(`/${encodeURIComponent(id)}/session`, { method: 'POST' })\n ).json()\n },\n save: async (id, state) =>\n (\n await arbi.editor.request(`/${encodeURIComponent(id)}/save`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ state }),\n })\n ).json(),\n loadFonts: () => loadDocxFonts(fontBaseUrl),\n baseUrl: apiUrl,\n author: user?.name || 'You',\n onVersionSaved: async (id) => {\n if (!workspaceId) return\n const key = arbiQueryKeys.documents(workspaceId)\n try {\n const documents = await arbi.documents.get([id])\n if (!documents.length) throw new Error('The saved version is not available yet.')\n queries.setQueryData<Awaited<ReturnType<typeof arbi.documents.list>>>(key, (previous) => [\n ...documents,\n ...(previous || []).filter(\n (doc) => !documents.some((saved) => saved.external_id === doc.external_id)\n ),\n ])\n } catch {\n await queries.invalidateQueries({ queryKey: key })\n }\n },\n notify: (message, kind) => notify[kind](message),\n mentions: members?.map(({ user: member }) => ({\n id: member.external_id,\n name: [member.given_name, member.family_name].filter(Boolean).join(' '),\n kind: member.external_id.startsWith('agt-') ? 'agent' : 'human',\n })),\n requestAgent: async (id, request) => {\n const response = await arbi.editor.request(`/${encodeURIComponent(id)}/mentions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n comment_id: request.commentId,\n instruction: request.instruction,\n request_id: request.requestId,\n recipient_ids: request.recipientIds,\n }),\n })\n const delivery = (await response.json()) as { response_ids: string[] }\n notify.success('Mention delivered.')\n return { responseIds: delivery.response_ids || [] }\n },\n getAgentStatus: async (responseId) => (await arbi.assistant.getResponse(responseId)).status,\n }),\n [arbi, apiUrl, user?.name, members, ensureWorkspaceOpen, fontBaseUrl, queries, workspaceId]\n )\n return adapter\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { NativeDocxEditor } from './chunk-MYALCKDR.js';
2
+ import { NativeDocxEditor } from './chunk-CVYY4X5R.js';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function StreamedWordArtifact({
@@ -37,5 +37,5 @@ function StreamedWordArtifact({
37
37
  }
38
38
 
39
39
  export { StreamedWordArtifact };
40
- //# sourceMappingURL=chunk-YGREW5TZ.js.map
41
- //# sourceMappingURL=chunk-YGREW5TZ.js.map
40
+ //# sourceMappingURL=chunk-H6DFXG5N.js.map
41
+ //# sourceMappingURL=chunk-H6DFXG5N.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":[],"mappings":";;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACE,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-YGREW5TZ.js","sourcesContent":["import { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n /** Streamed Markdown, shown as a read-only preview while the draft is generated. */\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** The DOCX draft the server stored for this generation (`doc-…`), once known. */\n documentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/**\n * One drafting surface for an AI document draft. The server stores every draft as DOCX, so\n * this component never creates a document: it previews the streamed Markdown until generation\n * ends and the stored DOCX is known, then opens that DOCX in the live collaborative editor.\n */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n documentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n if (!busy && documentId) {\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={title}\n onSaved={onSaved}\n />\n )\n }\n return (\n <NativeDocxEditor\n key=\"stream-preview\"\n adapter={adapter}\n documentId=\"stream-preview\"\n title={title}\n draftContent=\"\"\n stream={{ content, busy, error }}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":[],"mappings":";;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACE,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-H6DFXG5N.js","sourcesContent":["import { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n /** Streamed Markdown, shown as a read-only preview while the draft is generated. */\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** The DOCX draft the server stored for this generation (`doc-…`), once known. */\n documentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/**\n * One drafting surface for an AI document draft. The server stores every draft as DOCX, so\n * this component never creates a document: it previews the streamed Markdown until generation\n * ends and the stored DOCX is known, then opens that DOCX in the live collaborative editor.\n */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n documentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n if (!busy && documentId) {\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={title}\n onSaved={onSaved}\n />\n )\n }\n return (\n <NativeDocxEditor\n key=\"stream-preview\"\n adapter={adapter}\n documentId=\"stream-preview\"\n title={title}\n draftContent=\"\"\n stream={{ content, busy, error }}\n />\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkFAGQTB3D_cjs = require('./chunk-FAGQTB3D.cjs');
4
+ var chunkO33EBMIX_cjs = require('./chunk-O33EBMIX.cjs');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
7
7
  function StreamedWordArtifact({
@@ -15,7 +15,7 @@ function StreamedWordArtifact({
15
15
  }) {
16
16
  if (!busy && documentId) {
17
17
  return /* @__PURE__ */ jsxRuntime.jsx(
18
- chunkFAGQTB3D_cjs.NativeDocxEditor,
18
+ chunkO33EBMIX_cjs.NativeDocxEditor,
19
19
  {
20
20
  adapter,
21
21
  documentId,
@@ -26,7 +26,7 @@ function StreamedWordArtifact({
26
26
  );
27
27
  }
28
28
  return /* @__PURE__ */ jsxRuntime.jsx(
29
- chunkFAGQTB3D_cjs.NativeDocxEditor,
29
+ chunkO33EBMIX_cjs.NativeDocxEditor,
30
30
  {
31
31
  adapter,
32
32
  documentId: "stream-preview",
@@ -39,5 +39,5 @@ function StreamedWordArtifact({
39
39
  }
40
40
 
41
41
  exports.StreamedWordArtifact = StreamedWordArtifact;
42
- //# sourceMappingURL=chunk-ZT2EBBSC.cjs.map
43
- //# sourceMappingURL=chunk-ZT2EBBSC.cjs.map
42
+ //# sourceMappingURL=chunk-N36PWG7A.cjs.map
43
+ //# sourceMappingURL=chunk-N36PWG7A.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":["jsx","NativeDocxEditor"],"mappings":";;;;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACEA,cAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACED,cAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-ZT2EBBSC.cjs","sourcesContent":["import { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n /** Streamed Markdown, shown as a read-only preview while the draft is generated. */\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** The DOCX draft the server stored for this generation (`doc-…`), once known. */\n documentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/**\n * One drafting surface for an AI document draft. The server stores every draft as DOCX, so\n * this component never creates a document: it previews the streamed Markdown until generation\n * ends and the stored DOCX is known, then opens that DOCX in the live collaborative editor.\n */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n documentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n if (!busy && documentId) {\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={title}\n onSaved={onSaved}\n />\n )\n }\n return (\n <NativeDocxEditor\n key=\"stream-preview\"\n adapter={adapter}\n documentId=\"stream-preview\"\n title={title}\n draftContent=\"\"\n stream={{ content, busy, error }}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":["jsx","NativeDocxEditor"],"mappings":";;;;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACEA,cAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACED,cAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-N36PWG7A.cjs","sourcesContent":["import { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n /** Streamed Markdown, shown as a read-only preview while the draft is generated. */\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** The DOCX draft the server stored for this generation (`doc-…`), once known. */\n documentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/**\n * One drafting surface for an AI document draft. The server stores every draft as DOCX, so\n * this component never creates a document: it previews the streamed Markdown until generation\n * ends and the stored DOCX is known, then opens that DOCX in the live collaborative editor.\n */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n documentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n if (!busy && documentId) {\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={title}\n onSaved={onSaved}\n />\n )\n }\n return (\n <NativeDocxEditor\n key=\"stream-preview\"\n adapter={adapter}\n documentId=\"stream-preview\"\n title={title}\n draftContent=\"\"\n stream={{ content, busy, error }}\n />\n )\n}\n"]}