@arbidocs/blocks 0.4.137 → 0.4.139

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 (203) hide show
  1. package/dist/agents/definitions/AgentConnectInstructions.d.ts +12 -0
  2. package/dist/agents/definitions/defaults.d.ts +12 -0
  3. package/dist/agents/definitions/index.d.ts +2 -0
  4. package/dist/agents/index.cjs +457 -418
  5. package/dist/agents/index.js +12 -13
  6. package/dist/agents/skills/SkillLibraryDetail.d.ts +26 -0
  7. package/dist/agents/skills/index.d.ts +2 -0
  8. package/dist/agents/skills/skillLibrary.d.ts +46 -0
  9. package/dist/calendar/CalendarFormDialog.d.ts +13 -0
  10. package/dist/calendar/ProposeTimeDialog.d.ts +22 -0
  11. package/dist/calendar/WeeklyHoursEditor.d.ts +7 -0
  12. package/dist/calendar/access-setup.d.ts +8 -0
  13. package/dist/calendar/api-mapping.d.ts +22 -0
  14. package/dist/calendar/booking-form.d.ts +46 -0
  15. package/dist/calendar/conference.d.ts +11 -0
  16. package/dist/calendar/errors.d.ts +7 -0
  17. package/dist/calendar/feeds.d.ts +2 -0
  18. package/dist/calendar/freebusy.d.ts +22 -0
  19. package/dist/calendar/ics.d.ts +33 -0
  20. package/dist/calendar/index.cjs +472 -4293
  21. package/dist/calendar/index.cjs.map +1 -1
  22. package/dist/calendar/index.d.ts +17 -1
  23. package/dist/calendar/index.js +1 -4227
  24. package/dist/calendar/index.js.map +1 -1
  25. package/dist/calendar/requests.d.ts +42 -0
  26. package/dist/calendar/room-window.d.ts +6 -0
  27. package/dist/calendar/settings-value.d.ts +4 -0
  28. package/dist/calls/index.cjs +4 -4
  29. package/dist/calls/index.js +3 -3
  30. package/dist/chat/index.cjs +141 -141
  31. package/dist/chat/index.js +6 -6
  32. package/dist/{chunk-M33QUNFH.js → chunk-22WFGXG2.js} +3 -3
  33. package/dist/{chunk-M33QUNFH.js.map → chunk-22WFGXG2.js.map} +1 -1
  34. package/dist/{chunk-VMESMX7N.js → chunk-453PNNNW.js} +3 -3
  35. package/dist/{chunk-VMESMX7N.js.map → chunk-453PNNNW.js.map} +1 -1
  36. package/dist/{chunk-2KUCVSFF.js → chunk-45LRMW54.js} +3 -3
  37. package/dist/{chunk-2KUCVSFF.js.map → chunk-45LRMW54.js.map} +1 -1
  38. package/dist/chunk-5FTIHRZH.cjs +177 -0
  39. package/dist/chunk-5FTIHRZH.cjs.map +1 -0
  40. package/dist/{chunk-FUTMU4FR.js → chunk-5HFPRI3W.js} +3 -3
  41. package/dist/{chunk-FUTMU4FR.js.map → chunk-5HFPRI3W.js.map} +1 -1
  42. package/dist/{chunk-JY73DJOS.cjs → chunk-5UXDUOOB.cjs} +84 -1211
  43. package/dist/chunk-5UXDUOOB.cjs.map +1 -0
  44. package/dist/{chunk-ATJUVHVB.js → chunk-6QMWP5IU.js} +1445 -11
  45. package/dist/chunk-6QMWP5IU.js.map +1 -0
  46. package/dist/chunk-6YTHQ73P.cjs +5334 -0
  47. package/dist/chunk-6YTHQ73P.cjs.map +1 -0
  48. package/dist/{chunk-KMNZ2RVO.js → chunk-7QUUZBQZ.js} +15 -1109
  49. package/dist/chunk-7QUUZBQZ.js.map +1 -0
  50. package/dist/{chunk-C3ZRLULA.cjs → chunk-7X255TOM.cjs} +5 -5
  51. package/dist/{chunk-C3ZRLULA.cjs.map → chunk-7X255TOM.cjs.map} +1 -1
  52. package/dist/chunk-A3XPS2EU.js +245 -0
  53. package/dist/chunk-A3XPS2EU.js.map +1 -0
  54. package/dist/chunk-B3AHCIV5.js +5206 -0
  55. package/dist/chunk-B3AHCIV5.js.map +1 -0
  56. package/dist/{chunk-2Q7FDZAY.js → chunk-BPBSSMRB.js} +5 -163
  57. package/dist/chunk-BPBSSMRB.js.map +1 -0
  58. package/dist/{chunk-KSHKTOY2.js → chunk-CKCBBYTA.js} +205 -5
  59. package/dist/chunk-CKCBBYTA.js.map +1 -0
  60. package/dist/chunk-CYNF5PZI.js +170 -0
  61. package/dist/chunk-CYNF5PZI.js.map +1 -0
  62. package/dist/{chunk-OPTBQSCV.cjs → chunk-DJM7DLCT.cjs} +3 -3
  63. package/dist/{chunk-OPTBQSCV.cjs.map → chunk-DJM7DLCT.cjs.map} +1 -1
  64. package/dist/{chunk-E5OYHJMU.js → chunk-DN55PRGS.js} +4 -4
  65. package/dist/{chunk-E5OYHJMU.js.map → chunk-DN55PRGS.js.map} +1 -1
  66. package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
  67. package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
  68. package/dist/{chunk-KDUGTKVI.cjs → chunk-GFNELPDP.cjs} +17 -6
  69. package/dist/chunk-GFNELPDP.cjs.map +1 -0
  70. package/dist/{chunk-OGBXV326.cjs → chunk-GFRQG36Y.cjs} +2 -243
  71. package/dist/chunk-GFRQG36Y.cjs.map +1 -0
  72. package/dist/{chunk-WXYQ66KC.cjs → chunk-HEMU73OP.cjs} +2 -166
  73. package/dist/chunk-HEMU73OP.cjs.map +1 -0
  74. package/dist/{chunk-UUHUQHXR.cjs → chunk-JZNXRMLH.cjs} +6 -6
  75. package/dist/{chunk-UUHUQHXR.cjs.map → chunk-JZNXRMLH.cjs.map} +1 -1
  76. package/dist/{chunk-HDYWXEQU.cjs → chunk-K3HNLWZZ.cjs} +8 -8
  77. package/dist/{chunk-HDYWXEQU.cjs.map → chunk-K3HNLWZZ.cjs.map} +1 -1
  78. package/dist/{chunk-7M4C6CK7.js → chunk-KTFDUSON.js} +4 -4
  79. package/dist/{chunk-7M4C6CK7.js.map → chunk-KTFDUSON.js.map} +1 -1
  80. package/dist/{chunk-HLB4DIYV.cjs → chunk-MABUMUCA.cjs} +6 -6
  81. package/dist/{chunk-HLB4DIYV.cjs.map → chunk-MABUMUCA.cjs.map} +1 -1
  82. package/dist/{chunk-RQ2Y7USX.cjs → chunk-MIDXCYZB.cjs} +235 -15
  83. package/dist/chunk-MIDXCYZB.cjs.map +1 -0
  84. package/dist/{chunk-L3T7OJRX.js → chunk-MTPWZQTL.js} +4 -4
  85. package/dist/{chunk-L3T7OJRX.js.map → chunk-MTPWZQTL.js.map} +1 -1
  86. package/dist/{chunk-BUNZWOPX.cjs → chunk-O4ZIQDUT.cjs} +5 -5
  87. package/dist/{chunk-BUNZWOPX.cjs.map → chunk-O4ZIQDUT.cjs.map} +1 -1
  88. package/dist/{chunk-W3VYZXNS.js → chunk-O6W6RW3B.js} +5 -240
  89. package/dist/chunk-O6W6RW3B.js.map +1 -0
  90. package/dist/{chunk-WS5EX7DN.cjs → chunk-OGP6MQXQ.cjs} +3 -3
  91. package/dist/{chunk-WS5EX7DN.cjs.map → chunk-OGP6MQXQ.cjs.map} +1 -1
  92. package/dist/{chunk-6F7SZCVL.cjs → chunk-OWCEQKAR.cjs} +3 -3
  93. package/dist/{chunk-6F7SZCVL.cjs.map → chunk-OWCEQKAR.cjs.map} +1 -1
  94. package/dist/{chunk-OQ7RUNOC.js → chunk-PC5KVHX3.js} +22 -6
  95. package/dist/chunk-PC5KVHX3.js.map +1 -0
  96. package/dist/{chunk-CHVCTKF4.cjs → chunk-ULEDHANM.cjs} +1543 -66
  97. package/dist/chunk-ULEDHANM.cjs.map +1 -0
  98. package/dist/{chunk-L2PAPOZ5.js → chunk-US3S4DCB.js} +17 -6
  99. package/dist/chunk-US3S4DCB.js.map +1 -0
  100. package/dist/chunk-V46W7YLI.cjs +252 -0
  101. package/dist/chunk-V46W7YLI.cjs.map +1 -0
  102. package/dist/{chunk-3RJN2VTL.js → chunk-XDQXDWE7.js} +3 -3
  103. package/dist/{chunk-3RJN2VTL.js.map → chunk-XDQXDWE7.js.map} +1 -1
  104. package/dist/{chunk-EHOPZBAX.cjs → chunk-XOC44HQY.cjs} +12 -12
  105. package/dist/{chunk-EHOPZBAX.cjs.map → chunk-XOC44HQY.cjs.map} +1 -1
  106. package/dist/{chunk-YOMPLCP6.js → chunk-Y5KTM3V5.js} +3 -3
  107. package/dist/{chunk-YOMPLCP6.js.map → chunk-Y5KTM3V5.js.map} +1 -1
  108. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  109. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  110. package/dist/{chunk-AAFX64WD.cjs → chunk-ZXAWOLBQ.cjs} +22 -5
  111. package/dist/chunk-ZXAWOLBQ.cjs.map +1 -0
  112. package/dist/citations/QuietMarks.d.ts +5 -2
  113. package/dist/citations/index.cjs +15 -14
  114. package/dist/citations/index.js +3 -2
  115. package/dist/collaboration/index.cjs +51 -51
  116. package/dist/collaboration/index.js +3 -3
  117. package/dist/connect/docx.cjs +6 -6
  118. package/dist/connect/docx.js +5 -5
  119. package/dist/connect/index.cjs +6595 -1600
  120. package/dist/connect/index.cjs.map +1 -1
  121. package/dist/connect/index.d.ts +5 -0
  122. package/dist/connect/index.js +5064 -90
  123. package/dist/connect/index.js.map +1 -1
  124. package/dist/connection/ConnectedAgentCreator.d.ts +37 -0
  125. package/dist/connection/ConnectedSkillsLibrary.d.ts +26 -0
  126. package/dist/connection/ConnectedWorkflowHistory.d.ts +45 -0
  127. package/dist/connection/ConnectionProvider.d.ts +3 -1
  128. package/dist/connection/calendar/AddCalendarDialogs.d.ts +9 -0
  129. package/dist/connection/calendar/BookingPagesPanel.d.ts +13 -0
  130. package/dist/connection/calendar/CalendarAccountsPanel.d.ts +5 -0
  131. package/dist/connection/calendar/CalendarSettingsDialog.d.ts +12 -0
  132. package/dist/connection/calendar/ConnectedCalendar.d.ts +13 -0
  133. package/dist/connection/calendar/ConnectedMailInviteCard.d.ts +12 -0
  134. package/dist/connection/calendar/ConnectedPublicBooking.d.ts +9 -0
  135. package/dist/connection/calendar/ConnectedUpcomingEvents.d.ts +12 -0
  136. package/dist/connection/calendar/CopyField.d.ts +9 -0
  137. package/dist/connection/calendar/EventEditorDialog.d.ts +29 -0
  138. package/dist/connection/calendar/EventScheduling.d.ts +8 -0
  139. package/dist/connection/calendar/InvitationsPanel.d.ts +5 -0
  140. package/dist/connection/calendar/OpenAccessPanel.d.ts +7 -0
  141. package/dist/connection/calendar/PublishCalendarDialog.d.ts +8 -0
  142. package/dist/connection/calendar/RoomsDirectoryPanel.d.ts +8 -0
  143. package/dist/connection/calendar/ShareCalendarDialog.d.ts +6 -0
  144. package/dist/connection/calendar/copy.d.ts +2 -0
  145. package/dist/connection/calendar/index.d.ts +6 -0
  146. package/dist/connection/calendar/store.d.ts +47 -0
  147. package/dist/connection/calendar/types.d.ts +36 -0
  148. package/dist/connection/calendar/useWebinarAttendee.d.ts +3 -0
  149. package/dist/connection/notification-center/ConnectedNotificationCenter.d.ts +15 -0
  150. package/dist/connection/notification-center/NotificationCenter.d.ts +37 -0
  151. package/dist/connection/notification-center/NotificationEvent.d.ts +33 -0
  152. package/dist/connection/notification-center/index.d.ts +4 -0
  153. package/dist/connection/notification-center/items.d.ts +44 -0
  154. package/dist/document-tools/index.cjs +1 -1
  155. package/dist/document-tools/index.js +1 -1
  156. package/dist/facts/index.cjs +6 -6
  157. package/dist/facts/index.js +6 -6
  158. package/dist/files/index.cjs +6 -6
  159. package/dist/files/index.js +6 -6
  160. package/dist/home/index.cjs +20 -20
  161. package/dist/home/index.js +5 -5
  162. package/dist/index.cjs +969 -928
  163. package/dist/index.cjs.map +1 -1
  164. package/dist/index.js +26 -25
  165. package/dist/index.js.map +1 -1
  166. package/dist/retrieval/index.cjs +1 -1
  167. package/dist/retrieval/index.js +1 -1
  168. package/dist/settings/index.cjs +58 -72
  169. package/dist/settings/index.cjs.map +1 -1
  170. package/dist/settings/index.js +6 -23
  171. package/dist/settings/index.js.map +1 -1
  172. package/dist/shell/index.cjs +61 -60
  173. package/dist/shell/index.js +5 -4
  174. package/dist/site/index.cjs +5 -5
  175. package/dist/site/index.js +1 -1
  176. package/dist/studio/index.cjs +11 -11
  177. package/dist/studio/index.js +9 -9
  178. package/dist/workflow-canvas/index.cjs +69 -70
  179. package/dist/workflow-canvas/index.cjs.map +1 -1
  180. package/dist/workflow-canvas/index.js +14 -15
  181. package/dist/workflow-canvas/index.js.map +1 -1
  182. package/dist/workspaces/index.cjs +2 -2
  183. package/dist/workspaces/index.js +2 -2
  184. package/node_modules/@arbidocs/coedit/package.json +1 -1
  185. package/package.json +4 -4
  186. package/dist/chunk-2Q7FDZAY.js.map +0 -1
  187. package/dist/chunk-AAFX64WD.cjs.map +0 -1
  188. package/dist/chunk-ATJUVHVB.js.map +0 -1
  189. package/dist/chunk-CHVCTKF4.cjs.map +0 -1
  190. package/dist/chunk-CQCC7LE7.js +0 -210
  191. package/dist/chunk-CQCC7LE7.js.map +0 -1
  192. package/dist/chunk-JY73DJOS.cjs.map +0 -1
  193. package/dist/chunk-KDUGTKVI.cjs.map +0 -1
  194. package/dist/chunk-KMNZ2RVO.js.map +0 -1
  195. package/dist/chunk-KSHKTOY2.js.map +0 -1
  196. package/dist/chunk-L2PAPOZ5.js.map +0 -1
  197. package/dist/chunk-OGBXV326.cjs.map +0 -1
  198. package/dist/chunk-OQ7RUNOC.js.map +0 -1
  199. package/dist/chunk-RFIBUWLF.cjs +0 -232
  200. package/dist/chunk-RFIBUWLF.cjs.map +0 -1
  201. package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
  202. package/dist/chunk-W3VYZXNS.js.map +0 -1
  203. package/dist/chunk-WXYQ66KC.cjs.map +0 -1
@@ -1,17 +1,17 @@
1
1
  "use client";
2
- export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationFilter, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DEFAULT_THREAD_VISUALIZER_LABELS, DraftingDocChip, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, ProvisionalTranscriptLine, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, ThreadVisualizer, TranscriptLine, buildThreadDiagram, flashMessage, getParticipantTints, hasMessageBody, isLongPastedText, threadForNode, transcriptRuns, useDismissibleCard, useLongPaste, useRecipientDraft } from '../chunk-VMESMX7N.js';
2
+ export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationFilter, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DEFAULT_THREAD_VISUALIZER_LABELS, DraftingDocChip, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, ProvisionalTranscriptLine, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, ThreadVisualizer, TranscriptLine, buildThreadDiagram, flashMessage, getParticipantTints, hasMessageBody, isLongPastedText, threadForNode, transcriptRuns, useDismissibleCard, useLongPaste, useRecipientDraft } from '../chunk-453PNNNW.js';
3
3
  import '../chunk-OKERRHLH.js';
4
- export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageAuthor, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStreamAnnouncement } from '../chunk-7M4C6CK7.js';
4
+ export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageAuthor, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStreamAnnouncement } from '../chunk-KTFDUSON.js';
5
5
  import '../chunk-7XF5SFJ2.js';
6
6
  export { savedDocumentIdFor, takeOpenDocumentForTurn, useOpenDocumentId, useRegisterOpenDocument } from '../chunk-YBLIKTJK.js';
7
- export { useMentionAutocomplete } from '../chunk-YOMPLCP6.js';
8
- import '../chunk-AUS3KBHJ.js';
7
+ export { useMentionAutocomplete } from '../chunk-Y5KTM3V5.js';
9
8
  export { DEFAULT_MENTION_LABELS, MENTION_HREF_PREFIX, MentionChip, MentionMenu, extractMentions, filterMentionCandidates, findMentionQuery, insertMention, linkMentions, mentionFromHref, toMessageMentions, useListKeyNav } from '../chunk-AA3PT6KR.js';
10
- import '../chunk-SLSBJRWW.js';
9
+ import '../chunk-AUS3KBHJ.js';
11
10
  import '../chunk-Z3AZ7Q5X.js';
12
11
  import '../chunk-NPLYHR2E.js';
13
- import '../chunk-7F6CBP3Z.js';
14
12
  import '../chunk-OXF2IFXG.js';
13
+ import '../chunk-SLSBJRWW.js';
14
+ import '../chunk-7F6CBP3Z.js';
15
15
  import '../chunk-VUNV25KB.js';
16
16
  //# sourceMappingURL=index.js.map
17
17
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { page, minuteUtc, cell, paragraph, documentXml, docxPackage, TABLE_DOCUMENT_STYLES } from './chunk-QXMR5YHC.js';
3
- import { taskActivityHeadline, DEFAULT_TASK_ACTIVITY_LABELS } from './chunk-ATJUVHVB.js';
3
+ import { taskActivityHeadline, DEFAULT_TASK_ACTIVITY_LABELS } from './chunk-6QMWP5IU.js';
4
4
  import { BellOff, BellRing, Bell, Activity, ArrowUp, ArrowDown, X, Plus, Loader2, ArrowUpRight, ChevronDown, SlidersHorizontal, Download, FileDown, Workflow, FileText, MessageSquare, Lightbulb, MessagesSquare } from 'lucide-react';
5
5
  import { cn, Button, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuItem, Input, Checkbox } from '@arbidocs/react/ui';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1209,5 +1209,5 @@ function tagTableDocx(table, options) {
1209
1209
  }
1210
1210
 
1211
1211
  export { DEFAULT_TAG_COLUMNS_EDITOR_LABELS, DEFAULT_TAG_TABLE_DOCX_LABELS, DEFAULT_TAG_TABLE_LABELS, DEFAULT_THREAD_FOLLOW_LABELS, DEFAULT_WORKSPACE_ACTIVITY_LABELS, DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, TAG_TABLE_DOCX_LANDSCAPE_AFTER, TagColumnsEditor, TagTable, TagTableCell, ThreadFollowButton, ThreadFollowMenuItem, WorkspaceActivityList, WorkspaceNotificationMenu, cellText, cellValue, fieldWrites, isGap, parseCell, rowLinks, tagTableDocumentXml, tagTableDocx, tagTableMarkdown, workspaceActivityHeadline, workspaceActivityTarget };
1212
- //# sourceMappingURL=chunk-M33QUNFH.js.map
1213
- //# sourceMappingURL=chunk-M33QUNFH.js.map
1212
+ //# sourceMappingURL=chunk-22WFGXG2.js.map
1213
+ //# sourceMappingURL=chunk-22WFGXG2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/activity/workspace-activity.ts","../src/activity/WorkspaceActivityList.tsx","../src/activity/NotificationRelevanceControls.tsx","../src/tags/tagTableModel.ts","../src/tags/TagColumnsEditor.tsx","../src/tags/TagTable.tsx","../src/tags/tagTableDocx.ts"],"names":["jsxs","jsx","Button","cn","Fragment","Activity","useState","count","FileText","Loader2","Input","Plus"],"mappings":"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","file":"chunk-M33QUNFH.js","sourcesContent":["/**\n * The workspace activity feed's entries, as `GET /v1/workspace/{id}/activity` returns them, and what\n * each one says and opens. Everything a person is not pushed (uploads, other people's threads, runs)\n * can still be found here.\n */\n\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n taskActivityHeadline,\n type TaskActivityKind,\n} from '../agents/tasks/TaskActivityTimeline'\n\n/** Where an entry comes from. */\nexport type WorkspaceActivitySource = 'thread' | 'message' | 'document' | 'workflow'\n\n/** One entry of the feed (the shape of the API's `WorkspaceActivityEntry`). */\nexport interface WorkspaceActivityItem {\n external_id: string\n source: WorkspaceActivitySource\n /** A thread event kind, `message_posted`, `document_uploaded` / `_version` / `_signed`, `workflow_run`. */\n kind: string\n actor_ext_id?: string | null\n conversation_ext_id?: string | null\n /** Decrypted when the session has the workspace open, else null. */\n conversation_title?: string | null\n message_ext_id?: string | null\n document_ext_id?: string | null\n document_name?: string | null\n version?: number | null\n workflow_ext_id?: string | null\n workflow_name?: string | null\n /** A workflow run's status. */\n status?: string | null\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\n/** What clicking an entry opens. */\nexport type WorkspaceActivityTarget =\n | { kind: 'thread'; conversationId: string; messageId?: string }\n | { kind: 'document'; documentId: string; version?: number }\n | { kind: 'workflow'; workflowId: string; conversationId?: string }\n\n/** The thread, document version or run an entry opens; null when it names nothing openable. */\nexport function workspaceActivityTarget(\n item: WorkspaceActivityItem\n): WorkspaceActivityTarget | null {\n switch (item.source) {\n case 'thread':\n case 'message':\n return item.conversation_ext_id\n ? {\n kind: 'thread',\n conversationId: item.conversation_ext_id,\n ...(item.message_ext_id ? { messageId: item.message_ext_id } : {}),\n }\n : null\n case 'document':\n if (!item.document_ext_id) return null\n // An upload is the document as it was first saved; a new version or a signature opens that version.\n return item.kind !== 'document_uploaded' && item.version\n ? { kind: 'document', documentId: item.document_ext_id, version: item.version }\n : { kind: 'document', documentId: item.document_ext_id }\n case 'workflow':\n return item.workflow_ext_id\n ? {\n kind: 'workflow',\n workflowId: item.workflow_ext_id,\n ...(item.conversation_ext_id ? { conversationId: item.conversation_ext_id } : {}),\n }\n : null\n default:\n return null\n }\n}\n\nconst quoted = (name: string | null | undefined, fallback: string) =>\n name ? `“${name}”` : fallback\n\n/** What happened, without who did it: \"Uploaded “Lease.pdf”\", \"Marked done in “Smith v Jones”\". */\nexport function workspaceActivityHeadline(item: WorkspaceActivityItem): string {\n const thread = quoted(item.conversation_title, 'a thread')\n const document = quoted(item.document_name, 'a document')\n switch (item.kind) {\n case 'message_posted':\n return `Posted in ${thread}`\n case 'document_uploaded':\n return `Uploaded ${document}`\n case 'document_version':\n return item.version\n ? `Saved version ${item.version} of ${document}`\n : `Saved a new version of ${document}`\n case 'document_signed':\n return `Signed ${document}`\n case 'workflow_run': {\n const run = `Ran ${quoted(item.workflow_name, 'a workflow')}`\n return item.status ? `${run} (${item.status.replace(/_/g, ' ')})` : run\n }\n default: {\n const headline = taskActivityHeadline(\n { kind: item.kind as TaskActivityKind, detail: item.detail },\n DEFAULT_TASK_ACTIVITY_LABELS\n )\n return `${headline} in ${thread}`\n }\n }\n}\n","import type { ReactNode } from 'react'\nimport { Activity, FileText, MessageSquare, Workflow } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n workspaceActivityHeadline,\n workspaceActivityTarget,\n type WorkspaceActivityItem,\n type WorkspaceActivitySource,\n type WorkspaceActivityTarget,\n} from './workspace-activity'\n\nexport interface WorkspaceActivityListLabels {\n empty: string\n loading: string\n error: string\n loadMore: string\n loadingMore: string\n retry: string\n /** Who did it when the entry names no one. */\n system: string\n}\n\nexport const DEFAULT_WORKSPACE_ACTIVITY_LABELS: WorkspaceActivityListLabels = {\n empty: 'Nothing has happened in this workspace yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n loadMore: 'Show older',\n loadingMore: 'Loading…',\n retry: 'Retry',\n system: 'ARBI',\n}\n\nexport interface WorkspaceActivityListProps {\n /** Entries, newest first (every page loaded so far). */\n items: readonly WorkspaceActivityItem[]\n isLoading?: boolean\n isError?: boolean\n /** Another page exists. */\n hasMore?: boolean\n isLoadingMore?: boolean\n onLoadMore?: () => void\n onRetry?: () => void\n /** Open what an entry is about: its thread, document version or run. */\n onOpen?: (target: WorkspaceActivityTarget, item: WorkspaceActivityItem) => void\n /** A person's or agent's display name by id. */\n nameOf?: (id: string) => string | undefined\n /** \"2 hours ago\"; default the local date and time. */\n formatTime?: (iso: string) => string\n labels?: Partial<WorkspaceActivityListLabels>\n className?: string\n testId?: string\n}\n\nconst ICONS: Record<WorkspaceActivitySource, ReactNode> = {\n thread: <Activity className=\"size-4\" aria-hidden />,\n message: <MessageSquare className=\"size-4\" aria-hidden />,\n document: <FileText className=\"size-4\" aria-hidden />,\n workflow: <Workflow className=\"size-4\" aria-hidden />,\n}\n\nconst localTime = (iso: string) => new Date(iso).toLocaleString()\n\n/** A workspace's activity, newest first, one line per entry; a line opens what it is about. */\nexport function WorkspaceActivityList({\n items,\n isLoading,\n isError,\n hasMore,\n isLoadingMore,\n onLoadMore,\n onRetry,\n onOpen,\n nameOf,\n formatTime = localTime,\n labels,\n className,\n testId = 'workspace-activity',\n}: WorkspaceActivityListProps) {\n const l = { ...DEFAULT_WORKSPACE_ACTIVITY_LABELS, ...labels }\n if (isLoading)\n return (\n <p className={cn('p-3 text-sm text-muted-foreground', className)} data-testid={testId}>\n {l.loading}\n </p>\n )\n if (isError && items.length === 0)\n return (\n <div\n className={cn('flex items-center gap-2 p-3 text-sm text-muted-foreground', className)}\n data-testid={testId}\n >\n <span role=\"alert\">{l.error}</span>\n {onRetry && (\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n {l.retry}\n </Button>\n )}\n </div>\n )\n if (items.length === 0)\n return (\n <p className={cn('p-3 text-sm text-muted-foreground', className)} data-testid={testId}>\n {l.empty}\n </p>\n )\n\n return (\n <div className={cn('flex flex-col', className)} data-testid={testId}>\n <ul className=\"divide-y divide-border\" data-testid={`${testId}-list`}>\n {items.map((item) => {\n const target = workspaceActivityTarget(item)\n const actor = item.actor_ext_id ? (nameOf?.(item.actor_ext_id) ?? null) : l.system\n const body = (\n <>\n <span className=\"mt-0.5 shrink-0 text-muted-foreground\">{ICONS[item.source]}</span>\n <span className=\"min-w-0 flex-1 text-sm\">\n {actor && <span className=\"font-medium\">{actor} </span>}\n <span className=\"text-muted-foreground\">{workspaceActivityHeadline(item)}</span>\n </span>\n <time\n dateTime={item.created_at}\n className=\"shrink-0 text-xs tabular-nums text-muted-foreground\"\n >\n {formatTime(item.created_at)}\n </time>\n </>\n )\n return (\n <li\n key={item.external_id}\n data-testid={`${testId}-item-${item.external_id}`}\n data-kind={item.kind}\n >\n {target && onOpen ? (\n <button\n type=\"button\"\n className=\"flex w-full items-start gap-3 px-3 py-2 text-left hover:bg-accent focus-visible:bg-accent focus-visible:outline-none\"\n onClick={() => onOpen(target, item)}\n >\n {body}\n </button>\n ) : (\n <div className=\"flex items-start gap-3 px-3 py-2\">{body}</div>\n )}\n </li>\n )\n })}\n </ul>\n {hasMore && onLoadMore && (\n <div className=\"flex justify-center p-2\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={isLoadingMore}\n onClick={onLoadMore}\n data-testid={`${testId}-load-more`}\n >\n {isLoadingMore ? l.loadingMore : l.loadMore}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Follow and mute controls. A workspace member is pushed only what concerns them; following a\n * workspace or a thread opts in to everything from it, and muting a workspace silences it,\n * mentions included. Presentational: the host owns the settings and the save.\n */\n\nimport { Activity, Bell, BellOff, BellRing } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\n\n/** `default` (what names or involves you), `following` (everything) or `muted` (nothing). */\nexport type NotificationLevel = 'default' | 'following' | 'muted'\n\nexport interface WorkspaceNotificationMenuLabels {\n trigger: string\n heading: string\n default: string\n defaultHint: string\n following: string\n followingHint: string\n muted: string\n mutedHint: string\n activity: string\n}\n\nexport const DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS: WorkspaceNotificationMenuLabels = {\n trigger: 'Workspace notifications',\n heading: 'Notify me about',\n default: 'What involves me',\n defaultHint: 'Mentions, assignments and replies to my threads',\n following: 'Everything',\n followingHint: 'Follow every thread, upload and run',\n muted: 'Nothing',\n mutedHint: 'Mute the workspace, mentions included',\n activity: 'Workspace activity',\n}\n\nconst LEVEL_ICON = { default: Bell, following: BellRing, muted: BellOff } as const\n\nexport interface WorkspaceNotificationMenuProps {\n level: NotificationLevel\n onLevelChange: (level: NotificationLevel) => void\n disabled?: boolean\n /** Adds an item that opens the workspace's activity feed. */\n onOpenActivity?: () => void\n labels?: Partial<WorkspaceNotificationMenuLabels>\n className?: string\n testId?: string\n}\n\n/** A bell button whose menu sets how much of a workspace reaches the user. */\nexport function WorkspaceNotificationMenu({\n level,\n onLevelChange,\n disabled,\n onOpenActivity,\n labels,\n className,\n testId = 'workspace-notification-menu',\n}: WorkspaceNotificationMenuProps) {\n const l = { ...DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, ...labels }\n const Icon = LEVEL_ICON[level]\n const options: { value: NotificationLevel; title: string; hint: string }[] = [\n { value: 'default', title: l.default, hint: l.defaultHint },\n { value: 'following', title: l.following, hint: l.followingHint },\n { value: 'muted', title: l.muted, hint: l.mutedHint },\n ]\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className={cn('size-7 shrink-0 pointer-coarse:size-11', className)}\n aria-label={l.trigger}\n title={l.trigger}\n data-testid={testId}\n data-level={level}\n >\n <Icon className={cn('size-4', level === 'muted' && 'text-muted-foreground')} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-72\">\n <DropdownMenuLabel>{l.heading}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={level}\n onValueChange={(value) => {\n if (value !== level) onLevelChange(value as NotificationLevel)\n }}\n >\n {options.map((option) => (\n <DropdownMenuRadioItem\n key={option.value}\n value={option.value}\n disabled={disabled}\n data-testid={`${testId}-${option.value}`}\n >\n <span className=\"flex flex-col\">\n <span>{option.title}</span>\n <span className=\"text-xs text-muted-foreground\">{option.hint}</span>\n </span>\n </DropdownMenuRadioItem>\n ))}\n </DropdownMenuRadioGroup>\n {onOpenActivity && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`${testId}-activity`}>\n <Activity className=\"mr-2 size-4\" aria-hidden />\n {l.activity}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport interface ThreadFollowLabels {\n follow: string\n unfollow: string\n}\n\nexport const DEFAULT_THREAD_FOLLOW_LABELS: ThreadFollowLabels = {\n follow: 'Follow thread',\n unfollow: 'Unfollow thread',\n}\n\nexport interface ThreadFollowProps {\n following: boolean\n onFollowingChange: (following: boolean) => void\n disabled?: boolean\n labels?: Partial<ThreadFollowLabels>\n testId?: string\n}\n\n/** \"Follow thread\" / \"Unfollow thread\" as an item of a thread's options menu. */\nexport function ThreadFollowMenuItem({\n following,\n onFollowingChange,\n disabled,\n labels,\n testId = 'thread-follow-item',\n}: ThreadFollowProps) {\n const l = { ...DEFAULT_THREAD_FOLLOW_LABELS, ...labels }\n const Icon = following ? BellOff : BellRing\n return (\n <DropdownMenuItem\n disabled={disabled}\n onSelect={() => onFollowingChange(!following)}\n data-testid={testId}\n data-following={following}\n >\n <Icon className=\"mr-2 size-4\" aria-hidden />\n {following ? l.unfollow : l.follow}\n </DropdownMenuItem>\n )\n}\n\n/** The same switch as a bell button, for a thread header without a menu. */\nexport function ThreadFollowButton({\n following,\n onFollowingChange,\n disabled,\n labels,\n testId = 'thread-follow-button',\n}: ThreadFollowProps) {\n const l = { ...DEFAULT_THREAD_FOLLOW_LABELS, ...labels }\n const label = following ? l.unfollow : l.follow\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 shrink-0\"\n aria-label={label}\n aria-pressed={following}\n title={label}\n disabled={disabled}\n onClick={() => onFollowingChange(!following)}\n data-testid={testId}\n >\n {following ? <BellRing className=\"size-4 text-primary\" /> : <Bell className=\"size-4\" />}\n </Button>\n )\n}\n","/**\n * A table of tags as data: the rows are tags (every issue, every person, a label's children) with\n * their values and links, the columns their kind's fields in the workspace (its issue fields …),\n * and each row's linked documents, facts and threads its evidence. Pure helpers for `TagTable`: a\n * row's value, the gaps, and the snapshot as a Markdown document.\n */\n\nimport type { components } from '@arbidocs/client'\n\n/**\n * A column: one of the kind's fields. A `'tag'` field links to tags (its `options` are the kinds it\n * may point at; its value is a list of tag ids), e.g. a person's Organisation.\n */\nexport type TagTableField = components['schemas']['FieldDefinition']\nexport type TagTableFieldType = TagTableField['type']\n/** A field as written back to the kind (`id` keeps it and its values). */\nexport type TagTableFieldWrite = components['schemas']['FieldDefinitionWrite']\n/** A row: a tag, with its links (`include=links` on the list). */\nexport type TagTableRow = components['schemas']['TagResponse']\nexport type TagTableLinks = components['schemas']['TagLinks']\n\n/** What a table shows: the kind's fields as columns, and its tags as rows. */\nexport interface TagTableData {\n columns: TagTableField[]\n rows: TagTableRow[]\n}\n\nconst NO_LINKS: TagTableLinks = {\n docs: [],\n facts: [],\n threads: [],\n doc_count: 0,\n fact_count: 0,\n thread_count: 0,\n}\n\n/** A row's links (none when the list was read without them). */\nexport const rowLinks = (row: TagTableRow): TagTableLinks => row.links ?? NO_LINKS\n\n/** A row's value for a column (values are keyed by field id). */\nexport const cellValue = (row: TagTableRow, column: TagTableField): unknown =>\n row.field_values?.[column.id]\n\n/** A row with nothing behind it: no linked document, fact or thread. */\nexport const isGap = (row: TagTableRow): boolean => {\n const l = rowLinks(row)\n return l.doc_count + l.fact_count + l.thread_count === 0\n}\n\n/**\n * The tags a link field (`type: 'tag'`) points at: a list of tag ids (a single id is read as one;\n * anything else is none).\n */\nexport function linkedTagIds(value: unknown): string[] {\n if (typeof value === 'string') return value ? [value] : []\n return Array.isArray(value) ? value.filter((id): id is string => typeof id === 'string') : []\n}\n\n/** A value as text (a person or a linked tag by name, a checkbox as yes or no, blank as empty). */\nexport function cellText(\n value: unknown,\n column: Pick<TagTableField, 'type'>,\n nameOf?: (id: string) => string | undefined\n): string {\n if (value === undefined || value === null || value === '') return ''\n if (column.type === 'checkbox') return value ? 'Yes' : 'No'\n if (column.type === 'person' && typeof value === 'string') return nameOf?.(value) ?? value\n if (column.type === 'tag')\n return linkedTagIds(value)\n .map((id) => nameOf?.(id) ?? id)\n .join(', ')\n if (Array.isArray(value)) return value.map(String).join(', ')\n return String(value)\n}\n\n/** A typed input's text back as the value to store (`null` clears it). */\nexport function parseCell(text: string, type: TagTableFieldType): unknown {\n const t = text.trim()\n if (t === '') return null\n if (type === 'number') {\n const n = Number(t)\n return Number.isNaN(n) ? null : n\n }\n return t\n}\n\n/** The kind's fields as definitions to write back, every one kept by id. */\nexport const fieldWrites = (columns: readonly TagTableField[]): TagTableFieldWrite[] =>\n columns.map((c) => ({ id: c.id, name: c.name, type: c.type, options: c.options ?? null }))\n\nconst escapeCell = (text: string) => text.replace(/\\|/g, '\\\\|').replace(/\\n+/g, ' ')\n\nexport interface TagTableMarkdownOptions {\n title: string\n /** The evidence column's heading. */\n evidence?: string\n /** The row column's heading. */\n rowHeading?: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n}\n\n/**\n * The table as a Markdown document: a heading, when it was taken, and one table (a row per tag, a\n * column per field, then the evidence counts). What a host files or has signed.\n */\nexport function tagTableMarkdown(table: TagTableData, options: TagTableMarkdownOptions): string {\n const { columns } = table\n const heads = [\n options.rowHeading ?? 'Item',\n ...columns.map((c) => c.name),\n options.evidence ?? 'Evidence',\n ]\n const lines = [\n `# ${options.title}`,\n '',\n `_Snapshot taken ${new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')} UTC_`,\n '',\n `| ${heads.map(escapeCell).join(' | ')} |`,\n `| ${heads.map(() => '---').join(' | ')} |`,\n ]\n for (const row of table.rows) {\n const l = rowLinks(row)\n const evidence = [\n `${l.doc_count} document${l.doc_count === 1 ? '' : 's'}`,\n `${l.fact_count} fact${l.fact_count === 1 ? '' : 's'}`,\n ...(l.thread_count ? [`${l.thread_count} thread${l.thread_count === 1 ? '' : 's'}`] : []),\n ].join(', ')\n const cells = [\n row.name,\n ...columns.map((c) => cellText(cellValue(row, c), c, options.nameOf)),\n evidence,\n ]\n lines.push(`| ${cells.map(escapeCell).join(' | ')} |`)\n }\n return `${lines.join('\\n')}\\n`\n}\n","/**\n * The columns of a table of tags — the fields of their kind in the workspace (its issue fields …) —\n * edited as one list: rename, reorder by position, add, remove, and a choice field's options. A kept\n * column keeps its id, so its values stay (its type is fixed once created). Saved in full through\n * the host (`onSave`); data-free.\n */\n\nimport { useState } from 'react'\nimport { ArrowDown, ArrowUp, Loader2, Plus, X } from 'lucide-react'\nimport { Button, Input, cn } from '@arbidocs/react/ui'\nimport type { TagTableField, TagTableFieldType, TagTableFieldWrite } from './tagTableModel'\n\nexport interface TagColumnsEditorLabels {\n title: string\n addColumn: string\n name: string\n type: string\n options: string\n optionsPlaceholder: string\n remove: string\n moveUp: string\n moveDown: string\n save: string\n saving: string\n cancel: string\n empty: string\n types: Record<TagTableFieldType, string>\n}\n\nexport const DEFAULT_TAG_COLUMNS_EDITOR_LABELS: TagColumnsEditorLabels = {\n title: 'Columns',\n addColumn: 'Add column',\n name: 'Column name',\n type: 'Type',\n options: 'Choices',\n optionsPlaceholder: 'Choices, comma-separated',\n remove: 'Remove column',\n moveUp: 'Move up',\n moveDown: 'Move down',\n save: 'Save columns',\n saving: 'Saving…',\n cancel: 'Cancel',\n empty: 'No columns.',\n types: {\n text: 'Text',\n number: 'Number',\n date: 'Date',\n checkbox: 'Yes / no',\n select: 'Choice',\n person: 'Person',\n document: 'Document',\n relation: 'Relation',\n lookup: 'Lookup',\n rollup: 'Rollup',\n tag: 'Link to tags',\n },\n}\n\n/** The types a tag's field can have. */\nconst TYPES: TagTableFieldType[] = ['text', 'number', 'date', 'checkbox', 'select', 'person']\n\ninterface Draft {\n id?: string\n name: string\n type: TagTableFieldType\n options: string\n}\n\nconst toDraft = (f: TagTableField): Draft => ({\n id: f.id,\n name: f.name,\n type: f.type,\n options: (f.options ?? []).join(', '),\n})\n\nconst toWrite = (d: Draft): TagTableFieldWrite => ({\n ...(d.id ? { id: d.id } : {}),\n name: d.name.trim(),\n type: d.type,\n options:\n d.type === 'tag'\n ? d.options\n .split(',')\n .map((o) => o.trim())\n .filter(Boolean)\n : d.type === 'select'\n ? d.options\n .split(',')\n .map((o) => o.trim())\n .filter(Boolean)\n : null,\n})\n\nexport interface TagColumnsEditorProps {\n columns: TagTableField[]\n /** Save the columns in full; a rejection (e.g. two columns of one name) stays on screen. */\n onSave: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n onCancel: () => void\n labels?: Partial<TagColumnsEditorLabels>\n className?: string\n testId?: string\n}\n\nexport function TagColumnsEditor({\n columns,\n onSave,\n onCancel,\n labels,\n className,\n testId = 'tag-columns',\n}: TagColumnsEditorProps) {\n const l = { ...DEFAULT_TAG_COLUMNS_EDITOR_LABELS, ...labels }\n const [drafts, setDrafts] = useState<Draft[]>(() => columns.map(toDraft))\n const [saving, setSaving] = useState(false)\n const patch = (i: number, change: Partial<Draft>) =>\n setDrafts((ds) => ds.map((d, j) => (j === i ? { ...d, ...change } : d)))\n const move = (i: number, by: number) =>\n setDrafts((ds) => {\n const next = [...ds]\n const [d] = next.splice(i, 1)\n next.splice(i + by, 0, d)\n return next\n })\n const valid = drafts.every(\n (d) => d.name.trim() && (d.type !== 'select' || toWrite(d).options?.length)\n )\n const input =\n 'h-8 rounded-md border border-input bg-background px-2 text-sm focus:outline-none focus:ring-1 focus:ring-ring'\n\n return (\n <form\n className={cn('space-y-2 rounded-lg border border-border p-3', className)}\n onSubmit={async (e) => {\n e.preventDefault()\n if (!valid) return\n setSaving(true)\n try {\n await onSave(drafts.map(toWrite))\n } finally {\n setSaving(false)\n }\n }}\n data-testid={testId}\n >\n <h3 className=\"text-sm font-semibold\">{l.title}</h3>\n {drafts.length === 0 && <p className=\"text-sm text-muted-foreground\">{l.empty}</p>}\n <ul className=\"space-y-2\">\n {drafts.map((d, i) => (\n <li\n key={d.id ?? `new-${i}`}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${testId}-column-${i}`}\n >\n <Input\n className=\"h-8 w-48\"\n value={d.name}\n placeholder={l.name}\n aria-label={l.name}\n onChange={(e) => patch(i, { name: e.target.value })}\n data-testid={`${testId}-name-${i}`}\n />\n <select\n className={cn(input, 'w-32')}\n value={d.type}\n // A column's type is fixed once it exists: its values were written for it.\n disabled={!!d.id}\n aria-label={l.type}\n onChange={(e) => patch(i, { type: e.target.value as TagTableFieldType })}\n data-testid={`${testId}-type-${i}`}\n >\n {(TYPES.includes(d.type) ? TYPES : [d.type, ...TYPES]).map((t) => (\n <option key={t} value={t}>\n {l.types[t]}\n </option>\n ))}\n </select>\n {d.type === 'select' && (\n <Input\n className=\"h-8 min-w-48 flex-1\"\n value={d.options}\n placeholder={l.optionsPlaceholder}\n aria-label={l.options}\n onChange={(e) => patch(i, { options: e.target.value })}\n data-testid={`${testId}-options-${i}`}\n />\n )}\n <div className=\"ml-auto flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === 0}\n aria-label={l.moveUp}\n onClick={() => move(i, -1)}\n >\n <ArrowUp className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === drafts.length - 1}\n aria-label={l.moveDown}\n onClick={() => move(i, 1)}\n >\n <ArrowDown className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.remove}\n onClick={() => setDrafts((ds) => ds.filter((_, j) => j !== i))}\n data-testid={`${testId}-remove-${i}`}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n </li>\n ))}\n </ul>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setDrafts((ds) => [...ds, { name: '', type: 'text', options: '' }])}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addColumn}\n </Button>\n <div className=\"ml-auto flex items-center gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!valid || saving}\n data-testid={`${testId}-save`}\n >\n {saving && <Loader2 className=\"size-4 animate-spin\" />}\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </div>\n </form>\n )\n}\n","/**\n * A table of tags (every issue, every person, a label's children): one row per tag, a column per\n * field of their kind in the workspace, editable in place by type (text, number, date, checkbox,\n * choice, person, a link to other tags), and the items tagged with each row (its linked documents,\n * facts and threads, with counts). A row with nothing tagged yet is a normal row with an empty\n * cell. Rows and columns can be added (the columns are the kind's fields, edited as one list), and\n * the table exported as a Word document snapshot (filed in the workspace) or downloaded.\n * The data and every write come from the host (`ConnectedTagTable` binds them to ARBI).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n ArrowUpRight,\n ChevronDown,\n Download,\n FileDown,\n FileText,\n Lightbulb,\n Loader2,\n MessagesSquare,\n Plus,\n SlidersHorizontal,\n} from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@arbidocs/react/ui'\nimport {\n cellText,\n cellValue,\n isGap,\n linkedTagIds,\n parseCell,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableFieldWrite,\n type TagTableRow,\n} from './tagTableModel'\nimport { TagColumnsEditor, type TagColumnsEditorLabels } from './TagColumnsEditor'\n\nexport interface TagTableLabels {\n row: string\n evidence: string\n /** `{count}` documents linked. */\n documents: string\n /** `{count}` facts linked. */\n facts: string\n /** `{count}` threads linked. */\n threads: string\n /** One document, one fact, one thread. */\n document: string\n fact: string\n thread: string\n /** A thread without a title. */\n untitledThread: string\n /** `{count}` more links than shown. */\n more: string\n addRow: string\n addRowPlaceholder: string\n add: string\n export: string\n exporting: string\n download: string\n empty: string\n loading: string\n noColumns: string\n choose: string\n yes: string\n /** Opens the column editor. */\n editColumns: string\n /** The column editor's own labels. */\n columns?: Partial<TagColumnsEditorLabels>\n}\n\nexport const DEFAULT_TAG_TABLE_LABELS: TagTableLabels = {\n row: 'Item',\n evidence: 'Tagged items',\n documents: '{count} documents',\n facts: '{count} facts',\n threads: '{count} threads',\n document: '1 document',\n fact: '1 fact',\n thread: '1 thread',\n untitledThread: 'Untitled thread',\n more: '+{count} more',\n addRow: 'Add row',\n addRowPlaceholder: 'Name of the new row',\n add: 'Add',\n export: 'Export as Word document',\n download: 'Download .docx',\n exporting: 'Exporting…',\n empty: 'No rows yet.',\n loading: 'Loading…',\n noColumns: 'No columns yet: add one to give each row a value.',\n choose: '—',\n yes: 'Yes',\n editColumns: 'Columns',\n}\n\nexport interface TagTableProps {\n /** The kind's fields (the columns) and its tags (the rows, with their links). */\n table: TagTableData | undefined\n isLoading?: boolean\n /** Change one cell (`null` clears it). Absent: read only. */\n onChangeValue?: (tagId: string, fieldId: string, value: unknown) => void | Promise<unknown>\n /** Add a row (a new tag of the kind). Absent: no \"Add row\". */\n onAddRow?: (name: string) => void | Promise<unknown>\n /**\n * Set the columns (the kind's fields) in full: a kept column has its `id`. Absent: the columns\n * are fixed.\n */\n onChangeColumns?: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n /** Open a linked document. */\n onOpenDocument?: (documentId: string) => void\n /** Open a linked fact. */\n onOpenFact?: (factId: string) => void\n /** Open a linked thread (conversation). */\n onOpenThread?: (conversationId: string) => void\n /** Open a row's tag (everything tagged with it). */\n onOpenRow?: (tagId: string) => void\n /** Export the table as it stands (filed as a document). Absent: no export button. */\n onExport?: () => void | Promise<unknown>\n /** Download the table as it stands as a file. Absent: no download button. */\n onDownload?: () => void | Promise<unknown>\n /** Who a person column offers. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * The tags a link column (`type: 'tag'`) offers — each with its kind; a column offers those of\n * the kinds in its `options` — and names its values by.\n */\n tags?: ReadonlyArray<{ value: string; label: string; kind: string }>\n /** Open a linked tag (a link column's value). */\n onOpenTag?: (tagId: string) => void\n /** Extra controls in the toolbar. */\n actions?: ReactNode\n labels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\n/**\n * The table fits its container: a fixed layout where the row-label (\"Item\") and tagged-items columns\n * have set widths and the field columns share the rest. Long names wrap in their column (cut after\n * three lines, in full in the tooltip) and tagged-item chips wrap, so nothing runs into the next\n * column or off the page. Only a matrix with very many fields scrolls, inside its own box.\n */\nconst ROW_LABEL_WIDTH = 'w-[11rem]'\nconst EVIDENCE_WIDTH = 'w-[14rem]'\nconst ROW_LABEL = 'line-clamp-3 whitespace-normal break-words'\n\n/**\n * One editable field value of a tag, by its type: committed on blur or Enter (a checkbox and a\n * choice at once). A table cell, and a field of a single tag's form (`TagDetail`).\n */\nexport function TagTableCell({\n row,\n column,\n people,\n tags,\n onOpenTag,\n onChange,\n l,\n testId,\n}: {\n row: TagTableRow\n column: TagTableField\n people?: TagTableProps['people']\n tags?: TagTableProps['tags']\n onOpenTag?: TagTableProps['onOpenTag']\n onChange?: TagTableProps['onChangeValue']\n l: TagTableLabels\n testId: string\n}) {\n const value = cellValue(row, column)\n const nameOf = (id: string) =>\n (column.type === 'tag' ? tags : people)?.find((p) => p.value === id)?.label\n const shown = cellText(value, column, nameOf)\n const [draft, setDraft] = useState(shown)\n useEffect(() => setDraft(cellText(value, column)), [value, column])\n const set = (next: unknown) => void onChange?.(row.external_id, column.id, next)\n\n if (column.type === 'tag')\n return (\n <TagLinkCell\n row={row}\n column={column}\n tags={tags}\n onOpenTag={onOpenTag}\n onChange={onChange ? set : undefined}\n l={l}\n testId={testId}\n />\n )\n if (!onChange)\n return (\n <span className=\"block truncate\" title={shown} data-testid={testId}>\n {shown || <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const field =\n 'h-8 w-full min-w-0 rounded-md border border-transparent bg-transparent px-1.5 text-sm hover:border-input focus:border-input focus:bg-background focus:outline-none'\n switch (column.type) {\n case 'checkbox':\n return (\n <Checkbox\n checked={value === true}\n onCheckedChange={(v) => set(v === true)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n case 'select':\n case 'person': {\n const options =\n column.type === 'select'\n ? (column.options ?? []).map((o) => ({ value: o, label: o }))\n : (people ?? [])\n return (\n <select\n className={cn(field, 'pr-6')}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => set(e.target.value || null)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n {typeof value === 'string' && value && !options.some((o) => o.value === value) && (\n <option value={value}>{value}</option>\n )}\n </select>\n )\n }\n default: {\n const commit = () => {\n if (draft !== cellText(value, column)) set(parseCell(draft, column.type))\n }\n return (\n <input\n className={cn(field, 'pr-6')}\n type={column.type === 'number' ? 'number' : column.type === 'date' ? 'date' : 'text'}\n value={column.type === 'date' ? draft.slice(0, 10) : draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') (e.target as HTMLInputElement).blur()\n if (e.key === 'Escape') setDraft(cellText(value, column))\n }}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n }\n }\n}\n\n/**\n * A link field's value: the linked tags as chips that open them, and (editable) a choice among the\n * tags of the kinds the field allows. One link at a time; the value is stored as a list.\n */\nfunction TagLinkCell({\n row,\n column,\n tags,\n onOpenTag,\n onChange,\n l,\n testId,\n}: {\n row: TagTableRow\n column: TagTableField\n tags?: TagTableProps['tags']\n onOpenTag?: TagTableProps['onOpenTag']\n onChange?: (next: unknown) => void\n l: TagTableLabels\n testId: string\n}) {\n const ids = linkedTagIds(cellValue(row, column))\n const kinds = column.options ?? []\n const options = (tags ?? []).filter(\n (t) => t.value !== row.external_id && (kinds.length === 0 || kinds.includes(t.kind))\n )\n const label = (id: string) => tags?.find((t) => t.value === id)?.label ?? id\n const chips = ids.map((id) =>\n onOpenTag ? (\n <button\n key={id}\n type=\"button\"\n onClick={() => onOpenTag(id)}\n className=\"inline-flex min-w-0 max-w-full items-center truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary\"\n data-testid={`${testId}-link-${id}`}\n >\n {label(id)}\n </button>\n ) : (\n <span\n key={id}\n className=\"inline-flex min-w-0 max-w-full truncate rounded-md border border-border px-1.5 py-0.5 text-xs\"\n data-testid={`${testId}-link-${id}`}\n >\n {label(id)}\n </span>\n )\n )\n if (!onChange)\n return (\n <span className=\"flex min-w-0 flex-wrap gap-1\" data-testid={testId}>\n {chips.length ? chips : <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const current = ids[0]\n // The linked name is text that wraps (a narrow column never cuts it to \"Acm…\"), and opens the\n // tag; the picker behind the chevron changes it.\n return (\n // Wraps: in a narrow column the name breaks between words and the picker moves below it.\n <span className=\"flex min-w-0 flex-wrap items-center gap-x-1 py-1\">\n {current &&\n (onOpenTag ? (\n <button\n type=\"button\"\n onClick={() => onOpenTag(current)}\n className=\"max-w-full rounded px-1 text-left text-sm break-words hover:text-primary hover:underline focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={`Open ${label(current)}`}\n title={`Open ${label(current)}`}\n data-testid={`${testId}-open`}\n >\n {label(current)}\n <ArrowUpRight className=\"ml-0.5 inline size-3.5 align-[-2px] text-muted-foreground\" />\n </button>\n ) : (\n <span className=\"max-w-full px-1 text-sm break-words\">{label(current)}</span>\n ))}\n <span\n className={cn(\n 'relative inline-flex h-6 shrink-0 items-center rounded text-muted-foreground hover:bg-muted hover:text-foreground focus-within:ring-2 focus-within:ring-ring',\n current ? 'w-6 justify-center' : 'min-w-0 flex-1 gap-1 px-1 text-sm'\n )}\n title={current ? `${column.name}: ${label(current)}` : undefined}\n >\n {!current && <span className=\"truncate\">{l.choose}</span>}\n <ChevronDown className=\"size-3.5 shrink-0\" />\n <select\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n value={current ?? ''}\n onChange={(e) => onChange(e.target.value ? [e.target.value] : null)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((t) => (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n ))}\n {current && !options.some((t) => t.value === current) && (\n <option value={current}>{label(current)}</option>\n )}\n </select>\n </span>\n </span>\n )\n}\n\n/** A count as a phrase: \"1 document\", \"3 facts\", or nothing for none. */\nconst countText = (count: number, one: string, many: string) =>\n count === 1 ? one : count ? many.replace('{count}', String(count)) : null\n\n/** What backs a row: its documents, facts and threads as links, with counts and \"+N more\". */\nfunction Evidence({\n row,\n l,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n testId,\n}: {\n row: TagTableRow\n l: TagTableLabels\n onOpenDocument?: (id: string) => void\n onOpenFact?: (id: string) => void\n onOpenThread?: (id: string) => void\n onOpenRow?: (id: string) => void\n testId: string\n}) {\n // Nothing tagged yet is normal: an empty cell, no warning.\n if (isGap(row)) return null\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n const chip =\n 'inline-flex min-w-0 max-w-full items-center gap-1 truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary disabled:hover:border-border disabled:hover:text-inherit'\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1\" data-testid={testId}>\n <span className=\"mr-1 w-full text-xs text-muted-foreground\">\n {[\n countText(links.doc_count, l.document, l.documents),\n countText(links.fact_count, l.fact, l.facts),\n countText(links.thread_count, l.thread, l.threads),\n ]\n .filter(Boolean)\n .join(' · ')}\n </span>\n {docs.map((d) => (\n <button\n key={d.doc_ext_id}\n type=\"button\"\n className={chip}\n title={d.note ? `${d.file_name}: ${d.note}` : d.file_name}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{d.file_name}</span>\n </button>\n ))}\n {facts.map((f) => (\n <button\n key={f.fact_ext_id}\n type=\"button\"\n className={chip}\n title={f.text}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{f.text}</span>\n </button>\n ))}\n {threads.map((t) => (\n <button\n key={t.conversation_ext_id}\n type=\"button\"\n className={chip}\n title={t.title || l.untitledThread}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{t.title || l.untitledThread}</span>\n </button>\n ))}\n {more > 0 &&\n (onOpenRow ? (\n <button\n type=\"button\"\n className=\"text-xs text-primary hover:underline\"\n onClick={() => onOpenRow(row.external_id)}\n data-testid={`${testId}-more`}\n >\n {l.more.replace('{count}', String(more))}\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\" data-testid={`${testId}-more`}>\n {l.more.replace('{count}', String(more))}\n </span>\n ))}\n </div>\n )\n}\n\nexport function TagTable({\n table,\n isLoading,\n onChangeValue,\n onAddRow,\n onChangeColumns,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n onExport,\n onDownload,\n people,\n tags,\n onOpenTag,\n actions,\n labels,\n className,\n testId = 'tag-table',\n}: TagTableProps) {\n const l = { ...DEFAULT_TAG_TABLE_LABELS, ...labels }\n const columns = useMemo(() => table?.columns ?? [], [table])\n const rows = table?.rows ?? []\n const [editingColumns, setEditingColumns] = useState(false)\n const [name, setName] = useState('')\n const [adding, setAdding] = useState(false)\n const [exporting, setExporting] = useState(false)\n\n const add = async () => {\n const n = name.trim()\n if (!n || !onAddRow) return\n setAdding(true)\n try {\n await onAddRow(n)\n setName('')\n } finally {\n setAdding(false)\n }\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {actions}\n {onChangeColumns && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-pressed={editingColumns}\n onClick={() => setEditingColumns((v) => !v)}\n data-testid={`${testId}-edit-columns`}\n >\n <SlidersHorizontal className=\"size-4\" />\n {l.editColumns}\n </Button>\n )}\n {onDownload && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={rows.length === 0}\n onClick={() => void onDownload()}\n data-testid={`${testId}-download`}\n >\n <Download className=\"size-4\" />\n {l.download}\n </Button>\n )}\n {onExport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={exporting || rows.length === 0}\n onClick={async () => {\n setExporting(true)\n try {\n await onExport()\n } finally {\n setExporting(false)\n }\n }}\n data-testid={`${testId}-export`}\n >\n {exporting ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileDown className=\"size-4\" />\n )}\n {exporting ? l.exporting : l.export}\n </Button>\n )}\n </div>\n </div>\n\n {editingColumns && onChangeColumns && (\n <TagColumnsEditor\n columns={columns}\n labels={l.columns}\n onCancel={() => setEditingColumns(false)}\n onSave={async (fields) => {\n await onChangeColumns(fields)\n setEditingColumns(false)\n }}\n testId={`${testId}-columns`}\n />\n )}\n\n {onAddRow && (\n <form\n className=\"flex max-w-md items-center gap-2\"\n onSubmit={(e) => {\n e.preventDefault()\n void add()\n }}\n >\n <Input\n value={name}\n placeholder={l.addRowPlaceholder}\n aria-label={l.addRow}\n onChange={(e) => setName(e.target.value)}\n data-testid={`${testId}-add-name`}\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!name.trim() || adding}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addRow}\n </Button>\n </form>\n )}\n\n {isLoading ? (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table\n className=\"w-full min-w-[36rem] table-fixed border-collapse text-sm\"\n data-testid={`${testId}-table`}\n >\n <thead className=\"bg-muted/40\">\n <tr>\n <th\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium'\n )}\n >\n {l.row}\n </th>\n {columns.map((c) => (\n <th\n key={c.id}\n className=\"truncate px-3 py-2 text-left font-medium\"\n title={c.name}\n data-testid={`${testId}-column-${c.id}`}\n >\n {c.name}\n </th>\n ))}\n <th className={cn(EVIDENCE_WIDTH, 'px-3 py-2 text-left font-medium')}>\n {l.evidence}\n </th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => {\n const id = row.external_id\n return (\n <tr\n key={id}\n className=\"border-t border-border align-top\"\n data-testid={`${testId}-row-${id}`}\n >\n <th\n scope=\"row\"\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-background px-3 py-2 text-left font-medium'\n )}\n >\n {onOpenRow ? (\n <button\n type=\"button\"\n className={cn(ROW_LABEL, 'text-left hover:text-primary hover:underline')}\n title={row.name}\n onClick={() => onOpenRow(id)}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </button>\n ) : (\n <span\n className={ROW_LABEL}\n title={row.name}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </span>\n )}\n </th>\n {columns.map((c) => (\n <td key={c.id} className=\"px-1.5 py-1\">\n <TagTableCell\n row={row}\n column={c}\n people={people}\n tags={tags}\n onOpenTag={onOpenTag}\n onChange={onChangeValue}\n l={l}\n testId={`${testId}-cell-${id}-${c.id}`}\n />\n </td>\n ))}\n <td className=\"min-w-0 px-3 py-2\">\n <Evidence\n row={row}\n l={l}\n onOpenDocument={onOpenDocument}\n onOpenFact={onOpenFact}\n onOpenThread={onOpenThread}\n onOpenRow={onOpenRow}\n testId={`${testId}-evidence-${id}`}\n />\n </td>\n </tr>\n )\n })}\n {rows.length === 0 && (\n <tr>\n <td\n colSpan={columns.length + 2}\n className=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {l.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {columns.length === 0 && rows.length > 0 && (\n <p className=\"border-t border-border px-3 py-2 text-xs text-muted-foreground\">\n {l.noColumns}\n </p>\n )}\n </div>\n )}\n </div>\n )\n}\n","/**\n * A table of tags as a Word document: a title, when the snapshot was taken, then one table with a\n * row per tag, a column per field of its kind, the evidence behind it (linked document names and fact\n * excerpts) and its gaps. Written straight as WordprocessingML and zipped with `fflate` (already a\n * dependency, and what `docx/export.ts` uses), so the result opens in the native Word editor and\n * in Word without pulling the editor engine into the tags module.\n */\n\nimport {\n cellText,\n cellValue,\n isGap,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableRow,\n} from './tagTableModel'\nimport {\n cell,\n docxPackage,\n documentXml,\n minuteUtc,\n page,\n paragraph,\n TABLE_DOCUMENT_STYLES,\n} from './ooxml'\n\nexport { DOCX_MIME_TYPE } from './ooxml'\n\n/** More table columns than this (item, fields, evidence, gaps) turn the page to landscape. */\nexport const TAG_TABLE_DOCX_LANDSCAPE_AFTER = 6\n\nexport interface TagTableDocxLabels {\n /** The row column's heading. */\n row: string\n evidence: string\n gaps: string\n /** `{at}` is the snapshot time, `YYYY-MM-DD HH:MM UTC`. */\n takenAt: string\n /** A row with no linked document, fact or thread. */\n noEvidence: string\n /** `{fields}`: the row's empty fields. */\n missing: string\n /** `{count}` more links than listed. */\n more: string\n document: string\n documents: string\n fact: string\n facts: string\n thread: string\n threads: string\n untitledThread: string\n empty: string\n}\n\nexport const DEFAULT_TAG_TABLE_DOCX_LABELS: TagTableDocxLabels = {\n row: 'Item',\n evidence: 'Evidence',\n gaps: 'Gaps',\n takenAt: 'Snapshot taken {at}',\n noEvidence: 'No evidence',\n missing: 'Missing: {fields}',\n more: '+{count} more',\n document: '1 document',\n documents: '{count} documents',\n fact: '1 fact',\n facts: '{count} facts',\n thread: '1 thread',\n threads: '{count} threads',\n untitledThread: 'Untitled thread',\n empty: 'No rows.',\n}\n\nexport interface TagTableDocxOptions {\n title: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n labels?: Partial<TagTableDocxLabels>\n}\n\nconst count = (n: number, one: string, many: string) =>\n n === 1 ? one : many.replace('{count}', String(n))\n\nfunction evidenceParagraphs(row: TagTableRow, l: TagTableDocxLabels): string[] {\n if (isGap(row)) return []\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n return [\n paragraph(\n [\n {\n text: [\n links.doc_count ? count(links.doc_count, l.document, l.documents) : null,\n links.fact_count ? count(links.fact_count, l.fact, l.facts) : null,\n links.thread_count ? count(links.thread_count, l.thread, l.threads) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n muted: true,\n },\n ],\n 'TagTableCell'\n ),\n ...docs.map((d) =>\n paragraph(\n [{ text: d.file_name, bold: true }, ...(d.note ? [{ text: ` — ${d.note}` }] : [])],\n 'TagTableCell'\n )\n ),\n ...facts.map((f) => paragraph([{ text: `“${f.text}”`, italic: true }], 'TagTableCell')),\n ...threads.map((t) => paragraph([{ text: t.title || l.untitledThread }], 'TagTableCell')),\n ...(more > 0\n ? [\n paragraph(\n [{ text: l.more.replace('{count}', String(more)), muted: true }],\n 'TagTableCell'\n ),\n ]\n : []),\n ]\n}\n\nfunction gapParagraphs(\n row: TagTableRow,\n columns: TagTableField[],\n l: TagTableDocxLabels\n): string[] {\n const missing = columns\n .filter((c) => c.type !== 'checkbox' && cellText(cellValue(row, c), c) === '')\n .map((c) => c.name)\n return [\n ...(isGap(row) ? [paragraph([{ text: l.noEvidence, bold: true }], 'TagTableCell')] : []),\n ...(missing.length\n ? [paragraph([{ text: l.missing.replace('{fields}', missing.join(', ')) }], 'TagTableCell')]\n : []),\n ]\n}\n\n/** `word/document.xml` for the table (exposed for tests and for hosts that assemble their own package). */\nexport function tagTableDocumentXml(table: TagTableData, options: TagTableDocxOptions): string {\n const l = { ...DEFAULT_TAG_TABLE_DOCX_LABELS, ...options.labels }\n const { columns, rows } = table\n const heads = [l.row, ...columns.map((c) => c.name), l.evidence, l.gaps]\n const landscape = heads.length > TAG_TABLE_DOCX_LANDSCAPE_AFTER\n const { textWidth, sectPr } = page(landscape)\n // Relative widths: the item and evidence get room to read, each field and the gaps a share.\n const weights = [2, ...columns.map(() => 1), 3, 1.5]\n const total = weights.reduce((a, b) => a + b, 0)\n const widths = weights.map((w) => Math.floor((textWidth * w) / total))\n const at = minuteUtc(options.at ?? new Date().toISOString())\n\n const header = `<w:tr><w:trPr><w:tblHeader/><w:cantSplit/></w:trPr>${heads\n .map((h, i) =>\n cell([paragraph([{ text: h, bold: true }], 'TagTableCell')], widths[i], 'E7E6E6')\n )\n .join('')}</w:tr>`\n const body = rows.map((row) => {\n const fill = isGap(row) ? 'FFF2CC' : undefined\n const cells = [\n cell([paragraph([{ text: row.name, bold: true }], 'TagTableCell')], widths[0], fill),\n ...columns.map((c, i) => {\n const text = cellText(cellValue(row, c), c, options.nameOf)\n return cell(text ? [paragraph([{ text }], 'TagTableCell')] : [], widths[i + 1], fill)\n }),\n cell(evidenceParagraphs(row, l), widths[columns.length + 1], fill),\n cell(gapParagraphs(row, columns, l), widths[columns.length + 2], fill),\n ]\n return `<w:tr><w:trPr><w:cantSplit/></w:trPr>${cells.join('')}</w:tr>`\n })\n\n const grid = `<w:tbl><w:tblPr><w:tblStyle w:val=\"TagTableGrid\"/><w:tblW w:w=\"${textWidth}\" w:type=\"dxa\"/><w:tblLayout w:type=\"fixed\"/><w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr><w:tblGrid>${widths\n .map((w) => `<w:gridCol w:w=\"${w}\"/>`)\n .join('')}</w:tblGrid>${header}${body.join('')}</w:tbl>`\n\n return documentXml(\n `${paragraph(\n [{ text: options.title }],\n 'Title'\n )}${paragraph([{ text: l.takenAt.replace('{at}', `${at} UTC`), muted: true }])}${grid}${\n rows.length ? '' : paragraph([{ text: l.empty, muted: true }])\n }<w:p/>${sectPr}`\n )\n}\n\n/** The table as `.docx` bytes. */\nexport function tagTableDocx(table: TagTableData, options: TagTableDocxOptions): Uint8Array {\n const at = new Date(options.at ?? Date.now()).toISOString()\n return docxPackage({\n document: tagTableDocumentXml(table, { ...options, at }),\n styles: TABLE_DOCUMENT_STYLES,\n title: options.title,\n at,\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/activity/workspace-activity.ts","../src/activity/WorkspaceActivityList.tsx","../src/activity/NotificationRelevanceControls.tsx","../src/tags/tagTableModel.ts","../src/tags/TagColumnsEditor.tsx","../src/tags/TagTable.tsx","../src/tags/tagTableDocx.ts"],"names":["jsxs","jsx","Button","cn","Fragment","Activity","useState","count","FileText","Loader2","Input","Plus"],"mappings":"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","file":"chunk-22WFGXG2.js","sourcesContent":["/**\n * The workspace activity feed's entries, as `GET /v1/workspace/{id}/activity` returns them, and what\n * each one says and opens. Everything a person is not pushed (uploads, other people's threads, runs)\n * can still be found here.\n */\n\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n taskActivityHeadline,\n type TaskActivityKind,\n} from '../agents/tasks/TaskActivityTimeline'\n\n/** Where an entry comes from. */\nexport type WorkspaceActivitySource = 'thread' | 'message' | 'document' | 'workflow'\n\n/** One entry of the feed (the shape of the API's `WorkspaceActivityEntry`). */\nexport interface WorkspaceActivityItem {\n external_id: string\n source: WorkspaceActivitySource\n /** A thread event kind, `message_posted`, `document_uploaded` / `_version` / `_signed`, `workflow_run`. */\n kind: string\n actor_ext_id?: string | null\n conversation_ext_id?: string | null\n /** Decrypted when the session has the workspace open, else null. */\n conversation_title?: string | null\n message_ext_id?: string | null\n document_ext_id?: string | null\n document_name?: string | null\n version?: number | null\n workflow_ext_id?: string | null\n workflow_name?: string | null\n /** A workflow run's status. */\n status?: string | null\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\n/** What clicking an entry opens. */\nexport type WorkspaceActivityTarget =\n | { kind: 'thread'; conversationId: string; messageId?: string }\n | { kind: 'document'; documentId: string; version?: number }\n | { kind: 'workflow'; workflowId: string; conversationId?: string }\n\n/** The thread, document version or run an entry opens; null when it names nothing openable. */\nexport function workspaceActivityTarget(\n item: WorkspaceActivityItem\n): WorkspaceActivityTarget | null {\n switch (item.source) {\n case 'thread':\n case 'message':\n return item.conversation_ext_id\n ? {\n kind: 'thread',\n conversationId: item.conversation_ext_id,\n ...(item.message_ext_id ? { messageId: item.message_ext_id } : {}),\n }\n : null\n case 'document':\n if (!item.document_ext_id) return null\n // An upload is the document as it was first saved; a new version or a signature opens that version.\n return item.kind !== 'document_uploaded' && item.version\n ? { kind: 'document', documentId: item.document_ext_id, version: item.version }\n : { kind: 'document', documentId: item.document_ext_id }\n case 'workflow':\n return item.workflow_ext_id\n ? {\n kind: 'workflow',\n workflowId: item.workflow_ext_id,\n ...(item.conversation_ext_id ? { conversationId: item.conversation_ext_id } : {}),\n }\n : null\n default:\n return null\n }\n}\n\nconst quoted = (name: string | null | undefined, fallback: string) =>\n name ? `“${name}”` : fallback\n\n/** What happened, without who did it: \"Uploaded “Lease.pdf”\", \"Marked done in “Smith v Jones”\". */\nexport function workspaceActivityHeadline(item: WorkspaceActivityItem): string {\n const thread = quoted(item.conversation_title, 'a thread')\n const document = quoted(item.document_name, 'a document')\n switch (item.kind) {\n case 'message_posted':\n return `Posted in ${thread}`\n case 'document_uploaded':\n return `Uploaded ${document}`\n case 'document_version':\n return item.version\n ? `Saved version ${item.version} of ${document}`\n : `Saved a new version of ${document}`\n case 'document_signed':\n return `Signed ${document}`\n case 'workflow_run': {\n const run = `Ran ${quoted(item.workflow_name, 'a workflow')}`\n return item.status ? `${run} (${item.status.replace(/_/g, ' ')})` : run\n }\n default: {\n const headline = taskActivityHeadline(\n { kind: item.kind as TaskActivityKind, detail: item.detail },\n DEFAULT_TASK_ACTIVITY_LABELS\n )\n return `${headline} in ${thread}`\n }\n }\n}\n","import type { ReactNode } from 'react'\nimport { Activity, FileText, MessageSquare, Workflow } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n workspaceActivityHeadline,\n workspaceActivityTarget,\n type WorkspaceActivityItem,\n type WorkspaceActivitySource,\n type WorkspaceActivityTarget,\n} from './workspace-activity'\n\nexport interface WorkspaceActivityListLabels {\n empty: string\n loading: string\n error: string\n loadMore: string\n loadingMore: string\n retry: string\n /** Who did it when the entry names no one. */\n system: string\n}\n\nexport const DEFAULT_WORKSPACE_ACTIVITY_LABELS: WorkspaceActivityListLabels = {\n empty: 'Nothing has happened in this workspace yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n loadMore: 'Show older',\n loadingMore: 'Loading…',\n retry: 'Retry',\n system: 'ARBI',\n}\n\nexport interface WorkspaceActivityListProps {\n /** Entries, newest first (every page loaded so far). */\n items: readonly WorkspaceActivityItem[]\n isLoading?: boolean\n isError?: boolean\n /** Another page exists. */\n hasMore?: boolean\n isLoadingMore?: boolean\n onLoadMore?: () => void\n onRetry?: () => void\n /** Open what an entry is about: its thread, document version or run. */\n onOpen?: (target: WorkspaceActivityTarget, item: WorkspaceActivityItem) => void\n /** A person's or agent's display name by id. */\n nameOf?: (id: string) => string | undefined\n /** \"2 hours ago\"; default the local date and time. */\n formatTime?: (iso: string) => string\n labels?: Partial<WorkspaceActivityListLabels>\n className?: string\n testId?: string\n}\n\nconst ICONS: Record<WorkspaceActivitySource, ReactNode> = {\n thread: <Activity className=\"size-4\" aria-hidden />,\n message: <MessageSquare className=\"size-4\" aria-hidden />,\n document: <FileText className=\"size-4\" aria-hidden />,\n workflow: <Workflow className=\"size-4\" aria-hidden />,\n}\n\nconst localTime = (iso: string) => new Date(iso).toLocaleString()\n\n/** A workspace's activity, newest first, one line per entry; a line opens what it is about. */\nexport function WorkspaceActivityList({\n items,\n isLoading,\n isError,\n hasMore,\n isLoadingMore,\n onLoadMore,\n onRetry,\n onOpen,\n nameOf,\n formatTime = localTime,\n labels,\n className,\n testId = 'workspace-activity',\n}: WorkspaceActivityListProps) {\n const l = { ...DEFAULT_WORKSPACE_ACTIVITY_LABELS, ...labels }\n if (isLoading)\n return (\n <p className={cn('p-3 text-sm text-muted-foreground', className)} data-testid={testId}>\n {l.loading}\n </p>\n )\n if (isError && items.length === 0)\n return (\n <div\n className={cn('flex items-center gap-2 p-3 text-sm text-muted-foreground', className)}\n data-testid={testId}\n >\n <span role=\"alert\">{l.error}</span>\n {onRetry && (\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n {l.retry}\n </Button>\n )}\n </div>\n )\n if (items.length === 0)\n return (\n <p className={cn('p-3 text-sm text-muted-foreground', className)} data-testid={testId}>\n {l.empty}\n </p>\n )\n\n return (\n <div className={cn('flex flex-col', className)} data-testid={testId}>\n <ul className=\"divide-y divide-border\" data-testid={`${testId}-list`}>\n {items.map((item) => {\n const target = workspaceActivityTarget(item)\n const actor = item.actor_ext_id ? (nameOf?.(item.actor_ext_id) ?? null) : l.system\n const body = (\n <>\n <span className=\"mt-0.5 shrink-0 text-muted-foreground\">{ICONS[item.source]}</span>\n <span className=\"min-w-0 flex-1 text-sm\">\n {actor && <span className=\"font-medium\">{actor} </span>}\n <span className=\"text-muted-foreground\">{workspaceActivityHeadline(item)}</span>\n </span>\n <time\n dateTime={item.created_at}\n className=\"shrink-0 text-xs tabular-nums text-muted-foreground\"\n >\n {formatTime(item.created_at)}\n </time>\n </>\n )\n return (\n <li\n key={item.external_id}\n data-testid={`${testId}-item-${item.external_id}`}\n data-kind={item.kind}\n >\n {target && onOpen ? (\n <button\n type=\"button\"\n className=\"flex w-full items-start gap-3 px-3 py-2 text-left hover:bg-accent focus-visible:bg-accent focus-visible:outline-none\"\n onClick={() => onOpen(target, item)}\n >\n {body}\n </button>\n ) : (\n <div className=\"flex items-start gap-3 px-3 py-2\">{body}</div>\n )}\n </li>\n )\n })}\n </ul>\n {hasMore && onLoadMore && (\n <div className=\"flex justify-center p-2\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={isLoadingMore}\n onClick={onLoadMore}\n data-testid={`${testId}-load-more`}\n >\n {isLoadingMore ? l.loadingMore : l.loadMore}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Follow and mute controls. A workspace member is pushed only what concerns them; following a\n * workspace or a thread opts in to everything from it, and muting a workspace silences it,\n * mentions included. Presentational: the host owns the settings and the save.\n */\n\nimport { Activity, Bell, BellOff, BellRing } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\n\n/** `default` (what names or involves you), `following` (everything) or `muted` (nothing). */\nexport type NotificationLevel = 'default' | 'following' | 'muted'\n\nexport interface WorkspaceNotificationMenuLabels {\n trigger: string\n heading: string\n default: string\n defaultHint: string\n following: string\n followingHint: string\n muted: string\n mutedHint: string\n activity: string\n}\n\nexport const DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS: WorkspaceNotificationMenuLabels = {\n trigger: 'Workspace notifications',\n heading: 'Notify me about',\n default: 'What involves me',\n defaultHint: 'Mentions, assignments and replies to my threads',\n following: 'Everything',\n followingHint: 'Follow every thread, upload and run',\n muted: 'Nothing',\n mutedHint: 'Mute the workspace, mentions included',\n activity: 'Workspace activity',\n}\n\nconst LEVEL_ICON = { default: Bell, following: BellRing, muted: BellOff } as const\n\nexport interface WorkspaceNotificationMenuProps {\n level: NotificationLevel\n onLevelChange: (level: NotificationLevel) => void\n disabled?: boolean\n /** Adds an item that opens the workspace's activity feed. */\n onOpenActivity?: () => void\n labels?: Partial<WorkspaceNotificationMenuLabels>\n className?: string\n testId?: string\n}\n\n/** A bell button whose menu sets how much of a workspace reaches the user. */\nexport function WorkspaceNotificationMenu({\n level,\n onLevelChange,\n disabled,\n onOpenActivity,\n labels,\n className,\n testId = 'workspace-notification-menu',\n}: WorkspaceNotificationMenuProps) {\n const l = { ...DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, ...labels }\n const Icon = LEVEL_ICON[level]\n const options: { value: NotificationLevel; title: string; hint: string }[] = [\n { value: 'default', title: l.default, hint: l.defaultHint },\n { value: 'following', title: l.following, hint: l.followingHint },\n { value: 'muted', title: l.muted, hint: l.mutedHint },\n ]\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className={cn('size-7 shrink-0 pointer-coarse:size-11', className)}\n aria-label={l.trigger}\n title={l.trigger}\n data-testid={testId}\n data-level={level}\n >\n <Icon className={cn('size-4', level === 'muted' && 'text-muted-foreground')} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-72\">\n <DropdownMenuLabel>{l.heading}</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={level}\n onValueChange={(value) => {\n if (value !== level) onLevelChange(value as NotificationLevel)\n }}\n >\n {options.map((option) => (\n <DropdownMenuRadioItem\n key={option.value}\n value={option.value}\n disabled={disabled}\n data-testid={`${testId}-${option.value}`}\n >\n <span className=\"flex flex-col\">\n <span>{option.title}</span>\n <span className=\"text-xs text-muted-foreground\">{option.hint}</span>\n </span>\n </DropdownMenuRadioItem>\n ))}\n </DropdownMenuRadioGroup>\n {onOpenActivity && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`${testId}-activity`}>\n <Activity className=\"mr-2 size-4\" aria-hidden />\n {l.activity}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport interface ThreadFollowLabels {\n follow: string\n unfollow: string\n}\n\nexport const DEFAULT_THREAD_FOLLOW_LABELS: ThreadFollowLabels = {\n follow: 'Follow thread',\n unfollow: 'Unfollow thread',\n}\n\nexport interface ThreadFollowProps {\n following: boolean\n onFollowingChange: (following: boolean) => void\n disabled?: boolean\n labels?: Partial<ThreadFollowLabels>\n testId?: string\n}\n\n/** \"Follow thread\" / \"Unfollow thread\" as an item of a thread's options menu. */\nexport function ThreadFollowMenuItem({\n following,\n onFollowingChange,\n disabled,\n labels,\n testId = 'thread-follow-item',\n}: ThreadFollowProps) {\n const l = { ...DEFAULT_THREAD_FOLLOW_LABELS, ...labels }\n const Icon = following ? BellOff : BellRing\n return (\n <DropdownMenuItem\n disabled={disabled}\n onSelect={() => onFollowingChange(!following)}\n data-testid={testId}\n data-following={following}\n >\n <Icon className=\"mr-2 size-4\" aria-hidden />\n {following ? l.unfollow : l.follow}\n </DropdownMenuItem>\n )\n}\n\n/** The same switch as a bell button, for a thread header without a menu. */\nexport function ThreadFollowButton({\n following,\n onFollowingChange,\n disabled,\n labels,\n testId = 'thread-follow-button',\n}: ThreadFollowProps) {\n const l = { ...DEFAULT_THREAD_FOLLOW_LABELS, ...labels }\n const label = following ? l.unfollow : l.follow\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 shrink-0\"\n aria-label={label}\n aria-pressed={following}\n title={label}\n disabled={disabled}\n onClick={() => onFollowingChange(!following)}\n data-testid={testId}\n >\n {following ? <BellRing className=\"size-4 text-primary\" /> : <Bell className=\"size-4\" />}\n </Button>\n )\n}\n","/**\n * A table of tags as data: the rows are tags (every issue, every person, a label's children) with\n * their values and links, the columns their kind's fields in the workspace (its issue fields …),\n * and each row's linked documents, facts and threads its evidence. Pure helpers for `TagTable`: a\n * row's value, the gaps, and the snapshot as a Markdown document.\n */\n\nimport type { components } from '@arbidocs/client'\n\n/**\n * A column: one of the kind's fields. A `'tag'` field links to tags (its `options` are the kinds it\n * may point at; its value is a list of tag ids), e.g. a person's Organisation.\n */\nexport type TagTableField = components['schemas']['FieldDefinition']\nexport type TagTableFieldType = TagTableField['type']\n/** A field as written back to the kind (`id` keeps it and its values). */\nexport type TagTableFieldWrite = components['schemas']['FieldDefinitionWrite']\n/** A row: a tag, with its links (`include=links` on the list). */\nexport type TagTableRow = components['schemas']['TagResponse']\nexport type TagTableLinks = components['schemas']['TagLinks']\n\n/** What a table shows: the kind's fields as columns, and its tags as rows. */\nexport interface TagTableData {\n columns: TagTableField[]\n rows: TagTableRow[]\n}\n\nconst NO_LINKS: TagTableLinks = {\n docs: [],\n facts: [],\n threads: [],\n doc_count: 0,\n fact_count: 0,\n thread_count: 0,\n}\n\n/** A row's links (none when the list was read without them). */\nexport const rowLinks = (row: TagTableRow): TagTableLinks => row.links ?? NO_LINKS\n\n/** A row's value for a column (values are keyed by field id). */\nexport const cellValue = (row: TagTableRow, column: TagTableField): unknown =>\n row.field_values?.[column.id]\n\n/** A row with nothing behind it: no linked document, fact or thread. */\nexport const isGap = (row: TagTableRow): boolean => {\n const l = rowLinks(row)\n return l.doc_count + l.fact_count + l.thread_count === 0\n}\n\n/**\n * The tags a link field (`type: 'tag'`) points at: a list of tag ids (a single id is read as one;\n * anything else is none).\n */\nexport function linkedTagIds(value: unknown): string[] {\n if (typeof value === 'string') return value ? [value] : []\n return Array.isArray(value) ? value.filter((id): id is string => typeof id === 'string') : []\n}\n\n/** A value as text (a person or a linked tag by name, a checkbox as yes or no, blank as empty). */\nexport function cellText(\n value: unknown,\n column: Pick<TagTableField, 'type'>,\n nameOf?: (id: string) => string | undefined\n): string {\n if (value === undefined || value === null || value === '') return ''\n if (column.type === 'checkbox') return value ? 'Yes' : 'No'\n if (column.type === 'person' && typeof value === 'string') return nameOf?.(value) ?? value\n if (column.type === 'tag')\n return linkedTagIds(value)\n .map((id) => nameOf?.(id) ?? id)\n .join(', ')\n if (Array.isArray(value)) return value.map(String).join(', ')\n return String(value)\n}\n\n/** A typed input's text back as the value to store (`null` clears it). */\nexport function parseCell(text: string, type: TagTableFieldType): unknown {\n const t = text.trim()\n if (t === '') return null\n if (type === 'number') {\n const n = Number(t)\n return Number.isNaN(n) ? null : n\n }\n return t\n}\n\n/** The kind's fields as definitions to write back, every one kept by id. */\nexport const fieldWrites = (columns: readonly TagTableField[]): TagTableFieldWrite[] =>\n columns.map((c) => ({ id: c.id, name: c.name, type: c.type, options: c.options ?? null }))\n\nconst escapeCell = (text: string) => text.replace(/\\|/g, '\\\\|').replace(/\\n+/g, ' ')\n\nexport interface TagTableMarkdownOptions {\n title: string\n /** The evidence column's heading. */\n evidence?: string\n /** The row column's heading. */\n rowHeading?: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n}\n\n/**\n * The table as a Markdown document: a heading, when it was taken, and one table (a row per tag, a\n * column per field, then the evidence counts). What a host files or has signed.\n */\nexport function tagTableMarkdown(table: TagTableData, options: TagTableMarkdownOptions): string {\n const { columns } = table\n const heads = [\n options.rowHeading ?? 'Item',\n ...columns.map((c) => c.name),\n options.evidence ?? 'Evidence',\n ]\n const lines = [\n `# ${options.title}`,\n '',\n `_Snapshot taken ${new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')} UTC_`,\n '',\n `| ${heads.map(escapeCell).join(' | ')} |`,\n `| ${heads.map(() => '---').join(' | ')} |`,\n ]\n for (const row of table.rows) {\n const l = rowLinks(row)\n const evidence = [\n `${l.doc_count} document${l.doc_count === 1 ? '' : 's'}`,\n `${l.fact_count} fact${l.fact_count === 1 ? '' : 's'}`,\n ...(l.thread_count ? [`${l.thread_count} thread${l.thread_count === 1 ? '' : 's'}`] : []),\n ].join(', ')\n const cells = [\n row.name,\n ...columns.map((c) => cellText(cellValue(row, c), c, options.nameOf)),\n evidence,\n ]\n lines.push(`| ${cells.map(escapeCell).join(' | ')} |`)\n }\n return `${lines.join('\\n')}\\n`\n}\n","/**\n * The columns of a table of tags — the fields of their kind in the workspace (its issue fields …) —\n * edited as one list: rename, reorder by position, add, remove, and a choice field's options. A kept\n * column keeps its id, so its values stay (its type is fixed once created). Saved in full through\n * the host (`onSave`); data-free.\n */\n\nimport { useState } from 'react'\nimport { ArrowDown, ArrowUp, Loader2, Plus, X } from 'lucide-react'\nimport { Button, Input, cn } from '@arbidocs/react/ui'\nimport type { TagTableField, TagTableFieldType, TagTableFieldWrite } from './tagTableModel'\n\nexport interface TagColumnsEditorLabels {\n title: string\n addColumn: string\n name: string\n type: string\n options: string\n optionsPlaceholder: string\n remove: string\n moveUp: string\n moveDown: string\n save: string\n saving: string\n cancel: string\n empty: string\n types: Record<TagTableFieldType, string>\n}\n\nexport const DEFAULT_TAG_COLUMNS_EDITOR_LABELS: TagColumnsEditorLabels = {\n title: 'Columns',\n addColumn: 'Add column',\n name: 'Column name',\n type: 'Type',\n options: 'Choices',\n optionsPlaceholder: 'Choices, comma-separated',\n remove: 'Remove column',\n moveUp: 'Move up',\n moveDown: 'Move down',\n save: 'Save columns',\n saving: 'Saving…',\n cancel: 'Cancel',\n empty: 'No columns.',\n types: {\n text: 'Text',\n number: 'Number',\n date: 'Date',\n checkbox: 'Yes / no',\n select: 'Choice',\n person: 'Person',\n document: 'Document',\n relation: 'Relation',\n lookup: 'Lookup',\n rollup: 'Rollup',\n tag: 'Link to tags',\n },\n}\n\n/** The types a tag's field can have. */\nconst TYPES: TagTableFieldType[] = ['text', 'number', 'date', 'checkbox', 'select', 'person']\n\ninterface Draft {\n id?: string\n name: string\n type: TagTableFieldType\n options: string\n}\n\nconst toDraft = (f: TagTableField): Draft => ({\n id: f.id,\n name: f.name,\n type: f.type,\n options: (f.options ?? []).join(', '),\n})\n\nconst toWrite = (d: Draft): TagTableFieldWrite => ({\n ...(d.id ? { id: d.id } : {}),\n name: d.name.trim(),\n type: d.type,\n options:\n d.type === 'tag'\n ? d.options\n .split(',')\n .map((o) => o.trim())\n .filter(Boolean)\n : d.type === 'select'\n ? d.options\n .split(',')\n .map((o) => o.trim())\n .filter(Boolean)\n : null,\n})\n\nexport interface TagColumnsEditorProps {\n columns: TagTableField[]\n /** Save the columns in full; a rejection (e.g. two columns of one name) stays on screen. */\n onSave: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n onCancel: () => void\n labels?: Partial<TagColumnsEditorLabels>\n className?: string\n testId?: string\n}\n\nexport function TagColumnsEditor({\n columns,\n onSave,\n onCancel,\n labels,\n className,\n testId = 'tag-columns',\n}: TagColumnsEditorProps) {\n const l = { ...DEFAULT_TAG_COLUMNS_EDITOR_LABELS, ...labels }\n const [drafts, setDrafts] = useState<Draft[]>(() => columns.map(toDraft))\n const [saving, setSaving] = useState(false)\n const patch = (i: number, change: Partial<Draft>) =>\n setDrafts((ds) => ds.map((d, j) => (j === i ? { ...d, ...change } : d)))\n const move = (i: number, by: number) =>\n setDrafts((ds) => {\n const next = [...ds]\n const [d] = next.splice(i, 1)\n next.splice(i + by, 0, d)\n return next\n })\n const valid = drafts.every(\n (d) => d.name.trim() && (d.type !== 'select' || toWrite(d).options?.length)\n )\n const input =\n 'h-8 rounded-md border border-input bg-background px-2 text-sm focus:outline-none focus:ring-1 focus:ring-ring'\n\n return (\n <form\n className={cn('space-y-2 rounded-lg border border-border p-3', className)}\n onSubmit={async (e) => {\n e.preventDefault()\n if (!valid) return\n setSaving(true)\n try {\n await onSave(drafts.map(toWrite))\n } finally {\n setSaving(false)\n }\n }}\n data-testid={testId}\n >\n <h3 className=\"text-sm font-semibold\">{l.title}</h3>\n {drafts.length === 0 && <p className=\"text-sm text-muted-foreground\">{l.empty}</p>}\n <ul className=\"space-y-2\">\n {drafts.map((d, i) => (\n <li\n key={d.id ?? `new-${i}`}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${testId}-column-${i}`}\n >\n <Input\n className=\"h-8 w-48\"\n value={d.name}\n placeholder={l.name}\n aria-label={l.name}\n onChange={(e) => patch(i, { name: e.target.value })}\n data-testid={`${testId}-name-${i}`}\n />\n <select\n className={cn(input, 'w-32')}\n value={d.type}\n // A column's type is fixed once it exists: its values were written for it.\n disabled={!!d.id}\n aria-label={l.type}\n onChange={(e) => patch(i, { type: e.target.value as TagTableFieldType })}\n data-testid={`${testId}-type-${i}`}\n >\n {(TYPES.includes(d.type) ? TYPES : [d.type, ...TYPES]).map((t) => (\n <option key={t} value={t}>\n {l.types[t]}\n </option>\n ))}\n </select>\n {d.type === 'select' && (\n <Input\n className=\"h-8 min-w-48 flex-1\"\n value={d.options}\n placeholder={l.optionsPlaceholder}\n aria-label={l.options}\n onChange={(e) => patch(i, { options: e.target.value })}\n data-testid={`${testId}-options-${i}`}\n />\n )}\n <div className=\"ml-auto flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === 0}\n aria-label={l.moveUp}\n onClick={() => move(i, -1)}\n >\n <ArrowUp className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === drafts.length - 1}\n aria-label={l.moveDown}\n onClick={() => move(i, 1)}\n >\n <ArrowDown className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.remove}\n onClick={() => setDrafts((ds) => ds.filter((_, j) => j !== i))}\n data-testid={`${testId}-remove-${i}`}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n </li>\n ))}\n </ul>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setDrafts((ds) => [...ds, { name: '', type: 'text', options: '' }])}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addColumn}\n </Button>\n <div className=\"ml-auto flex items-center gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!valid || saving}\n data-testid={`${testId}-save`}\n >\n {saving && <Loader2 className=\"size-4 animate-spin\" />}\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </div>\n </form>\n )\n}\n","/**\n * A table of tags (every issue, every person, a label's children): one row per tag, a column per\n * field of their kind in the workspace, editable in place by type (text, number, date, checkbox,\n * choice, person, a link to other tags), and the items tagged with each row (its linked documents,\n * facts and threads, with counts). A row with nothing tagged yet is a normal row with an empty\n * cell. Rows and columns can be added (the columns are the kind's fields, edited as one list), and\n * the table exported as a Word document snapshot (filed in the workspace) or downloaded.\n * The data and every write come from the host (`ConnectedTagTable` binds them to ARBI).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n ArrowUpRight,\n ChevronDown,\n Download,\n FileDown,\n FileText,\n Lightbulb,\n Loader2,\n MessagesSquare,\n Plus,\n SlidersHorizontal,\n} from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@arbidocs/react/ui'\nimport {\n cellText,\n cellValue,\n isGap,\n linkedTagIds,\n parseCell,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableFieldWrite,\n type TagTableRow,\n} from './tagTableModel'\nimport { TagColumnsEditor, type TagColumnsEditorLabels } from './TagColumnsEditor'\n\nexport interface TagTableLabels {\n row: string\n evidence: string\n /** `{count}` documents linked. */\n documents: string\n /** `{count}` facts linked. */\n facts: string\n /** `{count}` threads linked. */\n threads: string\n /** One document, one fact, one thread. */\n document: string\n fact: string\n thread: string\n /** A thread without a title. */\n untitledThread: string\n /** `{count}` more links than shown. */\n more: string\n addRow: string\n addRowPlaceholder: string\n add: string\n export: string\n exporting: string\n download: string\n empty: string\n loading: string\n noColumns: string\n choose: string\n yes: string\n /** Opens the column editor. */\n editColumns: string\n /** The column editor's own labels. */\n columns?: Partial<TagColumnsEditorLabels>\n}\n\nexport const DEFAULT_TAG_TABLE_LABELS: TagTableLabels = {\n row: 'Item',\n evidence: 'Tagged items',\n documents: '{count} documents',\n facts: '{count} facts',\n threads: '{count} threads',\n document: '1 document',\n fact: '1 fact',\n thread: '1 thread',\n untitledThread: 'Untitled thread',\n more: '+{count} more',\n addRow: 'Add row',\n addRowPlaceholder: 'Name of the new row',\n add: 'Add',\n export: 'Export as Word document',\n download: 'Download .docx',\n exporting: 'Exporting…',\n empty: 'No rows yet.',\n loading: 'Loading…',\n noColumns: 'No columns yet: add one to give each row a value.',\n choose: '—',\n yes: 'Yes',\n editColumns: 'Columns',\n}\n\nexport interface TagTableProps {\n /** The kind's fields (the columns) and its tags (the rows, with their links). */\n table: TagTableData | undefined\n isLoading?: boolean\n /** Change one cell (`null` clears it). Absent: read only. */\n onChangeValue?: (tagId: string, fieldId: string, value: unknown) => void | Promise<unknown>\n /** Add a row (a new tag of the kind). Absent: no \"Add row\". */\n onAddRow?: (name: string) => void | Promise<unknown>\n /**\n * Set the columns (the kind's fields) in full: a kept column has its `id`. Absent: the columns\n * are fixed.\n */\n onChangeColumns?: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n /** Open a linked document. */\n onOpenDocument?: (documentId: string) => void\n /** Open a linked fact. */\n onOpenFact?: (factId: string) => void\n /** Open a linked thread (conversation). */\n onOpenThread?: (conversationId: string) => void\n /** Open a row's tag (everything tagged with it). */\n onOpenRow?: (tagId: string) => void\n /** Export the table as it stands (filed as a document). Absent: no export button. */\n onExport?: () => void | Promise<unknown>\n /** Download the table as it stands as a file. Absent: no download button. */\n onDownload?: () => void | Promise<unknown>\n /** Who a person column offers. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * The tags a link column (`type: 'tag'`) offers — each with its kind; a column offers those of\n * the kinds in its `options` — and names its values by.\n */\n tags?: ReadonlyArray<{ value: string; label: string; kind: string }>\n /** Open a linked tag (a link column's value). */\n onOpenTag?: (tagId: string) => void\n /** Extra controls in the toolbar. */\n actions?: ReactNode\n labels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\n/**\n * The table fits its container: a fixed layout where the row-label (\"Item\") and tagged-items columns\n * have set widths and the field columns share the rest. Long names wrap in their column (cut after\n * three lines, in full in the tooltip) and tagged-item chips wrap, so nothing runs into the next\n * column or off the page. Only a matrix with very many fields scrolls, inside its own box.\n */\nconst ROW_LABEL_WIDTH = 'w-[11rem]'\nconst EVIDENCE_WIDTH = 'w-[14rem]'\nconst ROW_LABEL = 'line-clamp-3 whitespace-normal break-words'\n\n/**\n * One editable field value of a tag, by its type: committed on blur or Enter (a checkbox and a\n * choice at once). A table cell, and a field of a single tag's form (`TagDetail`).\n */\nexport function TagTableCell({\n row,\n column,\n people,\n tags,\n onOpenTag,\n onChange,\n l,\n testId,\n}: {\n row: TagTableRow\n column: TagTableField\n people?: TagTableProps['people']\n tags?: TagTableProps['tags']\n onOpenTag?: TagTableProps['onOpenTag']\n onChange?: TagTableProps['onChangeValue']\n l: TagTableLabels\n testId: string\n}) {\n const value = cellValue(row, column)\n const nameOf = (id: string) =>\n (column.type === 'tag' ? tags : people)?.find((p) => p.value === id)?.label\n const shown = cellText(value, column, nameOf)\n const [draft, setDraft] = useState(shown)\n useEffect(() => setDraft(cellText(value, column)), [value, column])\n const set = (next: unknown) => void onChange?.(row.external_id, column.id, next)\n\n if (column.type === 'tag')\n return (\n <TagLinkCell\n row={row}\n column={column}\n tags={tags}\n onOpenTag={onOpenTag}\n onChange={onChange ? set : undefined}\n l={l}\n testId={testId}\n />\n )\n if (!onChange)\n return (\n <span className=\"block truncate\" title={shown} data-testid={testId}>\n {shown || <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const field =\n 'h-8 w-full min-w-0 rounded-md border border-transparent bg-transparent px-1.5 text-sm hover:border-input focus:border-input focus:bg-background focus:outline-none'\n switch (column.type) {\n case 'checkbox':\n return (\n <Checkbox\n checked={value === true}\n onCheckedChange={(v) => set(v === true)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n case 'select':\n case 'person': {\n const options =\n column.type === 'select'\n ? (column.options ?? []).map((o) => ({ value: o, label: o }))\n : (people ?? [])\n return (\n <select\n className={cn(field, 'pr-6')}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => set(e.target.value || null)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n {typeof value === 'string' && value && !options.some((o) => o.value === value) && (\n <option value={value}>{value}</option>\n )}\n </select>\n )\n }\n default: {\n const commit = () => {\n if (draft !== cellText(value, column)) set(parseCell(draft, column.type))\n }\n return (\n <input\n className={cn(field, 'pr-6')}\n type={column.type === 'number' ? 'number' : column.type === 'date' ? 'date' : 'text'}\n value={column.type === 'date' ? draft.slice(0, 10) : draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') (e.target as HTMLInputElement).blur()\n if (e.key === 'Escape') setDraft(cellText(value, column))\n }}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n }\n }\n}\n\n/**\n * A link field's value: the linked tags as chips that open them, and (editable) a choice among the\n * tags of the kinds the field allows. One link at a time; the value is stored as a list.\n */\nfunction TagLinkCell({\n row,\n column,\n tags,\n onOpenTag,\n onChange,\n l,\n testId,\n}: {\n row: TagTableRow\n column: TagTableField\n tags?: TagTableProps['tags']\n onOpenTag?: TagTableProps['onOpenTag']\n onChange?: (next: unknown) => void\n l: TagTableLabels\n testId: string\n}) {\n const ids = linkedTagIds(cellValue(row, column))\n const kinds = column.options ?? []\n const options = (tags ?? []).filter(\n (t) => t.value !== row.external_id && (kinds.length === 0 || kinds.includes(t.kind))\n )\n const label = (id: string) => tags?.find((t) => t.value === id)?.label ?? id\n const chips = ids.map((id) =>\n onOpenTag ? (\n <button\n key={id}\n type=\"button\"\n onClick={() => onOpenTag(id)}\n className=\"inline-flex min-w-0 max-w-full items-center truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary\"\n data-testid={`${testId}-link-${id}`}\n >\n {label(id)}\n </button>\n ) : (\n <span\n key={id}\n className=\"inline-flex min-w-0 max-w-full truncate rounded-md border border-border px-1.5 py-0.5 text-xs\"\n data-testid={`${testId}-link-${id}`}\n >\n {label(id)}\n </span>\n )\n )\n if (!onChange)\n return (\n <span className=\"flex min-w-0 flex-wrap gap-1\" data-testid={testId}>\n {chips.length ? chips : <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const current = ids[0]\n // The linked name is text that wraps (a narrow column never cuts it to \"Acm…\"), and opens the\n // tag; the picker behind the chevron changes it.\n return (\n // Wraps: in a narrow column the name breaks between words and the picker moves below it.\n <span className=\"flex min-w-0 flex-wrap items-center gap-x-1 py-1\">\n {current &&\n (onOpenTag ? (\n <button\n type=\"button\"\n onClick={() => onOpenTag(current)}\n className=\"max-w-full rounded px-1 text-left text-sm break-words hover:text-primary hover:underline focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={`Open ${label(current)}`}\n title={`Open ${label(current)}`}\n data-testid={`${testId}-open`}\n >\n {label(current)}\n <ArrowUpRight className=\"ml-0.5 inline size-3.5 align-[-2px] text-muted-foreground\" />\n </button>\n ) : (\n <span className=\"max-w-full px-1 text-sm break-words\">{label(current)}</span>\n ))}\n <span\n className={cn(\n 'relative inline-flex h-6 shrink-0 items-center rounded text-muted-foreground hover:bg-muted hover:text-foreground focus-within:ring-2 focus-within:ring-ring',\n current ? 'w-6 justify-center' : 'min-w-0 flex-1 gap-1 px-1 text-sm'\n )}\n title={current ? `${column.name}: ${label(current)}` : undefined}\n >\n {!current && <span className=\"truncate\">{l.choose}</span>}\n <ChevronDown className=\"size-3.5 shrink-0\" />\n <select\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n value={current ?? ''}\n onChange={(e) => onChange(e.target.value ? [e.target.value] : null)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((t) => (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n ))}\n {current && !options.some((t) => t.value === current) && (\n <option value={current}>{label(current)}</option>\n )}\n </select>\n </span>\n </span>\n )\n}\n\n/** A count as a phrase: \"1 document\", \"3 facts\", or nothing for none. */\nconst countText = (count: number, one: string, many: string) =>\n count === 1 ? one : count ? many.replace('{count}', String(count)) : null\n\n/** What backs a row: its documents, facts and threads as links, with counts and \"+N more\". */\nfunction Evidence({\n row,\n l,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n testId,\n}: {\n row: TagTableRow\n l: TagTableLabels\n onOpenDocument?: (id: string) => void\n onOpenFact?: (id: string) => void\n onOpenThread?: (id: string) => void\n onOpenRow?: (id: string) => void\n testId: string\n}) {\n // Nothing tagged yet is normal: an empty cell, no warning.\n if (isGap(row)) return null\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n const chip =\n 'inline-flex min-w-0 max-w-full items-center gap-1 truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary disabled:hover:border-border disabled:hover:text-inherit'\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1\" data-testid={testId}>\n <span className=\"mr-1 w-full text-xs text-muted-foreground\">\n {[\n countText(links.doc_count, l.document, l.documents),\n countText(links.fact_count, l.fact, l.facts),\n countText(links.thread_count, l.thread, l.threads),\n ]\n .filter(Boolean)\n .join(' · ')}\n </span>\n {docs.map((d) => (\n <button\n key={d.doc_ext_id}\n type=\"button\"\n className={chip}\n title={d.note ? `${d.file_name}: ${d.note}` : d.file_name}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{d.file_name}</span>\n </button>\n ))}\n {facts.map((f) => (\n <button\n key={f.fact_ext_id}\n type=\"button\"\n className={chip}\n title={f.text}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{f.text}</span>\n </button>\n ))}\n {threads.map((t) => (\n <button\n key={t.conversation_ext_id}\n type=\"button\"\n className={chip}\n title={t.title || l.untitledThread}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{t.title || l.untitledThread}</span>\n </button>\n ))}\n {more > 0 &&\n (onOpenRow ? (\n <button\n type=\"button\"\n className=\"text-xs text-primary hover:underline\"\n onClick={() => onOpenRow(row.external_id)}\n data-testid={`${testId}-more`}\n >\n {l.more.replace('{count}', String(more))}\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\" data-testid={`${testId}-more`}>\n {l.more.replace('{count}', String(more))}\n </span>\n ))}\n </div>\n )\n}\n\nexport function TagTable({\n table,\n isLoading,\n onChangeValue,\n onAddRow,\n onChangeColumns,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n onExport,\n onDownload,\n people,\n tags,\n onOpenTag,\n actions,\n labels,\n className,\n testId = 'tag-table',\n}: TagTableProps) {\n const l = { ...DEFAULT_TAG_TABLE_LABELS, ...labels }\n const columns = useMemo(() => table?.columns ?? [], [table])\n const rows = table?.rows ?? []\n const [editingColumns, setEditingColumns] = useState(false)\n const [name, setName] = useState('')\n const [adding, setAdding] = useState(false)\n const [exporting, setExporting] = useState(false)\n\n const add = async () => {\n const n = name.trim()\n if (!n || !onAddRow) return\n setAdding(true)\n try {\n await onAddRow(n)\n setName('')\n } finally {\n setAdding(false)\n }\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {actions}\n {onChangeColumns && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-pressed={editingColumns}\n onClick={() => setEditingColumns((v) => !v)}\n data-testid={`${testId}-edit-columns`}\n >\n <SlidersHorizontal className=\"size-4\" />\n {l.editColumns}\n </Button>\n )}\n {onDownload && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={rows.length === 0}\n onClick={() => void onDownload()}\n data-testid={`${testId}-download`}\n >\n <Download className=\"size-4\" />\n {l.download}\n </Button>\n )}\n {onExport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={exporting || rows.length === 0}\n onClick={async () => {\n setExporting(true)\n try {\n await onExport()\n } finally {\n setExporting(false)\n }\n }}\n data-testid={`${testId}-export`}\n >\n {exporting ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileDown className=\"size-4\" />\n )}\n {exporting ? l.exporting : l.export}\n </Button>\n )}\n </div>\n </div>\n\n {editingColumns && onChangeColumns && (\n <TagColumnsEditor\n columns={columns}\n labels={l.columns}\n onCancel={() => setEditingColumns(false)}\n onSave={async (fields) => {\n await onChangeColumns(fields)\n setEditingColumns(false)\n }}\n testId={`${testId}-columns`}\n />\n )}\n\n {onAddRow && (\n <form\n className=\"flex max-w-md items-center gap-2\"\n onSubmit={(e) => {\n e.preventDefault()\n void add()\n }}\n >\n <Input\n value={name}\n placeholder={l.addRowPlaceholder}\n aria-label={l.addRow}\n onChange={(e) => setName(e.target.value)}\n data-testid={`${testId}-add-name`}\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!name.trim() || adding}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addRow}\n </Button>\n </form>\n )}\n\n {isLoading ? (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table\n className=\"w-full min-w-[36rem] table-fixed border-collapse text-sm\"\n data-testid={`${testId}-table`}\n >\n <thead className=\"bg-muted/40\">\n <tr>\n <th\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium'\n )}\n >\n {l.row}\n </th>\n {columns.map((c) => (\n <th\n key={c.id}\n className=\"truncate px-3 py-2 text-left font-medium\"\n title={c.name}\n data-testid={`${testId}-column-${c.id}`}\n >\n {c.name}\n </th>\n ))}\n <th className={cn(EVIDENCE_WIDTH, 'px-3 py-2 text-left font-medium')}>\n {l.evidence}\n </th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => {\n const id = row.external_id\n return (\n <tr\n key={id}\n className=\"border-t border-border align-top\"\n data-testid={`${testId}-row-${id}`}\n >\n <th\n scope=\"row\"\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-background px-3 py-2 text-left font-medium'\n )}\n >\n {onOpenRow ? (\n <button\n type=\"button\"\n className={cn(ROW_LABEL, 'text-left hover:text-primary hover:underline')}\n title={row.name}\n onClick={() => onOpenRow(id)}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </button>\n ) : (\n <span\n className={ROW_LABEL}\n title={row.name}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </span>\n )}\n </th>\n {columns.map((c) => (\n <td key={c.id} className=\"px-1.5 py-1\">\n <TagTableCell\n row={row}\n column={c}\n people={people}\n tags={tags}\n onOpenTag={onOpenTag}\n onChange={onChangeValue}\n l={l}\n testId={`${testId}-cell-${id}-${c.id}`}\n />\n </td>\n ))}\n <td className=\"min-w-0 px-3 py-2\">\n <Evidence\n row={row}\n l={l}\n onOpenDocument={onOpenDocument}\n onOpenFact={onOpenFact}\n onOpenThread={onOpenThread}\n onOpenRow={onOpenRow}\n testId={`${testId}-evidence-${id}`}\n />\n </td>\n </tr>\n )\n })}\n {rows.length === 0 && (\n <tr>\n <td\n colSpan={columns.length + 2}\n className=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {l.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {columns.length === 0 && rows.length > 0 && (\n <p className=\"border-t border-border px-3 py-2 text-xs text-muted-foreground\">\n {l.noColumns}\n </p>\n )}\n </div>\n )}\n </div>\n )\n}\n","/**\n * A table of tags as a Word document: a title, when the snapshot was taken, then one table with a\n * row per tag, a column per field of its kind, the evidence behind it (linked document names and fact\n * excerpts) and its gaps. Written straight as WordprocessingML and zipped with `fflate` (already a\n * dependency, and what `docx/export.ts` uses), so the result opens in the native Word editor and\n * in Word without pulling the editor engine into the tags module.\n */\n\nimport {\n cellText,\n cellValue,\n isGap,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableRow,\n} from './tagTableModel'\nimport {\n cell,\n docxPackage,\n documentXml,\n minuteUtc,\n page,\n paragraph,\n TABLE_DOCUMENT_STYLES,\n} from './ooxml'\n\nexport { DOCX_MIME_TYPE } from './ooxml'\n\n/** More table columns than this (item, fields, evidence, gaps) turn the page to landscape. */\nexport const TAG_TABLE_DOCX_LANDSCAPE_AFTER = 6\n\nexport interface TagTableDocxLabels {\n /** The row column's heading. */\n row: string\n evidence: string\n gaps: string\n /** `{at}` is the snapshot time, `YYYY-MM-DD HH:MM UTC`. */\n takenAt: string\n /** A row with no linked document, fact or thread. */\n noEvidence: string\n /** `{fields}`: the row's empty fields. */\n missing: string\n /** `{count}` more links than listed. */\n more: string\n document: string\n documents: string\n fact: string\n facts: string\n thread: string\n threads: string\n untitledThread: string\n empty: string\n}\n\nexport const DEFAULT_TAG_TABLE_DOCX_LABELS: TagTableDocxLabels = {\n row: 'Item',\n evidence: 'Evidence',\n gaps: 'Gaps',\n takenAt: 'Snapshot taken {at}',\n noEvidence: 'No evidence',\n missing: 'Missing: {fields}',\n more: '+{count} more',\n document: '1 document',\n documents: '{count} documents',\n fact: '1 fact',\n facts: '{count} facts',\n thread: '1 thread',\n threads: '{count} threads',\n untitledThread: 'Untitled thread',\n empty: 'No rows.',\n}\n\nexport interface TagTableDocxOptions {\n title: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n labels?: Partial<TagTableDocxLabels>\n}\n\nconst count = (n: number, one: string, many: string) =>\n n === 1 ? one : many.replace('{count}', String(n))\n\nfunction evidenceParagraphs(row: TagTableRow, l: TagTableDocxLabels): string[] {\n if (isGap(row)) return []\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n return [\n paragraph(\n [\n {\n text: [\n links.doc_count ? count(links.doc_count, l.document, l.documents) : null,\n links.fact_count ? count(links.fact_count, l.fact, l.facts) : null,\n links.thread_count ? count(links.thread_count, l.thread, l.threads) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n muted: true,\n },\n ],\n 'TagTableCell'\n ),\n ...docs.map((d) =>\n paragraph(\n [{ text: d.file_name, bold: true }, ...(d.note ? [{ text: ` — ${d.note}` }] : [])],\n 'TagTableCell'\n )\n ),\n ...facts.map((f) => paragraph([{ text: `“${f.text}”`, italic: true }], 'TagTableCell')),\n ...threads.map((t) => paragraph([{ text: t.title || l.untitledThread }], 'TagTableCell')),\n ...(more > 0\n ? [\n paragraph(\n [{ text: l.more.replace('{count}', String(more)), muted: true }],\n 'TagTableCell'\n ),\n ]\n : []),\n ]\n}\n\nfunction gapParagraphs(\n row: TagTableRow,\n columns: TagTableField[],\n l: TagTableDocxLabels\n): string[] {\n const missing = columns\n .filter((c) => c.type !== 'checkbox' && cellText(cellValue(row, c), c) === '')\n .map((c) => c.name)\n return [\n ...(isGap(row) ? [paragraph([{ text: l.noEvidence, bold: true }], 'TagTableCell')] : []),\n ...(missing.length\n ? [paragraph([{ text: l.missing.replace('{fields}', missing.join(', ')) }], 'TagTableCell')]\n : []),\n ]\n}\n\n/** `word/document.xml` for the table (exposed for tests and for hosts that assemble their own package). */\nexport function tagTableDocumentXml(table: TagTableData, options: TagTableDocxOptions): string {\n const l = { ...DEFAULT_TAG_TABLE_DOCX_LABELS, ...options.labels }\n const { columns, rows } = table\n const heads = [l.row, ...columns.map((c) => c.name), l.evidence, l.gaps]\n const landscape = heads.length > TAG_TABLE_DOCX_LANDSCAPE_AFTER\n const { textWidth, sectPr } = page(landscape)\n // Relative widths: the item and evidence get room to read, each field and the gaps a share.\n const weights = [2, ...columns.map(() => 1), 3, 1.5]\n const total = weights.reduce((a, b) => a + b, 0)\n const widths = weights.map((w) => Math.floor((textWidth * w) / total))\n const at = minuteUtc(options.at ?? new Date().toISOString())\n\n const header = `<w:tr><w:trPr><w:tblHeader/><w:cantSplit/></w:trPr>${heads\n .map((h, i) =>\n cell([paragraph([{ text: h, bold: true }], 'TagTableCell')], widths[i], 'E7E6E6')\n )\n .join('')}</w:tr>`\n const body = rows.map((row) => {\n const fill = isGap(row) ? 'FFF2CC' : undefined\n const cells = [\n cell([paragraph([{ text: row.name, bold: true }], 'TagTableCell')], widths[0], fill),\n ...columns.map((c, i) => {\n const text = cellText(cellValue(row, c), c, options.nameOf)\n return cell(text ? [paragraph([{ text }], 'TagTableCell')] : [], widths[i + 1], fill)\n }),\n cell(evidenceParagraphs(row, l), widths[columns.length + 1], fill),\n cell(gapParagraphs(row, columns, l), widths[columns.length + 2], fill),\n ]\n return `<w:tr><w:trPr><w:cantSplit/></w:trPr>${cells.join('')}</w:tr>`\n })\n\n const grid = `<w:tbl><w:tblPr><w:tblStyle w:val=\"TagTableGrid\"/><w:tblW w:w=\"${textWidth}\" w:type=\"dxa\"/><w:tblLayout w:type=\"fixed\"/><w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr><w:tblGrid>${widths\n .map((w) => `<w:gridCol w:w=\"${w}\"/>`)\n .join('')}</w:tblGrid>${header}${body.join('')}</w:tbl>`\n\n return documentXml(\n `${paragraph(\n [{ text: options.title }],\n 'Title'\n )}${paragraph([{ text: l.takenAt.replace('{at}', `${at} UTC`), muted: true }])}${grid}${\n rows.length ? '' : paragraph([{ text: l.empty, muted: true }])\n }<w:p/>${sectPr}`\n )\n}\n\n/** The table as `.docx` bytes. */\nexport function tagTableDocx(table: TagTableData, options: TagTableDocxOptions): Uint8Array {\n const at = new Date(options.at ?? Date.now()).toISOString()\n return docxPackage({\n document: tagTableDocumentXml(table, { ...options, at }),\n styles: TABLE_DOCUMENT_STYLES,\n title: options.title,\n at,\n })\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { Toaster } from './chunk-OKERRHLH.js';
3
- import { useAssistantDock, useChatSurface } from './chunk-7M4C6CK7.js';
3
+ import { useAssistantDock, useChatSurface } from './chunk-KTFDUSON.js';
4
4
  import { BlocksTooltipProvider } from './chunk-7XF5SFJ2.js';
5
5
  import { listOptionId } from './chunk-AA3PT6KR.js';
6
6
  import { speakerAccent, speakerDot } from './chunk-Z3AZ7Q5X.js';
@@ -2056,5 +2056,5 @@ function transcriptRuns(items, speakerOf, timeOf, gapMs = 2 * 6e4) {
2056
2056
  }
2057
2057
 
2058
2058
  export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationFilter, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DEFAULT_THREAD_VISUALIZER_LABELS, DraftingDocChip, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, ProvisionalTranscriptLine, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, ThreadVisualizer, TranscriptLine, buildThreadDiagram, flashMessage, getParticipantTints, hasMessageBody, isLongPastedText, threadForNode, transcriptRuns, useDismissibleCard, useLongPaste, useRecipientDraft };
2059
- //# sourceMappingURL=chunk-VMESMX7N.js.map
2060
- //# sourceMappingURL=chunk-VMESMX7N.js.map
2059
+ //# sourceMappingURL=chunk-453PNNNW.js.map
2060
+ //# sourceMappingURL=chunk-453PNNNW.js.map