@arbidocs/blocks 0.4.83 → 0.4.85

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 (124) hide show
  1. package/dist/MailBodyEditor-5PIQLYVY.js +217 -0
  2. package/dist/MailBodyEditor-5PIQLYVY.js.map +1 -0
  3. package/dist/MailBodyEditor-D7MGJMLH.cjs +223 -0
  4. package/dist/MailBodyEditor-D7MGJMLH.cjs.map +1 -0
  5. package/dist/agents/index.cjs +281 -280
  6. package/dist/agents/index.js +6 -5
  7. package/dist/agents/workflows/StepBarFrame.d.ts +3 -1
  8. package/dist/agents/workflows/WorkflowRunner.d.ts +10 -1
  9. package/dist/agents/workflows/run.d.ts +24 -3
  10. package/dist/agents/workflows/stepWindow.d.ts +4 -2
  11. package/dist/agents/workflows/types.d.ts +5 -0
  12. package/dist/agents/workflows/useWorkflowView.d.ts +16 -1
  13. package/dist/chat/index.cjs +1 -1
  14. package/dist/chat/index.js +1 -1
  15. package/dist/{chunk-FE4ULGOR.js → chunk-2YOVK524.js} +28 -5
  16. package/dist/chunk-2YOVK524.js.map +1 -0
  17. package/dist/chunk-3R6XBYL7.cjs +576 -0
  18. package/dist/chunk-3R6XBYL7.cjs.map +1 -0
  19. package/dist/{chunk-CKB64Z4R.js → chunk-4XJZ6AAY.js} +6 -245
  20. package/dist/chunk-4XJZ6AAY.js.map +1 -0
  21. package/dist/{chunk-SB5ZKOYN.js → chunk-7C35WXYB.js} +4 -63
  22. package/dist/chunk-7C35WXYB.js.map +1 -0
  23. package/dist/chunk-7RJTEWYM.js +362 -0
  24. package/dist/chunk-7RJTEWYM.js.map +1 -0
  25. package/dist/chunk-AFSOUS5X.cjs +253 -0
  26. package/dist/chunk-AFSOUS5X.cjs.map +1 -0
  27. package/dist/{chunk-F4RUCUXF.cjs → chunk-C2HRZSAT.cjs} +2 -63
  28. package/dist/chunk-C2HRZSAT.cjs.map +1 -0
  29. package/dist/{chunk-RX35SMPR.js → chunk-FHOZMT5P.js} +7 -6
  30. package/dist/chunk-FHOZMT5P.js.map +1 -0
  31. package/dist/{chunk-ZVBPRMHJ.cjs → chunk-JH6JTI76.cjs} +27 -4
  32. package/dist/chunk-JH6JTI76.cjs.map +1 -0
  33. package/dist/{chunk-CONIA2ZA.js → chunk-KHY4PYU7.js} +246 -146
  34. package/dist/chunk-KHY4PYU7.js.map +1 -0
  35. package/dist/chunk-LGX6UFYG.js +557 -0
  36. package/dist/chunk-LGX6UFYG.js.map +1 -0
  37. package/dist/chunk-O4YPVYPO.cjs +373 -0
  38. package/dist/chunk-O4YPVYPO.cjs.map +1 -0
  39. package/dist/chunk-R26OHONI.js +250 -0
  40. package/dist/chunk-R26OHONI.js.map +1 -0
  41. package/dist/{chunk-RYYYHPFU.cjs → chunk-RZUMQM7W.cjs} +246 -146
  42. package/dist/chunk-RZUMQM7W.cjs.map +1 -0
  43. package/dist/{chunk-YJQVLVBJ.cjs → chunk-S5HZBXZA.cjs} +2 -243
  44. package/dist/chunk-S5HZBXZA.cjs.map +1 -0
  45. package/dist/{chunk-ZQYE7J3J.cjs → chunk-WRSBM6QN.cjs} +332 -94
  46. package/dist/chunk-WRSBM6QN.cjs.map +1 -0
  47. package/dist/{chunk-RSKSXEPW.js → chunk-X23U6QEJ.js} +324 -88
  48. package/dist/chunk-X23U6QEJ.js.map +1 -0
  49. package/dist/{chunk-XA5S4776.cjs → chunk-Z7YUCYI6.cjs} +51 -50
  50. package/dist/chunk-Z7YUCYI6.cjs.map +1 -0
  51. package/dist/collaboration/index.cjs +100 -49
  52. package/dist/collaboration/index.js +4 -1
  53. package/dist/collaboration/mail/MailBodyEditor.d.ts +7 -0
  54. package/dist/collaboration/mail/MailDeliveryList.d.ts +8 -0
  55. package/dist/collaboration/mail/MailDocumentPicker.d.ts +15 -0
  56. package/dist/collaboration/mail/MailGrid.d.ts +17 -0
  57. package/dist/collaboration/mail/MailMessageView.d.ts +27 -0
  58. package/dist/collaboration/mail/PlainMailBodyEditor.d.ts +12 -0
  59. package/dist/collaboration/mail/index.d.ts +6 -0
  60. package/dist/collaboration/mail/mailCompose.d.ts +24 -0
  61. package/dist/connect/index.cjs +1684 -72
  62. package/dist/connect/index.cjs.map +1 -1
  63. package/dist/connect/index.d.ts +2 -1
  64. package/dist/connect/index.js +1670 -64
  65. package/dist/connect/index.js.map +1 -1
  66. package/dist/connection/ConnectedTagTable.d.ts +32 -0
  67. package/dist/connection/WorkflowRunnerDialogs.d.ts +12 -1
  68. package/dist/connection/mail/ConnectedMailAccounts.d.ts +21 -0
  69. package/dist/connection/mail/ConnectedMailComposer.d.ts +40 -0
  70. package/dist/connection/mail/ConnectedMailSetup.d.ts +16 -0
  71. package/dist/connection/mail/ConnectedMailbox.d.ts +65 -0
  72. package/dist/connection/mail/MailComposerForm.d.ts +25 -0
  73. package/dist/connection/mail/attachments.d.ts +13 -0
  74. package/dist/connection/mail/index.d.ts +6 -0
  75. package/dist/connection/mail/mailbox.d.ts +6 -0
  76. package/dist/connection/mail/types.d.ts +92 -0
  77. package/dist/connection/useConnectedWorkNotifications.d.ts +6 -0
  78. package/dist/connection/useWorkflowThread.d.ts +7 -2
  79. package/dist/document-tools/SignDocumentDialog.d.ts +9 -2
  80. package/dist/document-tools/index.cjs +2 -2
  81. package/dist/document-tools/index.js +1 -1
  82. package/dist/facts/index.cjs +2 -2
  83. package/dist/facts/index.js +2 -2
  84. package/dist/files/index.cjs +47 -367
  85. package/dist/files/index.cjs.map +1 -1
  86. package/dist/files/index.js +10 -360
  87. package/dist/files/index.js.map +1 -1
  88. package/dist/index.cjs +510 -451
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.js +21 -18
  91. package/dist/index.js.map +1 -1
  92. package/dist/settings/index.cjs +10 -9
  93. package/dist/settings/index.cjs.map +1 -1
  94. package/dist/settings/index.js +2 -1
  95. package/dist/settings/index.js.map +1 -1
  96. package/dist/shell/index.cjs +1 -1
  97. package/dist/shell/index.js +1 -1
  98. package/dist/tags/TagColumnsEditor.d.ts +34 -0
  99. package/dist/tags/TagDetail.d.ts +13 -11
  100. package/dist/tags/TagTable.d.ts +99 -0
  101. package/dist/tags/TagsNav.d.ts +2 -2
  102. package/dist/tags/index.d.ts +7 -5
  103. package/dist/tags/{tagMatrixDocx.d.ts → tagTableDocx.d.ts} +12 -12
  104. package/dist/tags/tagTableModel.d.ts +47 -0
  105. package/dist/workflow-canvas/index.cjs +49 -48
  106. package/dist/workflow-canvas/index.cjs.map +1 -1
  107. package/dist/workflow-canvas/index.js +6 -5
  108. package/dist/workflow-canvas/index.js.map +1 -1
  109. package/package.json +29 -4
  110. package/dist/chunk-CKB64Z4R.js.map +0 -1
  111. package/dist/chunk-CONIA2ZA.js.map +0 -1
  112. package/dist/chunk-F4RUCUXF.cjs.map +0 -1
  113. package/dist/chunk-FE4ULGOR.js.map +0 -1
  114. package/dist/chunk-RSKSXEPW.js.map +0 -1
  115. package/dist/chunk-RX35SMPR.js.map +0 -1
  116. package/dist/chunk-RYYYHPFU.cjs.map +0 -1
  117. package/dist/chunk-SB5ZKOYN.js.map +0 -1
  118. package/dist/chunk-XA5S4776.cjs.map +0 -1
  119. package/dist/chunk-YJQVLVBJ.cjs.map +0 -1
  120. package/dist/chunk-ZQYE7J3J.cjs.map +0 -1
  121. package/dist/chunk-ZVBPRMHJ.cjs.map +0 -1
  122. package/dist/connection/ConnectedTagMatrix.d.ts +0 -23
  123. package/dist/tags/TagMatrix.d.ts +0 -87
  124. package/dist/tags/tagMatrixModel.d.ts +0 -43
@@ -12,23 +12,32 @@ function SignDocumentDialog({
12
12
  onOpenChange,
13
13
  documentId,
14
14
  pdfBlob,
15
- appearance
15
+ version,
16
+ appearance,
17
+ onOpenCurrent
16
18
  }) {
17
19
  const { user, notify, openDocument, emailDocument, certificateUrl } = documentTools.useDocumentTools();
18
20
  const [name, setName] = react.useState(() => user?.name ?? "");
19
21
  const [includeDate, setIncludeDate] = react.useState(false);
20
22
  const [password, setPassword] = react.useState("");
21
23
  const [error, setError] = react.useState(null);
24
+ const [isStale, setIsStale] = react.useState(false);
22
25
  const sign = documentTools.useSignDocument();
26
+ const openCurrent = onOpenCurrent ?? (openDocument ? () => {
27
+ onOpenChange(false);
28
+ openDocument(documentId);
29
+ } : void 0);
23
30
  const signer = { name };
24
31
  const handleSubmit = async (e) => {
25
32
  e.preventDefault();
26
33
  if (!user?.email) return;
27
34
  setError(null);
35
+ setIsStale(false);
28
36
  try {
29
37
  const result = await sign.mutateAsync({
30
38
  documentId,
31
39
  pdfBlob,
40
+ version,
32
41
  email: user.email,
33
42
  password,
34
43
  signer,
@@ -54,6 +63,7 @@ function SignDocumentDialog({
54
63
  openDocument?.(signedId);
55
64
  } catch (err) {
56
65
  setError(err instanceof Error ? err.message : "Signing failed");
66
+ setIsStale(err instanceof documentTools.SigningError && err.reason === "stale");
57
67
  }
58
68
  };
59
69
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -120,7 +130,20 @@ function SignDocumentDialog({
120
130
  }
121
131
  )
122
132
  ] }),
123
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-text", role: "alert", "data-testid": "sign-document-error", children: error })
133
+ error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", role: "alert", children: [
134
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-text", "data-testid": "sign-document-error", children: error }),
135
+ isStale && openCurrent && /* @__PURE__ */ jsxRuntime.jsx(
136
+ ui.Button,
137
+ {
138
+ type: "button",
139
+ variant: "outline",
140
+ size: "sm",
141
+ onClick: openCurrent,
142
+ "data-testid": "sign-document-open-current-button",
143
+ children: "Open the current version"
144
+ }
145
+ )
146
+ ] })
124
147
  ] }),
125
148
  /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalScaffold.Footer, { children: [
126
149
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -149,5 +172,5 @@ function SignDocumentDialog({
149
172
  }
150
173
 
151
174
  exports.SignDocumentDialog = SignDocumentDialog;
152
- //# sourceMappingURL=chunk-ZVBPRMHJ.cjs.map
153
- //# sourceMappingURL=chunk-ZVBPRMHJ.cjs.map
175
+ //# sourceMappingURL=chunk-JH6JTI76.cjs.map
176
+ //# sourceMappingURL=chunk-JH6JTI76.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/document-tools/SignDocumentDialog.tsx"],"names":["useDocumentTools","useState","useSignDocument","certificateLink","SigningError","jsx","ModalScaffold","jsxs","Label","Input","Checkbox","Button"],"mappings":"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","file":"chunk-JH6JTI76.cjs","sourcesContent":["/**\n * Sign a document electronically: confirm the name, choose whether the date is shown, read the\n * statement of intent, re-enter the password. Only the signature (and the date, if ticked) is drawn\n * on the page; a role, a firm or a place go on as ordinary annotation text. Anyone can click the\n * signature to check it. The signed copy is saved as a new version and opened, with an offer to\n * email it when the host gives the tools an `emailDocument`. Needs a `<DocumentToolsProvider>` with\n * a `user` (its email) and a `deploymentDomain`, inside a React Query `QueryClientProvider`.\n */\n\nimport { useState, type FormEvent, type ReactElement } from 'react'\nimport {\n certificateLink,\n intentText,\n SigningError,\n useDocumentTools,\n useSignDocument,\n type SignatureAppearance,\n} from '@arbidocs/react/document-tools'\nimport { Button, Checkbox, Input, Label } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\nexport interface SignDocumentDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n documentId: string\n /** The PDF the viewer is showing: `GET /view?version=`, never the original's download. */\n pdfBlob: Blob\n /** The version `pdfBlob` is of; omitted = the current version. */\n version?: number\n /** Where the signature goes; omitted = bottom of the last page. */\n appearance?: SignatureAppearance\n /**\n * Open the current version when the one shown has been superseded (only the current version can\n * be signed). Default: the host's `openDocument` on the document, after the dialog closes.\n */\n onOpenCurrent?: () => void\n}\n\nexport function SignDocumentDialog({\n open,\n onOpenChange,\n documentId,\n pdfBlob,\n version,\n appearance,\n onOpenCurrent,\n}: SignDocumentDialogProps): ReactElement {\n const { user, notify, openDocument, emailDocument, certificateUrl } = useDocumentTools()\n const [name, setName] = useState(() => user?.name ?? '')\n const [includeDate, setIncludeDate] = useState(false)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isStale, setIsStale] = useState(false)\n const sign = useSignDocument()\n const openCurrent =\n onOpenCurrent ??\n (openDocument\n ? () => {\n onOpenChange(false)\n openDocument(documentId)\n }\n : undefined)\n\n const signer = { name }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n if (!user?.email) return\n setError(null)\n setIsStale(false)\n try {\n const result = await sign.mutateAsync({\n documentId,\n pdfBlob,\n version,\n email: user.email,\n password,\n signer,\n appearance,\n includeDate,\n })\n const signedId = result.doc_ext_id\n const certificate = certificateLink(result.signature, certificateUrl)\n notify(\n `Signed. The signed copy is saved as version ${result.version}.`,\n 'success',\n emailDocument\n ? { action: { label: 'Email it', onClick: () => emailDocument(signedId) } }\n : {\n action: {\n label: 'View certificate',\n onClick: () => {\n window.open(certificate, '_blank', 'noopener,noreferrer')\n },\n },\n }\n )\n setPassword('')\n onOpenChange(false)\n openDocument?.(signedId)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signing failed')\n setIsStale(err instanceof SigningError && err.reason === 'stale')\n }\n }\n\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => !sign.isPending && onOpenChange(next)}\n title=\"Sign document\"\n description=\"Sign this document electronically. The signed copy is saved as a new version.\"\n showDescription\n testId=\"sign-document-dialog\"\n >\n <form onSubmit={handleSubmit}>\n <ModalScaffold.Body>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sign-name\">Name</Label>\n <Input\n id=\"sign-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n data-testid=\"sign-document-name-input\"\n required\n />\n </div>\n <div className=\"flex items-center gap-2 pointer-coarse:min-h-11\">\n <Checkbox\n id=\"sign-include-date\"\n checked={includeDate}\n onCheckedChange={(checked) => setIncludeDate(checked === true)}\n data-testid=\"sign-document-include-date\"\n />\n <Label htmlFor=\"sign-include-date\" className=\"font-normal\">\n Include date\n </Label>\n </div>\n <p className=\"text-sm text-muted-foreground\" data-testid=\"sign-document-appearance-note\">\n Only your signature{includeDate ? ' and the date appear' : ' appears'} on the page.\n Anyone can click it to check it.\n </p>\n {name.trim() && (\n <blockquote\n className=\"border-l-2 border-border pl-3 text-sm text-muted-foreground\"\n data-testid=\"sign-document-intent\"\n >\n {intentText(signer)}\n </blockquote>\n )}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sign-password\">Password</Label>\n <Input\n id=\"sign-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n data-testid=\"sign-document-password-input\"\n required\n />\n </div>\n {error && (\n <div className=\"space-y-2\" role=\"alert\">\n <p className=\"text-sm text-red-text\" data-testid=\"sign-document-error\">\n {error}\n </p>\n {isStale && openCurrent && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={openCurrent}\n data-testid=\"sign-document-open-current-button\"\n >\n Open the current version\n </Button>\n )}\n </div>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={sign.isPending}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={sign.isPending || !name.trim() || !password}\n data-testid=\"sign-document-submit-button\"\n >\n {sign.isPending ? 'Signing...' : 'Sign'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n )\n}\n"]}