@arbidocs/blocks 0.4.32 → 0.4.37

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 (199) hide show
  1. package/dist/agents/index.cjs +258 -216
  2. package/dist/agents/index.js +9 -7
  3. package/dist/agents/tasks/ConversationListView.d.ts +58 -0
  4. package/dist/agents/tasks/ConversationTurnSpeaker.d.ts +16 -0
  5. package/dist/agents/tasks/NewThreadDialog.d.ts +1 -1
  6. package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
  7. package/dist/agents/tasks/TaskFlow.d.ts +22 -0
  8. package/dist/agents/tasks/TaskInbox.d.ts +26 -0
  9. package/dist/agents/tasks/TaskReviewDialog.d.ts +22 -0
  10. package/dist/agents/tasks/TaskRowMenu.d.ts +10 -2
  11. package/dist/agents/tasks/TaskRunsDialog.d.ts +8 -3
  12. package/dist/agents/tasks/TaskStartDialog.d.ts +24 -0
  13. package/dist/agents/tasks/TaskTable.d.ts +1 -1
  14. package/dist/agents/tasks/ThreadNotifyDialog.d.ts +11 -0
  15. package/dist/agents/tasks/WorkflowComposer.d.ts +1 -1
  16. package/dist/agents/tasks/WorkflowsTable.d.ts +7 -0
  17. package/dist/agents/tasks/compact-thread-activity.d.ts +8 -0
  18. package/dist/agents/tasks/index.d.ts +10 -0
  19. package/dist/agents/tasks/taskComposerTypes.d.ts +16 -1
  20. package/dist/agents/tasks/taskRequest.d.ts +1 -0
  21. package/dist/agents/tasks/testGrid.d.ts +24 -0
  22. package/dist/agents/tasks/workflowColumns.d.ts +2 -1
  23. package/dist/agents/tasks/workflowRows.d.ts +6 -0
  24. package/dist/agents/workflows/types.d.ts +2 -0
  25. package/dist/auth/index.cjs +27 -27
  26. package/dist/auth/index.js +1 -1
  27. package/dist/chat/Message.d.ts +8 -2
  28. package/dist/chat/index.cjs +132 -120
  29. package/dist/chat/index.d.ts +2 -0
  30. package/dist/chat/index.js +2 -2
  31. package/dist/chat/participant-tints.d.ts +1 -0
  32. package/dist/chat/useRecipientDraft.d.ts +14 -0
  33. package/dist/{chunk-KF4EC5XU.js → chunk-24KQJYSB.js} +3 -3
  34. package/dist/{chunk-KF4EC5XU.js.map → chunk-24KQJYSB.js.map} +1 -1
  35. package/dist/{chunk-GVQOBJKR.cjs → chunk-2EAE5JP6.cjs} +7 -4
  36. package/dist/chunk-2EAE5JP6.cjs.map +1 -0
  37. package/dist/chunk-3AFWGEDJ.cjs +53 -0
  38. package/dist/chunk-3AFWGEDJ.cjs.map +1 -0
  39. package/dist/{chunk-UBNVIIBT.js → chunk-4WWM3GQ5.js} +23 -8
  40. package/dist/chunk-4WWM3GQ5.js.map +1 -0
  41. package/dist/{chunk-56BUD74K.cjs → chunk-65THHQVB.cjs} +27 -27
  42. package/dist/{chunk-56BUD74K.cjs.map → chunk-65THHQVB.cjs.map} +1 -1
  43. package/dist/{chunk-UTYQPVIW.cjs → chunk-7QDX2CO4.cjs} +6 -6
  44. package/dist/{chunk-UTYQPVIW.cjs.map → chunk-7QDX2CO4.cjs.map} +1 -1
  45. package/dist/{chunk-5B4PXAKI.cjs → chunk-7RGLTF76.cjs} +23 -8
  46. package/dist/chunk-7RGLTF76.cjs.map +1 -0
  47. package/dist/{chunk-PLGVMLBD.cjs → chunk-AMXQQCCB.cjs} +1975 -610
  48. package/dist/chunk-AMXQQCCB.cjs.map +1 -0
  49. package/dist/{chunk-NUPVHEJW.js → chunk-BUHKUKKB.js} +7 -4
  50. package/dist/chunk-BUHKUKKB.js.map +1 -0
  51. package/dist/{chunk-4XJZ6AAY.js → chunk-CKB64Z4R.js} +245 -6
  52. package/dist/chunk-CKB64Z4R.js.map +1 -0
  53. package/dist/chunk-DDW3M22Z.js +126 -0
  54. package/dist/chunk-DDW3M22Z.js.map +1 -0
  55. package/dist/{chunk-KXMDOTGW.js → chunk-DLBUFHLY.js} +10 -2
  56. package/dist/chunk-DLBUFHLY.js.map +1 -0
  57. package/dist/{chunk-ZHLMDJCO.cjs → chunk-DLVX6R6B.cjs} +62 -26
  58. package/dist/chunk-DLVX6R6B.cjs.map +1 -0
  59. package/dist/{chunk-JGZTRLKL.cjs → chunk-IA7RTPT3.cjs} +7 -4
  60. package/dist/chunk-IA7RTPT3.cjs.map +1 -0
  61. package/dist/{chunk-6YVI74BC.js → chunk-JH25QIZW.js} +439 -12
  62. package/dist/chunk-JH25QIZW.js.map +1 -0
  63. package/dist/{chunk-FRRDPYBR.cjs → chunk-L7B4W4LA.cjs} +74 -5
  64. package/dist/chunk-L7B4W4LA.cjs.map +1 -0
  65. package/dist/{chunk-NJL4LIXX.js → chunk-LFGJAZ5H.js} +11 -8
  66. package/dist/chunk-LFGJAZ5H.js.map +1 -0
  67. package/dist/{chunk-IAKUTBPX.js → chunk-LYUO3E6V.js} +3 -3
  68. package/dist/{chunk-IAKUTBPX.js.map → chunk-LYUO3E6V.js.map} +1 -1
  69. package/dist/{chunk-EYPPB5CY.cjs → chunk-M2YGPC5N.cjs} +4 -4
  70. package/dist/{chunk-EYPPB5CY.cjs.map → chunk-M2YGPC5N.cjs.map} +1 -1
  71. package/dist/{chunk-5ZBP7TCD.cjs → chunk-MJCCBMM5.cjs} +10 -2
  72. package/dist/chunk-MJCCBMM5.cjs.map +1 -0
  73. package/dist/{chunk-VMCOH3AY.cjs → chunk-NUF2WGGF.cjs} +527 -96
  74. package/dist/chunk-NUF2WGGF.cjs.map +1 -0
  75. package/dist/{chunk-OJSWQM4G.js → chunk-OZJ5PXA6.js} +29 -4
  76. package/dist/chunk-OZJ5PXA6.js.map +1 -0
  77. package/dist/{chunk-3NZR6PAG.js → chunk-PE7Z53RB.js} +70 -4
  78. package/dist/chunk-PE7Z53RB.js.map +1 -0
  79. package/dist/chunk-Q6LF7N3A.cjs +130 -0
  80. package/dist/chunk-Q6LF7N3A.cjs.map +1 -0
  81. package/dist/{chunk-RGHQFJOL.cjs → chunk-QFUF4A4J.cjs} +28 -2
  82. package/dist/chunk-QFUF4A4J.cjs.map +1 -0
  83. package/dist/chunk-RFXJYIDV.js +50 -0
  84. package/dist/chunk-RFXJYIDV.js.map +1 -0
  85. package/dist/{chunk-QN42OA5J.js → chunk-SFXVNFES.js} +4 -4
  86. package/dist/chunk-SFXVNFES.js.map +1 -0
  87. package/dist/{chunk-YVIOCITQ.cjs → chunk-VUEZARW5.cjs} +3 -3
  88. package/dist/chunk-VUEZARW5.cjs.map +1 -0
  89. package/dist/{chunk-JLOYWXRB.js → chunk-VZGBCBYB.js} +3 -3
  90. package/dist/chunk-VZGBCBYB.js.map +1 -0
  91. package/dist/{chunk-ZVPTFTGV.cjs → chunk-WBDK4PIA.cjs} +11 -8
  92. package/dist/chunk-WBDK4PIA.cjs.map +1 -0
  93. package/dist/{chunk-ZORQ5M3W.cjs → chunk-WQFGG2BV.cjs} +4 -4
  94. package/dist/chunk-WQFGG2BV.cjs.map +1 -0
  95. package/dist/{chunk-C75S6USL.js → chunk-WYVCXY7R.js} +7 -4
  96. package/dist/chunk-WYVCXY7R.js.map +1 -0
  97. package/dist/{chunk-WSJVHSGN.js → chunk-XWEJ5LV2.js} +63 -27
  98. package/dist/chunk-XWEJ5LV2.js.map +1 -0
  99. package/dist/{chunk-S5HZBXZA.cjs → chunk-YJQVLVBJ.cjs} +243 -2
  100. package/dist/chunk-YJQVLVBJ.cjs.map +1 -0
  101. package/dist/{chunk-YMHGF6R5.js → chunk-ZCF2JJFA.js} +3 -3
  102. package/dist/{chunk-YMHGF6R5.js.map → chunk-ZCF2JJFA.js.map} +1 -1
  103. package/dist/{chunk-TZ4QF7EP.js → chunk-ZDA5CZPS.js} +1948 -594
  104. package/dist/chunk-ZDA5CZPS.js.map +1 -0
  105. package/dist/collaboration/index.cjs +45 -41
  106. package/dist/collaboration/index.js +1 -1
  107. package/dist/collaboration/mail/MailMessagePreview.d.ts +11 -0
  108. package/dist/collaboration/mail/index.d.ts +1 -0
  109. package/dist/connect/docx.cjs +4 -4
  110. package/dist/connect/docx.js +1 -1
  111. package/dist/connect/index.cjs +32 -32
  112. package/dist/connect/index.js +3 -3
  113. package/dist/docx/NativeDocxEditor.d.ts +2 -2
  114. package/dist/docx/index.cjs +33 -30
  115. package/dist/docx/index.cjs.map +1 -1
  116. package/dist/docx/index.d.ts +2 -2
  117. package/dist/docx/index.js +3 -4
  118. package/dist/docx/index.js.map +1 -1
  119. package/dist/docx/review/DocxEditorReview.d.ts +16 -0
  120. package/dist/docx/review/index.d.ts +3 -0
  121. package/dist/docx/review/reviewModule.d.ts +6 -0
  122. package/dist/docx/review/useReview.d.ts +29 -0
  123. package/dist/facts/FactsFilterInput.d.ts +2 -46
  124. package/dist/facts/FactsToolbar.d.ts +5 -5
  125. package/dist/facts/index.cjs +27 -124
  126. package/dist/facts/index.cjs.map +1 -1
  127. package/dist/facts/index.js +13 -118
  128. package/dist/facts/index.js.map +1 -1
  129. package/dist/files/FilesPage.d.ts +1 -1
  130. package/dist/files/FilesToolbar.d.ts +1 -1
  131. package/dist/files/FolderPicker.d.ts +2 -1
  132. package/dist/files/ViewerChrome.d.ts +1 -1
  133. package/dist/files/bulk/FolderFilterButton.d.ts +3 -2
  134. package/dist/files/cells/BulkLabelSelect.d.ts +11 -0
  135. package/dist/files/cells/LabelMultiSelect.d.ts +2 -1
  136. package/dist/files/cells/index.d.ts +1 -0
  137. package/dist/files/index.cjs +110 -167
  138. package/dist/files/index.cjs.map +1 -1
  139. package/dist/files/index.js +96 -159
  140. package/dist/files/index.js.map +1 -1
  141. package/dist/home/index.cjs +20 -20
  142. package/dist/home/index.cjs.map +1 -1
  143. package/dist/home/index.js +5 -5
  144. package/dist/home/index.js.map +1 -1
  145. package/dist/index.cjs +646 -623
  146. package/dist/index.cjs.map +1 -1
  147. package/dist/index.d.ts +1 -0
  148. package/dist/index.js +20 -68
  149. package/dist/index.js.map +1 -1
  150. package/dist/settings/SettingsPanel.d.ts +1 -1
  151. package/dist/settings/TriStateFilterMenu.d.ts +3 -1
  152. package/dist/settings/index.cjs +55 -280
  153. package/dist/settings/index.cjs.map +1 -1
  154. package/dist/settings/index.js +17 -248
  155. package/dist/settings/index.js.map +1 -1
  156. package/dist/shell/FilterInput.d.ts +48 -0
  157. package/dist/shell/TabHeader.d.ts +7 -1
  158. package/dist/shell/index.cjs +62 -49
  159. package/dist/shell/index.d.ts +1 -0
  160. package/dist/shell/index.js +4 -3
  161. package/dist/site/index.cjs +62 -62
  162. package/dist/site/index.js +2 -2
  163. package/dist/studio/index.cjs +75 -75
  164. package/dist/studio/index.js +6 -6
  165. package/dist/workspaces/WorkspaceCard.d.ts +2 -2
  166. package/dist/workspaces/index.cjs +9 -2
  167. package/dist/workspaces/index.cjs.map +1 -1
  168. package/dist/workspaces/index.js +9 -2
  169. package/dist/workspaces/index.js.map +1 -1
  170. package/package.json +9 -13
  171. package/src/blocks.css +4 -0
  172. package/src/components/grid.css +10 -0
  173. package/src/docx/styles.css +488 -43
  174. package/dist/chunk-3NZR6PAG.js.map +0 -1
  175. package/dist/chunk-4XJZ6AAY.js.map +0 -1
  176. package/dist/chunk-5B4PXAKI.cjs.map +0 -1
  177. package/dist/chunk-5ZBP7TCD.cjs.map +0 -1
  178. package/dist/chunk-6YVI74BC.js.map +0 -1
  179. package/dist/chunk-C75S6USL.js.map +0 -1
  180. package/dist/chunk-FRRDPYBR.cjs.map +0 -1
  181. package/dist/chunk-GVQOBJKR.cjs.map +0 -1
  182. package/dist/chunk-JGZTRLKL.cjs.map +0 -1
  183. package/dist/chunk-JLOYWXRB.js.map +0 -1
  184. package/dist/chunk-KXMDOTGW.js.map +0 -1
  185. package/dist/chunk-NJL4LIXX.js.map +0 -1
  186. package/dist/chunk-NUPVHEJW.js.map +0 -1
  187. package/dist/chunk-OJSWQM4G.js.map +0 -1
  188. package/dist/chunk-PLGVMLBD.cjs.map +0 -1
  189. package/dist/chunk-QN42OA5J.js.map +0 -1
  190. package/dist/chunk-RGHQFJOL.cjs.map +0 -1
  191. package/dist/chunk-S5HZBXZA.cjs.map +0 -1
  192. package/dist/chunk-TZ4QF7EP.js.map +0 -1
  193. package/dist/chunk-UBNVIIBT.js.map +0 -1
  194. package/dist/chunk-VMCOH3AY.cjs.map +0 -1
  195. package/dist/chunk-WSJVHSGN.js.map +0 -1
  196. package/dist/chunk-YVIOCITQ.cjs.map +0 -1
  197. package/dist/chunk-ZHLMDJCO.cjs.map +0 -1
  198. package/dist/chunk-ZORQ5M3W.cjs.map +0 -1
  199. package/dist/chunk-ZVPTFTGV.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/docx/NativeDocxComparison.tsx"],"names":["useRef","useState","useEffect","error","jsxs","jsx","NativeDocxEditor"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n onCompared?: (documentId: string) => void | Promise<void>\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared })\n host.current = { adapter, onCompared }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const query = new URLSearchParams({ base_ext_id: baseId, revised_ext_id: revisedId })\n void host.current.adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (!cancelled) {\n setDocumentId(result.document_ext_id)\n void Promise.resolve(host.current.onCompared?.(result.document_ext_id)).catch(() => {})\n }\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/docx/NativeDocxComparison.tsx"],"names":["useRef","useState","useEffect","error","jsxs","jsx","NativeDocxEditor"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n onCompared?: (documentId: string) => void | Promise<void>\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared })\n host.current = { adapter, onCompared }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const query = new URLSearchParams({ base_ext_id: baseId, revised_ext_id: revisedId })\n void host.current.adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (!cancelled) {\n setDocumentId(result.document_ext_id)\n void Promise.resolve(host.current.onCompared?.(result.document_ext_id)).catch(() => {})\n }\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
@@ -3,8 +3,8 @@ export { DocxMentions, DocxCommentActivity } from './DocxMentions';
3
3
  export type { DocxMention, DocxAgentCommentRequest, DocxMentionDelivery, DocxAgentRunStatus, } from './DocxMentions';
4
4
  export type { NativeDocxAdapter, NativeDocxEditorProps } from './NativeDocxEditor';
5
5
  export { DocxEditor, useDocxEditor, useEditorState } from '@docx-editor.dev/react';
6
- export { DocxEditorReview, useReview, useReviewItem } from '@docx-editor.dev/pro/react';
7
- export { createHocuspocusCollaboration } from '@docx-editor.dev/pro/collaboration/hocuspocus';
6
+ export { DocxEditorReview, useReview, useReviewItem, reviewModule } from './review';
7
+ export { createHocuspocusCollaboration } from '@arbidocs/coedit/hocuspocus';
8
8
  export { loadDocxFonts } from './fonts';
9
9
  export { normalizeDocxExport } from './export';
10
10
  export { StreamedWordArtifact, type StreamedWordArtifactProps } from './StreamedWordArtifact';
@@ -1,11 +1,10 @@
1
1
  "use client";
2
- import { NativeDocxEditor } from '../chunk-6YVI74BC.js';
3
- export { DocxCommentActivity, DocxMentions, DocxParticipants, DocxRibbon, NativeDocxEditor, StreamedWordArtifact, loadDocxFonts, normalizeDocxExport } from '../chunk-6YVI74BC.js';
2
+ import { NativeDocxEditor } from '../chunk-JH25QIZW.js';
3
+ export { DocxCommentActivity, DocxEditorReview, DocxMentions, DocxParticipants, DocxRibbon, NativeDocxEditor, StreamedWordArtifact, loadDocxFonts, normalizeDocxExport, reviewModule, useReview, useReviewItem } from '../chunk-JH25QIZW.js';
4
4
  import '../chunk-AA3PT6KR.js';
5
5
  import '../chunk-7F6CBP3Z.js';
6
6
  export { DocxEditor, useDocxEditor, useEditorState } from '@docx-editor.dev/react';
7
- export { DocxEditorReview, useReview, useReviewItem } from '@docx-editor.dev/pro/react';
8
- export { createHocuspocusCollaboration } from '@docx-editor.dev/pro/collaboration/hocuspocus';
7
+ export { createHocuspocusCollaboration } from '@arbidocs/coedit/hocuspocus';
9
8
  import { useRef, useState, useEffect } from 'react';
10
9
  import { jsxs, jsx } from 'react/jsx-runtime';
11
10
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/docx/NativeDocxComparison.tsx"],"names":["error"],"mappings":";;;;;;;;;;AAYO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,EAAE,OAAA,EAAS,YAAY,CAAA;AAC3C,EAAA,IAAA,CAAK,OAAA,GAAU,EAAE,OAAA,EAAS,UAAA,EAAW;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,CAAC,CAAA;AACxC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,aAAa,MAAA,EAAQ,cAAA,EAAgB,WAAW,CAAA;AACpF,IAAA,KAAK,IAAA,CAAK,QAAQ,OAAA,CACf,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA,CAC/C,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,MAAM,CAAA,CAClC,IAAA,CAAK,CAAC,MAAA,KAAwC;AAC7C,MAAA,IAAI,CAAC,MAAA,CAAO,eAAA,EAAiB,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACzF,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,aAAA,CAAc,OAAO,eAAe,CAAA;AACpC,QAAA,KAAK,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,UAAA,GAAa,OAAO,eAAe,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACxF;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,CAACA,MAAAA,KAAU;AAChB,MAAA,IAAI,CAAC,WAAW,QAAA,CAASA,MAAAA,YAAiB,QAAQA,MAAAA,CAAM,OAAA,GAAU,MAAA,CAAOA,MAAK,CAAC,CAAA;AAAA,IACjF,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAC,CAAA;AAC/B,EAAA,IAAI,KAAA;AACF,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,MAAK,OAAA,EACtC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACV,GAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,UAAA,CAAW,CAAC,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAA,EAAG,QAAA,EAAA,kBAAA,EAAgB;AAAA,KAAA,EAC3E,CAAA;AAEJ,EAAA,IAAI,CAAC,UAAA;AACH,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA,eAAA;AAAA,KAAA;AAAA,IAHlC;AAAA,GAIP;AAEJ","file":"index.js","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n onCompared?: (documentId: string) => void | Promise<void>\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared })\n host.current = { adapter, onCompared }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const query = new URLSearchParams({ base_ext_id: baseId, revised_ext_id: revisedId })\n void host.current.adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (!cancelled) {\n setDocumentId(result.document_ext_id)\n void Promise.resolve(host.current.onCompared?.(result.document_ext_id)).catch(() => {})\n }\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/docx/NativeDocxComparison.tsx"],"names":["error"],"mappings":";;;;;;;;;AAYO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,EAAE,OAAA,EAAS,YAAY,CAAA;AAC3C,EAAA,IAAA,CAAK,OAAA,GAAU,EAAE,OAAA,EAAS,UAAA,EAAW;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,CAAC,CAAA;AACxC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,aAAa,MAAA,EAAQ,cAAA,EAAgB,WAAW,CAAA;AACpF,IAAA,KAAK,IAAA,CAAK,QAAQ,OAAA,CACf,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA,CAC/C,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,MAAM,CAAA,CAClC,IAAA,CAAK,CAAC,MAAA,KAAwC;AAC7C,MAAA,IAAI,CAAC,MAAA,CAAO,eAAA,EAAiB,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACzF,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,aAAA,CAAc,OAAO,eAAe,CAAA;AACpC,QAAA,KAAK,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,UAAA,GAAa,OAAO,eAAe,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACxF;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,CAACA,MAAAA,KAAU;AAChB,MAAA,IAAI,CAAC,WAAW,QAAA,CAASA,MAAAA,YAAiB,QAAQA,MAAAA,CAAM,OAAA,GAAU,MAAA,CAAOA,MAAK,CAAC,CAAA;AAAA,IACjF,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAC,CAAA;AAC/B,EAAA,IAAI,KAAA;AACF,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,MAAK,OAAA,EACtC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACV,GAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,UAAA,CAAW,CAAC,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAA,EAAG,QAAA,EAAA,kBAAA,EAAgB;AAAA,KAAA,EAC3E,CAAA;AAEJ,EAAA,IAAI,CAAC,UAAA;AACH,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA,eAAA;AAAA,KAAA;AAAA,IAHlC;AAAA,GAIP;AAEJ","file":"index.js","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n onCompared?: (documentId: string) => void | Promise<void>\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared })\n host.current = { adapter, onCompared }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const query = new URLSearchParams({ base_ext_id: baseId, revised_ext_id: revisedId })\n void host.current.adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (!cancelled) {\n setDocumentId(result.document_ext_id)\n void Promise.resolve(host.current.onCompared?.(result.document_ext_id)).catch(() => {})\n }\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { type ReviewEntry } from './useReview';
3
+ /**
4
+ * The review rail: one card per comment thread or tracked change, aligned to its place in the page.
5
+ * Everything it shows and every action it takes goes through the editor's own review API.
6
+ */
7
+ declare function DocxEditorReviewRail({ children, }: {
8
+ children?: (entry: ReviewEntry) => React.ReactNode;
9
+ }): React.JSX.Element | null;
10
+ declare function ReviewCardSlot({ children }: {
11
+ children?: React.ReactNode;
12
+ }): React.JSX.Element;
13
+ export declare const DocxEditorReview: typeof DocxEditorReviewRail & {
14
+ Card: typeof ReviewCardSlot;
15
+ };
16
+ export {};
@@ -0,0 +1,3 @@
1
+ export { reviewModule } from './reviewModule';
2
+ export { DocxEditorReview } from './DocxEditorReview';
3
+ export { useReview, useReviewItem, type ReviewApi, type ReviewEntry } from './useReview';
@@ -0,0 +1,6 @@
1
+ import type { EditorModule } from '@docx-editor.dev/core';
2
+ /**
3
+ * Comments and tracked changes: the review queue derivation and the markup display modes, both
4
+ * provided by the Apache-2.0 core engine.
5
+ */
6
+ export declare function reviewModule(): EditorModule;
@@ -0,0 +1,29 @@
1
+ import type { ReviewItemPlacement } from '@docx-editor.dev/core';
2
+ export type ReviewEntry = ReviewItemPlacement;
3
+ export interface ReviewApi {
4
+ /** False until the editor has mounted. */
5
+ ready: boolean;
6
+ /** Every pending decision, in document order. */
7
+ items: readonly ReviewEntry[];
8
+ activeKey: string | null;
9
+ paneOpen: boolean;
10
+ setPaneOpen(open: boolean): void;
11
+ /** Focus a card's range in the document. Returns false when the engine refuses. */
12
+ setActive(key: string | null, options?: {
13
+ reveal?: false;
14
+ }): boolean;
15
+ reply(entry: ReviewEntry, text: string): boolean;
16
+ accept(entry: ReviewEntry): boolean;
17
+ reject(entry: ReviewEntry): boolean;
18
+ resolve(entry: ReviewEntry, resolved: boolean): boolean;
19
+ remove(entry: ReviewEntry): boolean;
20
+ addComment(text: string): boolean;
21
+ /** Move the document caret to the next or previous tracked change, wrapping at the ends. */
22
+ navigate(direction: 'next' | 'previous'): boolean;
23
+ /** Accept or reject every change shown, as one undo step. */
24
+ resolveAll(action: 'accept' | 'reject'): boolean;
25
+ }
26
+ export declare function useReview(): ReviewApi;
27
+ export declare const ReviewItemContext: import("react").Context<ReviewItemPlacement | null>;
28
+ /** The card being rendered. Null outside a card. */
29
+ export declare function useReviewItem(): ReviewEntry | null;
@@ -1,46 +1,2 @@
1
- /**
2
- * FactsFilterInput
3
- *
4
- * The Facts table's "Filter…" box, styled to match the Documents table's filter
5
- * bar: a muted input with a leading funnel icon and an appended settings button
6
- * whose popover picks WHICH fields the text matches against (the fact text, its
7
- * labels, or both). The page owns the query + field state; this is a view.
8
- */
9
- import type { ReactNode } from 'react';
10
- export type FactsSearchField = 'text' | 'labels';
11
- export declare const FACTS_SEARCH_FIELD_OPTIONS: {
12
- value: FactsSearchField;
13
- label: string;
14
- }[];
15
- export interface FactsFilterInputLabels {
16
- placeholder: string;
17
- clear: string;
18
- chooseFields: string;
19
- fieldsHeading: string;
20
- /** Display name per searchable field. */
21
- fieldNames: Record<FactsSearchField, string>;
22
- }
23
- export declare const DEFAULT_FACTS_FILTER_INPUT_LABELS: FactsFilterInputLabels;
24
- export interface FactsFilterInputTestIds {
25
- root: string;
26
- quick: string;
27
- input: string;
28
- fieldsButton: string;
29
- field: (field: FactsSearchField) => string;
30
- }
31
- export interface FactsFilterInputProps {
32
- value: string;
33
- onChange: (q: string) => void;
34
- fields: FactsSearchField[];
35
- onFieldsChange: (fields: FactsSearchField[]) => void;
36
- /**
37
- * The quick-filter dropdown trigger, embedded inside the input on the left
38
- * (mirroring the Files search box). When absent, a static funnel icon shows.
39
- */
40
- filter?: ReactNode;
41
- /** Width classes for the box (default `w-44`). */
42
- className?: string;
43
- labels?: Partial<FactsFilterInputLabels>;
44
- testIds?: Partial<FactsFilterInputTestIds>;
45
- }
46
- export declare function FactsFilterInput({ value, onChange, fields, onFieldsChange, filter, className, labels, testIds, }: FactsFilterInputProps): import("react").JSX.Element;
1
+ /** Compatibility exports for existing blocks consumers. */
2
+ export { FilterInput as FactsFilterInput, DEFAULT_FILTER_FIELDS as FACTS_SEARCH_FIELD_OPTIONS, DEFAULT_FILTER_INPUT_LABELS as DEFAULT_FACTS_FILTER_INPUT_LABELS, type FilterField as FactsSearchField, type FilterInputProps as FactsFilterInputProps, type FilterInputLabels as FactsFilterInputLabels, type FilterInputTestIds as FactsFilterInputTestIds, } from '../shell/FilterInput';
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import { type FactsFilterInputLabels, type FactsFilterInputTestIds, type FactsSearchField } from './FactsFilterInput';
2
+ import { type FilterInputLabels, type FilterInputTestIds, type FilterField } from '../shell/FilterInput';
3
3
  import { type FactsViewMode, type FactsViewToggleLabels } from './FactsViewToggle';
4
4
  export interface FactsToolbarLabels {
5
5
  tags: string;
@@ -20,8 +20,8 @@ export interface FactsToolbarProps {
20
20
  hasActiveFilters: boolean;
21
21
  filterText: string;
22
22
  onFilterTextChange: (text: string) => void;
23
- searchFields: FactsSearchField[];
24
- onSearchFieldsChange: (fields: FactsSearchField[]) => void;
23
+ searchFields: FilterField[];
24
+ onSearchFieldsChange: (fields: FilterField[]) => void;
25
25
  /** The quick-filter dropdown, embedded inside the filter box. */
26
26
  quickFilter?: ReactNode;
27
27
  /** Open the Labels panel. Omit it to hide the Tags button. */
@@ -40,8 +40,8 @@ export interface FactsToolbarProps {
40
40
  labels?: Partial<FactsToolbarLabels>;
41
41
  testIds?: Partial<FactsToolbarTestIds>;
42
42
  /** Overrides for the embedded filter box. */
43
- filterLabels?: Partial<FactsFilterInputLabels>;
44
- filterTestIds?: Partial<FactsFilterInputTestIds>;
43
+ filterLabels?: Partial<FilterInputLabels>;
44
+ filterTestIds?: Partial<FilterInputTestIds>;
45
45
  /** Overrides for the embedded view toggle. */
46
46
  viewToggleLabels?: Partial<FactsViewToggleLabels>;
47
47
  viewToggleTestIdPrefix?: string;
@@ -4,11 +4,12 @@
4
4
  var chunkZPERNIMP_cjs = require('../chunk-ZPERNIMP.cjs');
5
5
  var chunkVPPX5XUF_cjs = require('../chunk-VPPX5XUF.cjs');
6
6
  var chunkOUW6G4O2_cjs = require('../chunk-OUW6G4O2.cjs');
7
- var chunkJGZTRLKL_cjs = require('../chunk-JGZTRLKL.cjs');
8
- var chunk5B4PXAKI_cjs = require('../chunk-5B4PXAKI.cjs');
7
+ var chunkIA7RTPT3_cjs = require('../chunk-IA7RTPT3.cjs');
8
+ var chunkQ6LF7N3A_cjs = require('../chunk-Q6LF7N3A.cjs');
9
+ var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
10
+ require('../chunk-C54XEN5T.cjs');
9
11
  require('../chunk-FX3K6LNZ.cjs');
10
12
  var chunkPPCATBOY_cjs = require('../chunk-PPCATBOY.cjs');
11
- require('../chunk-C54XEN5T.cjs');
12
13
  var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
13
14
  var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
14
15
  var lucideReact = require('lucide-react');
@@ -512,7 +513,7 @@ function FactsTable({
512
513
  ]
513
514
  );
514
515
  return /* @__PURE__ */ jsxRuntime.jsx(
515
- chunkJGZTRLKL_cjs.GridView,
516
+ chunkIA7RTPT3_cjs.GridView,
516
517
  {
517
518
  testId,
518
519
  items: facts,
@@ -1322,111 +1323,6 @@ function FactsViewToggle({
1322
1323
  }
1323
1324
  );
1324
1325
  }
1325
- var FACTS_SEARCH_FIELD_OPTIONS = [
1326
- { value: "text", label: "Fact" },
1327
- { value: "labels", label: "Labels" }
1328
- ];
1329
- var DEFAULT_FACTS_FILTER_INPUT_LABELS = {
1330
- placeholder: "Filter...",
1331
- clear: "Clear filter",
1332
- chooseFields: "Choose fields to filter",
1333
- fieldsHeading: "Filter fields",
1334
- fieldNames: { text: "Fact", labels: "Labels" }
1335
- };
1336
- function FactsFilterInput({
1337
- value,
1338
- onChange,
1339
- fields,
1340
- onFieldsChange,
1341
- filter,
1342
- className,
1343
- labels,
1344
- testIds
1345
- }) {
1346
- const l = { ...DEFAULT_FACTS_FILTER_INPUT_LABELS, ...labels };
1347
- const toggleField = (field) => onFieldsChange(fields.includes(field) ? fields.filter((f) => f !== field) : [...fields, field]);
1348
- return /* @__PURE__ */ jsxRuntime.jsx(
1349
- "div",
1350
- {
1351
- className: ui.cn("flex min-w-0 items-center", className ?? "w-44 pointer-coarse:w-56"),
1352
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.root, { testId: "facts-filter" }),
1353
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 min-w-0", children: [
1354
- filter ? /* @__PURE__ */ jsxRuntime.jsx(
1355
- "div",
1356
- {
1357
- className: "absolute left-1 top-1/2 z-10 -translate-y-1/2",
1358
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.quick, { testId: "facts-filter-quick" }),
1359
- children: filter
1360
- }
1361
- ) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Filter, { className: "pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" }),
1362
- /* @__PURE__ */ jsxRuntime.jsx(
1363
- ui.Input,
1364
- {
1365
- value,
1366
- onChange: (e) => onChange(e.target.value),
1367
- placeholder: l.placeholder,
1368
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.input, { testId: "facts-filter-input" }),
1369
- className: ui.cn(
1370
- "h-7 bg-muted pr-12 text-sm shadow-none focus-visible:bg-muted focus-visible:ring-0 pointer-coarse:h-11 pointer-coarse:pr-24",
1371
- filter ? "pl-11" : "pl-7"
1372
- )
1373
- }
1374
- ),
1375
- value && /* @__PURE__ */ jsxRuntime.jsx(
1376
- "button",
1377
- {
1378
- type: "button",
1379
- onClick: () => onChange(""),
1380
- "aria-label": l.clear,
1381
- className: "absolute right-7 top-1/2 z-10 -translate-y-1/2 text-muted-foreground hover:text-foreground pointer-coarse:right-11 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center",
1382
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3" })
1383
- }
1384
- ),
1385
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
1386
- /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1387
- "button",
1388
- {
1389
- type: "button",
1390
- "aria-label": l.chooseFields,
1391
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.fieldsButton, {
1392
- testId: "facts-filter-fields-button"
1393
- }),
1394
- className: "absolute right-1.5 top-1/2 z-10 -translate-y-1/2 !h-5 !w-5 !p-0 text-muted-foreground/60 transition-colors hover:text-foreground pointer-coarse:right-0 pointer-coarse:!flex pointer-coarse:!h-11 pointer-coarse:!w-11 pointer-coarse:items-center pointer-coarse:justify-center",
1395
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SlidersHorizontal, { className: "size-3.5" })
1396
- }
1397
- ) }),
1398
- /* @__PURE__ */ jsxRuntime.jsx(ui.PopoverContent, { className: "w-44 p-0", align: "end", sideOffset: 4, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Command, { shouldFilter: false, children: /* @__PURE__ */ jsxRuntime.jsx(ui.CommandList, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.CommandGroup, { heading: l.fieldsHeading, children: FACTS_SEARCH_FIELD_OPTIONS.map((option) => {
1399
- const isSelected = fields.includes(option.value);
1400
- return /* @__PURE__ */ jsxRuntime.jsxs(
1401
- ui.CommandItem,
1402
- {
1403
- onSelect: () => toggleField(option.value),
1404
- className: "cursor-pointer text-sm",
1405
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.field?.(option.value), {
1406
- testId: `facts-filter-field-${option.value}`
1407
- }),
1408
- children: [
1409
- /* @__PURE__ */ jsxRuntime.jsx(
1410
- "div",
1411
- {
1412
- className: ui.cn(
1413
- "mr-2 flex size-3.5 items-center justify-center rounded-sm border border-primary",
1414
- isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
1415
- ),
1416
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3" })
1417
- }
1418
- ),
1419
- l.fieldNames[option.value]
1420
- ]
1421
- },
1422
- option.value
1423
- );
1424
- }) }) }) }) })
1425
- ] })
1426
- ] })
1427
- }
1428
- );
1429
- }
1430
1326
  var DEFAULT_FACTS_FIELDS_BUTTON_LABELS = {
1431
1327
  fields: "Fields",
1432
1328
  defaultView: "Default view",
@@ -1623,7 +1519,7 @@ function FactsEmptyState({ onUseExample, labels, testIds }) {
1623
1519
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: l.intro }),
1624
1520
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-7 grid gap-3 text-left @xl:grid-cols-3", children: l.kinds.map(({ label, desc }, i) => {
1625
1521
  const KindIcon = KIND_ICONS[i % KIND_ICONS.length];
1626
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg bg-muted p-3", children: [
1522
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border bg-card p-3 shadow-xs", children: [
1627
1523
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-sm font-medium text-foreground", children: [
1628
1524
  /* @__PURE__ */ jsxRuntime.jsx(KindIcon, { className: "size-4 text-primary" }),
1629
1525
  label
@@ -1631,13 +1527,13 @@ function FactsEmptyState({ onUseExample, labels, testIds }) {
1631
1527
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs leading-snug text-muted-foreground", children: desc })
1632
1528
  ] }, label);
1633
1529
  }) }),
1634
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-10 text-xs font-medium uppercase tracking-wide text-muted-foreground", children: l.tryAdding }),
1530
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-10 text-sm font-medium text-muted-foreground", children: l.tryAdding }),
1635
1531
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex flex-wrap justify-center gap-2.5", children: l.examples.map((fact) => /* @__PURE__ */ jsxRuntime.jsxs(
1636
1532
  "button",
1637
1533
  {
1638
1534
  type: "button",
1639
1535
  onClick: () => onUseExample(fact),
1640
- className: "group inline-flex items-center gap-1.5 rounded-full bg-muted px-3.5 py-2 text-sm text-foreground transition-colors hover:bg-accent pointer-coarse:min-h-11",
1536
+ className: "group inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-3.5 py-2 text-sm text-foreground transition-colors hover:border-ring/50 hover:bg-accent/40 pointer-coarse:min-h-11",
1641
1537
  "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.example, { testId: "facts-page-example" }),
1642
1538
  children: [
1643
1539
  fact,
@@ -1869,7 +1765,7 @@ function FactsBulkBar({
1869
1765
  const l = { ...DEFAULT_FACTS_BULK_BAR_LABELS, ...labels };
1870
1766
  const none = count === 0;
1871
1767
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-3", "data-slot": "facts-bulk-bar", children: /* @__PURE__ */ jsxRuntime.jsx(
1872
- chunkJGZTRLKL_cjs.SelectionBar,
1768
+ chunkIA7RTPT3_cjs.SelectionBar,
1873
1769
  {
1874
1770
  count,
1875
1771
  onClear,
@@ -1887,7 +1783,7 @@ function FactsBulkBar({
1887
1783
  ) : null,
1888
1784
  children: (isCompact) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1889
1785
  /* @__PURE__ */ jsxRuntime.jsx(
1890
- chunkJGZTRLKL_cjs.SelectionBarAction,
1786
+ chunkIA7RTPT3_cjs.SelectionBarAction,
1891
1787
  {
1892
1788
  icon: allSelectedPinned ? lucideReact.PinOff : lucideReact.Pin,
1893
1789
  label: allSelectedPinned ? l.unpin : l.pin,
@@ -1900,7 +1796,7 @@ function FactsBulkBar({
1900
1796
  }
1901
1797
  ),
1902
1798
  /* @__PURE__ */ jsxRuntime.jsx(
1903
- chunkJGZTRLKL_cjs.SelectionBarAction,
1799
+ chunkIA7RTPT3_cjs.SelectionBarAction,
1904
1800
  {
1905
1801
  icon: lucideReact.Tags,
1906
1802
  label: l.label,
@@ -2017,13 +1913,12 @@ function FactsToolbar({
2017
1913
  countPlacement: "leading",
2018
1914
  hasActiveFilters,
2019
1915
  testId: chunkMHVNT4J3_cjs.testIdOr(testIds?.tab, { testId: "facts-tab" }),
2020
- // Strip the folder-tab chrome: just the glyph and count, as in the Files header.
2021
- tabClassName: "!bg-transparent hover:!bg-transparent !border-transparent !rounded-none !mb-0 !pl-0 before:!hidden after:!hidden shadow-none!"
1916
+ presentation: "count"
2022
1917
  }
2023
1918
  ];
2024
1919
  const filterControls = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: isNarrow ? "flex w-full items-center gap-1.5" : "flex items-center gap-1.5", children: [
2025
1920
  /* @__PURE__ */ jsxRuntime.jsx(
2026
- FactsFilterInput,
1921
+ chunkQ6LF7N3A_cjs.FilterInput,
2027
1922
  {
2028
1923
  value: filterText,
2029
1924
  onChange: onFilterTextChange,
@@ -2052,14 +1947,13 @@ function FactsToolbar({
2052
1947
  ] });
2053
1948
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: headerRef, className: "sticky top-0 z-10 bg-background", "data-slot": "facts-toolbar", children: [
2054
1949
  /* @__PURE__ */ jsxRuntime.jsx(
2055
- chunk5B4PXAKI_cjs.TabHeader,
1950
+ chunk7RGLTF76_cjs.TabHeader,
2056
1951
  {
2057
1952
  tabs,
2058
- className: "pr-3",
2059
1953
  activeTabId: "notes",
2060
1954
  onTabChange: () => {
2061
1955
  },
2062
- afterTabs: isNarrow ? null : filterControls,
1956
+ firstTabContent: isNarrow ? null : filterControls,
2063
1957
  centerContent: isNarrow ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
2064
1958
  FactsViewToggle,
2065
1959
  {
@@ -2350,10 +2244,21 @@ function FactSearchResult({
2350
2244
  ] });
2351
2245
  }
2352
2246
 
2247
+ Object.defineProperty(exports, "DEFAULT_FACTS_FILTER_INPUT_LABELS", {
2248
+ enumerable: true,
2249
+ get: function () { return chunkQ6LF7N3A_cjs.DEFAULT_FILTER_INPUT_LABELS; }
2250
+ });
2251
+ Object.defineProperty(exports, "FACTS_SEARCH_FIELD_OPTIONS", {
2252
+ enumerable: true,
2253
+ get: function () { return chunkQ6LF7N3A_cjs.DEFAULT_FILTER_FIELDS; }
2254
+ });
2255
+ Object.defineProperty(exports, "FactsFilterInput", {
2256
+ enumerable: true,
2257
+ get: function () { return chunkQ6LF7N3A_cjs.FilterInput; }
2258
+ });
2353
2259
  exports.DEFAULT_FACTS_BULK_BAR_LABELS = DEFAULT_FACTS_BULK_BAR_LABELS;
2354
2260
  exports.DEFAULT_FACTS_EMPTY_STATE_LABELS = DEFAULT_FACTS_EMPTY_STATE_LABELS;
2355
2261
  exports.DEFAULT_FACTS_FIELDS_BUTTON_LABELS = DEFAULT_FACTS_FIELDS_BUTTON_LABELS;
2356
- exports.DEFAULT_FACTS_FILTER_INPUT_LABELS = DEFAULT_FACTS_FILTER_INPUT_LABELS;
2357
2262
  exports.DEFAULT_FACTS_TOOLBAR_LABELS = DEFAULT_FACTS_TOOLBAR_LABELS;
2358
2263
  exports.DEFAULT_FACTS_VIEW_TOGGLE_LABELS = DEFAULT_FACTS_VIEW_TOGGLE_LABELS;
2359
2264
  exports.DEFAULT_FACT_COLUMN_LABELS = DEFAULT_FACT_COLUMN_LABELS;
@@ -2369,7 +2274,6 @@ exports.DEFAULT_FACT_SOURCES_ROW_LABELS = DEFAULT_FACT_SOURCES_ROW_LABELS;
2369
2274
  exports.DEFAULT_FACT_SOURCE_GROUP_LABELS = DEFAULT_FACT_SOURCE_GROUP_LABELS;
2370
2275
  exports.DEFAULT_FACT_TIMELINE_LABELS = DEFAULT_FACT_TIMELINE_LABELS;
2371
2276
  exports.EMPTY_FACT_DATE_FIELDS = EMPTY_FACT_DATE_FIELDS;
2372
- exports.FACTS_SEARCH_FIELD_OPTIONS = FACTS_SEARCH_FIELD_OPTIONS;
2373
2277
  exports.FactComposer = FactComposer;
2374
2278
  exports.FactDateInput = FactDateInput;
2375
2279
  exports.FactFieldRow = FactFieldRow;
@@ -2388,7 +2292,6 @@ exports.FactsBulkBar = FactsBulkBar;
2388
2292
  exports.FactsCalendar = FactsCalendar;
2389
2293
  exports.FactsEmptyState = FactsEmptyState;
2390
2294
  exports.FactsFieldsButton = FactsFieldsButton;
2391
- exports.FactsFilterInput = FactsFilterInput;
2392
2295
  exports.FactsGanttPane = FactsGanttPane;
2393
2296
  exports.FactsLoadError = FactsLoadError;
2394
2297
  exports.FactsLoading = FactsLoading;