@arbidocs/blocks 0.5.73 → 0.5.74

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 (214) hide show
  1. package/dist/{ConnectedCallDock-H7BIPVSJ.cjs → ConnectedCallDock-3SRG4QYZ.cjs} +15 -15
  2. package/dist/{ConnectedCallDock-H7BIPVSJ.cjs.map → ConnectedCallDock-3SRG4QYZ.cjs.map} +1 -1
  3. package/dist/{ConnectedCallDock-BXL37OAD.js → ConnectedCallDock-BUDIHBES.js} +6 -6
  4. package/dist/{ConnectedCallDock-BXL37OAD.js.map → ConnectedCallDock-BUDIHBES.js.map} +1 -1
  5. package/dist/{ConnectedCallRoom-SGASQJJV.cjs → ConnectedCallRoom-U5UZUI5C.cjs} +7 -7
  6. package/dist/{ConnectedCallRoom-SGASQJJV.cjs.map → ConnectedCallRoom-U5UZUI5C.cjs.map} +1 -1
  7. package/dist/{ConnectedCallRoom-WKWJVJXC.js → ConnectedCallRoom-X2XU5X5B.js} +6 -6
  8. package/dist/{ConnectedCallRoom-WKWJVJXC.js.map → ConnectedCallRoom-X2XU5X5B.js.map} +1 -1
  9. package/dist/{ConnectedDocumentViewer-RHVKM7RG.js → ConnectedDocumentViewer-6GTO2LYM.js} +25 -25
  10. package/dist/{ConnectedDocumentViewer-RHVKM7RG.js.map → ConnectedDocumentViewer-6GTO2LYM.js.map} +1 -1
  11. package/dist/{ConnectedDocumentViewer-SG6ZWXK7.cjs → ConnectedDocumentViewer-JZWQFKYH.cjs} +26 -26
  12. package/dist/{ConnectedDocumentViewer-SG6ZWXK7.cjs.map → ConnectedDocumentViewer-JZWQFKYH.cjs.map} +1 -1
  13. package/dist/{ConnectedNativeDocxComparison-6SHIVVKM.js → ConnectedNativeDocxComparison-PBMS77ZP.js} +12 -12
  14. package/dist/ConnectedNativeDocxComparison-PBMS77ZP.js.map +1 -0
  15. package/dist/{ConnectedNativeDocxComparison-QC6JDXYK.cjs → ConnectedNativeDocxComparison-R4OFGVHY.cjs} +13 -13
  16. package/dist/ConnectedNativeDocxComparison-R4OFGVHY.cjs.map +1 -0
  17. package/dist/{ConnectedNativeDocxEditor-QNT5362V.js → ConnectedNativeDocxEditor-27JZI2D5.js} +11 -11
  18. package/dist/ConnectedNativeDocxEditor-27JZI2D5.js.map +1 -0
  19. package/dist/{ConnectedNativeDocxEditor-4OJUNP6S.cjs → ConnectedNativeDocxEditor-774XRIP3.cjs} +13 -13
  20. package/dist/ConnectedNativeDocxEditor-774XRIP3.cjs.map +1 -0
  21. package/dist/{ConnectedStreamedWordArtifact-ADL2W26Z.cjs → ConnectedStreamedWordArtifact-7TNIQTVE.cjs} +13 -13
  22. package/dist/ConnectedStreamedWordArtifact-7TNIQTVE.cjs.map +1 -0
  23. package/dist/{ConnectedStreamedWordArtifact-QNITXEPJ.js → ConnectedStreamedWordArtifact-XEFXYMKS.js} +12 -12
  24. package/dist/ConnectedStreamedWordArtifact-XEFXYMKS.js.map +1 -0
  25. package/dist/{DocumentReviewCard-35TDEAPY.cjs → DocumentReviewCard-BGQUXMPU.cjs} +17 -17
  26. package/dist/{DocumentReviewCard-35TDEAPY.cjs.map → DocumentReviewCard-BGQUXMPU.cjs.map} +1 -1
  27. package/dist/{DocumentReviewCard-UWPIOAJB.js → DocumentReviewCard-VJP5VO4F.js} +12 -12
  28. package/dist/{DocumentReviewCard-UWPIOAJB.js.map → DocumentReviewCard-VJP5VO4F.js.map} +1 -1
  29. package/dist/{WorkspaceTableView-VWCDUNKJ.cjs → WorkspaceTableView-KINAZSXG.cjs} +9 -9
  30. package/dist/{WorkspaceTableView-VWCDUNKJ.cjs.map → WorkspaceTableView-KINAZSXG.cjs.map} +1 -1
  31. package/dist/{WorkspaceTableView-P2X7N2NO.js → WorkspaceTableView-T26UN2HI.js} +7 -7
  32. package/dist/{WorkspaceTableView-P2X7N2NO.js.map → WorkspaceTableView-T26UN2HI.js.map} +1 -1
  33. package/dist/agents/index.cjs +379 -379
  34. package/dist/agents/index.js +13 -13
  35. package/dist/calls/index.cjs +135 -135
  36. package/dist/calls/index.js +11 -11
  37. package/dist/chat/index.cjs +1 -1
  38. package/dist/chat/index.js +1 -1
  39. package/dist/{chunk-PNJKRZ2F.cjs → chunk-2LUI2FUC.cjs} +67 -67
  40. package/dist/{chunk-PNJKRZ2F.cjs.map → chunk-2LUI2FUC.cjs.map} +1 -1
  41. package/dist/{chunk-UOC3C3FN.js → chunk-2P43MR5P.js} +4 -4
  42. package/dist/{chunk-UOC3C3FN.js.map → chunk-2P43MR5P.js.map} +1 -1
  43. package/dist/{chunk-AEHV2DHR.js → chunk-3TKRCYFN.js} +3 -3
  44. package/dist/{chunk-AEHV2DHR.js.map → chunk-3TKRCYFN.js.map} +1 -1
  45. package/dist/{chunk-XKFVESOU.cjs → chunk-4FVKWJT2.cjs} +19 -19
  46. package/dist/{chunk-XKFVESOU.cjs.map → chunk-4FVKWJT2.cjs.map} +1 -1
  47. package/dist/{chunk-MTUSMN2P.cjs → chunk-55JI2IGZ.cjs} +4 -4
  48. package/dist/{chunk-MTUSMN2P.cjs.map → chunk-55JI2IGZ.cjs.map} +1 -1
  49. package/dist/{chunk-ZWY44PC4.cjs → chunk-5Q2U7GLI.cjs} +4 -4
  50. package/dist/{chunk-ZWY44PC4.cjs.map → chunk-5Q2U7GLI.cjs.map} +1 -1
  51. package/dist/{chunk-UXHVJZGR.js → chunk-65BJLW4F.js} +3 -3
  52. package/dist/{chunk-UXHVJZGR.js.map → chunk-65BJLW4F.js.map} +1 -1
  53. package/dist/{chunk-T3KZXTVK.js → chunk-7LX6GPX4.js} +3 -3
  54. package/dist/{chunk-T3KZXTVK.js.map → chunk-7LX6GPX4.js.map} +1 -1
  55. package/dist/{chunk-UYPQAII2.js → chunk-7NOVQP2Y.js} +13 -13
  56. package/dist/{chunk-UYPQAII2.js.map → chunk-7NOVQP2Y.js.map} +1 -1
  57. package/dist/{chunk-DOLIOPTR.js → chunk-7ZCM2GR2.js} +5 -5
  58. package/dist/{chunk-DOLIOPTR.js.map → chunk-7ZCM2GR2.js.map} +1 -1
  59. package/dist/{chunk-HQCRGBPC.cjs → chunk-7ZL6OVGO.cjs} +3 -3
  60. package/dist/{chunk-HQCRGBPC.cjs.map → chunk-7ZL6OVGO.cjs.map} +1 -1
  61. package/dist/{chunk-G5YMIMBD.cjs → chunk-AWUSTKQ7.cjs} +27 -27
  62. package/dist/{chunk-G5YMIMBD.cjs.map → chunk-AWUSTKQ7.cjs.map} +1 -1
  63. package/dist/{chunk-R3VZRC4E.cjs → chunk-BPHRHJO6.cjs} +19 -19
  64. package/dist/{chunk-R3VZRC4E.cjs.map → chunk-BPHRHJO6.cjs.map} +1 -1
  65. package/dist/{chunk-5RWNJQH3.js → chunk-BV34QPKE.js} +5 -5
  66. package/dist/{chunk-5RWNJQH3.js.map → chunk-BV34QPKE.js.map} +1 -1
  67. package/dist/{chunk-V3PGYBG6.cjs → chunk-C3XE65OA.cjs} +3 -3
  68. package/dist/{chunk-V3PGYBG6.cjs.map → chunk-C3XE65OA.cjs.map} +1 -1
  69. package/dist/{chunk-KRWCL3CF.cjs → chunk-CDQDBUS2.cjs} +7 -7
  70. package/dist/{chunk-KRWCL3CF.cjs.map → chunk-CDQDBUS2.cjs.map} +1 -1
  71. package/dist/{chunk-CH225H5Z.cjs → chunk-DE262536.cjs} +3 -3
  72. package/dist/{chunk-CH225H5Z.cjs.map → chunk-DE262536.cjs.map} +1 -1
  73. package/dist/{chunk-RC2WAHJ5.cjs → chunk-EHZGODA4.cjs} +3 -3
  74. package/dist/{chunk-RC2WAHJ5.cjs.map → chunk-EHZGODA4.cjs.map} +1 -1
  75. package/dist/{chunk-AASVQZHW.js → chunk-EWHD3BY5.js} +3 -3
  76. package/dist/{chunk-AASVQZHW.js.map → chunk-EWHD3BY5.js.map} +1 -1
  77. package/dist/{chunk-W3UUJUNA.cjs → chunk-FI2SDF5X.cjs} +22 -22
  78. package/dist/{chunk-W3UUJUNA.cjs.map → chunk-FI2SDF5X.cjs.map} +1 -1
  79. package/dist/{chunk-GJ3CQ6ND.cjs → chunk-FT5WHS5K.cjs} +29 -29
  80. package/dist/{chunk-GJ3CQ6ND.cjs.map → chunk-FT5WHS5K.cjs.map} +1 -1
  81. package/dist/{chunk-MPKLFCBD.js → chunk-FZOSUEE5.js} +3 -3
  82. package/dist/{chunk-MPKLFCBD.js.map → chunk-FZOSUEE5.js.map} +1 -1
  83. package/dist/{chunk-E5F3AVWB.js → chunk-GALELOTT.js} +11 -11
  84. package/dist/{chunk-E5F3AVWB.js.map → chunk-GALELOTT.js.map} +1 -1
  85. package/dist/{chunk-DILPI4LO.js → chunk-GI3VQ4Q2.js} +3 -3
  86. package/dist/{chunk-DILPI4LO.js.map → chunk-GI3VQ4Q2.js.map} +1 -1
  87. package/dist/{chunk-HZMQ4W7P.js → chunk-HO53IJIQ.js} +3 -3
  88. package/dist/{chunk-HZMQ4W7P.js.map → chunk-HO53IJIQ.js.map} +1 -1
  89. package/dist/{chunk-SJO5ETZS.cjs → chunk-HTD7PMZ3.cjs} +14 -14
  90. package/dist/{chunk-SJO5ETZS.cjs.map → chunk-HTD7PMZ3.cjs.map} +1 -1
  91. package/dist/{chunk-KENIEIQ6.js → chunk-IJUNXPGS.js} +3 -3
  92. package/dist/{chunk-KENIEIQ6.js.map → chunk-IJUNXPGS.js.map} +1 -1
  93. package/dist/{chunk-CKE3CF2C.js → chunk-IMIE5NOQ.js} +4 -4
  94. package/dist/{chunk-CKE3CF2C.js.map → chunk-IMIE5NOQ.js.map} +1 -1
  95. package/dist/{chunk-QBCY4UZ4.cjs → chunk-J423JAH7.cjs} +3 -3
  96. package/dist/{chunk-QBCY4UZ4.cjs.map → chunk-J423JAH7.cjs.map} +1 -1
  97. package/dist/{chunk-23ZFQRVZ.js → chunk-JC5EZT67.js} +6 -6
  98. package/dist/{chunk-23ZFQRVZ.js.map → chunk-JC5EZT67.js.map} +1 -1
  99. package/dist/{chunk-OTJGPNDD.js → chunk-JLR7FXZJ.js} +7 -7
  100. package/dist/{chunk-OTJGPNDD.js.map → chunk-JLR7FXZJ.js.map} +1 -1
  101. package/dist/{chunk-P2N4ARP3.cjs → chunk-JVHO5PAJ.cjs} +5 -5
  102. package/dist/{chunk-P2N4ARP3.cjs.map → chunk-JVHO5PAJ.cjs.map} +1 -1
  103. package/dist/{chunk-NJBUFLPJ.js → chunk-KYLNAAYI.js} +3 -3
  104. package/dist/{chunk-NJBUFLPJ.js.map → chunk-KYLNAAYI.js.map} +1 -1
  105. package/dist/{chunk-GB3XD7CM.cjs → chunk-LZSYUVDG.cjs} +73 -73
  106. package/dist/{chunk-GB3XD7CM.cjs.map → chunk-LZSYUVDG.cjs.map} +1 -1
  107. package/dist/{chunk-TPK4DNEV.js → chunk-MXF3MHYC.js} +3 -3
  108. package/dist/{chunk-TPK4DNEV.js.map → chunk-MXF3MHYC.js.map} +1 -1
  109. package/dist/{chunk-W76J76SI.js → chunk-ND4SFASU.js} +12 -12
  110. package/dist/{chunk-W76J76SI.js.map → chunk-ND4SFASU.js.map} +1 -1
  111. package/dist/{chunk-I42TAD2S.js → chunk-NNFGR27U.js} +3 -3
  112. package/dist/{chunk-I42TAD2S.js.map → chunk-NNFGR27U.js.map} +1 -1
  113. package/dist/{chunk-EREULRPU.cjs → chunk-NTV5XMJT.cjs} +34 -34
  114. package/dist/{chunk-EREULRPU.cjs.map → chunk-NTV5XMJT.cjs.map} +1 -1
  115. package/dist/{chunk-3BBM2UQJ.cjs → chunk-O7TUZNIQ.cjs} +4 -4
  116. package/dist/{chunk-3BBM2UQJ.cjs.map → chunk-O7TUZNIQ.cjs.map} +1 -1
  117. package/dist/{chunk-SWT7YQPY.cjs → chunk-OBCGNZ54.cjs} +62 -62
  118. package/dist/{chunk-SWT7YQPY.cjs.map → chunk-OBCGNZ54.cjs.map} +1 -1
  119. package/dist/{chunk-6FTL6XGO.cjs → chunk-OJCTMOWL.cjs} +7 -7
  120. package/dist/{chunk-6FTL6XGO.cjs.map → chunk-OJCTMOWL.cjs.map} +1 -1
  121. package/dist/{chunk-I5RD6Q6S.js → chunk-OUOKUBUE.js} +3 -3
  122. package/dist/{chunk-I5RD6Q6S.js.map → chunk-OUOKUBUE.js.map} +1 -1
  123. package/dist/{chunk-4QVHQX5J.cjs → chunk-P66OI6E4.cjs} +3 -3
  124. package/dist/{chunk-4QVHQX5J.cjs.map → chunk-P66OI6E4.cjs.map} +1 -1
  125. package/dist/{chunk-LIEID4J2.js → chunk-PA4EGGCI.js} +3 -3
  126. package/dist/{chunk-LIEID4J2.js.map → chunk-PA4EGGCI.js.map} +1 -1
  127. package/dist/{chunk-JXIMOCZI.cjs → chunk-POLG3CR3.cjs} +3 -3
  128. package/dist/{chunk-JXIMOCZI.cjs.map → chunk-POLG3CR3.cjs.map} +1 -1
  129. package/dist/{chunk-GZAM727N.js → chunk-PV5ICMAE.js} +4 -4
  130. package/dist/{chunk-GZAM727N.js.map → chunk-PV5ICMAE.js.map} +1 -1
  131. package/dist/{chunk-T3CILFBC.js → chunk-QZ5FDIT6.js} +3 -3
  132. package/dist/{chunk-T3CILFBC.js.map → chunk-QZ5FDIT6.js.map} +1 -1
  133. package/dist/{chunk-3HZPDO4D.cjs → chunk-RADE22SM.cjs} +10 -10
  134. package/dist/{chunk-3HZPDO4D.cjs.map → chunk-RADE22SM.cjs.map} +1 -1
  135. package/dist/{chunk-OSVVM2VE.js → chunk-RDIFRGGF.js} +4 -4
  136. package/dist/{chunk-OSVVM2VE.js.map → chunk-RDIFRGGF.js.map} +1 -1
  137. package/dist/{chunk-SV56GBJW.cjs → chunk-RTYU6ZGO.cjs} +4 -4
  138. package/dist/{chunk-SV56GBJW.cjs.map → chunk-RTYU6ZGO.cjs.map} +1 -1
  139. package/dist/{chunk-L26C3Q6T.cjs → chunk-SYPW2WUW.cjs} +5 -5
  140. package/dist/{chunk-L26C3Q6T.cjs.map → chunk-SYPW2WUW.cjs.map} +1 -1
  141. package/dist/{chunk-7JKW5CZ3.js → chunk-TOE3LBYG.js} +4 -4
  142. package/dist/{chunk-7JKW5CZ3.js.map → chunk-TOE3LBYG.js.map} +1 -1
  143. package/dist/{chunk-MKCBXCUC.js → chunk-TQ4VGQHG.js} +3 -3
  144. package/dist/{chunk-MKCBXCUC.js.map → chunk-TQ4VGQHG.js.map} +1 -1
  145. package/dist/{chunk-IZZUBJQE.cjs → chunk-UAOBHZ4D.cjs} +3 -3
  146. package/dist/{chunk-IZZUBJQE.cjs.map → chunk-UAOBHZ4D.cjs.map} +1 -1
  147. package/dist/{chunk-Y37HQ4M2.cjs → chunk-UICJN7O2.cjs} +3 -3
  148. package/dist/{chunk-Y37HQ4M2.cjs.map → chunk-UICJN7O2.cjs.map} +1 -1
  149. package/dist/{chunk-UWGGRZXN.cjs → chunk-URW6E5SG.cjs} +62 -62
  150. package/dist/{chunk-UWGGRZXN.cjs.map → chunk-URW6E5SG.cjs.map} +1 -1
  151. package/dist/{chunk-4NZ65WVN.cjs → chunk-W3BECCTZ.cjs} +3 -3
  152. package/dist/{chunk-4NZ65WVN.cjs.map → chunk-W3BECCTZ.cjs.map} +1 -1
  153. package/dist/{chunk-M3SVHBUH.cjs → chunk-W5FED2H2.cjs} +4 -4
  154. package/dist/{chunk-M3SVHBUH.cjs.map → chunk-W5FED2H2.cjs.map} +1 -1
  155. package/dist/{chunk-KQT6Y7MY.js → chunk-WZRWV6EZ.js} +3 -3
  156. package/dist/{chunk-KQT6Y7MY.js.map → chunk-WZRWV6EZ.js.map} +1 -1
  157. package/dist/{chunk-W5KIGSYL.cjs → chunk-X5AG2UZZ.cjs} +3 -3
  158. package/dist/{chunk-W5KIGSYL.cjs.map → chunk-X5AG2UZZ.cjs.map} +1 -1
  159. package/dist/{chunk-SP6ILDTM.js → chunk-XJ3WWAYV.js} +3 -3
  160. package/dist/{chunk-SP6ILDTM.js.map → chunk-XJ3WWAYV.js.map} +1 -1
  161. package/dist/{chunk-QNAVJ73S.js → chunk-XTEH237Z.js} +17 -17
  162. package/dist/{chunk-QNAVJ73S.js.map → chunk-XTEH237Z.js.map} +1 -1
  163. package/dist/{chunk-XBXCEPCP.cjs → chunk-XXPDAENX.cjs} +9 -9
  164. package/dist/{chunk-XBXCEPCP.cjs.map → chunk-XXPDAENX.cjs.map} +1 -1
  165. package/dist/{chunk-MBXYJIK3.js → chunk-YGXW2XAU.js} +3 -3
  166. package/dist/{chunk-MBXYJIK3.js.map → chunk-YGXW2XAU.js.map} +1 -1
  167. package/dist/{chunk-CR7S4CJD.js → chunk-YUAPBWLL.js} +3 -3
  168. package/dist/{chunk-CR7S4CJD.js.map → chunk-YUAPBWLL.js.map} +1 -1
  169. package/dist/{chunk-5MPTUH5L.cjs → chunk-Z3UBSASC.cjs} +11 -11
  170. package/dist/{chunk-5MPTUH5L.cjs.map → chunk-Z3UBSASC.cjs.map} +1 -1
  171. package/dist/{chunk-VE3Q4MPI.js → chunk-Z5JLS5DX.js} +3 -3
  172. package/dist/{chunk-VE3Q4MPI.js.map → chunk-Z5JLS5DX.js.map} +1 -1
  173. package/dist/{chunk-5II4FQEQ.js → chunk-ZVQK7TNZ.js} +3 -3
  174. package/dist/{chunk-5II4FQEQ.js.map → chunk-ZVQK7TNZ.js.map} +1 -1
  175. package/dist/collaboration/index.cjs +1 -1
  176. package/dist/collaboration/index.js +1 -1
  177. package/dist/connect/docx.cjs +19 -19
  178. package/dist/connect/docx.js +15 -15
  179. package/dist/connect/index.cjs +1042 -1042
  180. package/dist/connect/index.js +72 -72
  181. package/dist/connect/viewer.cjs +24 -24
  182. package/dist/connect/viewer.js +23 -23
  183. package/dist/dashboards/index.cjs +1 -1
  184. package/dist/dashboards/index.js +1 -1
  185. package/dist/document-tools/index.cjs +17 -17
  186. package/dist/document-tools/index.js +2 -2
  187. package/dist/embed/index.cjs +36 -36
  188. package/dist/embed/index.js +31 -31
  189. package/dist/facts/index.cjs +48 -48
  190. package/dist/facts/index.js +5 -5
  191. package/dist/files/index.cjs +224 -224
  192. package/dist/files/index.js +4 -4
  193. package/dist/home/index.cjs +31 -31
  194. package/dist/home/index.js +4 -4
  195. package/dist/index.cjs +1877 -1877
  196. package/dist/index.js +47 -47
  197. package/dist/settings/index.cjs +157 -157
  198. package/dist/settings/index.js +3 -3
  199. package/dist/shell/index.cjs +113 -113
  200. package/dist/shell/index.js +9 -9
  201. package/dist/site/index.cjs +17 -17
  202. package/dist/site/index.js +1 -1
  203. package/dist/studio/index.cjs +19 -19
  204. package/dist/studio/index.js +16 -16
  205. package/dist/workflow-canvas/index.cjs +55 -55
  206. package/dist/workflow-canvas/index.js +31 -31
  207. package/node_modules/@arbidocs/coedit/package.json +1 -1
  208. package/package.json +5 -5
  209. package/dist/ConnectedNativeDocxComparison-6SHIVVKM.js.map +0 -1
  210. package/dist/ConnectedNativeDocxComparison-QC6JDXYK.cjs.map +0 -1
  211. package/dist/ConnectedNativeDocxEditor-4OJUNP6S.cjs.map +0 -1
  212. package/dist/ConnectedNativeDocxEditor-QNT5362V.js.map +0 -1
  213. package/dist/ConnectedStreamedWordArtifact-ADL2W26Z.cjs.map +0 -1
  214. package/dist/ConnectedStreamedWordArtifact-QNITXEPJ.js.map +0 -1
@@ -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":"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","file":"DocumentReviewCard-35TDEAPY.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-BGQUXMPU.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,15 +1,15 @@
1
1
  "use client";
2
- import { documentFieldContent, ConnectedTagEntity } from './chunk-GZAM727N.js';
3
- import { useFilesGridStates } from './chunk-5II4FQEQ.js';
4
- import './chunk-HZMQ4W7P.js';
5
- import './chunk-MPKLFCBD.js';
2
+ import { documentFieldContent, ConnectedTagEntity } from './chunk-PV5ICMAE.js';
3
+ import { useFilesGridStates } from './chunk-ZVQK7TNZ.js';
4
+ import './chunk-HO53IJIQ.js';
6
5
  import { KeyValueRow } from './chunk-XRL4R2TT.js';
6
+ import './chunk-FZOSUEE5.js';
7
+ import { canEditDocumentFields, canDeleteDocument } from './chunk-WZRWV6EZ.js';
8
+ import './chunk-OHRWYRTH.js';
7
9
  import './chunk-TSH726KP.js';
8
- import { canEditDocumentFields, canDeleteDocument } from './chunk-KQT6Y7MY.js';
9
10
  import './chunk-RC6VTY2H.js';
10
- import './chunk-OHRWYRTH.js';
11
- import './chunk-MZA7GMOH.js';
12
11
  import './chunk-6HKLTYNN.js';
12
+ import './chunk-MZA7GMOH.js';
13
13
  import { DroppableContainer } from './chunk-63IH7V5F.js';
14
14
  import './chunk-3UIJLUXN.js';
15
15
  import './chunk-7RITEVXA.js';
@@ -24,17 +24,17 @@ import './chunk-M4S75AEJ.js';
24
24
  import './chunk-5LXQPP2K.js';
25
25
  import './chunk-L3BEWZWT.js';
26
26
  import './chunk-P4CH2ATT.js';
27
+ import './chunk-AUS3KBHJ.js';
27
28
  import './chunk-4BYXXU4M.js';
28
29
  import './chunk-7F5Z4K5W.js';
30
+ import './chunk-SLSBJRWW.js';
29
31
  import './chunk-I6F6RBKV.js';
30
32
  import './chunk-WNDIVNPT.js';
31
33
  import { useConnectedWorkspace } from './chunk-KECVJAR6.js';
32
34
  import './chunk-UMR5F7HD.js';
33
35
  import './chunk-S33RJOOV.js';
34
- import './chunk-AUS3KBHJ.js';
35
- import './chunk-5VYJP6XD.js';
36
- import './chunk-SLSBJRWW.js';
37
36
  import './chunk-NPLYHR2E.js';
37
+ import './chunk-5VYJP6XD.js';
38
38
  import { useBlocksEnvironment } from './chunk-DMVNEIJ4.js';
39
39
  import './chunk-GUHDDJ4W.js';
40
40
  import './chunk-TX2ZICS7.js';
@@ -515,5 +515,5 @@ function DocumentReviewCard({
515
515
  }
516
516
 
517
517
  export { DocumentReviewCard };
518
- //# sourceMappingURL=DocumentReviewCard-UWPIOAJB.js.map
519
- //# sourceMappingURL=DocumentReviewCard-UWPIOAJB.js.map
518
+ //# sourceMappingURL=DocumentReviewCard-VJP5VO4F.js.map
519
+ //# sourceMappingURL=DocumentReviewCard-VJP5VO4F.js.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":["useCallback","useAssignDocTags","useMemo"],"mappings":"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","file":"DocumentReviewCard-UWPIOAJB.js","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":["useCallback","useAssignDocTags","useMemo"],"mappings":"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","file":"DocumentReviewCard-VJP5VO4F.js","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,10 +1,10 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkL26C3Q6T_cjs = require('./chunk-L26C3Q6T.cjs');
4
+ var chunkSYPW2WUW_cjs = require('./chunk-SYPW2WUW.cjs');
5
5
  var chunkKWJW5TMH_cjs = require('./chunk-KWJW5TMH.cjs');
6
- require('./chunk-4QVHQX5J.cjs');
7
6
  var chunkOU3RGQFX_cjs = require('./chunk-OU3RGQFX.cjs');
7
+ require('./chunk-P66OI6E4.cjs');
8
8
  require('./chunk-324RBHCF.cjs');
9
9
  require('./chunk-223D4727.cjs');
10
10
  require('./chunk-IRY63R4L.cjs');
@@ -15,15 +15,15 @@ require('./chunk-RFIBUWLF.cjs');
15
15
  require('./chunk-AQPZ4QMV.cjs');
16
16
  require('./chunk-DVUZTGVL.cjs');
17
17
  var chunkRL2HI6NP_cjs = require('./chunk-RL2HI6NP.cjs');
18
+ require('./chunk-32HW2Q33.cjs');
18
19
  var chunkLKK52DEY_cjs = require('./chunk-LKK52DEY.cjs');
20
+ require('./chunk-FX3K6LNZ.cjs');
19
21
  require('./chunk-M74FWYNL.cjs');
20
22
  require('./chunk-VZOOGA47.cjs');
21
23
  require('./chunk-EFS3XXZS.cjs');
22
24
  require('./chunk-JNJDX4DM.cjs');
23
- require('./chunk-32HW2Q33.cjs');
24
- var chunkUFEXJIEY_cjs = require('./chunk-UFEXJIEY.cjs');
25
- require('./chunk-FX3K6LNZ.cjs');
26
25
  require('./chunk-PPCATBOY.cjs');
26
+ var chunkUFEXJIEY_cjs = require('./chunk-UFEXJIEY.cjs');
27
27
  require('./chunk-OV6ZI2NW.cjs');
28
28
  require('./chunk-ULWRNGGE.cjs');
29
29
  require('./chunk-PLIF5CUV.cjs');
@@ -261,7 +261,7 @@ function WorkspaceTableView({
261
261
  onGridStateChange,
262
262
  workspaceState
263
263
  }) {
264
- const { stripeEnabled } = chunkL26C3Q6T_cjs.useBillingSupport();
264
+ const { stripeEnabled } = chunkSYPW2WUW_cjs.useBillingSupport();
265
265
  const { groups, projects, selfId, isCollapsed, toggleGroup, selected, setSelected } = list;
266
266
  const rows = react.useMemo(() => buildWorkspaceTableRows(groups, isCollapsed), [groups, isCollapsed]);
267
267
  const latest = react.useRef({
@@ -295,7 +295,7 @@ function WorkspaceTableView({
295
295
  const project = latest.current.projects.find(
296
296
  (p) => p.external_id === group.projectExtId
297
297
  );
298
- const billing = chunkL26C3Q6T_cjs.projectGroupBilling(project, {
298
+ const billing = chunkSYPW2WUW_cjs.projectGroupBilling(project, {
299
299
  isOwned: group.isOwned,
300
300
  stripeEnabled: latest.current.stripeEnabled
301
301
  });
@@ -388,5 +388,5 @@ function WorkspaceTableView({
388
388
  }
389
389
 
390
390
  exports.WorkspaceTableView = WorkspaceTableView;
391
- //# sourceMappingURL=WorkspaceTableView-VWCDUNKJ.cjs.map
392
- //# sourceMappingURL=WorkspaceTableView-VWCDUNKJ.cjs.map
391
+ //# sourceMappingURL=WorkspaceTableView-KINAZSXG.cjs.map
392
+ //# sourceMappingURL=WorkspaceTableView-KINAZSXG.cjs.map