@arbidocs/blocks 0.5.121 → 0.5.123

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 (208) hide show
  1. package/dist/{ClippingMediaViewer-B6WG7Q64.cjs → ClippingMediaViewer-IEIBT74X.cjs} +8 -8
  2. package/dist/{ClippingMediaViewer-B6WG7Q64.cjs.map → ClippingMediaViewer-IEIBT74X.cjs.map} +1 -1
  3. package/dist/{ClippingPdfViewer-6GCVTV3V.cjs → ClippingPdfViewer-OGYLMVCE.cjs} +5 -5
  4. package/dist/{ClippingPdfViewer-6GCVTV3V.cjs.map → ClippingPdfViewer-OGYLMVCE.cjs.map} +1 -1
  5. package/dist/{ConnectedCallDock-DC5V5OUJ.cjs → ConnectedCallDock-XJOYVVAH.cjs} +21 -21
  6. package/dist/{ConnectedCallDock-DC5V5OUJ.cjs.map → ConnectedCallDock-XJOYVVAH.cjs.map} +1 -1
  7. package/dist/{ConnectedCallRoom-FQLXWTFB.cjs → ConnectedCallRoom-CUDYAPQK.cjs} +14 -14
  8. package/dist/{ConnectedCallRoom-FQLXWTFB.cjs.map → ConnectedCallRoom-CUDYAPQK.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-4Q5S7VLD.cjs → ConnectedNativeDocxComparison-QKHCYD6W.cjs} +15 -15
  10. package/dist/{ConnectedNativeDocxComparison-4Q5S7VLD.cjs.map → ConnectedNativeDocxComparison-QKHCYD6W.cjs.map} +1 -1
  11. package/dist/ConnectedPresentation-5DOJ35XL.cjs +321 -0
  12. package/dist/ConnectedPresentation-5DOJ35XL.cjs.map +1 -0
  13. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
  14. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
  15. package/dist/{ConnectedSlidesTab-7QDE2CZD.cjs → ConnectedSlidesTab-7YMEDGUU.cjs} +73 -49
  16. package/dist/ConnectedSlidesTab-7YMEDGUU.cjs.map +1 -0
  17. package/dist/{ConnectedStreamedWordArtifact-FFOQJBOI.cjs → ConnectedStreamedWordArtifact-AG62232A.cjs} +15 -15
  18. package/dist/{ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map → ConnectedStreamedWordArtifact-AG62232A.cjs.map} +1 -1
  19. package/dist/{DocumentReviewCard-SNWVEZ7S.cjs → DocumentReviewCard-M53XFLI2.cjs} +15 -15
  20. package/dist/{DocumentReviewCard-SNWVEZ7S.cjs.map → DocumentReviewCard-M53XFLI2.cjs.map} +1 -1
  21. package/dist/{FilesViewerDialog-IZI63FOV.cjs → FilesViewerDialog-2QCCRWF2.cjs} +50 -49
  22. package/dist/FilesViewerDialog-2QCCRWF2.cjs.map +1 -0
  23. package/dist/{WorkspaceTableView-TEIRB6VJ.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
  24. package/dist/{WorkspaceTableView-TEIRB6VJ.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
  25. package/dist/agents/index.cjs +296 -296
  26. package/dist/{ai-KBYNRNZ6.cjs → ai-IEIR7SC2.cjs} +25 -25
  27. package/dist/ai-IEIR7SC2.cjs.map +1 -0
  28. package/dist/calls/index.cjs +121 -121
  29. package/dist/chat/index.cjs +1 -1
  30. package/dist/{chunk-NLOETJCB.cjs → chunk-2F57IO7S.cjs} +12 -12
  31. package/dist/{chunk-NLOETJCB.cjs.map → chunk-2F57IO7S.cjs.map} +1 -1
  32. package/dist/chunk-2RLA6QO2.cjs +174 -0
  33. package/dist/chunk-2RLA6QO2.cjs.map +1 -0
  34. package/dist/{chunk-Q6DQGGP4.cjs → chunk-325GVZE6.cjs} +3 -3
  35. package/dist/{chunk-Q6DQGGP4.cjs.map → chunk-325GVZE6.cjs.map} +1 -1
  36. package/dist/{chunk-LHWOKOMP.cjs → chunk-46P7IDBX.cjs} +3 -3
  37. package/dist/chunk-46P7IDBX.cjs.map +1 -0
  38. package/dist/{chunk-XTR26TNE.cjs → chunk-4TTX6ZNS.cjs} +20 -4
  39. package/dist/chunk-4TTX6ZNS.cjs.map +1 -0
  40. package/dist/{chunk-BVAT4EVC.cjs → chunk-5QERK4PK.cjs} +35 -35
  41. package/dist/{chunk-BVAT4EVC.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
  42. package/dist/{chunk-GX2EBMJW.cjs → chunk-6OK7ESTL.cjs} +7 -6
  43. package/dist/chunk-6OK7ESTL.cjs.map +1 -0
  44. package/dist/{chunk-C2OICDMI.cjs → chunk-7557LDAN.cjs} +10 -10
  45. package/dist/{chunk-C2OICDMI.cjs.map → chunk-7557LDAN.cjs.map} +1 -1
  46. package/dist/{chunk-474GPLCM.cjs → chunk-7L4X6QN2.cjs} +6 -6
  47. package/dist/{chunk-474GPLCM.cjs.map → chunk-7L4X6QN2.cjs.map} +1 -1
  48. package/dist/{chunk-52KGMAO5.cjs → chunk-7NLO7ASW.cjs} +15 -15
  49. package/dist/{chunk-52KGMAO5.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
  50. package/dist/{chunk-H5OLHP2U.cjs → chunk-7OPOPYV6.cjs} +3 -3
  51. package/dist/{chunk-H5OLHP2U.cjs.map → chunk-7OPOPYV6.cjs.map} +1 -1
  52. package/dist/{chunk-W6B3RYTX.cjs → chunk-7PN3YENO.cjs} +4 -4
  53. package/dist/{chunk-W6B3RYTX.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
  54. package/dist/{chunk-734NPQNR.cjs → chunk-ADDQKZ5I.cjs} +4 -4
  55. package/dist/{chunk-734NPQNR.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
  56. package/dist/{chunk-JQLWKNJO.cjs → chunk-ALK3PUUB.cjs} +4 -4
  57. package/dist/{chunk-JQLWKNJO.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
  58. package/dist/{chunk-4VZZWYEC.cjs → chunk-BQ5RIWWT.cjs} +3 -3
  59. package/dist/{chunk-4VZZWYEC.cjs.map → chunk-BQ5RIWWT.cjs.map} +1 -1
  60. package/dist/{chunk-Q3XJUXID.cjs → chunk-DWMWEALB.cjs} +499 -409
  61. package/dist/chunk-DWMWEALB.cjs.map +1 -0
  62. package/dist/{chunk-3SCNXNHI.cjs → chunk-E3L5DB5F.cjs} +5 -5
  63. package/dist/{chunk-3SCNXNHI.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
  64. package/dist/{chunk-VJ5ZLRBD.cjs → chunk-GFUOCGY6.cjs} +8 -3
  65. package/dist/chunk-GFUOCGY6.cjs.map +1 -0
  66. package/dist/{chunk-7VUJGHMY.cjs → chunk-JD2HX2BR.cjs} +272 -156
  67. package/dist/chunk-JD2HX2BR.cjs.map +1 -0
  68. package/dist/{chunk-RYVZDFVO.cjs → chunk-JJZOL5MG.cjs} +3 -3
  69. package/dist/{chunk-RYVZDFVO.cjs.map → chunk-JJZOL5MG.cjs.map} +1 -1
  70. package/dist/{chunk-QFXILJMJ.cjs → chunk-K4763GD5.cjs} +17 -174
  71. package/dist/chunk-K4763GD5.cjs.map +1 -0
  72. package/dist/{chunk-EHP6OH5D.cjs → chunk-KA3F6TIH.cjs} +11 -11
  73. package/dist/{chunk-EHP6OH5D.cjs.map → chunk-KA3F6TIH.cjs.map} +1 -1
  74. package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
  75. package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
  76. package/dist/{chunk-AY6EZSZB.cjs → chunk-L4CIFLCU.cjs} +4 -4
  77. package/dist/{chunk-AY6EZSZB.cjs.map → chunk-L4CIFLCU.cjs.map} +1 -1
  78. package/dist/{chunk-4RBQ44RY.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
  79. package/dist/{chunk-4RBQ44RY.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
  80. package/dist/{chunk-DR2AH7JL.cjs → chunk-NG2EE7HR.cjs} +48 -48
  81. package/dist/{chunk-DR2AH7JL.cjs.map → chunk-NG2EE7HR.cjs.map} +1 -1
  82. package/dist/{chunk-ENGL7P3I.cjs → chunk-NQML7IUC.cjs} +26 -26
  83. package/dist/{chunk-ENGL7P3I.cjs.map → chunk-NQML7IUC.cjs.map} +1 -1
  84. package/dist/{chunk-4NPCDS2X.cjs → chunk-NY3YUCOW.cjs} +3 -3
  85. package/dist/{chunk-4NPCDS2X.cjs.map → chunk-NY3YUCOW.cjs.map} +1 -1
  86. package/dist/{chunk-JZEYHDWJ.cjs → chunk-OHHKBURG.cjs} +76 -76
  87. package/dist/chunk-OHHKBURG.cjs.map +1 -0
  88. package/dist/{chunk-5534FYXP.cjs → chunk-SDRYSLOX.cjs} +4 -4
  89. package/dist/{chunk-5534FYXP.cjs.map → chunk-SDRYSLOX.cjs.map} +1 -1
  90. package/dist/{chunk-2W5E62EY.cjs → chunk-SGYSDABK.cjs} +6 -6
  91. package/dist/{chunk-2W5E62EY.cjs.map → chunk-SGYSDABK.cjs.map} +1 -1
  92. package/dist/{chunk-KP5AITQ4.cjs → chunk-SNPK3R3O.cjs} +7 -7
  93. package/dist/{chunk-KP5AITQ4.cjs.map → chunk-SNPK3R3O.cjs.map} +1 -1
  94. package/dist/{chunk-EATIFPKP.cjs → chunk-T73BHNQX.cjs} +4 -4
  95. package/dist/{chunk-EATIFPKP.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
  96. package/dist/{chunk-4IOYQLKG.cjs → chunk-TP5PGWIO.cjs} +3 -3
  97. package/dist/{chunk-4IOYQLKG.cjs.map → chunk-TP5PGWIO.cjs.map} +1 -1
  98. package/dist/{chunk-GKVE5JGB.cjs → chunk-UFT22LAB.cjs} +3 -3
  99. package/dist/{chunk-GKVE5JGB.cjs.map → chunk-UFT22LAB.cjs.map} +1 -1
  100. package/dist/{chunk-FKFQCK3C.cjs → chunk-V6MW7B4B.cjs} +4 -4
  101. package/dist/{chunk-FKFQCK3C.cjs.map → chunk-V6MW7B4B.cjs.map} +1 -1
  102. package/dist/{chunk-2PZT3J34.cjs → chunk-VWBYE3XY.cjs} +6 -6
  103. package/dist/{chunk-2PZT3J34.cjs.map → chunk-VWBYE3XY.cjs.map} +1 -1
  104. package/dist/{chunk-GQXPNIRE.cjs → chunk-WAV762GP.cjs} +6 -6
  105. package/dist/{chunk-GQXPNIRE.cjs.map → chunk-WAV762GP.cjs.map} +1 -1
  106. package/dist/{chunk-5LTIZ44D.cjs → chunk-WFMWKPGY.cjs} +14 -7
  107. package/dist/chunk-WFMWKPGY.cjs.map +1 -0
  108. package/dist/{chunk-GPX5VC57.cjs → chunk-WV7BCGCK.cjs} +50 -50
  109. package/dist/{chunk-GPX5VC57.cjs.map → chunk-WV7BCGCK.cjs.map} +1 -1
  110. package/dist/{chunk-MZ2KZXNU.cjs → chunk-WXUU3COI.cjs} +3 -3
  111. package/dist/{chunk-MZ2KZXNU.cjs.map → chunk-WXUU3COI.cjs.map} +1 -1
  112. package/dist/{chunk-NAJN32MF.cjs → chunk-XF355M7O.cjs} +13 -13
  113. package/dist/{chunk-NAJN32MF.cjs.map → chunk-XF355M7O.cjs.map} +1 -1
  114. package/dist/connect/docx.cjs +18 -18
  115. package/dist/connect/index.cjs +995 -994
  116. package/dist/connect/index.cjs.map +1 -1
  117. package/dist/connect/viewer.cjs +38 -37
  118. package/dist/connection/conversation/ConnectedMessage.js +1 -1
  119. package/dist/connection/conversation/ConnectedMessage.js.map +2 -2
  120. package/dist/connection/presentation/ConnectedSlidesTab.js +39 -15
  121. package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
  122. package/dist/connection/presentation/PresentationPill.js +3 -8
  123. package/dist/connection/presentation/PresentationPill.js.map +2 -2
  124. package/dist/connection/presentation/requests.d.ts +5 -0
  125. package/dist/connection/presentation/requests.js +8 -1
  126. package/dist/connection/presentation/requests.js.map +2 -2
  127. package/dist/connection/viewer/ConnectedDocumentViewer.js +51 -60
  128. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  129. package/dist/connection/viewer/ViewerMoreMenu.d.ts +18 -0
  130. package/dist/connection/viewer/ViewerMoreMenu.js +45 -0
  131. package/dist/connection/viewer/ViewerMoreMenu.js.map +7 -0
  132. package/dist/connection/viewer/ViewerPdfPane.js +4 -1
  133. package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
  134. package/dist/connection/viewer/documentPlace.d.ts +5 -4
  135. package/dist/connection/viewer/documentPlace.js +2 -2
  136. package/dist/connection/viewer/documentPlace.js.map +2 -2
  137. package/dist/connection/viewer/pdf/PdfClipOutlines.d.ts +11 -0
  138. package/dist/connection/viewer/pdf/PdfClipOutlines.js +42 -0
  139. package/dist/connection/viewer/pdf/PdfClipOutlines.js.map +7 -0
  140. package/dist/connection/viewer/pdf/PdfPassageHighlights.js +3 -2
  141. package/dist/connection/viewer/pdf/PdfPassageHighlights.js.map +2 -2
  142. package/dist/connection/viewer/pdf/clipOutlines.d.ts +17 -0
  143. package/dist/connection/viewer/pdf/clipOutlines.js +24 -0
  144. package/dist/connection/viewer/pdf/clipOutlines.js.map +7 -0
  145. package/dist/connection/viewer/pdf/passageHighlights.d.ts +2 -0
  146. package/dist/connection/viewer/pdf/passageHighlights.js +12 -1
  147. package/dist/connection/viewer/pdf/passageHighlights.js.map +2 -2
  148. package/dist/connection/viewer/pdf/usePdfClipOutlines.d.ts +7 -0
  149. package/dist/connection/viewer/pdf/usePdfClipOutlines.js +36 -0
  150. package/dist/connection/viewer/pdf/usePdfClipOutlines.js.map +7 -0
  151. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +11 -2
  152. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +2 -2
  153. package/dist/dashboards/index.cjs +1 -1
  154. package/dist/document-tools/DocumentToolButtons.js +2 -2
  155. package/dist/document-tools/DocumentToolButtons.js.map +2 -2
  156. package/dist/document-tools/index.cjs +13 -13
  157. package/dist/embed/index.cjs +38 -38
  158. package/dist/files/index.cjs +224 -224
  159. package/dist/index.cjs +1596 -1595
  160. package/dist/index.cjs.map +1 -1
  161. package/dist/presentation/BoxActionBar.d.ts +2 -2
  162. package/dist/presentation/BoxActionBar.js +62 -30
  163. package/dist/presentation/BoxActionBar.js.map +2 -2
  164. package/dist/presentation/ClipActionBar.js +60 -7
  165. package/dist/presentation/ClipActionBar.js.map +2 -2
  166. package/dist/presentation/ClipViewControls.d.ts +3 -3
  167. package/dist/presentation/ClipViewControls.js +59 -64
  168. package/dist/presentation/ClipViewControls.js.map +2 -2
  169. package/dist/presentation/PresentControls.d.ts +11 -0
  170. package/dist/presentation/PresentControls.js +117 -0
  171. package/dist/presentation/PresentControls.js.map +7 -0
  172. package/dist/presentation/PresenterView.js +36 -5
  173. package/dist/presentation/PresenterView.js.map +2 -2
  174. package/dist/presentation/SlidesEditor.js +73 -43
  175. package/dist/presentation/SlidesEditor.js.map +2 -2
  176. package/dist/presentation/StageItem.js +0 -5
  177. package/dist/presentation/StageItem.js.map +2 -2
  178. package/dist/presentation/panel-id.d.ts +12 -2
  179. package/dist/presentation/panel-id.js +6 -1
  180. package/dist/presentation/panel-id.js.map +2 -2
  181. package/dist/presentation/slide-layout.d.ts +5 -1
  182. package/dist/presentation/slide-layout.js +16 -0
  183. package/dist/presentation/slide-layout.js.map +2 -2
  184. package/dist/settings/index.cjs +146 -146
  185. package/dist/shell/PanelPortal.js +13 -4
  186. package/dist/shell/PanelPortal.js.map +2 -2
  187. package/dist/shell/index.cjs +92 -91
  188. package/dist/shell/panel-windows.js +1 -0
  189. package/dist/shell/panel-windows.js.map +2 -2
  190. package/dist/studio/index.cjs +28 -28
  191. package/dist/styles.css +1 -1
  192. package/dist/workflow-canvas/index.cjs +52 -52
  193. package/node_modules/@arbidocs/coedit/package.json +1 -1
  194. package/package.json +5 -5
  195. package/dist/ConnectedPresentation-4HLDZDWV.cjs +0 -183
  196. package/dist/ConnectedPresentation-4HLDZDWV.cjs.map +0 -1
  197. package/dist/ConnectedSlidesTab-7QDE2CZD.cjs.map +0 -1
  198. package/dist/FilesViewerDialog-IZI63FOV.cjs.map +0 -1
  199. package/dist/ai-KBYNRNZ6.cjs.map +0 -1
  200. package/dist/chunk-5LTIZ44D.cjs.map +0 -1
  201. package/dist/chunk-7VUJGHMY.cjs.map +0 -1
  202. package/dist/chunk-GX2EBMJW.cjs.map +0 -1
  203. package/dist/chunk-JZEYHDWJ.cjs.map +0 -1
  204. package/dist/chunk-LHWOKOMP.cjs.map +0 -1
  205. package/dist/chunk-Q3XJUXID.cjs.map +0 -1
  206. package/dist/chunk-QFXILJMJ.cjs.map +0 -1
  207. package/dist/chunk-VJ5ZLRBD.cjs.map +0 -1
  208. package/dist/chunk-XTR26TNE.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connection/presentation/ConnectedSlidesTab.tsx"],"names":["hasUnsavedChanges","usePresentation","useArbiSessionStore","usePanelHostSupport","useBlocksEnvironment","usePresentationFiles","useState","useArbiSessionState","isPanelOpen","PRESENTATION_PANEL","presentationWindowOnlyPresents","usePresentationController","useRef","useEffect","editPresentation","registerDocumentTurnFlush","useCallback","openPresentation","jsx","EmptyState","ExternalLink","jsxs","Button","PanelLeftClose","Presentation","Loader2","Fragment","SlidesEditor","DropdownMenuItem"],"mappings":"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","file":"ConnectedSlidesTab-7YMEDGUU.cjs","sourcesContent":["/**\n * A presentation's slides tab in the document viewer: the slides editor, on the presentation the\n * viewer shows. Opening a saved presentation loads it (unless it is the one being edited); a new\n * one (a presentation draft) takes the clips gathered so far. Clips gathered with no presentation\n * open join the one opened next. Saving a draft makes it a document, and the tab moves to it.\n *\n * The editor can also move to the presentation's own window (Pop out), beside the documents its\n * clips come from; the tab then says so. Present opens that window with the slides alone.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { ExternalLink, Loader2, PanelLeftClose, Presentation } from 'lucide-react'\nimport {\n isPanelOpen,\n registerDocumentTurnFlush,\n useArbiSessionState,\n useArbiSessionStore,\n} from '@arbidocs/react'\nimport { Button, DropdownMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { usePanelHostSupport } from '../../shell/panel-host'\nimport {\n PRESENTATION_PANEL,\n openPresentation,\n presentationWindowOnlyPresents,\n} from '../../presentation/panel-id'\nimport { SlidesEditor } from '../../presentation/SlidesEditor'\nimport { hasUnsavedChanges, usePresentation } from '../../presentation/store'\nimport { EmptyState } from '../../components/EmptyState'\nimport { editPresentation } from './requests'\nimport { usePresentationController } from './usePresentationController'\nimport { usePresentationFiles } from './usePresentationFiles'\n\nexport interface ConnectedSlidesTabProps {\n /** The viewed document's id, or a presentation draft's (`draft-…`). */\n documentId: string\n /** The version on screen, when an older one. */\n version?: number\n /** The document's current version: a newer one than the one being edited is opened. */\n currentVersion?: number\n /** A new presentation, not saved yet: its draft title. */\n draftTitle?: string\n}\n\n/** \"2, 3 and 5\". */\nconst listOf = (numbers: number[]) =>\n numbers.length < 2\n ? String(numbers[0] ?? '')\n : `${numbers.slice(0, -1).join(', ')} and ${numbers[numbers.length - 1]}`\n\n/** A new presentation saves itself this long after its first content (typing settles first). */\nconst AUTO_SAVE_AFTER_MS = 2500\n/** The names a new presentation starts with (not chosen by anyone). */\nconst DEFAULT_NAMES = /^(new|untitled) presentation( \\d+)?$/i\n\nconst STALE = 'This presentation was changed outside the editor: Save to draw its slides again.'\n\n/** The presentation has anything in it worth asking about before it is replaced. */\nconst hasContent = () => hasUnsavedChanges(usePresentation.getState())\n\nexport function ConnectedSlidesTab({\n documentId,\n version,\n currentVersion,\n draftTitle,\n}: ConnectedSlidesTabProps) {\n const session = useArbiSessionStore()\n const { windows, popoutTitle } = usePanelHostSupport()\n const { confirm } = useBlocksEnvironment()\n const { open, save } = usePresentationFiles()\n const notify = usePresentation((s) => s.notify)\n const boundTo = usePresentation((s) => s.boundTo)\n const savedId = usePresentation((s) => s.savedId)\n const [loading, setLoading] = useState(false)\n const isDraft = draftTitle !== undefined\n const target = version ? `${documentId}@v${version}` : documentId\n const poppedOut = useArbiSessionState(\n (state) => isPanelOpen(state, PRESENTATION_PANEL) && !presentationWindowOnlyPresents()\n )\n const controller = usePresentationController(!poppedOut)\n const asked = useRef<string | null>(null)\n // Another presentation, with changes, is being edited and the user kept it.\n const [declined, setDeclined] = useState(false)\n const [force, setForce] = useState(0)\n\n // Show the presentation this tab is for (once per presentation: a remount does not ask again).\n useEffect(() => {\n const state = usePresentation.getState()\n if (state.boundTo === target || asked.current === `${target}#${force}`) return\n asked.current = `${target}#${force}`\n setDeclined(false)\n void (async () => {\n // Clips gathered with no presentation open join this one.\n const gathered = state.boundTo === null ? state.clips : []\n if (state.boundTo !== null && hasContent() && !force) {\n const ok = await confirm({\n title: 'Open presentation',\n message: 'Replace the presentation being edited? Save it first to keep its changes.',\n kind: 'confirm',\n })\n if (!ok) return setDeclined(true)\n }\n if (isDraft) {\n if (state.boundTo !== null) state.reset()\n usePresentation.getState().bind(target)\n usePresentation.getState().setTitle(draftTitle || 'Untitled presentation')\n return\n }\n setLoading(true)\n try {\n const { missing, stale, imported, changedOutside } = await open(documentId, version)\n usePresentation.getState().bind(target)\n if (gathered.length) usePresentation.getState().adoptClips(gathered)\n if (stale) notify(STALE, 'error')\n if (imported) {\n notify(\n ['Opened from PowerPoint, ready to edit.', ...imported.notes].join(' · '),\n 'success'\n )\n }\n if (changedOutside) {\n notify(\n `${changedOutside.length === 1 ? `Slide ${changedOutside[0]} was` : `Slides ${listOf(changedOutside)} were`} changed in PowerPoint: brought in as changed there.`,\n 'success'\n )\n }\n if (missing) {\n notify(\n `${missing} clip${missing === 1 ? '' : 's'} could not be opened (moved, deleted or not shared with you)`,\n 'error'\n )\n }\n } catch (error) {\n notify(\n error instanceof Error ? error.message : 'The presentation could not be opened',\n 'error'\n )\n } finally {\n setLoading(false)\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps -- a draft's title changes as it is typed\n }, [target, documentId, version, isDraft, force, open, confirm, notify])\n\n // A draft's title is the presentation's.\n useEffect(() => {\n if (isDraft && boundTo === target && draftTitle) usePresentation.getState().setTitle(draftTitle)\n }, [isDraft, boundTo, target, draftTitle])\n\n // Saved as another document (a draft's first save, Save as, an older file saved as a\n // PowerPoint): the viewer follows it. Only once this tab's presentation was the one edited\n // (another, still bound as the tab opens, is not \"its\" save).\n const wasBound = useRef(false)\n useEffect(() => {\n if (boundTo === target) wasBound.current = true\n if (!wasBound.current || !savedId || boundTo !== savedId || savedId === target) return\n if (isDraft) session.clearDraftDocument(documentId)\n editPresentation(session, { kind: 'open', documentId: savedId })\n }, [isDraft, savedId, boundTo, target, documentId, session])\n\n // A newer version saved meanwhile (by ARBI, asked in the chat beside the deck, or by someone\n // else): shown at once, unless this one has changes of its own, which are never thrown away.\n const heldVersion = usePresentation((s) => (s.boundTo === target ? s.version : null))\n const toldNewer = useRef<number | null>(null)\n useEffect(() => {\n if (isDraft || version || !currentVersion || heldVersion === null) return\n if (currentVersion <= heldVersion || loading) return\n if (hasContent()) {\n if (toldNewer.current === currentVersion) return\n toldNewer.current = currentVersion\n notify(\n `A newer version (${currentVersion}) was saved while you edited. Save as… keeps yours; reopen the presentation to see it.`,\n 'error'\n )\n return\n }\n setLoading(true)\n void open(documentId)\n .then(() => {\n usePresentation.getState().bind(target)\n notify(`Updated to version ${currentVersion}.`, 'success')\n })\n .catch((error: unknown) =>\n notify(\n error instanceof Error ? error.message : 'The new version could not be opened',\n 'error'\n )\n )\n .finally(() => setLoading(false))\n }, [currentVersion, heldVersion, isDraft, version, loading, open, documentId, target, notify])\n\n // A new presentation saves itself once it has something in it (a clip, a title, a point): from\n // then on it is a document of Presentations, which a chat can work in and look at (its PDF), and\n // which is not lost with the tab. Later saves stay the person's (each a version they chose).\n const draftHasContent = usePresentation(\n (state) =>\n isDraft && state.boundTo === target && state.savedId === null && hasUnsavedChanges(state)\n )\n const autoSaved = useRef<string | null>(null)\n useEffect(() => {\n if (!draftHasContent || autoSaved.current === target) return\n const timer = setTimeout(() => {\n autoSaved.current = target\n const state = usePresentation.getState()\n // Still called what every new one is called: named after its first slide's title instead.\n const firstTitle = state.slides.find((slide) => slide.caption.trim())?.caption.trim()\n const named = state.title && !DEFAULT_NAMES.test(state.title) ? state.title : null\n const title = named ?? firstTitle ?? (state.title || 'Untitled presentation')\n if (title !== state.title) state.setTitle(title)\n void save(title).catch((error: unknown) => {\n autoSaved.current = null\n notify(\n error instanceof Error ? error.message : 'The presentation could not be saved',\n 'error'\n )\n })\n }, AUTO_SAVE_AFTER_MS)\n return () => clearTimeout(timer)\n }, [draftHasContent, target, save, draftTitle, notify])\n\n // A chat turn about this presentation (the chat beside it) saves its unsaved changes first, so\n // ARBI works on the slides as they are on screen.\n useEffect(() => {\n if (isDraft || version || savedId !== documentId || boundTo !== target) return\n return registerDocumentTurnFlush(documentId, async () => {\n const state = usePresentation.getState()\n if (state.savedId === documentId && hasUnsavedChanges(state)) await save(state.title)\n })\n }, [isDraft, version, savedId, boundTo, documentId, target, save])\n\n const present = useCallback(() => {\n openPresentation(session, { present: true, windows, title: popoutTitle('Presentation') })\n usePresentation.getState().setPresenting(true)\n }, [session, windows, popoutTitle])\n\n if (poppedOut) {\n return (\n <div className=\"flex h-full items-center justify-center p-6\" data-testid=\"slides-popped-out\">\n <EmptyState\n icon={ExternalLink}\n title=\"Editing in its own window\"\n description=\"The presentation is open in its own window, beside the documents you clip from.\"\n action={\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => session.closePanel(PRESENTATION_PANEL)}\n >\n <PanelLeftClose className=\"size-4\" />\n Bring it back here\n </Button>\n }\n />\n </div>\n )\n }\n if (declined && boundTo !== target) {\n return (\n <div className=\"flex h-full items-center justify-center p-6\" data-testid=\"slides-declined\">\n <EmptyState\n icon={Presentation}\n title=\"Another presentation is being edited\"\n description=\"It has changes. Save it first, or open this one in its place.\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={() => setForce((n) => n + 1)}>\n Open this one instead\n </Button>\n }\n />\n </div>\n )\n }\n if (loading || boundTo !== target) {\n return (\n <div className=\"flex h-full items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" />\n Opening the presentation…\n </div>\n )\n }\n return (\n <>\n {controller.dialogs}\n <SlidesEditor\n {...controller.editor}\n menuItems={\n <>\n {controller.editor.menuItems}\n <DropdownMenuItem\n onSelect={() =>\n openPresentation(session, { windows, title: popoutTitle('Presentation') })\n }\n data-testid=\"presentation-pop-out\"\n >\n <ExternalLink className=\"size-4\" />\n <span className=\"ml-2\">Edit in its own window</span>\n </DropdownMenuItem>\n </>\n }\n onPresent={present}\n />\n </>\n )\n}\n"]}
@@ -1,54 +1,54 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5534FYXP_cjs = require('./chunk-5534FYXP.cjs');
4
+ var chunkSDRYSLOX_cjs = require('./chunk-SDRYSLOX.cjs');
5
5
  require('./chunk-YGBHY67W.cjs');
6
6
  require('./chunk-2CSLFAGF.cjs');
7
7
  require('./chunk-GA5ZO4YA.cjs');
8
8
  require('./chunk-VG5XNE4H.cjs');
9
9
  require('./chunk-DDWLMYRO.cjs');
10
- require('./chunk-C2OICDMI.cjs');
10
+ require('./chunk-7557LDAN.cjs');
11
11
  require('./chunk-4ONPEVTP.cjs');
12
12
  require('./chunk-V3KLUWQQ.cjs');
13
13
  require('./chunk-P5AQYC4D.cjs');
14
- require('./chunk-GQXPNIRE.cjs');
14
+ require('./chunk-WAV762GP.cjs');
15
15
  require('./chunk-ZESMRGDV.cjs');
16
16
  require('./chunk-UKOYN2WD.cjs');
17
17
  require('./chunk-RC25WMVB.cjs');
18
18
  require('./chunk-VKH3BEZE.cjs');
19
- require('./chunk-75BNMCUX.cjs');
20
- require('./chunk-RYVZDFVO.cjs');
19
+ require('./chunk-JJZOL5MG.cjs');
21
20
  require('./chunk-3YEXZX4H.cjs');
22
21
  require('./chunk-4PA6VCCR.cjs');
23
- require('./chunk-MZ2KZXNU.cjs');
22
+ require('./chunk-WXUU3COI.cjs');
24
23
  require('./chunk-AHDJXIUB.cjs');
25
24
  require('./chunk-YVCOQHCE.cjs');
26
25
  require('./chunk-RL2HI6NP.cjs');
27
26
  require('./chunk-6UZC4XVV.cjs');
28
- require('./chunk-QGVOT7E4.cjs');
29
- require('./chunk-QRAQZTJE.cjs');
30
- require('./chunk-UDSHVNU3.cjs');
31
27
  require('./chunk-JV5TVUOU.cjs');
32
- require('./chunk-IPSHAMO2.cjs');
33
28
  require('./chunk-ZVEW3JBT.cjs');
34
29
  require('./chunk-VZOOGA47.cjs');
35
30
  require('./chunk-HQDR43JC.cjs');
36
31
  require('./chunk-JR2YSBD5.cjs');
37
32
  require('./chunk-3YZKDCWY.cjs');
38
33
  require('./chunk-SJSGSHIT.cjs');
39
- require('./chunk-PPCATBOY.cjs');
40
34
  require('./chunk-ZW6FPIFC.cjs');
41
- require('./chunk-LJJJ6CYH.cjs');
35
+ require('./chunk-75BNMCUX.cjs');
36
+ require('./chunk-QGVOT7E4.cjs');
37
+ require('./chunk-QRAQZTJE.cjs');
38
+ require('./chunk-UDSHVNU3.cjs');
39
+ require('./chunk-IPSHAMO2.cjs');
40
+ require('./chunk-PPCATBOY.cjs');
42
41
  require('./chunk-TKHCIHE2.cjs');
43
42
  require('./chunk-JDFBEGQO.cjs');
44
43
  require('./chunk-ULWRNGGE.cjs');
44
+ require('./chunk-LJJJ6CYH.cjs');
45
45
  require('./chunk-PLIF5CUV.cjs');
46
46
 
47
47
 
48
48
 
49
49
  Object.defineProperty(exports, "ConnectedStreamedWordArtifact", {
50
50
  enumerable: true,
51
- get: function () { return chunk5534FYXP_cjs.ConnectedStreamedWordArtifact; }
51
+ get: function () { return chunkSDRYSLOX_cjs.ConnectedStreamedWordArtifact; }
52
52
  });
53
- //# sourceMappingURL=ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map
54
- //# sourceMappingURL=ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map
53
+ //# sourceMappingURL=ConnectedStreamedWordArtifact-AG62232A.cjs.map
54
+ //# sourceMappingURL=ConnectedStreamedWordArtifact-AG62232A.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedStreamedWordArtifact-FFOQJBOI.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedStreamedWordArtifact-AG62232A.cjs"}
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk4RBQ44RY_cjs = require('./chunk-4RBQ44RY.cjs');
5
- require('./chunk-W6B3RYTX.cjs');
4
+ var chunkMLA2BJ2Y_cjs = require('./chunk-MLA2BJ2Y.cjs');
5
+ require('./chunk-7PN3YENO.cjs');
6
6
  var chunkAEQT2QQX_cjs = require('./chunk-AEQT2QQX.cjs');
7
- var chunk734NPQNR_cjs = require('./chunk-734NPQNR.cjs');
8
- require('./chunk-BVAT4EVC.cjs');
9
- require('./chunk-EATIFPKP.cjs');
7
+ var chunkADDQKZ5I_cjs = require('./chunk-ADDQKZ5I.cjs');
8
+ require('./chunk-5QERK4PK.cjs');
9
+ require('./chunk-T73BHNQX.cjs');
10
10
  require('./chunk-HYUKPHCT.cjs');
11
- var chunkJQLWKNJO_cjs = require('./chunk-JQLWKNJO.cjs');
11
+ var chunkALK3PUUB_cjs = require('./chunk-ALK3PUUB.cjs');
12
12
  require('./chunk-223D4727.cjs');
13
13
  require('./chunk-SNUBQMIS.cjs');
14
14
  require('./chunk-QQMMCXBP.cjs');
@@ -26,9 +26,7 @@ require('./chunk-II2OEXHW.cjs');
26
26
  require('./chunk-4PA6VCCR.cjs');
27
27
  require('./chunk-RL2HI6NP.cjs');
28
28
  require('./chunk-6UZC4XVV.cjs');
29
- require('./chunk-UDSHVNU3.cjs');
30
29
  require('./chunk-JV5TVUOU.cjs');
31
- require('./chunk-IPSHAMO2.cjs');
32
30
  require('./chunk-ZVEW3JBT.cjs');
33
31
  require('./chunk-M74FWYNL.cjs');
34
32
  require('./chunk-VZOOGA47.cjs');
@@ -36,6 +34,8 @@ var chunkJR2YSBD5_cjs = require('./chunk-JR2YSBD5.cjs');
36
34
  require('./chunk-TMX7YFVM.cjs');
37
35
  require('./chunk-3YZKDCWY.cjs');
38
36
  require('./chunk-SJSGSHIT.cjs');
37
+ require('./chunk-UDSHVNU3.cjs');
38
+ require('./chunk-IPSHAMO2.cjs');
39
39
  require('./chunk-PPCATBOY.cjs');
40
40
  var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
41
41
  require('./chunk-JDFBEGQO.cjs');
@@ -146,7 +146,7 @@ function useReviewColumns({
146
146
  const [activeId, setActiveId] = react$1.useState(null);
147
147
  const [hiddenExpanded, setHiddenExpanded] = react$1.useState(false);
148
148
  const sessionGrid = react.useArbiSessionState((state) => state.grid.states[gridId]);
149
- const ownGrid = chunk734NPQNR_cjs.useFilesGridStates((state) => state.gridStates[gridId]);
149
+ const ownGrid = chunkADDQKZ5I_cjs.useFilesGridStates((state) => state.gridStates[gridId]);
150
150
  const gridState = sessionGrid ?? ownGrid ?? (gridApi && !gridApi.isDestroyed() ? gridApi.getState?.() : void 0);
151
151
  const hiddenColIds = react$1.useMemo(
152
152
  () => gridState?.columnVisibility?.hiddenColIds || [],
@@ -366,7 +366,7 @@ function DocumentReviewCard({
366
366
  );
367
367
  return workspaceUser?.user;
368
368
  }, [currentDoc?.created_by_ext_id, workspaceUsers]);
369
- const canEdit = chunkJQLWKNJO_cjs.canEditDocumentFields(currentDoc, currentUserExtId, workspaceRole ?? null);
369
+ const canEdit = chunkALK3PUUB_cjs.canEditDocumentFields(currentDoc, currentUserExtId, workspaceRole ?? null);
370
370
  const handleUpdateDocumentField = react$1.useCallback(
371
371
  async (field, value) => {
372
372
  if (!currentDoc) return;
@@ -467,7 +467,7 @@ function DocumentReviewCard({
467
467
  onDragEnd: handleDragEnd,
468
468
  children: [
469
469
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden min-h-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkDVE6NNZ2_cjs.DroppableContainer, { id: "visible-container", className: "w-full space-y-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(sortable.SortableContext, { items: visibleColumns, strategy: sortable.verticalListSortingStrategy, children: visibleColumnsList.map((col) => {
470
- const fieldContent = chunk4RBQ44RY_cjs.documentFieldContent({
470
+ const fieldContent = chunkMLA2BJ2Y_cjs.documentFieldContent({
471
471
  columnId: col.id,
472
472
  doc: currentDoc,
473
473
  canEdit,
@@ -484,7 +484,7 @@ function DocumentReviewCard({
484
484
  relatedDocs: relatedDocsMap.get(currentDoc.external_id),
485
485
  onOpenDocument: onOpenDocumentViewer,
486
486
  onDeleteDocument,
487
- canDeleteRelatedDocument: (doc) => chunkJQLWKNJO_cjs.canDeleteDocument(doc, currentUserExtId, workspaceRole ?? null),
487
+ canDeleteRelatedDocument: (doc) => chunkALK3PUUB_cjs.canDeleteDocument(doc, currentUserExtId, workspaceRole ?? null),
488
488
  onCompareDocuments
489
489
  });
490
490
  if (!fieldContent) return null;
@@ -494,7 +494,7 @@ function DocumentReviewCard({
494
494
  sortableId: col.id,
495
495
  label: fieldContent.label,
496
496
  icon: fieldContent.icon,
497
- labelSlot: fieldContent.tag ? /* @__PURE__ */ jsxRuntime.jsx(chunk4RBQ44RY_cjs.ConnectedTagEntity, { tag: fieldContent.tag, size: "md" }) : void 0,
497
+ labelSlot: fieldContent.tag ? /* @__PURE__ */ jsxRuntime.jsx(chunkMLA2BJ2Y_cjs.ConnectedTagEntity, { tag: fieldContent.tag, size: "md" }) : void 0,
498
498
  "data-testid": `navigator-field-${col.id}`,
499
499
  children: fieldContent.children
500
500
  },
@@ -516,5 +516,5 @@ function DocumentReviewCard({
516
516
  }
517
517
 
518
518
  exports.DocumentReviewCard = DocumentReviewCard;
519
- //# sourceMappingURL=DocumentReviewCard-SNWVEZ7S.cjs.map
520
- //# sourceMappingURL=DocumentReviewCard-SNWVEZ7S.cjs.map
519
+ //# sourceMappingURL=DocumentReviewCard-M53XFLI2.cjs.map
520
+ //# sourceMappingURL=DocumentReviewCard-M53XFLI2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/files/review/useDocumentValueWrites.ts","../src/connection/files/review/useReviewColumns.ts","../src/connection/files/review/DocumentReviewCard.tsx"],"names":["useConnectedWorkspace","useAssignDocTags","useUpdateDocTag","useRemoveDocTags","useRef","useCallback","isPresenceTag","useState","useArbiSessionState","useFilesGridStates","useMemo","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","useBlocksEnvironment","useUpdateDocuments","useCreateTag","useTags","useWorkspaceUsers","useWorkspaceRole","useWorkspaces","tagsForScope","filterDocumentTags","useRelatedDocuments","COLUMN_LABEL_FALLBACKS","canEditDocumentFields","getEntityLabel","jsx","jsxs","DndContext","closestCenter","DroppableContainer","SortableContext","verticalListSortingStrategy","documentFieldContent","canDeleteDocument","KeyValueRow","ConnectedTagEntity","createPortal","DragOverlay","GripVertical"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAAS,sBAAA,GAAuD;AACrE,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAIA,uCAAA,EAAsB;AAGnE,EAAA,MAAM,mBAAmBC,sBAAA,EAAiB;AAC1C,EAAA,MAAM,mBAAmBC,qBAAA,EAAgB;AACzC,EAAA,MAAM,mBAAmBC,sBAAA,EAAiB;AAE1C,EAAA,MAAM,eAAeC,cAAA,CAAO;AAAA,IAC1B,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,gBAAA;AAAA,IACd,YAAA,EAAc,gBAAA;AAAA,IACd,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,IAAI,YAAA,CAAa,OAAA,CAAQ,WAAA,KAAgB,mBAAA,EAAqB;AAC5D,IAAA,YAAA,CAAa,OAAA,GAAU;AAAA,MACrB,YAAA,EAAc,gBAAA;AAAA,MACd,YAAA,EAAc,gBAAA;AAAA,MACd,YAAA,EAAc,gBAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,aAAa,OAAA,CAAQ,YAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,aAAa,OAAA,CAAQ,YAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,aAAa,OAAA,CAAQ,YAAA;AAE1C,EAAA,MAAM,oBAAA,GAAuBC,mBAAA;AAAA,IAC3B,OAAO,GAAA,EAAU,GAAA,EAAU,KAAA,KAA4B;AACrD,MAAA,MAAM,MAAA,GAAS,IAAI,OAAA,EAAS,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,UAAA,KAAe,GAAA,CAAI,WAAW,CAAA;AAE1E,MAAA,IAAIC,qBAAA,CAAc,GAAG,CAAA,EAAG;AAEtB,QAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,CAAC,MAAA,EAAQ;AAC7B,UAAA,MAAM,YAAA,CAAa,WAAA,CAAY,EAAE,KAAA,EAAO,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA;AAAA,QACtF,CAAA,MAAA,IAAW,KAAA,KAAU,KAAA,IAAS,MAAA,EAAQ;AACpC,UAAA,MAAM,YAAA,CAAa,WAAA,CAAY,EAAE,KAAA,EAAO,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA;AAAA,QACtF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,SAAA,GAAY,KAAA;AAElB,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAI,SAAA,CAAU,MAAK,EAAG;AACpB,YAAA,MAAM,aAAa,WAAA,CAAY;AAAA,cAC7B,OAAO,GAAA,CAAI,WAAA;AAAA,cACX,OAAO,GAAA,CAAI,WAAA;AAAA,cACX,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,UACH,CAAA,MAAO;AAEL,YAAA,MAAM,YAAA,CAAa,WAAA,CAAY,EAAE,KAAA,EAAO,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA;AAAA,UACtF;AAAA,QACF,CAAA,MAAA,IAAW,SAAA,CAAU,IAAA,EAAK,EAAG;AAC3B,UAAA,MAAM,aAAa,WAAA,CAAY;AAAA,YAC7B,OAAO,GAAA,CAAI,WAAA;AAAA,YACX,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA;AAAA,YACxB,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IAGF,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAA,EAAc,YAAY;AAAA,GAC3C;AAEA,EAAA,MAAM,4BAAA,GAA+BD,mBAAA;AAAA,IACnC,OAAO,GAAA,EAAU,GAAA,EAAU,IAAA,EAAc,SAAA,KAAyB;AAChE,MAAA,MAAM,MAAA,GAAS,IAAI,OAAA,EAAS,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,UAAA,KAAe,GAAA,CAAI,WAAW,CAAA;AAE1E,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI,IAAA,CAAK,IAAA,EAAK,IAAK,SAAA,EAAW;AAC5B,UAAA,MAAM,aAAa,WAAA,CAAY;AAAA,YAC7B,OAAO,GAAA,CAAI,WAAA;AAAA,YACX,OAAO,GAAA,CAAI,WAAA;AAAA,YACX,MAAM,IAAA,IAAQ,IAAA;AAAA,YACd;AAAA,WACD,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAM,YAAA,CAAa,WAAA,CAAY,EAAE,KAAA,EAAO,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA;AAAA,QACtF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,EAAK,IAAK,SAAA,EAAW;AACnC,QAAA,MAAM,aAAa,WAAA,CAAY;AAAA,UAC7B,OAAO,GAAA,CAAI,WAAA;AAAA,UACX,MAAA,EAAQ,CAAC,GAAA,CAAI,WAAW,CAAA;AAAA,UACxB,MAAM,IAAA,IAAQ,IAAA;AAAA,UACd;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IAGF,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAA,EAAc,YAAY;AAAA,GAC3C;AAEA,EAAA,OAAO;AAAA,IACL,oBAAA;AAAA,IACA;AAAA,GACF;AACF;ACzGA,IAAM,sBAAA,GAAyB,CAAC,MAAA,EAAQ,gBAAA,EAAkB,QAAQ,CAAA;AAiC3D,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAkD;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,iBAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAI1D,EAAA,MAAM,WAAA,GAAcC,0BAAoB,CAAC,KAAA,KAAU,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAE5E,EAAA,MAAM,UAAUC,oCAAA,CAAmB,CAAC,UAAU,KAAA,CAAM,UAAA,CAAW,MAAM,CAAC,CAAA;AACtE,EAAA,MAAM,SAAA,GACJ,WAAA,IAAe,OAAA,KAAY,OAAA,IAAW,CAAC,QAAQ,WAAA,EAAY,GAAI,OAAA,CAAQ,QAAA,IAAW,GAAI,MAAA,CAAA;AAExF,EAAA,MAAM,YAAA,GAAeC,eAAA;AAAA,IACnB,MAAM,SAAA,EAAW,gBAAA,EAAkB,YAAA,IAAgB,EAAC;AAAA,IACpD,CAAC,SAAA,EAAW,gBAAA,EAAkB,YAAY;AAAA,GAC5C;AAEA,EAAA,MAAM,aAAA,GAAgBA,eAAA;AAAA,IACpB,MAAM,SAAA,EAAW,WAAA,EAAa,aAAA,IAAiB,EAAC;AAAA,IAChD,CAAC,SAAA,EAAW,WAAA,EAAa,aAAa;AAAA,GACxC;AAGA,EAAA,MAAM,cAAA,GAAiBA,eAAA;AAAA,IACrB,MACE,aAAA,CAAc,MAAA;AAAA,MACZ,CAAC,KAAA,KAAU,CAAC,aAAa,QAAA,CAAS,KAAK,KAAK,KAAA,KAAU;AAAA,KACxD;AAAA,IACF,CAAC,eAAe,YAAY;AAAA,GAC9B;AAGA,EAAA,MAAM,OAAA,GAAUC,eAAA;AAAA,IACdC,eAAUC,kBAAA,EAAe;AAAA,MACvB,oBAAA,EAAsB;AAAA,QACpB,QAAA,EAAU;AAAA;AACZ,KACD,CAAA;AAAA,IACDD,eAAUE,mBAAA,EAAgB;AAAA,MACxB,gBAAA,EAAkBC;AAAA,KACnB;AAAA,GACH;AAGA,EAAA,MAAM,UAAA,GAAaL,gBAAQ,MAAM;AAC/B,IAAA,MAAM,SAAuB,EAAC;AAE9B,IAAA,MAAM,YAAY,aAAA,CAAc,MAAA;AAAA,MAC9B,CAAC,KAAA,KAAU,CAAC,uBAAuB,QAAA,CAAS,KAAK,KAAK,KAAA,KAAU;AAAA,KAClE;AAEA,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3B,MAAA,MAAM,MAAM,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,KAAK,CAAA;AAC7D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,CAAe,KAAK,CAAA,EAAG,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,CAAA;AAAA,MAC9E,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,eAAe,KAAK,CAAA,EAAG,IAAA,EAAM,UAAA,EAAY,CAAA;AAAA,MAC3E;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,aAAA,EAAe,cAAc,CAAC,CAAA;AAGjD,EAAA,MAAM,kBAAA,GAAqBA,gBAAQ,MAAM;AACvC,IAAA,OAAO,cAAA,CACJ,GAAA,CAAI,CAAC,EAAA,KAAO,WAAW,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAA,KAAO,EAAE,CAAC,CAAA,CACnD,OAAO,OAAO,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,cAAA,EAAgB,UAAU,CAAC,CAAA;AAE/B,EAAA,MAAM,iBAAA,GAAoBA,gBAAQ,MAAM;AACtC,IAAA,OAAO,UAAA,CAAW,OAAO,CAAC,GAAA,KAAQ,CAAC,cAAA,CAAe,QAAA,CAAS,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,UAAA,EAAY,cAAc,CAAC,CAAA;AAG/B,EAAA,MAAM,YAAA,GAAeA,gBAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,WAAW,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,QAAQ,CAAA,IAAK,IAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAGzB,EAAA,MAAM,gBAAA,GAAmBL,mBAAAA;AAAA,IACvB,CAAC,KAAA,KAAkB;AACjB,MAAA,IAAI,cAAA,CAAe,UAAU,CAAA,EAAG;AAChC,MAAA,MAAM,oBAAoB,cAAA,CAAe,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,KAAK,CAAA;AACpE,MAAA,gBAAA,GAAmB,iBAAiB,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,CAAC,gBAAgB,gBAAgB;AAAA,GACnC;AAGA,EAAA,MAAM,gBAAA,GAAmBA,mBAAAA;AAAA,IACvB,CAAC,KAAA,KAAkB;AACjB,MAAA,MAAM,iBAAA,GAAoB,CAAC,GAAG,cAAA,EAAgB,KAAK,CAAA;AACnD,MAAA,gBAAA,GAAmB,iBAAiB,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,CAAC,gBAAgB,gBAAgB;AAAA,GACnC;AAGA,EAAA,MAAM,eAAA,GAAkBA,mBAAAA,CAAY,CAAC,KAAA,KAA0B;AAC7D,IAAA,WAAA,CAAY,KAAA,CAAM,OAAO,EAAY,CAAA;AAAA,EACvC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,mBAAAA;AAAA,IACpB,CAAC,KAAA,KAAwB;AACvB,MAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA;AACzB,MAAA,WAAA,CAAY,IAAI,CAAA;AAEhB,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,MAAM,cAAc,MAAA,CAAO,EAAA;AAC3B,MAAA,MAAM,iBAAA,GAAoB,cAAA,CAAe,QAAA,CAAS,WAAW,CAAA;AAE7D,MAAA,MAAM,SAAS,IAAA,CAAK,EAAA;AAEpB,MAAA,IAAI,gBAAgB,MAAA,EAAQ;AAE5B,MAAA,MAAM,UAAA,GAAa,cAAA;AACnB,MAAA,MAAM,YAAY,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,EAAE,CAAA;AAEvD,MAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,QAAA,CAAS,WAAW,CAAA;AAEvD,MAAA,MAAM,yBAAyB,MAAA,KAAW,mBAAA;AAC1C,MAAA,MAAM,wBAAwB,MAAA,KAAW,kBAAA;AACzC,MAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA,IAAK,sBAAA;AACvD,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,IAAK,qBAAA;AAErD,MAAA,IAAI,iBAAA,GAAoB,CAAC,GAAG,cAAc,CAAA;AAG1C,MAAA,IAAI,oBAAoB,eAAA,EAAiB;AACvC,QAAA,IAAI,sBAAA,EAAwB;AAC1B,UAAA,iBAAA,GAAoB,CAAC,GAAG,iBAAA,EAAmB,WAAW,CAAA;AAAA,QACxD,CAAA,MAAO;AACL,UAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA;AAClD,UAAA,iBAAA,GAAoB;AAAA,YAClB,GAAG,iBAAA,CAAkB,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAAA,YACvC,WAAA;AAAA,YACA,GAAG,iBAAA,CAAkB,KAAA,CAAM,SAAS;AAAA,WACtC;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAES,qBAAqB,cAAA,EAAgB;AAC5C,QAAA,IAAI,iBAAA,CAAkB,UAAU,CAAA,EAAG;AACnC,QAAA,iBAAA,GAAoB,iBAAA,CAAkB,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,WAAW,CAAA;AAAA,MACzE,CAAA,MAAA,IAES,iBAAA,IAAqB,eAAA,IAAmB,CAAC,sBAAA,EAAwB;AACxE,QAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,OAAA,CAAQ,WAAW,CAAA;AACtD,QAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA;AACjD,QAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,KAAa,EAAA,EAAI;AACtC,UAAA,iBAAA,GAAoBW,kBAAA,CAAU,iBAAA,EAAmB,QAAA,EAAU,QAAQ,CAAA;AAAA,QACrE;AAAA,MACF;AAEA,MAAA,IAAI,kBAAkB,IAAA,CAAK,GAAG,MAAM,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,EAAG;AAC5D,QAAA,gBAAA,GAAmB,iBAAiB,CAAA;AAAA,MACtC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,iBAAA,EAAmB,gBAAgB;AAAA,GACtD;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;AClLO,SAAS,kBAAA,CAAmB;AAAA,EACjC,eAAA,EAAiB,UAAA;AAAA,EACjB,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,sCAAA,EAAqB;AAIxC,EAAA,MAAM,iBAAiBC,wBAAA,EAAmB;AAC1C,EAAA,MAAM,oBAAoBC,kBAAA,EAAa;AACvC,EAAA,MAAM,uBAAuBlB,sBAAAA,EAAiB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,gBAAA,GAAmB,EAAC,KAAMmB,aAAA,EAAQ;AAChD,EAAA,MAAM,EAAE,IAAA,EAAM,cAAA,GAAiB,EAAC,KAAMC,uBAAA,EAAkB;AACxD,EAAA,MAAM,gBAAgBC,sBAAA,EAAiB;AACvC,EAAA,MAAM,EAAE,WAAA,EAAa,IAAA,EAAM,MAAA,KAAWtB,uCAAA,EAAsB;AAC5D,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,GAAa,EAAC,KAAMuB,mBAAA,EAAc;AAChD,EAAA,MAAM,mBAAmB,UAAA,CAAW,IAAA;AAAA,IAClC,CAAC,SAAA,KAAc,SAAA,CAAU,WAAA,KAAgB;AAAA,GAC3C,EAAG,KAAA;AAGH,EAAA,MAAM,gBAAA,GAAmBb,eAAAA;AAAA,IACvB,MAAA,CACG,IAAA,EAAM,KAAA,GACH,gBAAA,EAAkB,KAAK,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,CAAK,UAAU,IAAA,CAAK,KAAK,CAAA,EAAG,IAAA,CAAK,cAC3E,MAAA,KAAc,MAAA;AAAA,IACpB,CAAC,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,gBAAgB;AAAA,GACxC;AAGA,EAAA,MAAM,aAAA,GAAgBA,gBAAQ,MAAM;AAClC,IAAA,OAAOc,oBAAA,CAAaC,0BAAA,CAAmB,gBAAyB,CAAA,EAAG,UAAU,CAAA,CAAE,IAAA;AAAA,MAC7E,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,CAAA,CAAE,UAAU,EAAE,OAAA;AAAQ,KAC9E;AAAA,EACF,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAGrB,EAAA,MAAM,cAAA,GAAiBC,0BAAoB,SAAS,CAAA;AAGpD,EAAA,MAAM,cAAA,GAAiBrB,mBAAAA;AAAA,IACrB,CAAC,KAAA,KAA0B;AACzB,MAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,WAAA,EAAY,EAAG;AACrC,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA;AACzC,QAAA,IAAI,MAAA,EAAQ,UAAA,EAAY,OAAO,MAAA,CAAO,UAAA;AAAA,MACxC;AACA,MAAA,IAAIsB,yBAAA,CAAuB,KAAK,CAAA,EAAG,OAAOA,0BAAuB,KAAK,CAAA;AACtE,MAAA,MAAM,MAAM,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,KAAK,CAAA;AAC7D,MAAA,IAAI,GAAA,SAAY,GAAA,CAAI,IAAA;AACpB,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,SAAS,aAAa;AAAA,GACzB;AAGA,EAAA,MAAM,aAAA,GAAgBtB,mBAAAA;AAAA,IACpB,CAAC,KAAA,KAAiD;AAChD,MAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,WAAA,EAAY,EAAG;AACrC,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA;AACzC,QAAA,OAAO,QAAQ,OAAA,EAAS,IAAA;AAAA,MAC1B;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM,gBAAA,GAAmBA,mBAAAA;AAAA,IACvB,CAAC,KAAA,KAA2B;AAC1B,MAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,WAAA,EAAY,EAAG;AACrC,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA;AACzC,QAAA,IAAI,MAAA,EAAQ,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA;AACtC,QAAA,IAAI,OAAO,MAAA,EAAQ,QAAA,KAAa,UAAA,EAAY,OAAO,IAAA;AAAA,MACrD;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM;AAAA,IACJ,oBAAA,EAAsB,cAAA;AAAA,IACtB,4BAAA,EAA8B;AAAA,MAC5B,sBAAA,EAAuB;AAE3B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,gBAAA,CAAiB;AAAA,IACnB,MAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,iBAAA,GAAoBK,gBAAQ,MAAM;AACtC,IAAA,IAAI,CAAC,UAAA,EAAY,iBAAA,EAAmB,OAAO,MAAA;AAC3C,IAAA,MAAM,gBAAgB,cAAA,EAAgB,IAAA;AAAA,MACpC,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,CAAK,gBAAgB,UAAA,CAAW;AAAA,KAC7C;AACA,IAAA,OAAO,aAAA,EAAe,IAAA;AAAA,EACxB,CAAA,EAAG,CAAC,UAAA,EAAY,iBAAA,EAAmB,cAAc,CAAC,CAAA;AAGlD,EAAA,MAAM,OAAA,GAAUkB,uCAAA,CAAsB,UAAA,EAAY,gBAAA,EAAkB,iBAAiB,IAAI,CAAA;AAGzF,EAAA,MAAM,yBAAA,GAA4BvB,mBAAAA;AAAA,IAChC,OAAO,OAAe,KAAA,KAAmB;AACvC,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAA,CAAO,2CAA2C,OAAO,CAAA;AACzD,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,KAAA,KAAU,cAAc,KAAA,EAAO;AACjC,QAAA,MAAM,SAAA,GAAY,KAAA;AAClB,QAAA,IAAI,CAAC,qBAAA,CAAsB,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1C,UAAA,MAAA,CAAO,6DAA6D,OAAO,CAAA;AAC3E,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAC/B,QAAA,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACzB,UAAA,MAAA,CAAO,qEAAqE,OAAO,CAAA;AACnF,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,iBAAiB,CAAC,OAAA,EAAS,UAAA,EAAY,YAAA,EAAc,cAAc,aAAa,CAAA;AACtF,MAAA,IAAI,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,EAAG;AAClC,QAAA,cAAA,CAAe,MAAA,CAAO;AAAA,UACpB,SAAA,EAAW;AAAA,YACT;AAAA,cACE,aAAa,UAAA,CAAW,WAAA;AAAA,cACxB,YAAA,EAAc;AAAA,gBACZ,GAAG,UAAA,CAAW,YAAA;AAAA,gBACd,CAAC,KAAK,GAAG;AAAA;AACX;AACF;AACF,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,cAAA,CAAe,MAAA,CAAO;AAAA,UACpB,SAAA,EAAW,CAAC,EAAE,WAAA,EAAa,UAAA,CAAW,aAAa,CAAC,KAAK,GAAG,KAAA,EAAO;AAAA,SACpE,CAAA;AAAA,MACH;AAGA,MAAA,IAAI,UAAU,QAAA,EAAU;AACtB,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,MAAA;AAAA,YACE,YAAYwB,iBAAA,CAAe,UAAU,CAAC,CAAA,gBAAA,EAAmBA,iBAAA,CAAe,WAAW,CAAC,CAAA,QAAA,CAAA;AAAA,YACpF;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,CAAA,SAAA,EAAYA,iBAAA,CAAe,UAAU,CAAC,0BAA0B,SAAS,CAAA;AAAA,QAClF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,OAAA,EAAS,cAAA,EAAgB,MAAM;AAAA,GAC9C;AAGA,EAAA,MAAM,oBAAA,GAAuBxB,mBAAAA;AAAA,IAC3B,CAAC,KAAU,KAAA,KAA4B;AACrC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,cAAA,CAAe,UAAA,EAAY,KAAK,KAAK,CAAA;AAAA,MACvC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,cAAc;AAAA,GAC7B;AAEA,EAAA,MAAM,4BAAA,GAA+BA,mBAAAA;AAAA,IACnC,CAAC,GAAA,EAAU,IAAA,EAAc,SAAA,KAAyB;AAChD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,sBAAA,CAAuB,UAAA,EAAY,GAAA,EAAK,IAAA,EAAM,SAAS,CAAA;AAAA,MACzD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,sBAAsB;AAAA,GACrC;AAGA,EAAA,MAAM,yBAAA,GAA4BA,mBAAAA;AAAA,IAChC,OAAO,IAAA,KAAiB;AACtB,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,IAAA,CAAK,MAAK,EAAG;AACjC,MAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,WAAA,CAAY;AAAA,QACjD,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,QAChB,SAAS,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,EAAC,EAAE;AAAA,QACzC,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,qBAAqB,WAAA,CAAY;AAAA,UACrC,OAAO,MAAA,CAAO,WAAA;AAAA,UACd,MAAA,EAAQ,CAAC,UAAA,CAAW,WAAW;AAAA,SAChC,CAAA;AAAA,MAEH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,iBAAA,EAAmB,oBAAoB;AAAA,GACtD;AAEA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,uBAAOyB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,EACpF;AAEA,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yCAAA;AAAA,MACV,aAAA,EAAa,CAAA,wBAAA,EAA2B,UAAA,CAAW,WAAW,CAAA,CAAA;AAAA,MAG9D,QAAA,kBAAAC,eAAA;AAAA,QAACC,eAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,kBAAA,EAAoBC,kBAAA;AAAA,UACpB,WAAA,EAAa,eAAA;AAAA,UACb,SAAA,EAAW,aAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAH,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kDAAA,EACb,QAAA,kBAAAA,cAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EAEb,QAAA,kBAAAA,cAAA,CAACI,oCAAA,EAAA,EAAmB,EAAA,EAAG,mBAAA,EAAoB,WAAU,oBAAA,EACnD,QAAA,kBAAAJ,cAAA,CAACK,4BAAgB,KAAA,EAAO,cAAA,EAAgB,UAAUC,oCAAA,EAC/C,QAAA,EAAA,kBAAA,CAAmB,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC/B,cAAA,MAAM,eAAeC,sCAAA,CAAqB;AAAA,gBACxC,UAAU,GAAA,CAAI,EAAA;AAAA,gBACd,GAAA,EAAK,UAAA;AAAA,gBACL,OAAA;AAAA,gBACA,aAAA;AAAA,gBACA,YAAA,EAAc,SAAA;AAAA,gBACd,OAAA,EAAS,iBAAA;AAAA,gBACT,cAAA;AAAA,gBACA,aAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,qBAAA,EAAuB,yBAAA;AAAA,gBACvB,gBAAA,EAAkB,oBAAA;AAAA,gBAClB,wBAAA,EAA0B,4BAAA;AAAA,gBAC1B,qBAAA,EAAuB,yBAAA;AAAA,gBACvB,WAAA,EAAa,cAAA,CAAe,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA;AAAA,gBACtD,cAAA,EAAgB,oBAAA;AAAA,gBAChB,gBAAA;AAAA,gBACA,0BAA0B,CAAC,GAAA,KACzBC,oCAAkB,GAAA,EAAK,gBAAA,EAAkB,iBAAiB,IAAI,CAAA;AAAA,gBAChE;AAAA,eACD,CAAA;AACD,cAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,cAAA,uBACER,cAAA;AAAA,gBAACS,6BAAA;AAAA,gBAAA;AAAA,kBAEC,YAAY,GAAA,CAAI,EAAA;AAAA,kBAChB,OAAO,YAAA,CAAa,KAAA;AAAA,kBACpB,MAAM,YAAA,CAAa,IAAA;AAAA,kBACnB,SAAA,EACE,YAAA,CAAa,GAAA,mBACXT,cAAA,CAACU,oCAAA,EAAA,EAAmB,KAAK,YAAA,CAAa,GAAA,EAAK,IAAA,EAAK,IAAA,EAAK,CAAA,GACnD,MAAA;AAAA,kBAEN,aAAA,EAAa,CAAA,gBAAA,EAAmB,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,kBAErC,QAAA,EAAA,YAAA,CAAa;AAAA,iBAAA;AAAA,gBAXT,GAAA,CAAI;AAAA,eAYX;AAAA,YAEJ,CAAC,CAAA,EACH,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,YAGCC,qBAAA;AAAA,8BACCX,cAAA,CAACY,oBAAY,aAAA,EAAe,IAAA,EACzB,yCACCX,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yHAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,cAAA,CAACa,wBAAA,EAAA,EAAa,WAAU,2BAAA,EAA4B,CAAA;AAAA,gCACpDb,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA6B,uBAAa,KAAA,EAAM;AAAA,eAAA,EAClE,IACE,IAAA,EACN,CAAA;AAAA,cACA,QAAA,CAAS;AAAA;AACX;AAAA;AAAA;AACF;AAAA,GACF;AAEJ","file":"DocumentReviewCard-SNWVEZ7S.cjs","sourcesContent":["/**\n * useDocumentValueWrites Hook\n *\n * Provides stable mutation functions for creating, updating, and deleting document tags.\n * Handles checkbox, text, number, and select tag types with citation support.\n */\n\nimport { isPresenceTag } from '@arbidocs/sdk/browser'\nimport { useCallback, useRef } from 'react'\n\nimport { useConnectedWorkspace } from '../../ConnectionProvider'\nimport type { WorkspaceDocument as Doc } from '@arbidocs/react'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\nimport type { DocTagCitations as Citations } from '../fields/documentField'\nimport { useAssignDocTags, useRemoveDocTags, useUpdateDocTag } from '@arbidocs/react'\n\ninterface UseDocumentValueWritesResult {\n handleUpdateTagValue: (doc: Doc, tag: Tag, value: string | boolean) => Promise<void>\n handleUpdateTagWithCitations: (\n doc: Doc,\n tag: Tag,\n note: string,\n citations: Citations\n ) => Promise<void>\n}\n\nexport function useDocumentValueWrites(): UseDocumentValueWritesResult {\n const { workspaceId: selectedWorkspaceId } = useConnectedWorkspace()\n\n // Stabilize mutation hooks - only update when workspaceId changes\n const createDocTagHook = useAssignDocTags()\n const updateDocTagHook = useUpdateDocTag()\n const deleteDocTagHook = useRemoveDocTags()\n\n const mutationsRef = useRef({\n createDocTag: createDocTagHook,\n updateDocTag: updateDocTagHook,\n deleteDocTag: deleteDocTagHook,\n workspaceId: selectedWorkspaceId,\n })\n\n if (mutationsRef.current.workspaceId !== selectedWorkspaceId) {\n mutationsRef.current = {\n createDocTag: createDocTagHook,\n updateDocTag: updateDocTagHook,\n deleteDocTag: deleteDocTagHook,\n workspaceId: selectedWorkspaceId,\n }\n }\n\n const createDocTag = mutationsRef.current.createDocTag\n const updateDocTag = mutationsRef.current.updateDocTag\n const deleteDocTag = mutationsRef.current.deleteDocTag\n\n const handleUpdateTagValue = useCallback(\n async (doc: Doc, tag: Tag, value: string | boolean) => {\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n if (isPresenceTag(tag)) {\n // Label, issue or entity: create if checked, delete if unchecked\n if (value === true && !doctag) {\n await createDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n } else if (value === false && doctag) {\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else {\n // Text/number/select: update note field\n const noteValue = value as string\n\n if (doctag) {\n if (noteValue.trim()) {\n await updateDocTag.mutateAsync({\n tagId: tag.external_id,\n docId: doc.external_id,\n note: noteValue,\n })\n } else {\n // Delete doctag when value is cleared\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else if (noteValue.trim()) {\n await createDocTag.mutateAsync({\n tagId: tag.external_id,\n docIds: [doc.external_id],\n note: noteValue,\n })\n }\n }\n\n // Cache is already patched by useAssignDocTags/useUpdateDocTag/useRemoveDocTags hooks\n },\n [createDocTag, updateDocTag, deleteDocTag]\n )\n\n const handleUpdateTagWithCitations = useCallback(\n async (doc: Doc, tag: Tag, note: string, citations: Citations) => {\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n if (doctag) {\n if (note.trim() || citations) {\n await updateDocTag.mutateAsync({\n tagId: tag.external_id,\n docId: doc.external_id,\n note: note || null,\n citations: citations,\n })\n } else {\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else if (note.trim() || citations) {\n await createDocTag.mutateAsync({\n tagId: tag.external_id,\n docIds: [doc.external_id],\n note: note || null,\n citations: citations,\n })\n }\n\n // Cache is already patched by useAssignDocTags/useUpdateDocTag/useRemoveDocTags hooks\n },\n [createDocTag, updateDocTag, deleteDocTag]\n )\n\n return {\n handleUpdateTagValue,\n handleUpdateTagWithCitations,\n }\n}\n","import { useArbiSessionState } from '@arbidocs/react'\nimport { useFilesGridStates } from '../store'\nimport type { GridState, GridApi } from 'ag-grid-community'\n/**\n * useReviewColumns Hook\n *\n * Provides drag-and-drop functionality for reordering columns in the review form.\n */\n\nimport { useState, useMemo, useCallback } from 'react'\nimport {\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport { arrayMove, sortableKeyboardCoordinates } from '@dnd-kit/sortable'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\n\n// Columns handled in the header/footer, not in the field list\nconst HEADER_HANDLED_COLUMNS = ['view', 'inConversation', 'shared']\n\ninterface ColumnInfo {\n id: string\n label: string\n type: 'standard' | 'custom'\n tag?: Tag\n}\n\ninterface UseReviewColumnsProps {\n gridId: string\n gridApi?: Pick<GridApi, 'getState' | 'isDestroyed'> | null\n workspaceTags: Tag[]\n getColumnLabel: (colId: string) => string\n onReorderColumns?: (newOrder: string[]) => void\n}\n\ninterface UseReviewColumnsResult {\n activeId: string | null\n hiddenExpanded: boolean\n setHiddenExpanded: (expanded: boolean) => void\n sensors: ReturnType<typeof useSensors>\n visibleColumns: string[]\n allColumns: ColumnInfo[]\n visibleColumnsList: ColumnInfo[]\n hiddenColumnsList: ColumnInfo[]\n activeColumn: ColumnInfo | null\n handleDragStart: (event: DragStartEvent) => void\n handleDragEnd: (event: DragEndEvent) => void\n handleHideColumn: (colId: string) => void\n handleShowColumn: (colId: string) => void\n}\n\nexport function useReviewColumns({\n gridId,\n gridApi,\n workspaceTags,\n getColumnLabel,\n onReorderColumns,\n}: UseReviewColumnsProps): UseReviewColumnsResult {\n const [activeId, setActiveId] = useState<string | null>(null)\n const [hiddenExpanded, setHiddenExpanded] = useState(false)\n\n // A host's shared session layout wins; the kit's normal persisted grid supports other hosts.\n // Before the first saved state, the ready grid already knows its initial column order.\n const sessionGrid = useArbiSessionState((state) => state.grid.states[gridId]) as\n GridState | undefined\n const ownGrid = useFilesGridStates((state) => state.gridStates[gridId])\n const gridState =\n sessionGrid ?? ownGrid ?? (gridApi && !gridApi.isDestroyed() ? gridApi.getState?.() : undefined)\n\n const hiddenColIds = useMemo(\n () => gridState?.columnVisibility?.hiddenColIds || [],\n [gridState?.columnVisibility?.hiddenColIds]\n )\n\n const orderedColIds = useMemo(\n () => gridState?.columnOrder?.orderedColIds || [],\n [gridState?.columnOrder?.orderedColIds]\n )\n\n // Visible columns = ordered columns minus hidden ones\n const visibleColumns = useMemo(\n () =>\n orderedColIds.filter(\n (colId) => !hiddenColIds.includes(colId) && colId !== 'ag-Grid-SelectionColumn'\n ),\n [orderedColIds, hiddenColIds]\n )\n\n // Drag sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n // Build list of all available columns (standard + custom tags)\n const allColumns = useMemo(() => {\n const result: ColumnInfo[] = []\n\n const allColIds = orderedColIds.filter(\n (colId) => !HEADER_HANDLED_COLUMNS.includes(colId) && colId !== 'ag-Grid-SelectionColumn'\n )\n\n allColIds.forEach((colId) => {\n const tag = workspaceTags.find((t) => t.external_id === colId)\n if (tag) {\n result.push({ id: colId, label: getColumnLabel(colId), type: 'custom', tag })\n } else {\n result.push({ id: colId, label: getColumnLabel(colId), type: 'standard' })\n }\n })\n\n return result\n }, [orderedColIds, workspaceTags, getColumnLabel])\n\n // Split columns into visible and hidden\n const visibleColumnsList = useMemo(() => {\n return visibleColumns\n .map((id) => allColumns.find((col) => col.id === id))\n .filter(Boolean) as ColumnInfo[]\n }, [visibleColumns, allColumns])\n\n const hiddenColumnsList = useMemo(() => {\n return allColumns.filter((col) => !visibleColumns.includes(col.id))\n }, [allColumns, visibleColumns])\n\n // Active column for drag overlay\n const activeColumn = useMemo(() => {\n if (!activeId) return null\n return allColumns.find((col) => col.id === activeId) || null\n }, [activeId, allColumns])\n\n // Hide a column\n const handleHideColumn = useCallback(\n (colId: string) => {\n if (visibleColumns.length <= 1) return\n const newVisibleColumns = visibleColumns.filter((id) => id !== colId)\n onReorderColumns?.(newVisibleColumns)\n },\n [visibleColumns, onReorderColumns]\n )\n\n // Show a column\n const handleShowColumn = useCallback(\n (colId: string) => {\n const newVisibleColumns = [...visibleColumns, colId]\n onReorderColumns?.(newVisibleColumns)\n },\n [visibleColumns, onReorderColumns]\n )\n\n // Drag handlers\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }, [])\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n setActiveId(null)\n\n if (!over) return\n\n const activeColId = active.id as string\n const isActiveInVisible = visibleColumns.includes(activeColId)\n\n const overId = over.id as string\n\n if (activeColId === overId) return\n\n const visibleIds = visibleColumns\n const hiddenIds = hiddenColumnsList.map((col) => col.id)\n\n const isActiveInHidden = hiddenIds.includes(activeColId)\n\n const isOverVisibleContainer = overId === 'visible-container'\n const isOverHiddenContainer = overId === 'hidden-container'\n const isOverInVisible = visibleIds.includes(overId) || isOverVisibleContainer\n const isOverInHidden = hiddenIds.includes(overId) || isOverHiddenContainer\n\n let newVisibleColumns = [...visibleColumns]\n\n // Moving from hidden to visible\n if (isActiveInHidden && isOverInVisible) {\n if (isOverVisibleContainer) {\n newVisibleColumns = [...newVisibleColumns, activeColId]\n } else {\n const dropIndex = newVisibleColumns.indexOf(overId)\n newVisibleColumns = [\n ...newVisibleColumns.slice(0, dropIndex),\n activeColId,\n ...newVisibleColumns.slice(dropIndex),\n ]\n }\n }\n // Moving from visible to hidden\n else if (isActiveInVisible && isOverInHidden) {\n if (newVisibleColumns.length <= 1) return\n newVisibleColumns = newVisibleColumns.filter((id) => id !== activeColId)\n }\n // Reordering within visible\n else if (isActiveInVisible && isOverInVisible && !isOverVisibleContainer) {\n const oldIndex = newVisibleColumns.indexOf(activeColId)\n const newIndex = newVisibleColumns.indexOf(overId)\n if (oldIndex !== -1 && newIndex !== -1) {\n newVisibleColumns = arrayMove(newVisibleColumns, oldIndex, newIndex)\n }\n }\n\n if (newVisibleColumns.join(',') !== visibleColumns.join(',')) {\n onReorderColumns?.(newVisibleColumns)\n }\n },\n [visibleColumns, hiddenColumnsList, onReorderColumns]\n )\n\n return {\n activeId,\n hiddenExpanded,\n setHiddenExpanded,\n sensors,\n visibleColumns,\n allColumns,\n visibleColumnsList,\n hiddenColumnsList,\n activeColumn,\n handleDragStart,\n handleDragEnd,\n handleHideColumn,\n handleShowColumn,\n }\n}\n","/**\n * DocumentReviewCard Component\n *\n * Dynamic vertical form renderer for document fields.\n * Renders columns (tags) vertically for a single document.\n * Schema + Data pattern: Tags = columns, DocTags = cell values.\n */\n\nimport { getEntityLabel, COLUMN_LABEL_FALLBACKS } from '@arbidocs/react/ui'\nimport { filterDocumentTags, tagsForScope } from '@arbidocs/sdk/browser'\nimport {\n useCreateTag,\n useTags,\n useUpdateDocuments,\n useAssignDocTags,\n useWorkspaceUsers,\n useWorkspaceRole,\n useWorkspaces,\n} from '@arbidocs/react'\nimport { useCallback, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { GripVertical } from 'lucide-react'\nimport { DndContext, closestCenter, DragOverlay } from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'\nimport type { GridApi } from 'ag-grid-community'\nimport type { WorkspaceDocument as Doc } from '@arbidocs/react'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\nimport type { DocTagCitations as Citations } from '../fields/documentField'\nimport { useRelatedDocuments } from '@arbidocs/react'\nimport { KeyValueRow } from '../../../home/KeyValueRow'\nimport { ConnectedTagEntity } from '../grid/ConnectedTagEntity'\nimport { documentFieldContent } from '../fields/documentField'\nimport { DroppableContainer } from '../../../components/DroppableContainer'\nimport { useConnectedWorkspace } from '../../ConnectionProvider'\nimport { useDocumentValueWrites } from './useDocumentValueWrites'\nimport { useReviewColumns } from './useReviewColumns'\n\nimport { useBlocksEnvironment } from '../../../provider/environment'\nimport { canEditDocumentFields, canDeleteDocument } from '../../../files/permissions'\n\ninterface DocumentReviewCardProps {\n /** Current document to display */\n currentDocument: Doc | null\n /** All documents for navigation (filtered/sorted) */\n documents: Doc[]\n /** Grid ID whose saved column order and visibility the form follows. */\n gridId: string\n /** Grid API for column definitions */\n gridApi: GridApi<Doc>\n /** Called when navigating to a different document */\n onNavigate: (docId: string) => void\n onOpenDocumentViewer: (docId?: string) => void\n onDeleteDocument: (docId: string) => void\n isDocumentViewerEnabled?: boolean\n onReorderColumns?: (newOrder: string[]) => void\n onCompareDocuments?: (docId: string, otherDocId: string) => void\n /** Pre-computed nav state from the parent. If omitted, the hook runs internally. */\n currentIndex?: number\n onPrevious?: () => void\n onNext?: () => void\n}\n\nexport function DocumentReviewCard({\n currentDocument: currentDoc,\n documents,\n gridId,\n gridApi,\n onDeleteDocument,\n onOpenDocumentViewer,\n onReorderColumns,\n onCompareDocuments,\n}: DocumentReviewCardProps) {\n const { notify } = useBlocksEnvironment()\n\n // Active citation state from Zustand\n\n const updateDocument = useUpdateDocuments()\n const createTagMutation = useCreateTag()\n const createDocTagMutation = useAssignDocTags()\n const { data: workspaceTagsRaw = [] } = useTags()\n const { data: workspaceUsers = [] } = useWorkspaceUsers()\n const workspaceRole = useWorkspaceRole()\n const { workspaceId, user, userId } = useConnectedWorkspace()\n const { data: workspaces = [] } = useWorkspaces()\n const ownershipMembers = workspaces.find(\n (workspace) => workspace.external_id === workspaceId\n )?.users\n // Legacy sessions can know the email before the workspace-specific id. This resolves document\n // ownership only; assigned workspace role above never comes from creator status or this lookup.\n const currentUserExtId = useMemo(\n () =>\n (user?.email\n ? ownershipMembers?.find((member) => member.user.email === user.email)?.user.external_id\n : undefined) ?? userId,\n [user?.email, userId, ownershipMembers]\n )\n\n // Sort tags by created_at for stable order\n const workspaceTags = useMemo(() => {\n return tagsForScope(filterDocumentTags(workspaceTagsRaw as Tag[]), 'document').sort(\n (a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()\n )\n }, [workspaceTagsRaw])\n\n // Build related docs map for all documents\n const relatedDocsMap = useRelatedDocuments(documents)\n\n // Helper to get column label from grid\n const getColumnLabel = useCallback(\n (colId: string): string => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n if (colDef?.headerName) return colDef.headerName\n }\n if (COLUMN_LABEL_FALLBACKS[colId]) return COLUMN_LABEL_FALLBACKS[colId]\n const tag = workspaceTags.find((t) => t.external_id === colId)\n if (tag) return tag.name\n return colId\n },\n [gridApi, workspaceTags]\n )\n\n // Helper to get column icon from grid\n const getColumnIcon = useCallback(\n (colId: string): React.ElementType | undefined => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n return colDef?.context?.icon\n }\n return undefined\n },\n [gridApi]\n )\n\n // Helper to check if column is editable\n const isColumnEditable = useCallback(\n (colId: string): boolean => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n if (colDef?.editable === true) return true\n if (typeof colDef?.editable === 'function') return true\n }\n return false\n },\n [gridApi]\n )\n\n // Use extracted hooks\n const {\n handleUpdateTagValue: updateTagValue,\n handleUpdateTagWithCitations: updateTagWithCitations,\n } = useDocumentValueWrites()\n\n const {\n sensors,\n visibleColumns,\n visibleColumnsList,\n activeColumn,\n handleDragStart,\n handleDragEnd,\n } = useReviewColumns({\n gridId,\n gridApi,\n workspaceTags,\n getColumnLabel,\n onReorderColumns,\n })\n\n // Get creator user for current document\n const currentDocCreator = useMemo(() => {\n if (!currentDoc?.created_by_ext_id) return undefined\n const workspaceUser = workspaceUsers?.find(\n (wu) => wu.user.external_id === currentDoc.created_by_ext_id\n )\n return workspaceUser?.user\n }, [currentDoc?.created_by_ext_id, workspaceUsers])\n\n // Same rule as the table grid, so a field is editable here exactly when it is there\n const canEdit = canEditDocumentFields(currentDoc, currentUserExtId, workspaceRole ?? null)\n\n // Handler for updating document fields\n const handleUpdateDocumentField = useCallback(\n async (field: string, value: unknown) => {\n if (!currentDoc) return\n\n if (!canEdit) {\n notify('Unsharing is not possible for this item', 'error')\n return\n }\n\n // Validate date field\n if (field === 'doc_date' && value) {\n const dateValue = value as string\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateValue)) {\n notify('Please enter date in YYYY-MM-DD format (e.g., 2024-11-24)', 'error')\n return\n }\n const date = new Date(dateValue)\n if (isNaN(date.getTime())) {\n notify('Please enter a valid date in YYYY-MM-DD format (e.g., 2024-11-24)', 'error')\n return\n }\n }\n\n // Handle metadata fields\n const metadataFields = ['title', 'doc_date', 'doc_nature', 'doc_author', 'doc_subject']\n if (metadataFields.includes(field)) {\n updateDocument.mutate({\n documents: [\n {\n external_id: currentDoc.external_id,\n doc_metadata: {\n ...currentDoc.doc_metadata,\n [field]: value,\n },\n },\n ],\n })\n } else {\n updateDocument.mutate({\n documents: [{ external_id: currentDoc.external_id, [field]: value }],\n })\n }\n\n // Send notification for privacy changes\n if (field === 'shared') {\n if (value === true) {\n notify(\n `Privacy: ${getEntityLabel('DOCUMENT')} now visible to ${getEntityLabel('WORKSPACE')} members`,\n 'success'\n )\n } else {\n notify(`Privacy: ${getEntityLabel('DOCUMENT')} visibility restricted`, 'success')\n }\n }\n },\n [currentDoc, canEdit, updateDocument, notify]\n )\n\n // Wrappers for tag mutations that include currentDoc\n const handleUpdateTagValue = useCallback(\n (tag: Tag, value: string | boolean) => {\n if (currentDoc) {\n updateTagValue(currentDoc, tag, value)\n }\n },\n [currentDoc, updateTagValue]\n )\n\n const handleUpdateTagWithCitations = useCallback(\n (tag: Tag, note: string, citations: Citations) => {\n if (currentDoc) {\n updateTagWithCitations(currentDoc, tag, note, citations)\n }\n },\n [currentDoc, updateTagWithCitations]\n )\n\n // Handler for creating a new label and applying it to the current doc\n const handleCreateAndApplyLabel = useCallback(\n async (name: string) => {\n if (!currentDoc || !name.trim()) return\n const newTag = await createTagMutation.mutateAsync({\n name: name.trim(),\n tagType: { type: 'checkbox', options: [] },\n shared: false,\n })\n if (newTag?.external_id) {\n await createDocTagMutation.mutateAsync({\n tagId: newTag.external_id,\n docIds: [currentDoc.external_id],\n })\n // Cache is already patched by useAssignDocTags hook\n }\n },\n [currentDoc, createTagMutation, createDocTagMutation]\n )\n\n if (!currentDoc) {\n return <div className=\"p-4 text-center text-muted-foreground\">No document selected</div>\n }\n\n return (\n <div\n className=\"h-full flex flex-col bg-card @container\"\n data-testid={`document-card-navigator-${currentDoc.external_id}`}\n >\n {/* Body: Fields with Drag-and-Drop */}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden min-h-0\">\n <div className=\"space-y-4 py-2\">\n {/* Visible Fields */}\n <DroppableContainer id=\"visible-container\" className=\"w-full space-y-0.5\">\n <SortableContext items={visibleColumns} strategy={verticalListSortingStrategy}>\n {visibleColumnsList.map((col) => {\n const fieldContent = documentFieldContent({\n columnId: col.id,\n doc: currentDoc,\n canEdit,\n workspaceTags,\n allDocuments: documents,\n creator: currentDocCreator,\n getColumnLabel,\n getColumnIcon,\n isColumnEditable,\n onUpdateDocumentField: handleUpdateDocumentField,\n onUpdateTagValue: handleUpdateTagValue,\n onUpdateTagWithCitations: handleUpdateTagWithCitations,\n onCreateAndApplyLabel: handleCreateAndApplyLabel,\n relatedDocs: relatedDocsMap.get(currentDoc.external_id),\n onOpenDocument: onOpenDocumentViewer,\n onDeleteDocument,\n canDeleteRelatedDocument: (doc) =>\n canDeleteDocument(doc, currentUserExtId, workspaceRole ?? null),\n onCompareDocuments,\n })\n if (!fieldContent) return null\n\n return (\n <KeyValueRow\n key={col.id}\n sortableId={col.id}\n label={fieldContent.label}\n icon={fieldContent.icon}\n labelSlot={\n fieldContent.tag ? (\n <ConnectedTagEntity tag={fieldContent.tag} size=\"md\" />\n ) : undefined\n }\n data-testid={`navigator-field-${col.id}`}\n >\n {fieldContent.children}\n </KeyValueRow>\n )\n })}\n </SortableContext>\n </DroppableContainer>\n </div>\n </div>\n\n {/* Drag Overlay */}\n {createPortal(\n <DragOverlay dropAnimation={null}>\n {activeColumn ? (\n <div className=\"flex items-center gap-1.5 p-1.5 rounded bg-card border-2 border-blue-text shadow-lg cursor-grabbing pointer-events-none\">\n <GripVertical className=\"w-3.5 h-3.5 flex-shrink-0\" />\n <span className=\"text-sm whitespace-nowrap\">{activeColumn.label}</span>\n </div>\n ) : null}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/files/review/useDocumentValueWrites.ts","../src/connection/files/review/useReviewColumns.ts","../src/connection/files/review/DocumentReviewCard.tsx"],"names":["useConnectedWorkspace","useAssignDocTags","useUpdateDocTag","useRemoveDocTags","useRef","useCallback","isPresenceTag","useState","useArbiSessionState","useFilesGridStates","useMemo","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","useBlocksEnvironment","useUpdateDocuments","useCreateTag","useTags","useWorkspaceUsers","useWorkspaceRole","useWorkspaces","tagsForScope","filterDocumentTags","useRelatedDocuments","COLUMN_LABEL_FALLBACKS","canEditDocumentFields","getEntityLabel","jsx","jsxs","DndContext","closestCenter","DroppableContainer","SortableContext","verticalListSortingStrategy","documentFieldContent","canDeleteDocument","KeyValueRow","ConnectedTagEntity","createPortal","DragOverlay","GripVertical"],"mappings":"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","file":"DocumentReviewCard-M53XFLI2.cjs","sourcesContent":["/**\n * useDocumentValueWrites Hook\n *\n * Provides stable mutation functions for creating, updating, and deleting document tags.\n * Handles checkbox, text, number, and select tag types with citation support.\n */\n\nimport { isPresenceTag } from '@arbidocs/sdk/browser'\nimport { useCallback, useRef } from 'react'\n\nimport { useConnectedWorkspace } from '../../ConnectionProvider'\nimport type { WorkspaceDocument as Doc } from '@arbidocs/react'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\nimport type { DocTagCitations as Citations } from '../fields/documentField'\nimport { useAssignDocTags, useRemoveDocTags, useUpdateDocTag } from '@arbidocs/react'\n\ninterface UseDocumentValueWritesResult {\n handleUpdateTagValue: (doc: Doc, tag: Tag, value: string | boolean) => Promise<void>\n handleUpdateTagWithCitations: (\n doc: Doc,\n tag: Tag,\n note: string,\n citations: Citations\n ) => Promise<void>\n}\n\nexport function useDocumentValueWrites(): UseDocumentValueWritesResult {\n const { workspaceId: selectedWorkspaceId } = useConnectedWorkspace()\n\n // Stabilize mutation hooks - only update when workspaceId changes\n const createDocTagHook = useAssignDocTags()\n const updateDocTagHook = useUpdateDocTag()\n const deleteDocTagHook = useRemoveDocTags()\n\n const mutationsRef = useRef({\n createDocTag: createDocTagHook,\n updateDocTag: updateDocTagHook,\n deleteDocTag: deleteDocTagHook,\n workspaceId: selectedWorkspaceId,\n })\n\n if (mutationsRef.current.workspaceId !== selectedWorkspaceId) {\n mutationsRef.current = {\n createDocTag: createDocTagHook,\n updateDocTag: updateDocTagHook,\n deleteDocTag: deleteDocTagHook,\n workspaceId: selectedWorkspaceId,\n }\n }\n\n const createDocTag = mutationsRef.current.createDocTag\n const updateDocTag = mutationsRef.current.updateDocTag\n const deleteDocTag = mutationsRef.current.deleteDocTag\n\n const handleUpdateTagValue = useCallback(\n async (doc: Doc, tag: Tag, value: string | boolean) => {\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n if (isPresenceTag(tag)) {\n // Label, issue or entity: create if checked, delete if unchecked\n if (value === true && !doctag) {\n await createDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n } else if (value === false && doctag) {\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else {\n // Text/number/select: update note field\n const noteValue = value as string\n\n if (doctag) {\n if (noteValue.trim()) {\n await updateDocTag.mutateAsync({\n tagId: tag.external_id,\n docId: doc.external_id,\n note: noteValue,\n })\n } else {\n // Delete doctag when value is cleared\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else if (noteValue.trim()) {\n await createDocTag.mutateAsync({\n tagId: tag.external_id,\n docIds: [doc.external_id],\n note: noteValue,\n })\n }\n }\n\n // Cache is already patched by useAssignDocTags/useUpdateDocTag/useRemoveDocTags hooks\n },\n [createDocTag, updateDocTag, deleteDocTag]\n )\n\n const handleUpdateTagWithCitations = useCallback(\n async (doc: Doc, tag: Tag, note: string, citations: Citations) => {\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n if (doctag) {\n if (note.trim() || citations) {\n await updateDocTag.mutateAsync({\n tagId: tag.external_id,\n docId: doc.external_id,\n note: note || null,\n citations: citations,\n })\n } else {\n await deleteDocTag.mutateAsync({ tagId: tag.external_id, docIds: [doc.external_id] })\n }\n } else if (note.trim() || citations) {\n await createDocTag.mutateAsync({\n tagId: tag.external_id,\n docIds: [doc.external_id],\n note: note || null,\n citations: citations,\n })\n }\n\n // Cache is already patched by useAssignDocTags/useUpdateDocTag/useRemoveDocTags hooks\n },\n [createDocTag, updateDocTag, deleteDocTag]\n )\n\n return {\n handleUpdateTagValue,\n handleUpdateTagWithCitations,\n }\n}\n","import { useArbiSessionState } from '@arbidocs/react'\nimport { useFilesGridStates } from '../store'\nimport type { GridState, GridApi } from 'ag-grid-community'\n/**\n * useReviewColumns Hook\n *\n * Provides drag-and-drop functionality for reordering columns in the review form.\n */\n\nimport { useState, useMemo, useCallback } from 'react'\nimport {\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport { arrayMove, sortableKeyboardCoordinates } from '@dnd-kit/sortable'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\n\n// Columns handled in the header/footer, not in the field list\nconst HEADER_HANDLED_COLUMNS = ['view', 'inConversation', 'shared']\n\ninterface ColumnInfo {\n id: string\n label: string\n type: 'standard' | 'custom'\n tag?: Tag\n}\n\ninterface UseReviewColumnsProps {\n gridId: string\n gridApi?: Pick<GridApi, 'getState' | 'isDestroyed'> | null\n workspaceTags: Tag[]\n getColumnLabel: (colId: string) => string\n onReorderColumns?: (newOrder: string[]) => void\n}\n\ninterface UseReviewColumnsResult {\n activeId: string | null\n hiddenExpanded: boolean\n setHiddenExpanded: (expanded: boolean) => void\n sensors: ReturnType<typeof useSensors>\n visibleColumns: string[]\n allColumns: ColumnInfo[]\n visibleColumnsList: ColumnInfo[]\n hiddenColumnsList: ColumnInfo[]\n activeColumn: ColumnInfo | null\n handleDragStart: (event: DragStartEvent) => void\n handleDragEnd: (event: DragEndEvent) => void\n handleHideColumn: (colId: string) => void\n handleShowColumn: (colId: string) => void\n}\n\nexport function useReviewColumns({\n gridId,\n gridApi,\n workspaceTags,\n getColumnLabel,\n onReorderColumns,\n}: UseReviewColumnsProps): UseReviewColumnsResult {\n const [activeId, setActiveId] = useState<string | null>(null)\n const [hiddenExpanded, setHiddenExpanded] = useState(false)\n\n // A host's shared session layout wins; the kit's normal persisted grid supports other hosts.\n // Before the first saved state, the ready grid already knows its initial column order.\n const sessionGrid = useArbiSessionState((state) => state.grid.states[gridId]) as\n GridState | undefined\n const ownGrid = useFilesGridStates((state) => state.gridStates[gridId])\n const gridState =\n sessionGrid ?? ownGrid ?? (gridApi && !gridApi.isDestroyed() ? gridApi.getState?.() : undefined)\n\n const hiddenColIds = useMemo(\n () => gridState?.columnVisibility?.hiddenColIds || [],\n [gridState?.columnVisibility?.hiddenColIds]\n )\n\n const orderedColIds = useMemo(\n () => gridState?.columnOrder?.orderedColIds || [],\n [gridState?.columnOrder?.orderedColIds]\n )\n\n // Visible columns = ordered columns minus hidden ones\n const visibleColumns = useMemo(\n () =>\n orderedColIds.filter(\n (colId) => !hiddenColIds.includes(colId) && colId !== 'ag-Grid-SelectionColumn'\n ),\n [orderedColIds, hiddenColIds]\n )\n\n // Drag sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n // Build list of all available columns (standard + custom tags)\n const allColumns = useMemo(() => {\n const result: ColumnInfo[] = []\n\n const allColIds = orderedColIds.filter(\n (colId) => !HEADER_HANDLED_COLUMNS.includes(colId) && colId !== 'ag-Grid-SelectionColumn'\n )\n\n allColIds.forEach((colId) => {\n const tag = workspaceTags.find((t) => t.external_id === colId)\n if (tag) {\n result.push({ id: colId, label: getColumnLabel(colId), type: 'custom', tag })\n } else {\n result.push({ id: colId, label: getColumnLabel(colId), type: 'standard' })\n }\n })\n\n return result\n }, [orderedColIds, workspaceTags, getColumnLabel])\n\n // Split columns into visible and hidden\n const visibleColumnsList = useMemo(() => {\n return visibleColumns\n .map((id) => allColumns.find((col) => col.id === id))\n .filter(Boolean) as ColumnInfo[]\n }, [visibleColumns, allColumns])\n\n const hiddenColumnsList = useMemo(() => {\n return allColumns.filter((col) => !visibleColumns.includes(col.id))\n }, [allColumns, visibleColumns])\n\n // Active column for drag overlay\n const activeColumn = useMemo(() => {\n if (!activeId) return null\n return allColumns.find((col) => col.id === activeId) || null\n }, [activeId, allColumns])\n\n // Hide a column\n const handleHideColumn = useCallback(\n (colId: string) => {\n if (visibleColumns.length <= 1) return\n const newVisibleColumns = visibleColumns.filter((id) => id !== colId)\n onReorderColumns?.(newVisibleColumns)\n },\n [visibleColumns, onReorderColumns]\n )\n\n // Show a column\n const handleShowColumn = useCallback(\n (colId: string) => {\n const newVisibleColumns = [...visibleColumns, colId]\n onReorderColumns?.(newVisibleColumns)\n },\n [visibleColumns, onReorderColumns]\n )\n\n // Drag handlers\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }, [])\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n setActiveId(null)\n\n if (!over) return\n\n const activeColId = active.id as string\n const isActiveInVisible = visibleColumns.includes(activeColId)\n\n const overId = over.id as string\n\n if (activeColId === overId) return\n\n const visibleIds = visibleColumns\n const hiddenIds = hiddenColumnsList.map((col) => col.id)\n\n const isActiveInHidden = hiddenIds.includes(activeColId)\n\n const isOverVisibleContainer = overId === 'visible-container'\n const isOverHiddenContainer = overId === 'hidden-container'\n const isOverInVisible = visibleIds.includes(overId) || isOverVisibleContainer\n const isOverInHidden = hiddenIds.includes(overId) || isOverHiddenContainer\n\n let newVisibleColumns = [...visibleColumns]\n\n // Moving from hidden to visible\n if (isActiveInHidden && isOverInVisible) {\n if (isOverVisibleContainer) {\n newVisibleColumns = [...newVisibleColumns, activeColId]\n } else {\n const dropIndex = newVisibleColumns.indexOf(overId)\n newVisibleColumns = [\n ...newVisibleColumns.slice(0, dropIndex),\n activeColId,\n ...newVisibleColumns.slice(dropIndex),\n ]\n }\n }\n // Moving from visible to hidden\n else if (isActiveInVisible && isOverInHidden) {\n if (newVisibleColumns.length <= 1) return\n newVisibleColumns = newVisibleColumns.filter((id) => id !== activeColId)\n }\n // Reordering within visible\n else if (isActiveInVisible && isOverInVisible && !isOverVisibleContainer) {\n const oldIndex = newVisibleColumns.indexOf(activeColId)\n const newIndex = newVisibleColumns.indexOf(overId)\n if (oldIndex !== -1 && newIndex !== -1) {\n newVisibleColumns = arrayMove(newVisibleColumns, oldIndex, newIndex)\n }\n }\n\n if (newVisibleColumns.join(',') !== visibleColumns.join(',')) {\n onReorderColumns?.(newVisibleColumns)\n }\n },\n [visibleColumns, hiddenColumnsList, onReorderColumns]\n )\n\n return {\n activeId,\n hiddenExpanded,\n setHiddenExpanded,\n sensors,\n visibleColumns,\n allColumns,\n visibleColumnsList,\n hiddenColumnsList,\n activeColumn,\n handleDragStart,\n handleDragEnd,\n handleHideColumn,\n handleShowColumn,\n }\n}\n","/**\n * DocumentReviewCard Component\n *\n * Dynamic vertical form renderer for document fields.\n * Renders columns (tags) vertically for a single document.\n * Schema + Data pattern: Tags = columns, DocTags = cell values.\n */\n\nimport { getEntityLabel, COLUMN_LABEL_FALLBACKS } from '@arbidocs/react/ui'\nimport { filterDocumentTags, tagsForScope } from '@arbidocs/sdk/browser'\nimport {\n useCreateTag,\n useTags,\n useUpdateDocuments,\n useAssignDocTags,\n useWorkspaceUsers,\n useWorkspaceRole,\n useWorkspaces,\n} from '@arbidocs/react'\nimport { useCallback, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { GripVertical } from 'lucide-react'\nimport { DndContext, closestCenter, DragOverlay } from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'\nimport type { GridApi } from 'ag-grid-community'\nimport type { WorkspaceDocument as Doc } from '@arbidocs/react'\nimport type { TagResponse as Tag } from '@arbidocs/sdk/browser'\nimport type { DocTagCitations as Citations } from '../fields/documentField'\nimport { useRelatedDocuments } from '@arbidocs/react'\nimport { KeyValueRow } from '../../../home/KeyValueRow'\nimport { ConnectedTagEntity } from '../grid/ConnectedTagEntity'\nimport { documentFieldContent } from '../fields/documentField'\nimport { DroppableContainer } from '../../../components/DroppableContainer'\nimport { useConnectedWorkspace } from '../../ConnectionProvider'\nimport { useDocumentValueWrites } from './useDocumentValueWrites'\nimport { useReviewColumns } from './useReviewColumns'\n\nimport { useBlocksEnvironment } from '../../../provider/environment'\nimport { canEditDocumentFields, canDeleteDocument } from '../../../files/permissions'\n\ninterface DocumentReviewCardProps {\n /** Current document to display */\n currentDocument: Doc | null\n /** All documents for navigation (filtered/sorted) */\n documents: Doc[]\n /** Grid ID whose saved column order and visibility the form follows. */\n gridId: string\n /** Grid API for column definitions */\n gridApi: GridApi<Doc>\n /** Called when navigating to a different document */\n onNavigate: (docId: string) => void\n onOpenDocumentViewer: (docId?: string) => void\n onDeleteDocument: (docId: string) => void\n isDocumentViewerEnabled?: boolean\n onReorderColumns?: (newOrder: string[]) => void\n onCompareDocuments?: (docId: string, otherDocId: string) => void\n /** Pre-computed nav state from the parent. If omitted, the hook runs internally. */\n currentIndex?: number\n onPrevious?: () => void\n onNext?: () => void\n}\n\nexport function DocumentReviewCard({\n currentDocument: currentDoc,\n documents,\n gridId,\n gridApi,\n onDeleteDocument,\n onOpenDocumentViewer,\n onReorderColumns,\n onCompareDocuments,\n}: DocumentReviewCardProps) {\n const { notify } = useBlocksEnvironment()\n\n // Active citation state from Zustand\n\n const updateDocument = useUpdateDocuments()\n const createTagMutation = useCreateTag()\n const createDocTagMutation = useAssignDocTags()\n const { data: workspaceTagsRaw = [] } = useTags()\n const { data: workspaceUsers = [] } = useWorkspaceUsers()\n const workspaceRole = useWorkspaceRole()\n const { workspaceId, user, userId } = useConnectedWorkspace()\n const { data: workspaces = [] } = useWorkspaces()\n const ownershipMembers = workspaces.find(\n (workspace) => workspace.external_id === workspaceId\n )?.users\n // Legacy sessions can know the email before the workspace-specific id. This resolves document\n // ownership only; assigned workspace role above never comes from creator status or this lookup.\n const currentUserExtId = useMemo(\n () =>\n (user?.email\n ? ownershipMembers?.find((member) => member.user.email === user.email)?.user.external_id\n : undefined) ?? userId,\n [user?.email, userId, ownershipMembers]\n )\n\n // Sort tags by created_at for stable order\n const workspaceTags = useMemo(() => {\n return tagsForScope(filterDocumentTags(workspaceTagsRaw as Tag[]), 'document').sort(\n (a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()\n )\n }, [workspaceTagsRaw])\n\n // Build related docs map for all documents\n const relatedDocsMap = useRelatedDocuments(documents)\n\n // Helper to get column label from grid\n const getColumnLabel = useCallback(\n (colId: string): string => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n if (colDef?.headerName) return colDef.headerName\n }\n if (COLUMN_LABEL_FALLBACKS[colId]) return COLUMN_LABEL_FALLBACKS[colId]\n const tag = workspaceTags.find((t) => t.external_id === colId)\n if (tag) return tag.name\n return colId\n },\n [gridApi, workspaceTags]\n )\n\n // Helper to get column icon from grid\n const getColumnIcon = useCallback(\n (colId: string): React.ElementType | undefined => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n return colDef?.context?.icon\n }\n return undefined\n },\n [gridApi]\n )\n\n // Helper to check if column is editable\n const isColumnEditable = useCallback(\n (colId: string): boolean => {\n if (gridApi && !gridApi.isDestroyed()) {\n const colDef = gridApi.getColumnDef(colId)\n if (colDef?.editable === true) return true\n if (typeof colDef?.editable === 'function') return true\n }\n return false\n },\n [gridApi]\n )\n\n // Use extracted hooks\n const {\n handleUpdateTagValue: updateTagValue,\n handleUpdateTagWithCitations: updateTagWithCitations,\n } = useDocumentValueWrites()\n\n const {\n sensors,\n visibleColumns,\n visibleColumnsList,\n activeColumn,\n handleDragStart,\n handleDragEnd,\n } = useReviewColumns({\n gridId,\n gridApi,\n workspaceTags,\n getColumnLabel,\n onReorderColumns,\n })\n\n // Get creator user for current document\n const currentDocCreator = useMemo(() => {\n if (!currentDoc?.created_by_ext_id) return undefined\n const workspaceUser = workspaceUsers?.find(\n (wu) => wu.user.external_id === currentDoc.created_by_ext_id\n )\n return workspaceUser?.user\n }, [currentDoc?.created_by_ext_id, workspaceUsers])\n\n // Same rule as the table grid, so a field is editable here exactly when it is there\n const canEdit = canEditDocumentFields(currentDoc, currentUserExtId, workspaceRole ?? null)\n\n // Handler for updating document fields\n const handleUpdateDocumentField = useCallback(\n async (field: string, value: unknown) => {\n if (!currentDoc) return\n\n if (!canEdit) {\n notify('Unsharing is not possible for this item', 'error')\n return\n }\n\n // Validate date field\n if (field === 'doc_date' && value) {\n const dateValue = value as string\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateValue)) {\n notify('Please enter date in YYYY-MM-DD format (e.g., 2024-11-24)', 'error')\n return\n }\n const date = new Date(dateValue)\n if (isNaN(date.getTime())) {\n notify('Please enter a valid date in YYYY-MM-DD format (e.g., 2024-11-24)', 'error')\n return\n }\n }\n\n // Handle metadata fields\n const metadataFields = ['title', 'doc_date', 'doc_nature', 'doc_author', 'doc_subject']\n if (metadataFields.includes(field)) {\n updateDocument.mutate({\n documents: [\n {\n external_id: currentDoc.external_id,\n doc_metadata: {\n ...currentDoc.doc_metadata,\n [field]: value,\n },\n },\n ],\n })\n } else {\n updateDocument.mutate({\n documents: [{ external_id: currentDoc.external_id, [field]: value }],\n })\n }\n\n // Send notification for privacy changes\n if (field === 'shared') {\n if (value === true) {\n notify(\n `Privacy: ${getEntityLabel('DOCUMENT')} now visible to ${getEntityLabel('WORKSPACE')} members`,\n 'success'\n )\n } else {\n notify(`Privacy: ${getEntityLabel('DOCUMENT')} visibility restricted`, 'success')\n }\n }\n },\n [currentDoc, canEdit, updateDocument, notify]\n )\n\n // Wrappers for tag mutations that include currentDoc\n const handleUpdateTagValue = useCallback(\n (tag: Tag, value: string | boolean) => {\n if (currentDoc) {\n updateTagValue(currentDoc, tag, value)\n }\n },\n [currentDoc, updateTagValue]\n )\n\n const handleUpdateTagWithCitations = useCallback(\n (tag: Tag, note: string, citations: Citations) => {\n if (currentDoc) {\n updateTagWithCitations(currentDoc, tag, note, citations)\n }\n },\n [currentDoc, updateTagWithCitations]\n )\n\n // Handler for creating a new label and applying it to the current doc\n const handleCreateAndApplyLabel = useCallback(\n async (name: string) => {\n if (!currentDoc || !name.trim()) return\n const newTag = await createTagMutation.mutateAsync({\n name: name.trim(),\n tagType: { type: 'checkbox', options: [] },\n shared: false,\n })\n if (newTag?.external_id) {\n await createDocTagMutation.mutateAsync({\n tagId: newTag.external_id,\n docIds: [currentDoc.external_id],\n })\n // Cache is already patched by useAssignDocTags hook\n }\n },\n [currentDoc, createTagMutation, createDocTagMutation]\n )\n\n if (!currentDoc) {\n return <div className=\"p-4 text-center text-muted-foreground\">No document selected</div>\n }\n\n return (\n <div\n className=\"h-full flex flex-col bg-card @container\"\n data-testid={`document-card-navigator-${currentDoc.external_id}`}\n >\n {/* Body: Fields with Drag-and-Drop */}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden min-h-0\">\n <div className=\"space-y-4 py-2\">\n {/* Visible Fields */}\n <DroppableContainer id=\"visible-container\" className=\"w-full space-y-0.5\">\n <SortableContext items={visibleColumns} strategy={verticalListSortingStrategy}>\n {visibleColumnsList.map((col) => {\n const fieldContent = documentFieldContent({\n columnId: col.id,\n doc: currentDoc,\n canEdit,\n workspaceTags,\n allDocuments: documents,\n creator: currentDocCreator,\n getColumnLabel,\n getColumnIcon,\n isColumnEditable,\n onUpdateDocumentField: handleUpdateDocumentField,\n onUpdateTagValue: handleUpdateTagValue,\n onUpdateTagWithCitations: handleUpdateTagWithCitations,\n onCreateAndApplyLabel: handleCreateAndApplyLabel,\n relatedDocs: relatedDocsMap.get(currentDoc.external_id),\n onOpenDocument: onOpenDocumentViewer,\n onDeleteDocument,\n canDeleteRelatedDocument: (doc) =>\n canDeleteDocument(doc, currentUserExtId, workspaceRole ?? null),\n onCompareDocuments,\n })\n if (!fieldContent) return null\n\n return (\n <KeyValueRow\n key={col.id}\n sortableId={col.id}\n label={fieldContent.label}\n icon={fieldContent.icon}\n labelSlot={\n fieldContent.tag ? (\n <ConnectedTagEntity tag={fieldContent.tag} size=\"md\" />\n ) : undefined\n }\n data-testid={`navigator-field-${col.id}`}\n >\n {fieldContent.children}\n </KeyValueRow>\n )\n })}\n </SortableContext>\n </DroppableContainer>\n </div>\n </div>\n\n {/* Drag Overlay */}\n {createPortal(\n <DragOverlay dropAnimation={null}>\n {activeColumn ? (\n <div className=\"flex items-center gap-1.5 p-1.5 rounded bg-card border-2 border-blue-text shadow-lg cursor-grabbing pointer-events-none\">\n <GripVertical className=\"w-3.5 h-3.5 flex-shrink-0\" />\n <span className=\"text-sm whitespace-nowrap\">{activeColumn.label}</span>\n </div>\n ) : null}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </div>\n )\n}\n"]}
@@ -1,79 +1,67 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk2PZT3J34_cjs = require('./chunk-2PZT3J34.cjs');
5
- require('./chunk-NAJN32MF.cjs');
6
- require('./chunk-NLOETJCB.cjs');
7
- require('./chunk-GKVE5JGB.cjs');
8
- var chunk7VUJGHMY_cjs = require('./chunk-7VUJGHMY.cjs');
9
- require('./chunk-5LTIZ44D.cjs');
10
- require('./chunk-XTR26TNE.cjs');
4
+ var chunkVWBYE3XY_cjs = require('./chunk-VWBYE3XY.cjs');
5
+ require('./chunk-XF355M7O.cjs');
6
+ require('./chunk-2F57IO7S.cjs');
7
+ require('./chunk-UFT22LAB.cjs');
8
+ var chunkJD2HX2BR_cjs = require('./chunk-JD2HX2BR.cjs');
9
+ require('./chunk-WFMWKPGY.cjs');
10
+ require('./chunk-4TTX6ZNS.cjs');
11
11
  require('./chunk-4CIVQWAX.cjs');
12
12
  require('./chunk-PL7HUTM3.cjs');
13
- require('./chunk-VJ5ZLRBD.cjs');
14
- require('./chunk-734NPQNR.cjs');
15
- require('./chunk-UUENH4BJ.cjs');
16
- require('./chunk-BVAT4EVC.cjs');
17
- var chunkEATIFPKP_cjs = require('./chunk-EATIFPKP.cjs');
13
+ require('./chunk-GFUOCGY6.cjs');
14
+ require('./chunk-ADDQKZ5I.cjs');
15
+ require('./chunk-KXIRVKCJ.cjs');
16
+ require('./chunk-5QERK4PK.cjs');
17
+ var chunkT73BHNQX_cjs = require('./chunk-T73BHNQX.cjs');
18
18
  require('./chunk-HYUKPHCT.cjs');
19
- require('./chunk-JQLWKNJO.cjs');
19
+ require('./chunk-ALK3PUUB.cjs');
20
20
  require('./chunk-223D4727.cjs');
21
21
  require('./chunk-SNUBQMIS.cjs');
22
- require('./chunk-C2OICDMI.cjs');
22
+ require('./chunk-7557LDAN.cjs');
23
23
  require('./chunk-4ONPEVTP.cjs');
24
24
  require('./chunk-V3KLUWQQ.cjs');
25
25
  require('./chunk-P5AQYC4D.cjs');
26
- require('./chunk-GQXPNIRE.cjs');
27
- require('./chunk-LHWOKOMP.cjs');
26
+ require('./chunk-WAV762GP.cjs');
27
+ require('./chunk-46P7IDBX.cjs');
28
28
  require('./chunk-GNZAH6UI.cjs');
29
29
  require('./chunk-JH6JTI76.cjs');
30
30
  require('./chunk-QQMMCXBP.cjs');
31
31
  require('./chunk-DTMBAFIL.cjs');
32
32
  require('./chunk-ZESMRGDV.cjs');
33
33
  var chunk5UYFLFNR_cjs = require('./chunk-5UYFLFNR.cjs');
34
- require('./chunk-5F4DCIHS.cjs');
35
34
  require('./chunk-VCEX7COE.cjs');
36
35
  require('./chunk-34HQO4ZQ.cjs');
37
- require('./chunk-CT3SLXB7.cjs');
38
- require('./chunk-EHP6OH5D.cjs');
39
- require('./chunk-QFXILJMJ.cjs');
36
+ require('./chunk-KA3F6TIH.cjs');
37
+ require('./chunk-K4763GD5.cjs');
38
+ require('./chunk-2RLA6QO2.cjs');
40
39
  var chunkMZZ3SBQL_cjs = require('./chunk-MZZ3SBQL.cjs');
41
- require('./chunk-4NPCDS2X.cjs');
42
- require('./chunk-Q6DQGGP4.cjs');
40
+ require('./chunk-NY3YUCOW.cjs');
41
+ require('./chunk-325GVZE6.cjs');
43
42
  require('./chunk-WQMR3O2D.cjs');
44
43
  require('./chunk-ORELHENJ.cjs');
45
44
  require('./chunk-NWNVWO6L.cjs');
46
45
  require('./chunk-SK6HQ46Q.cjs');
47
46
  require('./chunk-TG2GM7WJ.cjs');
48
- require('./chunk-DEXUL3T6.cjs');
49
- require('./chunk-AFQTQC7A.cjs');
50
- require('./chunk-XJEXFEWG.cjs');
51
- require('./chunk-Z2XZ2D4N.cjs');
52
- require('./chunk-YZSQ7F5K.cjs');
53
- require('./chunk-MCXS6X37.cjs');
54
- require('./chunk-KQF7POTG.cjs');
47
+ require('./chunk-MNIQDXM6.cjs');
48
+ require('./chunk-E3Y7RI3J.cjs');
55
49
  require('./chunk-VKH3BEZE.cjs');
56
- require('./chunk-75BNMCUX.cjs');
57
50
  require('./chunk-OEJQFPWO.cjs');
58
51
  require('./chunk-7JLJH5CW.cjs');
59
52
  require('./chunk-EVZH6Z5O.cjs');
60
53
  require('./chunk-OYXWQTHF.cjs');
61
54
  require('./chunk-S237ORM3.cjs');
62
55
  require('./chunk-II2OEXHW.cjs');
63
- require('./chunk-FX3K6LNZ.cjs');
64
- require('./chunk-RYVZDFVO.cjs');
56
+ require('./chunk-JJZOL5MG.cjs');
65
57
  require('./chunk-3YEXZX4H.cjs');
66
58
  require('./chunk-4PA6VCCR.cjs');
67
- require('./chunk-MZ2KZXNU.cjs');
59
+ require('./chunk-WXUU3COI.cjs');
68
60
  require('./chunk-AHDJXIUB.cjs');
69
61
  require('./chunk-YVCOQHCE.cjs');
70
62
  require('./chunk-RL2HI6NP.cjs');
71
63
  require('./chunk-6UZC4XVV.cjs');
72
- require('./chunk-QGVOT7E4.cjs');
73
- require('./chunk-QRAQZTJE.cjs');
74
- require('./chunk-UDSHVNU3.cjs');
75
64
  require('./chunk-JV5TVUOU.cjs');
76
- require('./chunk-IPSHAMO2.cjs');
77
65
  require('./chunk-ZVEW3JBT.cjs');
78
66
  require('./chunk-EG7EJFUE.cjs');
79
67
  require('./chunk-VG24E4JJ.cjs');
@@ -85,14 +73,27 @@ require('./chunk-HQDR43JC.cjs');
85
73
  var chunkJR2YSBD5_cjs = require('./chunk-JR2YSBD5.cjs');
86
74
  require('./chunk-3YZKDCWY.cjs');
87
75
  require('./chunk-SJSGSHIT.cjs');
88
- require('./chunk-PPCATBOY.cjs');
89
76
  require('./chunk-ZW6FPIFC.cjs');
90
- require('./chunk-LJJJ6CYH.cjs');
91
- require('./chunk-MNIQDXM6.cjs');
92
- require('./chunk-E3Y7RI3J.cjs');
77
+ require('./chunk-5F4DCIHS.cjs');
78
+ require('./chunk-CT3SLXB7.cjs');
79
+ require('./chunk-DEXUL3T6.cjs');
80
+ require('./chunk-AFQTQC7A.cjs');
81
+ require('./chunk-XJEXFEWG.cjs');
82
+ require('./chunk-Z2XZ2D4N.cjs');
83
+ require('./chunk-YZSQ7F5K.cjs');
84
+ require('./chunk-MCXS6X37.cjs');
85
+ require('./chunk-KQF7POTG.cjs');
86
+ require('./chunk-75BNMCUX.cjs');
87
+ require('./chunk-FX3K6LNZ.cjs');
88
+ require('./chunk-QGVOT7E4.cjs');
89
+ require('./chunk-QRAQZTJE.cjs');
90
+ require('./chunk-UDSHVNU3.cjs');
91
+ require('./chunk-IPSHAMO2.cjs');
92
+ require('./chunk-PPCATBOY.cjs');
93
93
  var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
94
94
  require('./chunk-JDFBEGQO.cjs');
95
95
  require('./chunk-ULWRNGGE.cjs');
96
+ require('./chunk-LJJJ6CYH.cjs');
96
97
  require('./chunk-PLIF5CUV.cjs');
97
98
  var react$1 = require('react');
98
99
  var lucideReact = require('lucide-react');
@@ -114,14 +115,14 @@ var TAB_TEST_IDS = {
114
115
  };
115
116
  function DocumentViewerDialog({
116
117
  documentId,
117
- tabs = chunk2PZT3J34_cjs.DEFAULT_DOCUMENT_VIEWER_TABS,
118
+ tabs = chunkVWBYE3XY_cjs.DEFAULT_DOCUMENT_VIEWER_TABS,
118
119
  initialTab,
119
120
  labels: labelOverrides,
120
- askSuggestions = chunk2PZT3J34_cjs.DEFAULT_ASK_SUGGESTIONS,
121
+ askSuggestions = chunkVWBYE3XY_cjs.DEFAULT_ASK_SUGGESTIONS,
121
122
  onClose,
122
123
  renderDocument
123
124
  }) {
124
- const labels = { ...chunk2PZT3J34_cjs.DEFAULT_DOCUMENT_VIEWER_LABELS, ...labelOverrides };
125
+ const labels = { ...chunkVWBYE3XY_cjs.DEFAULT_DOCUMENT_VIEWER_LABELS, ...labelOverrides };
125
126
  const { workspaceId, live } = chunkJR2YSBD5_cjs.useConnectedWorkspace();
126
127
  const session = react.useArbiSessionStore();
127
128
  const { openNewConversation } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
@@ -146,7 +147,7 @@ function DocumentViewerDialog({
146
147
  };
147
148
  const [question, setQuestion] = react$1.useState("");
148
149
  const askInputRef = react$1.useRef(null);
149
- const slash = chunk2PZT3J34_cjs.useSlashField({
150
+ const slash = chunkVWBYE3XY_cjs.useSlashField({
150
151
  text: question,
151
152
  setText: setQuestion,
152
153
  inputRef: askInputRef,
@@ -170,7 +171,7 @@ function DocumentViewerDialog({
170
171
  title
171
172
  ] }),
172
173
  options.length > 1 && tab && /* @__PURE__ */ jsxRuntime.jsx(
173
- chunkEATIFPKP_cjs.SegmentedControl,
174
+ chunkT73BHNQX_cjs.SegmentedControl,
174
175
  {
175
176
  ariaLabel: "Document view",
176
177
  className: "mt-2 w-fit max-w-full overflow-x-auto [&_button]:whitespace-nowrap max-sm:[&_button]:px-2.5",
@@ -230,11 +231,11 @@ function FilesViewerDialog({ artifactRuntimeUrl, ...props }) {
230
231
  DocumentViewerDialog,
231
232
  {
232
233
  ...props,
233
- renderDocument: (id) => /* @__PURE__ */ jsxRuntime.jsx(chunk7VUJGHMY_cjs.ConnectedDocumentViewer, { documentId: id, artifactRuntimeUrl })
234
+ renderDocument: (id) => /* @__PURE__ */ jsxRuntime.jsx(chunkJD2HX2BR_cjs.ConnectedDocumentViewer, { documentId: id, artifactRuntimeUrl })
234
235
  }
235
236
  );
236
237
  }
237
238
 
238
239
  exports.FilesViewerDialog = FilesViewerDialog;
239
- //# sourceMappingURL=FilesViewerDialog-IZI63FOV.cjs.map
240
- //# sourceMappingURL=FilesViewerDialog-IZI63FOV.cjs.map
240
+ //# sourceMappingURL=FilesViewerDialog-2QCCRWF2.cjs.map
241
+ //# sourceMappingURL=FilesViewerDialog-2QCCRWF2.cjs.map