@arbidocs/blocks 0.4.110 → 0.4.112

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 (123) hide show
  1. package/dist/{NativeDocxEditor-WODZAURG.cjs → NativeDocxEditor-AQZSUGET.cjs} +8 -8
  2. package/dist/{NativeDocxEditor-WODZAURG.cjs.map → NativeDocxEditor-AQZSUGET.cjs.map} +1 -1
  3. package/dist/{NativeDocxEditor-4PY4YZYC.js → NativeDocxEditor-MBCBXYDZ.js} +4 -4
  4. package/dist/{NativeDocxEditor-4PY4YZYC.js.map → NativeDocxEditor-MBCBXYDZ.js.map} +1 -1
  5. package/dist/agents/index.cjs +208 -208
  6. package/dist/agents/index.js +3 -3
  7. package/dist/calendar/EventEditor.d.ts +1 -1
  8. package/dist/calendar/draft.d.ts +7 -1
  9. package/dist/calendar/index.cjs +58 -10
  10. package/dist/calendar/index.cjs.map +1 -1
  11. package/dist/calendar/index.d.ts +1 -1
  12. package/dist/calendar/index.js +56 -11
  13. package/dist/calendar/index.js.map +1 -1
  14. package/dist/calendar/types.d.ts +20 -0
  15. package/dist/calls/CallSidePanel.d.ts +16 -1
  16. package/dist/calls/ControlBar.d.ts +25 -3
  17. package/dist/calls/PreJoin.d.ts +6 -2
  18. package/dist/calls/cards.d.ts +6 -2
  19. package/dist/calls/index.cjs +1078 -47
  20. package/dist/calls/index.cjs.map +1 -1
  21. package/dist/calls/index.d.ts +4 -3
  22. package/dist/calls/index.js +1067 -51
  23. package/dist/calls/index.js.map +1 -1
  24. package/dist/calls/panels.d.ts +11 -0
  25. package/dist/calls/webinar/ChatPermissionSetting.d.ts +18 -0
  26. package/dist/calls/webinar/OnStageCheck.d.ts +23 -0
  27. package/dist/calls/webinar/QAPanel.d.ts +56 -0
  28. package/dist/calls/webinar/RaiseHandButton.d.ts +14 -0
  29. package/dist/calls/webinar/WebinarAudiencePanel.d.ts +23 -0
  30. package/dist/calls/webinar/WebinarViewer.d.ts +39 -0
  31. package/dist/calls/webinar/WebinarWaiting.d.ts +19 -0
  32. package/dist/calls/webinar/hooks.d.ts +13 -0
  33. package/dist/calls/webinar/index.d.ts +14 -0
  34. package/dist/calls/webinar/live.d.ts +43 -0
  35. package/dist/calls/webinar/types.d.ts +49 -0
  36. package/dist/{chunk-GKDWQLVU.js → chunk-3OT37I24.js} +165 -381
  37. package/dist/chunk-3OT37I24.js.map +1 -0
  38. package/dist/{chunk-2NIL2ASF.cjs → chunk-ETBB5KMN.cjs} +196 -400
  39. package/dist/chunk-ETBB5KMN.cjs.map +1 -0
  40. package/dist/{chunk-SQNAJPNR.js → chunk-GFYGYME3.js} +3 -3
  41. package/dist/{chunk-SQNAJPNR.js.map → chunk-GFYGYME3.js.map} +1 -1
  42. package/dist/{chunk-PEHLUB52.js → chunk-GIBRZ54P.js} +3 -3
  43. package/dist/{chunk-PEHLUB52.js.map → chunk-GIBRZ54P.js.map} +1 -1
  44. package/dist/chunk-GICUGQNN.cjs +76 -0
  45. package/dist/chunk-GICUGQNN.cjs.map +1 -0
  46. package/dist/{chunk-54WBIVHV.cjs → chunk-HF4PAYBM.cjs} +5 -5
  47. package/dist/{chunk-54WBIVHV.cjs.map → chunk-HF4PAYBM.cjs.map} +1 -1
  48. package/dist/chunk-I2QSDQQV.cjs +126 -0
  49. package/dist/chunk-I2QSDQQV.cjs.map +1 -0
  50. package/dist/chunk-JJLMCV3T.js +73 -0
  51. package/dist/chunk-JJLMCV3T.js.map +1 -0
  52. package/dist/{chunk-W7ZDBPJ3.cjs → chunk-OR4CO743.cjs} +3 -3
  53. package/dist/{chunk-W7ZDBPJ3.cjs.map → chunk-OR4CO743.cjs.map} +1 -1
  54. package/dist/chunk-QXMR5YHC.js +80 -0
  55. package/dist/chunk-QXMR5YHC.js.map +1 -0
  56. package/dist/{chunk-ELDUWTRR.cjs → chunk-RUFNJRLW.cjs} +4 -4
  57. package/dist/{chunk-ELDUWTRR.cjs.map → chunk-RUFNJRLW.cjs.map} +1 -1
  58. package/dist/{chunk-JB32KYAH.js → chunk-TKJSCHSX.js} +3 -3
  59. package/dist/{chunk-JB32KYAH.js.map → chunk-TKJSCHSX.js.map} +1 -1
  60. package/dist/{chunk-WPVIOGDG.cjs → chunk-US5ASM4G.cjs} +22 -22
  61. package/dist/{chunk-WPVIOGDG.cjs.map → chunk-US5ASM4G.cjs.map} +1 -1
  62. package/dist/{chunk-CECWAIHL.js → chunk-XFZ7HNPG.js} +3 -3
  63. package/dist/{chunk-CECWAIHL.js.map → chunk-XFZ7HNPG.js.map} +1 -1
  64. package/dist/{chunk-VZKBI2KJ.cjs → chunk-Z2NSU7D5.cjs} +4 -4
  65. package/dist/{chunk-VZKBI2KJ.cjs.map → chunk-Z2NSU7D5.cjs.map} +1 -1
  66. package/dist/{chunk-A35KT2II.js → chunk-ZP4IFW2E.js} +4 -4
  67. package/dist/{chunk-A35KT2II.js.map → chunk-ZP4IFW2E.js.map} +1 -1
  68. package/dist/collaboration/index.cjs +1 -1
  69. package/dist/collaboration/index.js +1 -1
  70. package/dist/connect/docx.cjs +7 -7
  71. package/dist/connect/docx.js +5 -5
  72. package/dist/connect/index.cjs +38 -38
  73. package/dist/connect/index.js +8 -8
  74. package/dist/docx/AgentUndo.d.ts +4 -0
  75. package/dist/docx/definitions/commands.d.ts +3 -52
  76. package/dist/docx/definitions/fragment.d.ts +5 -31
  77. package/dist/docx/definitions/port.d.ts +2 -22
  78. package/dist/docx/index.cjs +47 -47
  79. package/dist/docx/index.js +4 -4
  80. package/dist/docx/references/commands.d.ts +3 -89
  81. package/dist/docx/references/port.d.ts +2 -11
  82. package/dist/facts/index.cjs +1 -1
  83. package/dist/facts/index.js +1 -1
  84. package/dist/files/index.cjs +1 -1
  85. package/dist/files/index.js +1 -1
  86. package/dist/index.cjs +278 -278
  87. package/dist/index.js +8 -8
  88. package/dist/settings/index.cjs +47 -101
  89. package/dist/settings/index.cjs.map +1 -1
  90. package/dist/settings/index.js +9 -69
  91. package/dist/settings/index.js.map +1 -1
  92. package/dist/shell/index.cjs +9 -9
  93. package/dist/shell/index.js +1 -1
  94. package/dist/tags/definitions.d.ts +4 -25
  95. package/dist/tags/ooxml.d.ts +1 -19
  96. package/dist/workflow-canvas/index.cjs +10 -10
  97. package/dist/workflow-canvas/index.js +3 -3
  98. package/node_modules/@arbidocs/coedit/dist/commands.cjs +866 -9
  99. package/node_modules/@arbidocs/coedit/dist/commands.cjs.map +1 -1
  100. package/node_modules/@arbidocs/coedit/dist/commands.d.cts +342 -156
  101. package/node_modules/@arbidocs/coedit/dist/commands.d.ts +342 -156
  102. package/node_modules/@arbidocs/coedit/dist/commands.js +817 -11
  103. package/node_modules/@arbidocs/coedit/dist/commands.js.map +1 -1
  104. package/node_modules/@arbidocs/coedit/dist/port-ip7WByvH.d.cts +188 -0
  105. package/node_modules/@arbidocs/coedit/dist/port-ip7WByvH.d.ts +188 -0
  106. package/node_modules/@arbidocs/coedit/dist/server.cjs +731 -65
  107. package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -1
  108. package/node_modules/@arbidocs/coedit/dist/server.d.cts +40 -1
  109. package/node_modules/@arbidocs/coedit/dist/server.d.ts +40 -1
  110. package/node_modules/@arbidocs/coedit/dist/server.js +730 -66
  111. package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -1
  112. package/node_modules/@arbidocs/coedit/dist/template.d.cts +3 -17
  113. package/node_modules/@arbidocs/coedit/dist/template.d.ts +3 -17
  114. package/node_modules/@arbidocs/coedit/dist/track-eYC94jTp.d.cts +17 -0
  115. package/node_modules/@arbidocs/coedit/dist/track-eYC94jTp.d.ts +17 -0
  116. package/node_modules/@arbidocs/coedit/package.json +1 -1
  117. package/package.json +4 -4
  118. package/dist/chunk-2A4MDHJR.cjs +0 -198
  119. package/dist/chunk-2A4MDHJR.cjs.map +0 -1
  120. package/dist/chunk-2NIL2ASF.cjs.map +0 -1
  121. package/dist/chunk-EPHGD4YV.js +0 -174
  122. package/dist/chunk-EPHGD4YV.js.map +0 -1
  123. package/dist/chunk-GKDWQLVU.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { useConnection } from './chunk-OYMWV45N.js';
3
3
  import { loadDocxFonts } from './chunk-GYAUJ4KT.js';
4
- import { NativeDocxEditor } from './chunk-GKDWQLVU.js';
4
+ import { NativeDocxEditor } from './chunk-3OT37I24.js';
5
5
  import { useMemo } from 'react';
6
6
  import { useQueryClient, useQuery } from '@tanstack/react-query';
7
7
  import { useArbi, notify, arbiQueryKeys } from '@arbidocs/react';
@@ -89,5 +89,5 @@ function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
89
89
  }
90
90
 
91
91
  export { ConnectedNativeDocxEditor, useConnectedNativeDocxAdapter };
92
- //# sourceMappingURL=chunk-PEHLUB52.js.map
93
- //# sourceMappingURL=chunk-PEHLUB52.js.map
92
+ //# sourceMappingURL=chunk-GIBRZ54P.js.map
93
+ //# sourceMappingURL=chunk-GIBRZ54P.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ConnectedNativeDocxEditor.tsx"],"names":[],"mappings":"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","file":"chunk-PEHLUB52.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-GIBRZ54P.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"]}
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
5
+ var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
6
+ var react = require('react');
7
+ var lucideReact = require('lucide-react');
8
+ var ui = require('@arbidocs/react/ui');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ var DEFAULT_CONFIRM_DIALOG_LABELS = {
12
+ confirm: "Confirm",
13
+ cancel: "Cancel",
14
+ pleaseWait: "Please wait..."
15
+ };
16
+ function ConfirmDialog({
17
+ isOpen,
18
+ onClose,
19
+ onConfirm,
20
+ title,
21
+ description,
22
+ confirmText,
23
+ cancelText,
24
+ variant = "destructive",
25
+ isLoading = false,
26
+ labels,
27
+ testId,
28
+ testIds
29
+ }) {
30
+ const l = react.useMemo(() => ({ ...DEFAULT_CONFIRM_DIALOG_LABELS, ...labels }), [labels]);
31
+ const cancelRef = react.useRef(null);
32
+ return /* @__PURE__ */ jsxRuntime.jsx(
33
+ chunkULWRNGGE_cjs.ModalScaffold,
34
+ {
35
+ open: isOpen,
36
+ onOpenChange: (next) => {
37
+ if (!next) onClose();
38
+ },
39
+ role: "alertdialog",
40
+ initialFocusRef: cancelRef,
41
+ title,
42
+ description,
43
+ showDescription: true,
44
+ icon: variant === "destructive" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-5 w-5 text-red-text", "aria-hidden": "true" }) : null,
45
+ testId: chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "confirmation-modal" }),
46
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalScaffold.Footer, { children: [
47
+ /* @__PURE__ */ jsxRuntime.jsx(
48
+ ui.Button,
49
+ {
50
+ ref: cancelRef,
51
+ variant: "outline",
52
+ onClick: () => onClose(),
53
+ disabled: isLoading,
54
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.cancel, { testId: "confirmation-modal-cancel-button" }),
55
+ children: cancelText ?? l.cancel
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsxRuntime.jsx(
59
+ ui.Button,
60
+ {
61
+ variant,
62
+ onClick: onConfirm,
63
+ disabled: isLoading,
64
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.confirm, { testId: "confirmation-modal-confirm-button" }),
65
+ children: isLoading ? l.pleaseWait : confirmText ?? l.confirm
66
+ }
67
+ )
68
+ ] })
69
+ }
70
+ );
71
+ }
72
+
73
+ exports.ConfirmDialog = ConfirmDialog;
74
+ exports.DEFAULT_CONFIRM_DIALOG_LABELS = DEFAULT_CONFIRM_DIALOG_LABELS;
75
+ //# sourceMappingURL=chunk-GICUGQNN.cjs.map
76
+ //# sourceMappingURL=chunk-GICUGQNN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/settings/ConfirmDialog.tsx"],"names":["useMemo","useRef","jsx","ModalScaffold","AlertTriangle","testIdOr","jsxs","Button"],"mappings":";;;;;;;;;AAaO,IAAM,6BAAA,GAAqD;AAAA,EAChE,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY;AACd;AAuBO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAA,GAAIA,aAAA,CAAQ,OAAO,EAAE,GAAG,6BAAA,EAA+B,GAAG,MAAA,EAAO,CAAA,EAAI,CAAC,MAAM,CAAC,CAAA;AACnF,EAAA,MAAM,SAAA,GAAYC,aAA0B,IAAI,CAAA;AAChD,EAAA,uBACEC,cAAA;AAAA,IAACC,+BAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,MAAM,OAAA,EAAQ;AAAA,MACrB,CAAA;AAAA,MACA,IAAA,EAAK,aAAA;AAAA,MACL,eAAA,EAAiB,SAAA;AAAA,MACjB,KAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA,EAAe,IAAA;AAAA,MACf,IAAA,EACE,YAAY,aAAA,mBACVD,cAAA,CAACE,6BAAc,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,MAAA,EAAO,CAAA,GAClE,IAAA;AAAA,MAEN,QAAQC,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,sBAAsB,CAAA;AAAA,MAEzD,QAAA,kBAAAC,eAAA,CAACH,+BAAA,CAAc,MAAA,EAAd,EACC,QAAA,EAAA;AAAA,wBAAAD,cAAA;AAAA,UAACK,SAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,YACvB,QAAA,EAAU,SAAA;AAAA,YACV,eAAaF,0BAAA,CAAS,OAAA,EAAS,QAAQ,EAAE,MAAA,EAAQ,oCAAoC,CAAA;AAAA,YAEpF,wBAAc,CAAA,CAAE;AAAA;AAAA,SACnB;AAAA,wBACAH,cAAA;AAAA,UAACK,SAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,OAAA,EAAS,SAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,eAAaF,0BAAA,CAAS,OAAA,EAAS,SAAS,EAAE,MAAA,EAAQ,qCAAqC,CAAA;AAAA,YAEtF,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,UAAA,GAAc,WAAA,IAAe,CAAA,CAAE;AAAA;AAAA;AAChD,OAAA,EACF;AAAA;AAAA,GACF;AAEJ","file":"chunk-GICUGQNN.cjs","sourcesContent":["import { useMemo, useRef } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { ModalScaffold } from './ModalScaffold'\n\n/** Every fixed string of the confirm dialog. `confirmText` / `cancelText` props win. */\nexport interface ConfirmDialogLabels {\n confirm: string\n cancel: string\n pleaseWait: string\n}\n\nexport const DEFAULT_CONFIRM_DIALOG_LABELS: ConfirmDialogLabels = {\n confirm: 'Confirm',\n cancel: 'Cancel',\n pleaseWait: 'Please wait...',\n}\n\nexport interface ConfirmDialogProps {\n labels?: Partial<ConfirmDialogLabels>\n isOpen: boolean\n onClose: () => void\n onConfirm: () => void\n title: string\n description: string\n confirmText?: string\n cancelText?: string\n variant?: 'destructive' | 'default'\n isLoading?: boolean\n /** Dialog test id (default `confirmation-modal`). */\n testId?: string\n /** Button ids; defaults are the current ids. */\n testIds?: Partial<Record<'cancel' | 'confirm', string>>\n}\n\n/**\n * Declarative yes/no confirmation with a loading state. An `alertdialog`: initial focus is on\n * Cancel (the safe action) and clicking outside does not dismiss it; Escape and Cancel do.\n */\nexport function ConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title,\n description,\n confirmText,\n cancelText,\n variant = 'destructive',\n isLoading = false,\n labels,\n testId,\n testIds,\n}: ConfirmDialogProps) {\n const l = useMemo(() => ({ ...DEFAULT_CONFIRM_DIALOG_LABELS, ...labels }), [labels])\n const cancelRef = useRef<HTMLButtonElement>(null)\n return (\n <ModalScaffold\n open={isOpen}\n onOpenChange={(next) => {\n if (!next) onClose()\n }}\n role=\"alertdialog\"\n initialFocusRef={cancelRef}\n title={title}\n description={description}\n showDescription\n icon={\n variant === 'destructive' ? (\n <AlertTriangle className=\"h-5 w-5 text-red-text\" aria-hidden=\"true\" />\n ) : null\n }\n testId={testIdOr(testId, { testId: 'confirmation-modal' })}\n >\n <ModalScaffold.Footer>\n <Button\n ref={cancelRef}\n variant=\"outline\"\n onClick={() => onClose()}\n disabled={isLoading}\n data-testid={testIdOr(testIds?.cancel, { testId: 'confirmation-modal-cancel-button' })}\n >\n {cancelText ?? l.cancel}\n </Button>\n <Button\n variant={variant}\n onClick={onConfirm}\n disabled={isLoading}\n data-testid={testIdOr(testIds?.confirm, { testId: 'confirmation-modal-confirm-button' })}\n >\n {isLoading ? l.pleaseWait : (confirmText ?? l.confirm)}\n </Button>\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk2NIL2ASF_cjs = require('./chunk-2NIL2ASF.cjs');
4
+ var chunkETBB5KMN_cjs = require('./chunk-ETBB5KMN.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
- chunk2NIL2ASF_cjs.NativeDocxEditor,
18
+ chunkETBB5KMN_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
- chunk2NIL2ASF_cjs.NativeDocxEditor,
29
+ chunkETBB5KMN_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-54WBIVHV.cjs.map
43
- //# sourceMappingURL=chunk-54WBIVHV.cjs.map
42
+ //# sourceMappingURL=chunk-HF4PAYBM.cjs.map
43
+ //# sourceMappingURL=chunk-HF4PAYBM.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-54WBIVHV.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-HF4PAYBM.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"]}
@@ -0,0 +1,126 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkRC25WMVB_cjs = require('./chunk-RC25WMVB.cjs');
5
+ var commands = require('@arbidocs/coedit/commands');
6
+
7
+ var DEFINITIONS_LABEL = "Definitions";
8
+ function termKey(term) {
9
+ return commands.termKey(chunkRC25WMVB_cjs.decodeWhitespaceEntities(term));
10
+ }
11
+ function parseDefinition(text) {
12
+ return commands.parseDefinition(chunkRC25WMVB_cjs.decodeWhitespaceEntities(text));
13
+ }
14
+ function toDefinition(source) {
15
+ const parsed = parseDefinition(source.text);
16
+ return parsed ? { ...source, ...parsed, key: termKey(parsed.term) } : null;
17
+ }
18
+ var time = (iso) => iso ? Date.parse(iso) || 0 : 0;
19
+ function compareDefinitions(a, b) {
20
+ return Number(!!b.confirmed) - Number(!!a.confirmed) || time(b.updatedAt) - time(a.updatedAt) || a.id.localeCompare(b.id);
21
+ }
22
+ function groupDefinitions(sources, options = {}) {
23
+ const byKey = /* @__PURE__ */ new Map();
24
+ const unparsed = [];
25
+ for (const source of sources) {
26
+ if (options.labelId && !source.labels?.some((l) => l.id === options.labelId)) continue;
27
+ const definition = toDefinition(source);
28
+ if (!definition) {
29
+ unparsed.push(source);
30
+ continue;
31
+ }
32
+ const list = byKey.get(definition.key) ?? [];
33
+ list.push(definition);
34
+ byKey.set(definition.key, list);
35
+ }
36
+ const groups = [...byKey.entries()].map(([key, list]) => {
37
+ const definitions = [...list].sort(compareDefinitions);
38
+ return { key, term: definitions[0].term, preferred: definitions[0], definitions };
39
+ });
40
+ groups.sort((a, b) => commands.compareTerms(a.term, b.term));
41
+ return { groups, unparsed };
42
+ }
43
+ function definitionLabels(sources) {
44
+ const byId = /* @__PURE__ */ new Map();
45
+ for (const s of sources) for (const l of s.labels ?? []) byId.set(l.id, l);
46
+ return [...byId.values()].sort((a, b) => commands.compareTerms(a.name, b.name));
47
+ }
48
+ function filterTermGroups(groups, query) {
49
+ const q = termKey(query);
50
+ if (!q) return [...groups];
51
+ const rank = (g) => g.key.startsWith(q) ? 0 : g.key.split(" ").some((w) => w.startsWith(q)) ? 1 : 2;
52
+ return groups.filter((g) => g.key.includes(q)).map((g) => ({ g, r: rank(g) })).sort((a, b) => a.r - b.r || commands.compareTerms(a.g.term, b.g.term)).map(({ g }) => g);
53
+ }
54
+ var DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
55
+ var run = ({ text, bold, italic, muted }) => {
56
+ const props = [bold && "<w:b/>", italic && "<w:i/>", muted && '<w:color w:val="595959"/>'].filter(Boolean).join("");
57
+ const body = text.split(/\r?\n/).map((line) => `<w:t xml:space="preserve">${commands.esc(line)}</w:t>`).join("<w:br/>");
58
+ return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ""}${body}</w:r>`;
59
+ };
60
+ var paragraph = (runs, style) => `<w:p>${style ? `<w:pPr><w:pStyle w:val="${style}"/></w:pPr>` : ""}${runs.map(run).join("")}</w:p>`;
61
+ var cell = (paragraphs, width, fill) => `<w:tc><w:tcPr><w:tcW w:w="${width}" w:type="dxa"/>${fill ? `<w:shd w:val="clear" w:color="auto" w:fill="${fill}"/>` : ""}</w:tcPr>${paragraphs.length ? paragraphs.join("") : "<w:p/>"}</w:tc>`;
62
+ function page(landscape) {
63
+ const [short, long] = [11906, 16838];
64
+ const margin = landscape ? 1080 : 1440;
65
+ const width = landscape ? long : short;
66
+ return {
67
+ margin,
68
+ textWidth: width - 2 * margin,
69
+ sectPr: `<w:sectPr><w:pgSz w:w="${landscape ? long : short}" w:h="${landscape ? short : long}"${landscape ? ' w:orient="landscape"' : ""}/><w:pgMar w:top="${margin}" w:right="${margin}" w:bottom="${margin}" w:left="${margin}" w:header="708" w:footer="708" w:gutter="0"/></w:sectPr>`
70
+ };
71
+ }
72
+ var minuteUtc = (at) => new Date(at).toISOString().slice(0, 16).replace("T", " ");
73
+ var DOC_DEFAULTS = `<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="Calibri" w:cs="Calibri"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="en-GB"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="160" w:line="259" w:lineRule="auto"/></w:pPr></w:pPrDefault></w:docDefaults>`;
74
+ var TABLE_DOCUMENT_STYLES = commands.stylesXml(
75
+ DOC_DEFAULTS,
76
+ `<w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/></w:style><w:style w:type="paragraph" w:styleId="Title"><w:name w:val="Title"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:after="80" w:line="240" w:lineRule="auto"/></w:pPr><w:rPr><w:sz w:val="48"/><w:szCs w:val="48"/></w:rPr></w:style><w:style w:type="paragraph" w:customStyle="1" w:styleId="TagTableCell"><w:name w:val="Tag Table Cell"/><w:basedOn w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:after="40" w:line="240" w:lineRule="auto"/></w:pPr><w:rPr><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:style><w:style w:type="table" w:default="1" w:styleId="TableNormal"><w:name w:val="Normal Table"/><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="table" w:customStyle="1" w:styleId="TagTableGrid"><w:name w:val="Tag Table"/><w:basedOn w:val="TableNormal"/><w:tblPr><w:tblBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:left w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:right w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:insideH w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:insideV w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/></w:tblBorders><w:tblCellMar><w:top w:w="60" w:type="dxa"/><w:left w:w="100" w:type="dxa"/><w:bottom w:w="60" w:type="dxa"/><w:right w:w="100" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style>`
77
+ );
78
+
79
+ Object.defineProperty(exports, "DEFINITION_BOOKMARK_PREFIX", {
80
+ enumerable: true,
81
+ get: function () { return commands.DEFINITION_BOOKMARK_PREFIX; }
82
+ });
83
+ Object.defineProperty(exports, "compareTerms", {
84
+ enumerable: true,
85
+ get: function () { return commands.compareTerms; }
86
+ });
87
+ Object.defineProperty(exports, "definitionBookmark", {
88
+ enumerable: true,
89
+ get: function () { return commands.definitionBookmark; }
90
+ });
91
+ Object.defineProperty(exports, "definitionIdOfBookmark", {
92
+ enumerable: true,
93
+ get: function () { return commands.definitionIdOfBookmark; }
94
+ });
95
+ Object.defineProperty(exports, "documentXml", {
96
+ enumerable: true,
97
+ get: function () { return commands.documentXml; }
98
+ });
99
+ Object.defineProperty(exports, "docxPackage", {
100
+ enumerable: true,
101
+ get: function () { return commands.docxPackage; }
102
+ });
103
+ Object.defineProperty(exports, "esc", {
104
+ enumerable: true,
105
+ get: function () { return commands.esc; }
106
+ });
107
+ Object.defineProperty(exports, "stylesXml", {
108
+ enumerable: true,
109
+ get: function () { return commands.stylesXml; }
110
+ });
111
+ exports.DEFINITIONS_LABEL = DEFINITIONS_LABEL;
112
+ exports.DOCX_MIME_TYPE = DOCX_MIME_TYPE;
113
+ exports.TABLE_DOCUMENT_STYLES = TABLE_DOCUMENT_STYLES;
114
+ exports.cell = cell;
115
+ exports.compareDefinitions = compareDefinitions;
116
+ exports.definitionLabels = definitionLabels;
117
+ exports.filterTermGroups = filterTermGroups;
118
+ exports.groupDefinitions = groupDefinitions;
119
+ exports.minuteUtc = minuteUtc;
120
+ exports.page = page;
121
+ exports.paragraph = paragraph;
122
+ exports.parseDefinition = parseDefinition;
123
+ exports.termKey = termKey;
124
+ exports.toDefinition = toDefinition;
125
+ //# sourceMappingURL=chunk-I2QSDQQV.cjs.map
126
+ //# sourceMappingURL=chunk-I2QSDQQV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tags/definitions.ts","../src/tags/ooxml.ts"],"names":["sharedTermKey","decodeWhitespaceEntities","sharedParseDefinition","compareTerms","esc","stylesXml"],"mappings":"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","file":"chunk-I2QSDQQV.cjs","sourcesContent":["/**\n * Defined terms. A definition is an ordinary fact carrying the workspace's \"Definitions\" label; its\n * TERM is read from the start of its text — `\"Shares\" means …`, `**Business Day** shall mean …`,\n * `Completion: the date …` — and facts defining the same term (one per agreement, say) are grouped,\n * a confirmed one preferred over the rest, then the most recent. Pure helpers, no React: the Word\n * editor inserts terms with them and the Tags page prints the glossary with them.\n */\n\nimport {\n compareTerms,\n parseDefinition as sharedParseDefinition,\n termKey as sharedTermKey,\n type ParsedDefinition,\n} from '@arbidocs/coedit/commands'\nimport { decodeWhitespaceEntities } from '../facts/fact-text'\n\n// Shared with the Word-editor commands (and the collaboration service).\nexport {\n DEFINITION_BOOKMARK_PREFIX,\n compareTerms,\n definitionBookmark,\n definitionIdOfBookmark,\n type ParsedDefinition,\n} from '@arbidocs/coedit/commands'\n\n/** The label that marks a fact as a definition. */\nexport const DEFINITIONS_LABEL = 'Definitions'\n\n/** A label on a definition other than {@link DEFINITIONS_LABEL} (e.g. the agreement it is from). */\nexport interface DefinitionLabel {\n id: string\n name: string\n}\n\n/** A definition fact, as the host reads it. */\nexport interface DefinitionSource {\n /** The fact's id (`fct-…`). */\n id: string\n /** The fact text, as written (it may be Markdown). */\n text: string\n /** A human vouched for it: preferred over unconfirmed definitions of the same term. */\n confirmed?: boolean\n /** ISO time it was last written; the most recent wins between equals. */\n updatedAt?: string\n /** Where it comes from: the cited document's name. */\n source?: string\n /** Its other labels, e.g. the agreement (\"SPA\") it defines a term of. */\n labels?: DefinitionLabel[]\n}\n\n/** A parsed definition fact. */\nexport interface Definition extends DefinitionSource, ParsedDefinition {\n /** The term's matching key (case and whitespace folded). */\n key: string\n}\n\n/** Every definition of one term, the preferred one first. */\nexport interface DefinedTermGroup {\n key: string\n /** The term as the preferred definition writes it. */\n term: string\n /** The preferred definition (first of {@link DefinedTermGroup.definitions}). */\n preferred: Definition\n definitions: Definition[]\n}\n\n/** The matching key of a term: case and whitespace folded, quotes and emphasis dropped. */\nexport function termKey(term: string): string {\n return sharedTermKey(decodeWhitespaceEntities(term))\n}\n\n/**\n * Read a definition's term from the start of its text, or `null` when it does not start with one\n * (see `parseDefinition` in `@arbidocs/coedit/commands`); entity-encoded whitespace is decoded first.\n */\nexport function parseDefinition(text: string): ParsedDefinition | null {\n return sharedParseDefinition(decodeWhitespaceEntities(text))\n}\n\n/** A definition parsed, or `null` when its text names no term. */\nexport function toDefinition(source: DefinitionSource): Definition | null {\n const parsed = parseDefinition(source.text)\n return parsed ? { ...source, ...parsed, key: termKey(parsed.term) } : null\n}\n\nconst time = (iso?: string) => (iso ? Date.parse(iso) || 0 : 0)\n\n/** Preferred first: confirmed, then most recently written, then by id (stable). */\nexport function compareDefinitions(a: DefinitionSource, b: DefinitionSource): number {\n return (\n Number(!!b.confirmed) - Number(!!a.confirmed) ||\n time(b.updatedAt) - time(a.updatedAt) ||\n a.id.localeCompare(b.id)\n )\n}\n\n/**\n * Definitions grouped by term, alphabetically, each group's preferred definition first. Facts whose\n * text names no term are returned apart (`unparsed`), so a host can say how many it could not read.\n * With `labelId`, only definitions carrying that label (one agreement's, say) are kept.\n */\nexport function groupDefinitions(\n sources: readonly DefinitionSource[],\n options: { labelId?: string | null } = {}\n): { groups: DefinedTermGroup[]; unparsed: DefinitionSource[] } {\n const byKey = new Map<string, Definition[]>()\n const unparsed: DefinitionSource[] = []\n for (const source of sources) {\n if (options.labelId && !source.labels?.some((l) => l.id === options.labelId)) continue\n const definition = toDefinition(source)\n if (!definition) {\n unparsed.push(source)\n continue\n }\n const list = byKey.get(definition.key) ?? []\n list.push(definition)\n byKey.set(definition.key, list)\n }\n const groups = [...byKey.entries()].map(([key, list]) => {\n const definitions = [...list].sort(compareDefinitions)\n return { key, term: definitions[0].term, preferred: definitions[0], definitions }\n })\n groups.sort((a, b) => compareTerms(a.term, b.term))\n return { groups, unparsed }\n}\n\n/** The labels (agreements) definitions carry besides the Definitions label, by name. */\nexport function definitionLabels(sources: readonly DefinitionSource[]): DefinitionLabel[] {\n const byId = new Map<string, DefinitionLabel>()\n for (const s of sources) for (const l of s.labels ?? []) byId.set(l.id, l)\n return [...byId.values()].sort((a, b) => compareTerms(a.name, b.name))\n}\n\n/** Groups whose term matches a typed query: prefix matches first, then any word, then anywhere. */\nexport function filterTermGroups(\n groups: readonly DefinedTermGroup[],\n query: string\n): DefinedTermGroup[] {\n const q = termKey(query)\n if (!q) return [...groups]\n const rank = (g: DefinedTermGroup) =>\n g.key.startsWith(q) ? 0 : g.key.split(' ').some((w) => w.startsWith(q)) ? 1 : 2\n return groups\n .filter((g) => g.key.includes(q))\n .map((g) => ({ g, r: rank(g) }))\n .sort((a, b) => a.r - b.r || compareTerms(a.g.term, b.g.term))\n .map(({ g }) => g)\n}\n","/**\n * The small WordprocessingML vocabulary the tags exports write: escaped runs, paragraphs, table\n * cells, an A4 page, and the minimal package around a `word/document.xml`. Zipped with `fflate`, so\n * the result opens in the native Word editor and in Word without pulling the editor engine in.\n */\n\nimport { esc, stylesXml } from '@arbidocs/coedit/commands'\n\n// Shared with the Word-editor commands (and the collaboration service).\nexport {\n W_NAMESPACES,\n docxPackage,\n documentXml,\n esc,\n hyperlinkRelationship,\n stylesXml,\n} from '@arbidocs/coedit/commands'\n\nexport const DOCX_MIME_TYPE =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\nexport interface Run {\n text: string\n bold?: boolean\n italic?: boolean\n muted?: boolean\n}\n\nexport const run = ({ text, bold, italic, muted }: Run) => {\n const props = [bold && '<w:b/>', italic && '<w:i/>', muted && '<w:color w:val=\"595959\"/>']\n .filter(Boolean)\n .join('')\n // Line breaks inside a value become Word line breaks rather than being lost.\n const body = text\n .split(/\\r?\\n/)\n .map((line) => `<w:t xml:space=\"preserve\">${esc(line)}</w:t>`)\n .join('<w:br/>')\n return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ''}${body}</w:r>`\n}\n\nexport const paragraph = (runs: Run[], style?: string) =>\n `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${runs.map(run).join('')}</w:p>`\n\n/** A table cell: its paragraphs (a cell must hold at least one), shaded when given a fill. */\nexport const cell = (paragraphs: string[], width: number, fill?: string) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/>${\n fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill}\"/>` : ''\n }</w:tcPr>${paragraphs.length ? paragraphs.join('') : '<w:p/>'}</w:tc>`\n\n/** Page geometry in twips (A4), turned for landscape. */\nexport function page(landscape: boolean) {\n const [short, long] = [11906, 16838]\n const margin = landscape ? 1080 : 1440\n const width = landscape ? long : short\n return {\n margin,\n textWidth: width - 2 * margin,\n sectPr: `<w:sectPr><w:pgSz w:w=\"${landscape ? long : short}\" w:h=\"${landscape ? short : long}\"${\n landscape ? ' w:orient=\"landscape\"' : ''\n }/><w:pgMar w:top=\"${margin}\" w:right=\"${margin}\" w:bottom=\"${margin}\" w:left=\"${margin}\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr>`,\n }\n}\n\n/** `YYYY-MM-DD HH:MM` (UTC) of an ISO time, for a \"taken at\" line. */\nexport const minuteUtc = (at: string) => new Date(at).toISOString().slice(0, 16).replace('T', ' ')\n\n/** Calibri 11pt (en-GB), 8pt after each paragraph: the document defaults the exports share. */\nexport const DOC_DEFAULTS = `<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Calibri\" w:hAnsi=\"Calibri\" w:eastAsia=\"Calibri\" w:cs=\"Calibri\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/><w:lang w:val=\"en-GB\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"160\" w:line=\"259\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults>`\n\n/**\n * Styles of a document that is a title and a table: `Title`, the compact `TagTableCell` paragraph\n * and the bordered `TagTableGrid` table.\n */\nexport const TABLE_DOCUMENT_STYLES = stylesXml(\n DOC_DEFAULTS,\n `<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style><w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr></w:style><w:style w:type=\"paragraph\" w:customStyle=\"1\" w:styleId=\"TagTableCell\"><w:name w:val=\"Tag Table Cell\"/><w:basedOn w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"40\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/></w:rPr></w:style><w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\"><w:name w:val=\"Normal Table\"/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"table\" w:customStyle=\"1\" w:styleId=\"TagTableGrid\"><w:name w:val=\"Tag Table\"/><w:basedOn w:val=\"TableNormal\"/><w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/></w:tblBorders><w:tblCellMar><w:top w:w=\"60\" w:type=\"dxa\"/><w:left w:w=\"100\" w:type=\"dxa\"/><w:bottom w:w=\"60\" w:type=\"dxa\"/><w:right w:w=\"100\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style>`\n)\n"]}
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { ModalScaffold } from './chunk-TX2ZICS7.js';
3
+ import { testIdOr } from './chunk-7F6CBP3Z.js';
4
+ import { useMemo, useRef } from 'react';
5
+ import { AlertTriangle } from 'lucide-react';
6
+ import { Button } from '@arbidocs/react/ui';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ var DEFAULT_CONFIRM_DIALOG_LABELS = {
10
+ confirm: "Confirm",
11
+ cancel: "Cancel",
12
+ pleaseWait: "Please wait..."
13
+ };
14
+ function ConfirmDialog({
15
+ isOpen,
16
+ onClose,
17
+ onConfirm,
18
+ title,
19
+ description,
20
+ confirmText,
21
+ cancelText,
22
+ variant = "destructive",
23
+ isLoading = false,
24
+ labels,
25
+ testId,
26
+ testIds
27
+ }) {
28
+ const l = useMemo(() => ({ ...DEFAULT_CONFIRM_DIALOG_LABELS, ...labels }), [labels]);
29
+ const cancelRef = useRef(null);
30
+ return /* @__PURE__ */ jsx(
31
+ ModalScaffold,
32
+ {
33
+ open: isOpen,
34
+ onOpenChange: (next) => {
35
+ if (!next) onClose();
36
+ },
37
+ role: "alertdialog",
38
+ initialFocusRef: cancelRef,
39
+ title,
40
+ description,
41
+ showDescription: true,
42
+ icon: variant === "destructive" ? /* @__PURE__ */ jsx(AlertTriangle, { className: "h-5 w-5 text-red-text", "aria-hidden": "true" }) : null,
43
+ testId: testIdOr(testId, { testId: "confirmation-modal" }),
44
+ children: /* @__PURE__ */ jsxs(ModalScaffold.Footer, { children: [
45
+ /* @__PURE__ */ jsx(
46
+ Button,
47
+ {
48
+ ref: cancelRef,
49
+ variant: "outline",
50
+ onClick: () => onClose(),
51
+ disabled: isLoading,
52
+ "data-testid": testIdOr(testIds?.cancel, { testId: "confirmation-modal-cancel-button" }),
53
+ children: cancelText ?? l.cancel
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsx(
57
+ Button,
58
+ {
59
+ variant,
60
+ onClick: onConfirm,
61
+ disabled: isLoading,
62
+ "data-testid": testIdOr(testIds?.confirm, { testId: "confirmation-modal-confirm-button" }),
63
+ children: isLoading ? l.pleaseWait : confirmText ?? l.confirm
64
+ }
65
+ )
66
+ ] })
67
+ }
68
+ );
69
+ }
70
+
71
+ export { ConfirmDialog, DEFAULT_CONFIRM_DIALOG_LABELS };
72
+ //# sourceMappingURL=chunk-JJLMCV3T.js.map
73
+ //# sourceMappingURL=chunk-JJLMCV3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/settings/ConfirmDialog.tsx"],"names":[],"mappings":";;;;;;;AAaO,IAAM,6BAAA,GAAqD;AAAA,EAChE,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY;AACd;AAuBO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,aAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAO,EAAE,GAAG,6BAAA,EAA+B,GAAG,MAAA,EAAO,CAAA,EAAI,CAAC,MAAM,CAAC,CAAA;AACnF,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAChD,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,MAAM,OAAA,EAAQ;AAAA,MACrB,CAAA;AAAA,MACA,IAAA,EAAK,aAAA;AAAA,MACL,eAAA,EAAiB,SAAA;AAAA,MACjB,KAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA,EAAe,IAAA;AAAA,MACf,IAAA,EACE,YAAY,aAAA,mBACV,GAAA,CAAC,iBAAc,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,MAAA,EAAO,CAAA,GAClE,IAAA;AAAA,MAEN,QAAQ,QAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,sBAAsB,CAAA;AAAA,MAEzD,QAAA,kBAAA,IAAA,CAAC,aAAA,CAAc,MAAA,EAAd,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,YACvB,QAAA,EAAU,SAAA;AAAA,YACV,eAAa,QAAA,CAAS,OAAA,EAAS,QAAQ,EAAE,MAAA,EAAQ,oCAAoC,CAAA;AAAA,YAEpF,wBAAc,CAAA,CAAE;AAAA;AAAA,SACnB;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,OAAA,EAAS,SAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,eAAa,QAAA,CAAS,OAAA,EAAS,SAAS,EAAE,MAAA,EAAQ,qCAAqC,CAAA;AAAA,YAEtF,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,UAAA,GAAc,WAAA,IAAe,CAAA,CAAE;AAAA;AAAA;AAChD,OAAA,EACF;AAAA;AAAA,GACF;AAEJ","file":"chunk-JJLMCV3T.js","sourcesContent":["import { useMemo, useRef } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { ModalScaffold } from './ModalScaffold'\n\n/** Every fixed string of the confirm dialog. `confirmText` / `cancelText` props win. */\nexport interface ConfirmDialogLabels {\n confirm: string\n cancel: string\n pleaseWait: string\n}\n\nexport const DEFAULT_CONFIRM_DIALOG_LABELS: ConfirmDialogLabels = {\n confirm: 'Confirm',\n cancel: 'Cancel',\n pleaseWait: 'Please wait...',\n}\n\nexport interface ConfirmDialogProps {\n labels?: Partial<ConfirmDialogLabels>\n isOpen: boolean\n onClose: () => void\n onConfirm: () => void\n title: string\n description: string\n confirmText?: string\n cancelText?: string\n variant?: 'destructive' | 'default'\n isLoading?: boolean\n /** Dialog test id (default `confirmation-modal`). */\n testId?: string\n /** Button ids; defaults are the current ids. */\n testIds?: Partial<Record<'cancel' | 'confirm', string>>\n}\n\n/**\n * Declarative yes/no confirmation with a loading state. An `alertdialog`: initial focus is on\n * Cancel (the safe action) and clicking outside does not dismiss it; Escape and Cancel do.\n */\nexport function ConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title,\n description,\n confirmText,\n cancelText,\n variant = 'destructive',\n isLoading = false,\n labels,\n testId,\n testIds,\n}: ConfirmDialogProps) {\n const l = useMemo(() => ({ ...DEFAULT_CONFIRM_DIALOG_LABELS, ...labels }), [labels])\n const cancelRef = useRef<HTMLButtonElement>(null)\n return (\n <ModalScaffold\n open={isOpen}\n onOpenChange={(next) => {\n if (!next) onClose()\n }}\n role=\"alertdialog\"\n initialFocusRef={cancelRef}\n title={title}\n description={description}\n showDescription\n icon={\n variant === 'destructive' ? (\n <AlertTriangle className=\"h-5 w-5 text-red-text\" aria-hidden=\"true\" />\n ) : null\n }\n testId={testIdOr(testId, { testId: 'confirmation-modal' })}\n >\n <ModalScaffold.Footer>\n <Button\n ref={cancelRef}\n variant=\"outline\"\n onClick={() => onClose()}\n disabled={isLoading}\n data-testid={testIdOr(testIds?.cancel, { testId: 'confirmation-modal-cancel-button' })}\n >\n {cancelText ?? l.cancel}\n </Button>\n <Button\n variant={variant}\n onClick={onConfirm}\n disabled={isLoading}\n data-testid={testIdOr(testIds?.confirm, { testId: 'confirmation-modal-confirm-button' })}\n >\n {isLoading ? l.pleaseWait : (confirmText ?? l.confirm)}\n </Button>\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
5
4
  var chunkADOKTJHV_cjs = require('./chunk-ADOKTJHV.cjs');
5
+ var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
6
6
  var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
7
7
  var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
8
8
  var react = require('react');
@@ -1443,5 +1443,5 @@ exports.toActiveSessionViews = toActiveSessionViews;
1443
1443
  exports.toDeleteBlockerViews = toDeleteBlockerViews;
1444
1444
  exports.toLogoutSessionViews = toLogoutSessionViews;
1445
1445
  exports.toNotificationCategories = toNotificationCategories;
1446
- //# sourceMappingURL=chunk-W7ZDBPJ3.cjs.map
1447
- //# sourceMappingURL=chunk-W7ZDBPJ3.cjs.map
1446
+ //# sourceMappingURL=chunk-OR4CO743.cjs.map
1447
+ //# sourceMappingURL=chunk-OR4CO743.cjs.map