@arbidocs/blocks 0.5.12 → 0.5.14

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 (157) hide show
  1. package/dist/{ConnectedCallDock-T4E3JVQV.cjs → ConnectedCallDock-3EQOPJNT.cjs} +5 -5
  2. package/dist/{ConnectedCallDock-T4E3JVQV.cjs.map → ConnectedCallDock-3EQOPJNT.cjs.map} +1 -1
  3. package/dist/{ConnectedCallDock-QM2TY67C.js → ConnectedCallDock-ET7DL5PF.js} +4 -4
  4. package/dist/{ConnectedCallDock-QM2TY67C.js.map → ConnectedCallDock-ET7DL5PF.js.map} +1 -1
  5. package/dist/{ConnectedCallRoom-VT5Z5BFO.js → ConnectedCallRoom-QQMTM76E.js} +4 -4
  6. package/dist/{ConnectedCallRoom-VT5Z5BFO.js.map → ConnectedCallRoom-QQMTM76E.js.map} +1 -1
  7. package/dist/{ConnectedCallRoom-4SWU33XP.cjs → ConnectedCallRoom-TQ6LXQEQ.cjs} +5 -5
  8. package/dist/{ConnectedCallRoom-4SWU33XP.cjs.map → ConnectedCallRoom-TQ6LXQEQ.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-L2YQ2RHW.js → ConnectedNativeDocxComparison-5XYKZMXL.js} +10 -10
  10. package/dist/{ConnectedNativeDocxComparison-L2YQ2RHW.js.map → ConnectedNativeDocxComparison-5XYKZMXL.js.map} +1 -1
  11. package/dist/{ConnectedNativeDocxComparison-JPVXK6OZ.cjs → ConnectedNativeDocxComparison-I2ALQR2Y.cjs} +11 -11
  12. package/dist/{ConnectedNativeDocxComparison-JPVXK6OZ.cjs.map → ConnectedNativeDocxComparison-I2ALQR2Y.cjs.map} +1 -1
  13. package/dist/{ConnectedNativeDocxEditor-S3OBWGRN.js → ConnectedNativeDocxEditor-T4W74AD2.js} +9 -9
  14. package/dist/{ConnectedNativeDocxEditor-S3OBWGRN.js.map → ConnectedNativeDocxEditor-T4W74AD2.js.map} +1 -1
  15. package/dist/{ConnectedNativeDocxEditor-KURMLAOF.cjs → ConnectedNativeDocxEditor-XLRQVOB5.cjs} +11 -11
  16. package/dist/{ConnectedNativeDocxEditor-KURMLAOF.cjs.map → ConnectedNativeDocxEditor-XLRQVOB5.cjs.map} +1 -1
  17. package/dist/{ConnectedStreamedWordArtifact-SPM5P6MI.js → ConnectedStreamedWordArtifact-2JL7B5P6.js} +10 -10
  18. package/dist/ConnectedStreamedWordArtifact-2JL7B5P6.js.map +1 -0
  19. package/dist/{ConnectedStreamedWordArtifact-AO46WD7W.cjs → ConnectedStreamedWordArtifact-PQZJAHR7.cjs} +11 -11
  20. package/dist/ConnectedStreamedWordArtifact-PQZJAHR7.cjs.map +1 -0
  21. package/dist/agents/index.cjs +328 -328
  22. package/dist/agents/index.js +6 -6
  23. package/dist/calls/index.cjs +39 -39
  24. package/dist/calls/index.js +7 -7
  25. package/dist/{chunk-SYXJ3QOS.js → chunk-3B75YVZL.js} +3 -3
  26. package/dist/{chunk-SYXJ3QOS.js.map → chunk-3B75YVZL.js.map} +1 -1
  27. package/dist/{chunk-Q5QLV5SQ.js → chunk-4AAM6UQG.js} +3 -3
  28. package/dist/{chunk-Q5QLV5SQ.js.map → chunk-4AAM6UQG.js.map} +1 -1
  29. package/dist/{chunk-R6XPHQOS.js → chunk-4IMTH6Z4.js} +3 -3
  30. package/dist/{chunk-R6XPHQOS.js.map → chunk-4IMTH6Z4.js.map} +1 -1
  31. package/dist/{chunk-I45TWXAG.cjs → chunk-4MADJGGF.cjs} +4 -4
  32. package/dist/{chunk-I45TWXAG.cjs.map → chunk-4MADJGGF.cjs.map} +1 -1
  33. package/dist/{chunk-FUVUFFFA.js → chunk-4OLM7LQX.js} +3 -3
  34. package/dist/{chunk-FUVUFFFA.js.map → chunk-4OLM7LQX.js.map} +1 -1
  35. package/dist/{chunk-X24LIKQ7.cjs → chunk-5NEILZQR.cjs} +4 -4
  36. package/dist/{chunk-X24LIKQ7.cjs.map → chunk-5NEILZQR.cjs.map} +1 -1
  37. package/dist/{chunk-NFEROK3R.js → chunk-5QJDDEYV.js} +3 -3
  38. package/dist/{chunk-NFEROK3R.js.map → chunk-5QJDDEYV.js.map} +1 -1
  39. package/dist/{chunk-CKLG6B3L.js → chunk-5TALCIRH.js} +2 -2
  40. package/dist/{chunk-CKLG6B3L.js.map → chunk-5TALCIRH.js.map} +1 -1
  41. package/dist/{chunk-WGXUAHKD.cjs → chunk-6WX7ZMKL.cjs} +5 -5
  42. package/dist/{chunk-WGXUAHKD.cjs.map → chunk-6WX7ZMKL.cjs.map} +1 -1
  43. package/dist/{chunk-YTK5EU5U.js → chunk-7HCHMQOH.js} +3 -3
  44. package/dist/{chunk-YTK5EU5U.js.map → chunk-7HCHMQOH.js.map} +1 -1
  45. package/dist/{chunk-BGCGKHLZ.cjs → chunk-A6MGGHHN.cjs} +4 -4
  46. package/dist/{chunk-BGCGKHLZ.cjs.map → chunk-A6MGGHHN.cjs.map} +1 -1
  47. package/dist/{chunk-V576JOF4.js → chunk-AAWF27UG.js} +3 -3
  48. package/dist/{chunk-V576JOF4.js.map → chunk-AAWF27UG.js.map} +1 -1
  49. package/dist/{chunk-R65GBJUW.cjs → chunk-ATUPWVAL.cjs} +12 -12
  50. package/dist/{chunk-R65GBJUW.cjs.map → chunk-ATUPWVAL.cjs.map} +1 -1
  51. package/dist/{chunk-KD4N6F2F.cjs → chunk-AUDT4L2H.cjs} +4 -4
  52. package/dist/{chunk-KD4N6F2F.cjs.map → chunk-AUDT4L2H.cjs.map} +1 -1
  53. package/dist/{chunk-X56B2VGH.cjs → chunk-BZF6E46W.cjs} +2 -2
  54. package/dist/{chunk-X56B2VGH.cjs.map → chunk-BZF6E46W.cjs.map} +1 -1
  55. package/dist/{chunk-PQDKGPEL.js → chunk-DCQGJNZQ.js} +3 -3
  56. package/dist/{chunk-PQDKGPEL.js.map → chunk-DCQGJNZQ.js.map} +1 -1
  57. package/dist/{chunk-LPB2X4YD.cjs → chunk-DJ4BTWMA.cjs} +4 -4
  58. package/dist/{chunk-LPB2X4YD.cjs.map → chunk-DJ4BTWMA.cjs.map} +1 -1
  59. package/dist/{chunk-Z5222UQ2.js → chunk-E3RPCHU7.js} +3 -3
  60. package/dist/{chunk-Z5222UQ2.js.map → chunk-E3RPCHU7.js.map} +1 -1
  61. package/dist/{chunk-DIKG6SH3.js → chunk-EMNTZIMB.js} +6 -6
  62. package/dist/{chunk-DIKG6SH3.js.map → chunk-EMNTZIMB.js.map} +1 -1
  63. package/dist/{chunk-SJX3IUEG.cjs → chunk-FJV72FP6.cjs} +5 -5
  64. package/dist/{chunk-SJX3IUEG.cjs.map → chunk-FJV72FP6.cjs.map} +1 -1
  65. package/dist/{chunk-E5N6MD5T.js → chunk-H626LRDN.js} +5 -5
  66. package/dist/{chunk-E5N6MD5T.js.map → chunk-H626LRDN.js.map} +1 -1
  67. package/dist/{chunk-QQRZQC4W.cjs → chunk-HHABG6MV.cjs} +14 -14
  68. package/dist/{chunk-QQRZQC4W.cjs.map → chunk-HHABG6MV.cjs.map} +1 -1
  69. package/dist/{chunk-UWRFHQGA.cjs → chunk-J3EXEAUA.cjs} +4 -4
  70. package/dist/{chunk-UWRFHQGA.cjs.map → chunk-J3EXEAUA.cjs.map} +1 -1
  71. package/dist/{chunk-DIPFR3EP.js → chunk-JUKF7YVT.js} +5 -5
  72. package/dist/{chunk-DIPFR3EP.js.map → chunk-JUKF7YVT.js.map} +1 -1
  73. package/dist/{chunk-FUFPQBKR.cjs → chunk-MB5F7SPD.cjs} +4 -4
  74. package/dist/{chunk-FUFPQBKR.cjs.map → chunk-MB5F7SPD.cjs.map} +1 -1
  75. package/dist/{chunk-OAH5IHX6.cjs → chunk-ML27HIMM.cjs} +6 -6
  76. package/dist/{chunk-OAH5IHX6.cjs.map → chunk-ML27HIMM.cjs.map} +1 -1
  77. package/dist/{chunk-4SKRNAWF.cjs → chunk-MWFSLLFX.cjs} +11 -11
  78. package/dist/{chunk-4SKRNAWF.cjs.map → chunk-MWFSLLFX.cjs.map} +1 -1
  79. package/dist/{chunk-H5PEFD2H.js → chunk-N7INPGON.js} +5 -5
  80. package/dist/{chunk-H5PEFD2H.js.map → chunk-N7INPGON.js.map} +1 -1
  81. package/dist/{chunk-KB5DESUR.js → chunk-NA3BE3YY.js} +3 -3
  82. package/dist/{chunk-KB5DESUR.js.map → chunk-NA3BE3YY.js.map} +1 -1
  83. package/dist/{chunk-RTHDSCCU.cjs → chunk-OHU27AJ4.cjs} +26 -26
  84. package/dist/{chunk-RTHDSCCU.cjs.map → chunk-OHU27AJ4.cjs.map} +1 -1
  85. package/dist/{chunk-DQNCUPIQ.js → chunk-OLBL2XNE.js} +3 -3
  86. package/dist/{chunk-DQNCUPIQ.js.map → chunk-OLBL2XNE.js.map} +1 -1
  87. package/dist/{chunk-G7RWVM2L.cjs → chunk-PBM6BFFH.cjs} +4 -4
  88. package/dist/{chunk-G7RWVM2L.cjs.map → chunk-PBM6BFFH.cjs.map} +1 -1
  89. package/dist/{chunk-WBM7VXTE.cjs → chunk-PE3RIWNX.cjs} +18 -18
  90. package/dist/{chunk-WBM7VXTE.cjs.map → chunk-PE3RIWNX.cjs.map} +1 -1
  91. package/dist/{chunk-AVBZWX6J.js → chunk-PSWTOD7E.js} +3 -3
  92. package/dist/{chunk-AVBZWX6J.js.map → chunk-PSWTOD7E.js.map} +1 -1
  93. package/dist/{chunk-UN4C2ORE.js → chunk-RG4SLXZG.js} +3 -3
  94. package/dist/{chunk-UN4C2ORE.js.map → chunk-RG4SLXZG.js.map} +1 -1
  95. package/dist/{chunk-VEKR5R6V.cjs → chunk-SWBD76UN.cjs} +9 -9
  96. package/dist/{chunk-VEKR5R6V.cjs.map → chunk-SWBD76UN.cjs.map} +1 -1
  97. package/dist/{chunk-WQGNQEEE.cjs → chunk-TDIC7IXS.cjs} +7 -7
  98. package/dist/{chunk-WQGNQEEE.cjs.map → chunk-TDIC7IXS.cjs.map} +1 -1
  99. package/dist/{chunk-EIAKSVBV.js → chunk-TRHAIU6U.js} +4 -4
  100. package/dist/{chunk-EIAKSVBV.js.map → chunk-TRHAIU6U.js.map} +1 -1
  101. package/dist/{chunk-MCVJLNGE.js → chunk-U32UNUEZ.js} +3 -3
  102. package/dist/{chunk-MCVJLNGE.js.map → chunk-U32UNUEZ.js.map} +1 -1
  103. package/dist/{chunk-ZZJ5XKG5.js → chunk-WINJF2AK.js} +3 -3
  104. package/dist/{chunk-ZZJ5XKG5.js.map → chunk-WINJF2AK.js.map} +1 -1
  105. package/dist/{chunk-CDFJOXTF.cjs → chunk-WT5AKLD4.cjs} +52 -52
  106. package/dist/{chunk-CDFJOXTF.cjs.map → chunk-WT5AKLD4.cjs.map} +1 -1
  107. package/dist/{chunk-NS6AZE6U.cjs → chunk-XF6TAXB5.cjs} +8 -8
  108. package/dist/{chunk-NS6AZE6U.cjs.map → chunk-XF6TAXB5.cjs.map} +1 -1
  109. package/dist/{chunk-55PLUQZF.cjs → chunk-XUWZMZP5.cjs} +5 -5
  110. package/dist/{chunk-55PLUQZF.cjs.map → chunk-XUWZMZP5.cjs.map} +1 -1
  111. package/dist/{chunk-JTVZZX2I.js → chunk-Y5HQUPRW.js} +3 -3
  112. package/dist/{chunk-JTVZZX2I.js.map → chunk-Y5HQUPRW.js.map} +1 -1
  113. package/dist/{chunk-6JHHWVFZ.cjs → chunk-Y7KDWKPZ.cjs} +7 -7
  114. package/dist/{chunk-6JHHWVFZ.cjs.map → chunk-Y7KDWKPZ.cjs.map} +1 -1
  115. package/dist/{chunk-HQ3B2RMV.js → chunk-ZBIKL6Q5.js} +6 -6
  116. package/dist/{chunk-HQ3B2RMV.js.map → chunk-ZBIKL6Q5.js.map} +1 -1
  117. package/dist/citations/index.cjs +10 -10
  118. package/dist/citations/index.js +2 -2
  119. package/dist/connect/docx.cjs +13 -13
  120. package/dist/connect/docx.js +9 -9
  121. package/dist/connect/index.cjs +804 -707
  122. package/dist/connect/index.cjs.map +1 -1
  123. package/dist/connect/index.js +132 -39
  124. package/dist/connect/index.js.map +1 -1
  125. package/dist/connect/viewer.cjs +77 -77
  126. package/dist/connect/viewer.js +12 -12
  127. package/dist/connection/projects/index.d.ts +1 -0
  128. package/dist/connection/projects/useProjectSummaries.d.ts +155 -0
  129. package/dist/connection/storage/ConnectedStorageProjectCard.d.ts +1 -3
  130. package/dist/connection/storage/ConnectedStorageSettings.d.ts +1 -3
  131. package/dist/databases/index.cjs +1 -1
  132. package/dist/databases/index.cjs.map +1 -1
  133. package/dist/databases/index.js +1 -1
  134. package/dist/databases/index.js.map +1 -1
  135. package/dist/facts/index.cjs +3 -3
  136. package/dist/facts/index.js +2 -2
  137. package/dist/files/index.cjs +223 -223
  138. package/dist/files/index.js +3 -3
  139. package/dist/home/index.cjs +30 -30
  140. package/dist/home/index.js +5 -5
  141. package/dist/index.cjs +452 -452
  142. package/dist/index.js +13 -13
  143. package/dist/provider/environment.d.ts +2 -0
  144. package/dist/retrieval/index.cjs +4 -4
  145. package/dist/retrieval/index.js +2 -2
  146. package/dist/shell/index.cjs +46 -46
  147. package/dist/shell/index.js +3 -3
  148. package/dist/studio/index.cjs +13 -13
  149. package/dist/studio/index.js +5 -5
  150. package/dist/workflow-canvas/index.cjs +26 -26
  151. package/dist/workflow-canvas/index.js +8 -8
  152. package/dist/workspaces/index.cjs +20 -20
  153. package/dist/workspaces/index.js +4 -4
  154. package/node_modules/@arbidocs/coedit/package.json +1 -1
  155. package/package.json +5 -5
  156. package/dist/ConnectedStreamedWordArtifact-AO46WD7W.cjs.map +0 -1
  157. package/dist/ConnectedStreamedWordArtifact-SPM5P6MI.js.map +0 -1
@@ -1,21 +1,21 @@
1
1
  "use client";
2
- export { AgentCard, AgentGallery, ConversationListView, ConversationTurnSpeaker, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, SkillCard, SkillRow, TASK_COLUMN_ORDER, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadNotifyDialog, UploadTaskItem, UploadTaskList, WorkflowsToolbar, createTaskColumns, filterConversationRows, formatElapsed, useWorkflowPreview } from '../chunk-DIPFR3EP.js';
3
- export { ANNOTATE, ANNOTATE_ID, AUTOMATION_EVENTS, ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, AssistantEntity, BUILTIN_SKILLS, CHRONOLOGY, CHRONOLOGY_ID, CUSTOM_TASK, CUSTOM_TASK_ID, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, CopyableUrl, DASHBOARD_OPERATIONS, DASHBOARD_PINNED, DEEP_RESEARCH, DEEP_RESEARCH_ID, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TEMPLATES, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, GENERATE_IMAGE, GENERATE_IMAGE_ID, GoalCriteria, IMAGE_ASPECT_AUTO, IMAGE_ASPECT_RATIOS, MAX_TASK_DEPTH, MODEL_NAME_ICONS, MODEL_TIER_ICON_MAP, MODEL_TIER_LABELS, NewThreadDialog, PillSelect, REMIND_TASK, REMIND_TASK_ID, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, STEP_ICON_MAP, SUMMARISE, SUMMARISE_ID, SendBackControl, SkillActionButton, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillLibraryDetail, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TAG_ICONS, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskPlan, TaskRunsDialog, TaskStartDialog, ThreadActivity, ThreadLauncher, ThreadStatusLine, TupleArrayField, WEB_WORKFLOWS, WEEKDAYS, WORD_ASK, WORD_ASK_ID, WORD_CONTINUE, WORD_CONTINUE_ID, WORD_SUMMARISE, WORD_SUMMARISE_ID, WORD_SUPPORT, WORD_SUPPORT_ID, WORD_WORKFLOWS, WORKFLOW_REGISTRY, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterLibrarySkills, firstWords, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, getAgentStepIcon, getAgentStepPresentation, getCurrentAgentStepPresentation, getModelIcon, goalProgress, groupThreadActivity, hasTaskFields, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, inputDocumentIds, isAgenticWorkflow, isIncompleteSignal, isMainSkillFile, isOutOfBounds, isPlainTodo, isSupersededStop, isValidAgentName, isoToLocalInput, latestMessageTime, layoutFromPlanSteps, linkedRunsFromActivity, localInputToIso, moveTargets, newThreadToRequest, nextCriterionId, notifiedLabel, openWorkflowLaunch, ownerExtId, parseRRule, parseSkillFrontmatter, prettifyKey, readSkillArchive, recordWorkflowUse, renderWorkflowIcon, resetWorkflowUsage, resolveScopeInputs, serializeSkill, skillSlug, sortByRecentUse, stepAccent, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, toPlanAssignee, toPlanDocumentRef, toPlanSteps, unnotifiedMentions, useWorkflowLaunchRequest, useWorkflowUsage, useWorkflowView, workflowFromSkillMarkdown, workflowTaskFields, workflowToComposerValues, workflowToSkillMarkdown, workflowWhen } from '../chunk-DIKG6SH3.js';
2
+ export { AgentCard, AgentGallery, ConversationListView, ConversationTurnSpeaker, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, SkillCard, SkillRow, TASK_COLUMN_ORDER, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadNotifyDialog, UploadTaskItem, UploadTaskList, WorkflowsToolbar, createTaskColumns, filterConversationRows, formatElapsed, useWorkflowPreview } from '../chunk-JUKF7YVT.js';
3
+ export { ANNOTATE, ANNOTATE_ID, AUTOMATION_EVENTS, ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, AssistantEntity, BUILTIN_SKILLS, CHRONOLOGY, CHRONOLOGY_ID, CUSTOM_TASK, CUSTOM_TASK_ID, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, CopyableUrl, DASHBOARD_OPERATIONS, DASHBOARD_PINNED, DEEP_RESEARCH, DEEP_RESEARCH_ID, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TEMPLATES, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, GENERATE_IMAGE, GENERATE_IMAGE_ID, GoalCriteria, IMAGE_ASPECT_AUTO, IMAGE_ASPECT_RATIOS, MAX_TASK_DEPTH, MODEL_NAME_ICONS, MODEL_TIER_ICON_MAP, MODEL_TIER_LABELS, NewThreadDialog, PillSelect, REMIND_TASK, REMIND_TASK_ID, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, STEP_ICON_MAP, SUMMARISE, SUMMARISE_ID, SendBackControl, SkillActionButton, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillLibraryDetail, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TAG_ICONS, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskPlan, TaskRunsDialog, TaskStartDialog, ThreadActivity, ThreadLauncher, ThreadStatusLine, TupleArrayField, WEB_WORKFLOWS, WEEKDAYS, WORD_ASK, WORD_ASK_ID, WORD_CONTINUE, WORD_CONTINUE_ID, WORD_SUMMARISE, WORD_SUMMARISE_ID, WORD_SUPPORT, WORD_SUPPORT_ID, WORD_WORKFLOWS, WORKFLOW_REGISTRY, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterLibrarySkills, firstWords, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, getAgentStepIcon, getAgentStepPresentation, getCurrentAgentStepPresentation, getModelIcon, goalProgress, groupThreadActivity, hasTaskFields, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, inputDocumentIds, isAgenticWorkflow, isIncompleteSignal, isMainSkillFile, isOutOfBounds, isPlainTodo, isSupersededStop, isValidAgentName, isoToLocalInput, latestMessageTime, layoutFromPlanSteps, linkedRunsFromActivity, localInputToIso, moveTargets, newThreadToRequest, nextCriterionId, notifiedLabel, openWorkflowLaunch, ownerExtId, parseRRule, parseSkillFrontmatter, prettifyKey, readSkillArchive, recordWorkflowUse, renderWorkflowIcon, resetWorkflowUsage, resolveScopeInputs, serializeSkill, skillSlug, sortByRecentUse, stepAccent, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, toPlanAssignee, toPlanDocumentRef, toPlanSteps, unnotifiedMentions, useWorkflowLaunchRequest, useWorkflowUsage, useWorkflowView, workflowFromSkillMarkdown, workflowTaskFields, workflowToComposerValues, workflowToSkillMarkdown, workflowWhen } from '../chunk-EMNTZIMB.js';
4
4
  import '../chunk-CQCC7LE7.js';
5
- export { AgentSelect, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, PersonPill, SchemaForm, TaskTriggerChip, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, buildWorkflowScopeSource, createWorkflowColumns, documentScopeLabels, hasTrigger, isSkillRow, matchWorkflowScope, workflowStatus, workflowTriggerType } from '../chunk-YTK5EU5U.js';
6
- import '../chunk-V576JOF4.js';
5
+ export { AgentSelect, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, PersonPill, SchemaForm, TaskTriggerChip, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, buildWorkflowScopeSource, createWorkflowColumns, documentScopeLabels, hasTrigger, isSkillRow, matchWorkflowScope, workflowStatus, workflowTriggerType } from '../chunk-7HCHMQOH.js';
6
+ import '../chunk-AAWF27UG.js';
7
7
  import '../chunk-G4GLDQLY.js';
8
8
  import '../chunk-M4S75AEJ.js';
9
9
  import '../chunk-5LXQPP2K.js';
10
10
  import '../chunk-NUNKSZKU.js';
11
11
  import '../chunk-RLWIUUQ5.js';
12
12
  import '../chunk-YU2KUMGE.js';
13
- import '../chunk-PQDKGPEL.js';
13
+ import '../chunk-DCQGJNZQ.js';
14
14
  import '../chunk-N5YEF3LC.js';
15
15
  import '../chunk-WNDIVNPT.js';
16
16
  import '../chunk-ABEKUV6L.js';
17
17
  import '../chunk-P6GHJSLR.js';
18
- import '../chunk-CKLG6B3L.js';
18
+ import '../chunk-5TALCIRH.js';
19
19
  import '../chunk-TX2ZICS7.js';
20
20
  export { DEFAULT_ASSIGNEE_WORDING, DEFAULT_STEP_DOCUMENT_LABELS, DEFAULT_STEP_KIND_LABELS, DEFAULT_STEP_RECORD_LABELS, STEP_KIND_ICONS, StepDocumentButton, StepDocumentCards, StepRecord, WORKFLOW_STEP_KINDS, assigneeName, canAssign, composeStepPrompt, dependsOn, fillRunText, fillStepInputs, initialRunInputs, isPersonAction, isPersonStep, isRunFinished, isSteppedWorkflow, nextAction, orderSteps, reviewInstructions, runFields, runFieldsOf, runThreadTitle, sendBackTargets, splitDocRef, stepConfigProblems, stepDependencies, stepDocuments, stepFields, stepKindOf, stepLevels, stepPhase, stepStatesFromActivity, upstreamSteps, validateStep, validateWorkflowGraph, workflowSteps } from '../chunk-3KZWRDPY.js';
21
21
  export { EMPTY_WORKFLOW_SCOPE, SKILL_PROMPT_FALLBACK_PLACEHOLDER, SKILL_PROMPT_LABEL, buildLaunch, composeWorkflowPrompt, defaultInputs, fieldToFrontmatter, inputsFromContext, isEmptyWorkflowScope, isWorkflowScope, mergeSkillWorkflows, promptFieldName, skillTitle, skillToWorkflow, validateInputs, workflowAccepts, workflowFromFrontmatter, workflowsAccepting, workflowsForHost } from '../chunk-TZGBRLPK.js';
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkR65GBJUW_cjs = require('../chunk-R65GBJUW.cjs');
4
+ var chunkATUPWVAL_cjs = require('../chunk-ATUPWVAL.cjs');
5
5
  var chunkRQRDR5NK_cjs = require('../chunk-RQRDR5NK.cjs');
6
- var chunkOAH5IHX6_cjs = require('../chunk-OAH5IHX6.cjs');
7
- var chunkBGCGKHLZ_cjs = require('../chunk-BGCGKHLZ.cjs');
6
+ var chunkML27HIMM_cjs = require('../chunk-ML27HIMM.cjs');
7
+ var chunkA6MGGHHN_cjs = require('../chunk-A6MGGHHN.cjs');
8
8
  require('../chunk-ZAVEMQ37.cjs');
9
9
  var chunkMOIZ2R5X_cjs = require('../chunk-MOIZ2R5X.cjs');
10
10
  require('../chunk-MB3S2ETI.cjs');
11
11
  require('../chunk-MEMWZ72Y.cjs');
12
12
  require('../chunk-ZW6FPIFC.cjs');
13
- var chunkX56B2VGH_cjs = require('../chunk-X56B2VGH.cjs');
13
+ var chunkBZF6E46W_cjs = require('../chunk-BZF6E46W.cjs');
14
14
  require('../chunk-ULWRNGGE.cjs');
15
15
  var chunkZPOUFEZI_cjs = require('../chunk-ZPOUFEZI.cjs');
16
16
  require('../chunk-725OETK3.cjs');
@@ -65,10 +65,10 @@ function ConnectedIncomingCall() {
65
65
  );
66
66
  }
67
67
  var ConnectedCallDock = react.lazy(
68
- () => import('../ConnectedCallDock-T4E3JVQV.cjs').then((m) => ({ default: m.ConnectedCallDock }))
68
+ () => import('../ConnectedCallDock-3EQOPJNT.cjs').then((m) => ({ default: m.ConnectedCallDock }))
69
69
  );
70
70
  var ConnectedCallRoom = react.lazy(
71
- () => import('../ConnectedCallRoom-4SWU33XP.cjs').then((m) => ({ default: m.ConnectedCallRoom }))
71
+ () => import('../ConnectedCallRoom-TQ6LXQEQ.cjs').then((m) => ({ default: m.ConnectedCallRoom }))
72
72
  );
73
73
  function ConnectedCallLayer() {
74
74
  const hasActiveCall = react$1.useCallSession((s) => s.active !== null);
@@ -282,7 +282,7 @@ function CandidateRow({
282
282
  ] });
283
283
  }
284
284
  function InviteLinks({ callExtId }) {
285
- const { notify } = chunkX56B2VGH_cjs.useBlocksEnvironment();
285
+ const { notify } = chunkBZF6E46W_cjs.useBlocksEnvironment();
286
286
  const revokeLink = react$1.useRevokeCallInviteLink(callExtId);
287
287
  const { data: invites = [] } = react$1.useCallInviteLinks(callExtId);
288
288
  const live = invites.filter((i) => !i.revoked_at);
@@ -330,9 +330,9 @@ function CallPeoplePicker({
330
330
  callExtId,
331
331
  onSubmit
332
332
  }) {
333
- const { notify } = chunkX56B2VGH_cjs.useBlocksEnvironment();
333
+ const { notify } = chunkBZF6E46W_cjs.useBlocksEnvironment();
334
334
  const createContact = react$1.useCreateContact();
335
- const { userId: me, workspaceId: selectedWorkspaceId } = chunkBGCGKHLZ_cjs.useConnectedWorkspace();
335
+ const { userId: me, workspaceId: selectedWorkspaceId } = chunkA6MGGHHN_cjs.useConnectedWorkspace();
336
336
  const { data: workspaces = [] } = react$1.useWorkspaces({ enabled: scope !== "chat" });
337
337
  const [picked, setPicked] = react.useState(() => new Set(preselected));
338
338
  const [query, setQuery] = react.useState("");
@@ -546,8 +546,8 @@ function ThreadCallButton({
546
546
  conversationId
547
547
  }) {
548
548
  const arbi = react$1.useArbi();
549
- const { data: conversations } = chunkOAH5IHX6_cjs.useConnectedConversations();
550
- const { workspaceId: workspaceExtId } = chunkBGCGKHLZ_cjs.useConnectedWorkspace();
549
+ const { data: conversations } = chunkML27HIMM_cjs.useConnectedConversations();
550
+ const { workspaceId: workspaceExtId } = chunkA6MGGHHN_cjs.useConnectedWorkspace();
551
551
  const liveCallId = react$1.useCallSession((s) => react$1.threadLiveCallId(s, conversationId));
552
552
  const isLive = liveCallId !== null;
553
553
  const canHost = react$1.useCanHostCalls();
@@ -590,7 +590,7 @@ function GroupCallButton({
590
590
  members
591
591
  }) {
592
592
  const arbi = react$1.useArbi();
593
- const { userId: me } = chunkBGCGKHLZ_cjs.useConnectedWorkspace();
593
+ const { userId: me } = chunkA6MGGHHN_cjs.useConnectedWorkspace();
594
594
  const liveCallId = react$1.useCallSession((s) => react$1.chatLiveCallId(s, chatExtId));
595
595
  const isLive = liveCallId !== null;
596
596
  const canHost = react$1.useCanHostCalls();
@@ -688,8 +688,8 @@ function ScheduleCallButton({
688
688
  const callsEnabled = react$1.useCanHostCalls();
689
689
  const { conversations } = react$1.useConversationItems();
690
690
  const { data: workspaces = [] } = react$1.useWorkspaces();
691
- const { workspaceId: selectedWorkspaceId, userId: me } = chunkBGCGKHLZ_cjs.useConnectedWorkspace();
692
- const { openCalendar } = chunkX56B2VGH_cjs.useBlocksEnvironment();
691
+ const { workspaceId: selectedWorkspaceId, userId: me } = chunkA6MGGHHN_cjs.useConnectedWorkspace();
692
+ const { openCalendar } = chunkBZF6E46W_cjs.useBlocksEnvironment();
693
693
  if (!callsEnabled) return null;
694
694
  const open = () => {
695
695
  const conversation = conversationId ? conversations?.find((c) => c.external_id === conversationId) : void 0;
@@ -699,7 +699,7 @@ function ScheduleCallButton({
699
699
  const workspace = workspaces.find((w) => w.external_id === selectedWorkspaceId);
700
700
  people = (workspace?.users ?? []).map((wu) => wu.user);
701
701
  }
702
- chunkX56B2VGH_cjs.requestCalendarComposer({
702
+ chunkBZF6E46W_cjs.requestCalendarComposer({
703
703
  title: peer ? `Call with ${ui.getUserDisplayName(peer) || peer.email}` : conversation?.title ?? "",
704
704
  conversationId: conversationId ?? null,
705
705
  attendees: people.filter((u) => !ui.isAgent(u) && u.external_id !== me).map((u) => ({
@@ -746,7 +746,7 @@ function MeetingThreadTranscriptAction({
746
746
  );
747
747
  if (!meetingCallExtId || !call?.is_creator) return null;
748
748
  return /* @__PURE__ */ jsxRuntime.jsx(
749
- chunkR65GBJUW_cjs.SaveTranscriptToThread,
749
+ chunkATUPWVAL_cjs.SaveTranscriptToThread,
750
750
  {
751
751
  title,
752
752
  lines,
@@ -782,7 +782,7 @@ function MeetingThreadRecordingsAction({
782
782
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: "Recordings of this meeting, encrypted under the workspace key. Playing or downloading one decrypts it in this browser." })
783
783
  ] }),
784
784
  /* @__PURE__ */ jsxRuntime.jsx(
785
- chunkR65GBJUW_cjs.RecordingsList,
785
+ chunkATUPWVAL_cjs.RecordingsList,
786
786
  {
787
787
  callExtId: meetingCallExtId,
788
788
  title,
@@ -798,7 +798,7 @@ function ConnectedConversationCallActions() {
798
798
  const conversation = conversationId ? conversations.find((c) => c.external_id === conversationId) : void 0;
799
799
  const meetingCallExtId = conversation?.meeting_call_ext_id ?? null;
800
800
  const { messageHistory } = react$1.useConversationData();
801
- const threadMessages = chunkR65GBJUW_cjs.useMeetingThreadMessages(meetingCallExtId, messageHistory);
801
+ const threadMessages = chunkATUPWVAL_cjs.useMeetingThreadMessages(meetingCallExtId, messageHistory);
802
802
  const meetingMessages = react.useMemo(
803
803
  () => meetingCallExtId ? threadMessages.map((m) => ({
804
804
  content: m.content,
@@ -967,7 +967,7 @@ function ConnectedCallChatHistory({
967
967
  const transcriptEntry = (msg) => {
968
968
  const { parsed, speakerId } = transcriptSpeaker(msg);
969
969
  return /* @__PURE__ */ jsxRuntime.jsx(
970
- chunkR65GBJUW_cjs.TranscriptEntry,
970
+ chunkATUPWVAL_cjs.TranscriptEntry,
971
971
  {
972
972
  speakerId,
973
973
  speakerName: speakerId === myExtId ? "Me" : parsed?.speaker_name || (memberById(speakerId) ? senderName(speakerId) : senderName(msg.sender_ext_id)),
@@ -985,7 +985,7 @@ function ConnectedCallChatHistory({
985
985
  }),
986
986
  [transcriptMessages]
987
987
  );
988
- const provisionalSpeakers = chunkR65GBJUW_cjs.useProvisionalSpeakers(recordingsCallExtId, chatLines);
988
+ const provisionalSpeakers = chunkATUPWVAL_cjs.useProvisionalSpeakers(recordingsCallExtId, chatLines);
989
989
  const filterOptions = [
990
990
  { value: "all", label: "All" },
991
991
  { value: "chat", label: "Chat", testId: "chat-filter" },
@@ -998,7 +998,7 @@ function ConnectedCallChatHistory({
998
998
  ...recordingsCallExtId ? [{ value: "recordings", label: "Recordings", testId: "recordings-filter" }] : []
999
999
  ];
1000
1000
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1001
- messages.length === 0 && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkR65GBJUW_cjs.CallConversationEmpty, { callExtId: recordingsCallExtId }),
1001
+ messages.length === 0 && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkATUPWVAL_cjs.CallConversationEmpty, { callExtId: recordingsCallExtId }),
1002
1002
  (hasTranscript || recordingsCallExtId) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-0 z-10 flex justify-center py-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1003
1003
  chunkZPOUFEZI_cjs.ConversationFilter,
1004
1004
  {
@@ -1007,11 +1007,11 @@ function ConnectedCallChatHistory({
1007
1007
  onChange: setView
1008
1008
  }
1009
1009
  ) }),
1010
- view === "recordings" && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkR65GBJUW_cjs.RecordingsList, { callExtId: recordingsCallExtId, title: meetingTitle, className: "py-1" }),
1010
+ view === "recordings" && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkATUPWVAL_cjs.RecordingsList, { callExtId: recordingsCallExtId, title: meetingTitle, className: "py-1" }),
1011
1011
  loadOlder,
1012
1012
  view === "transcript" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col py-1", "data-testid": "transcript-view", children: [
1013
1013
  isHost && /* @__PURE__ */ jsxRuntime.jsx(
1014
- chunkR65GBJUW_cjs.SaveTranscriptToThread,
1014
+ chunkATUPWVAL_cjs.SaveTranscriptToThread,
1015
1015
  {
1016
1016
  title: meetingTitle,
1017
1017
  lines: transcriptExport,
@@ -1019,7 +1019,7 @@ function ConnectedCallChatHistory({
1019
1019
  }
1020
1020
  ),
1021
1021
  transcriptMessages.map((msg) => transcriptEntry(msg)),
1022
- /* @__PURE__ */ jsxRuntime.jsx(chunkR65GBJUW_cjs.ProvisionalSpeakers, { ids: provisionalSpeakers })
1022
+ /* @__PURE__ */ jsxRuntime.jsx(chunkATUPWVAL_cjs.ProvisionalSpeakers, { ids: provisionalSpeakers })
1023
1023
  ] }),
1024
1024
  (view === "all" || view === "chat") && items.map((item, i) => {
1025
1025
  const { message: msg, isFirstOfDay } = item;
@@ -1039,7 +1039,7 @@ function ConnectedCallChatHistory({
1039
1039
  return /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
1040
1040
  separator,
1041
1041
  /* @__PURE__ */ jsxRuntime.jsx(
1042
- chunkR65GBJUW_cjs.RecordingCard,
1042
+ chunkATUPWVAL_cjs.RecordingCard,
1043
1043
  {
1044
1044
  callExtId: msg.call_ext_id,
1045
1045
  recordingExtId: msg.recording_ext_id ?? null,
@@ -1066,61 +1066,61 @@ function ConnectedCallChatHistory({
1066
1066
  }
1067
1067
  return renderItem(item, i);
1068
1068
  }),
1069
- view === "all" && /* @__PURE__ */ jsxRuntime.jsx(chunkR65GBJUW_cjs.ProvisionalSpeakers, { ids: provisionalSpeakers })
1069
+ view === "all" && /* @__PURE__ */ jsxRuntime.jsx(chunkATUPWVAL_cjs.ProvisionalSpeakers, { ids: provisionalSpeakers })
1070
1070
  ] });
1071
1071
  }
1072
1072
 
1073
1073
  Object.defineProperty(exports, "CallConversationEmpty", {
1074
1074
  enumerable: true,
1075
- get: function () { return chunkR65GBJUW_cjs.CallConversationEmpty; }
1075
+ get: function () { return chunkATUPWVAL_cjs.CallConversationEmpty; }
1076
1076
  });
1077
1077
  Object.defineProperty(exports, "PickThreadDialog", {
1078
1078
  enumerable: true,
1079
- get: function () { return chunkR65GBJUW_cjs.PickThreadDialog; }
1079
+ get: function () { return chunkATUPWVAL_cjs.PickThreadDialog; }
1080
1080
  });
1081
1081
  Object.defineProperty(exports, "ProvisionalSpeakers", {
1082
1082
  enumerable: true,
1083
- get: function () { return chunkR65GBJUW_cjs.ProvisionalSpeakers; }
1083
+ get: function () { return chunkATUPWVAL_cjs.ProvisionalSpeakers; }
1084
1084
  });
1085
1085
  Object.defineProperty(exports, "RecordingCard", {
1086
1086
  enumerable: true,
1087
- get: function () { return chunkR65GBJUW_cjs.RecordingCard; }
1087
+ get: function () { return chunkATUPWVAL_cjs.RecordingCard; }
1088
1088
  });
1089
1089
  Object.defineProperty(exports, "RecordingsList", {
1090
1090
  enumerable: true,
1091
- get: function () { return chunkR65GBJUW_cjs.RecordingsList; }
1091
+ get: function () { return chunkATUPWVAL_cjs.RecordingsList; }
1092
1092
  });
1093
1093
  Object.defineProperty(exports, "SaveTranscriptToThread", {
1094
1094
  enumerable: true,
1095
- get: function () { return chunkR65GBJUW_cjs.SaveTranscriptToThread; }
1095
+ get: function () { return chunkATUPWVAL_cjs.SaveTranscriptToThread; }
1096
1096
  });
1097
1097
  Object.defineProperty(exports, "ThreadCallLogCard", {
1098
1098
  enumerable: true,
1099
- get: function () { return chunkR65GBJUW_cjs.ThreadCallLogCard; }
1099
+ get: function () { return chunkATUPWVAL_cjs.ThreadCallLogCard; }
1100
1100
  });
1101
1101
  Object.defineProperty(exports, "TranscriptEntry", {
1102
1102
  enumerable: true,
1103
- get: function () { return chunkR65GBJUW_cjs.TranscriptEntry; }
1103
+ get: function () { return chunkATUPWVAL_cjs.TranscriptEntry; }
1104
1104
  });
1105
1105
  Object.defineProperty(exports, "TranscriptRunsContext", {
1106
1106
  enumerable: true,
1107
- get: function () { return chunkR65GBJUW_cjs.TranscriptRunsContext; }
1107
+ get: function () { return chunkATUPWVAL_cjs.TranscriptRunsContext; }
1108
1108
  });
1109
1109
  Object.defineProperty(exports, "threadTranscriptRuns", {
1110
1110
  enumerable: true,
1111
- get: function () { return chunkR65GBJUW_cjs.threadTranscriptRuns; }
1111
+ get: function () { return chunkATUPWVAL_cjs.threadTranscriptRuns; }
1112
1112
  });
1113
1113
  Object.defineProperty(exports, "useCallPersonName", {
1114
1114
  enumerable: true,
1115
- get: function () { return chunkR65GBJUW_cjs.useCallPersonName; }
1115
+ get: function () { return chunkATUPWVAL_cjs.useCallPersonName; }
1116
1116
  });
1117
1117
  Object.defineProperty(exports, "useProvisionalSpeakers", {
1118
1118
  enumerable: true,
1119
- get: function () { return chunkR65GBJUW_cjs.useProvisionalSpeakers; }
1119
+ get: function () { return chunkATUPWVAL_cjs.useProvisionalSpeakers; }
1120
1120
  });
1121
1121
  Object.defineProperty(exports, "useTranscriptRuns", {
1122
1122
  enumerable: true,
1123
- get: function () { return chunkR65GBJUW_cjs.useTranscriptRuns; }
1123
+ get: function () { return chunkATUPWVAL_cjs.useTranscriptRuns; }
1124
1124
  });
1125
1125
  Object.defineProperty(exports, "BackstageBanner", {
1126
1126
  enumerable: true,
@@ -1,16 +1,16 @@
1
1
  "use client";
2
- import { SaveTranscriptToThread, RecordingsList, useMeetingThreadMessages, useProvisionalSpeakers, CallConversationEmpty, ProvisionalSpeakers, RecordingCard, TranscriptEntry } from '../chunk-E5N6MD5T.js';
3
- export { CallConversationEmpty, PickThreadDialog, ProvisionalSpeakers, RecordingCard, RecordingsList, SaveTranscriptToThread, ThreadCallLogCard, TranscriptEntry, TranscriptRunsContext, threadTranscriptRuns, useCallPersonName, useProvisionalSpeakers, useTranscriptRuns } from '../chunk-E5N6MD5T.js';
2
+ import { SaveTranscriptToThread, RecordingsList, useMeetingThreadMessages, useProvisionalSpeakers, CallConversationEmpty, ProvisionalSpeakers, RecordingCard, TranscriptEntry } from '../chunk-H626LRDN.js';
3
+ export { CallConversationEmpty, PickThreadDialog, ProvisionalSpeakers, RecordingCard, RecordingsList, SaveTranscriptToThread, ThreadCallLogCard, TranscriptEntry, TranscriptRunsContext, threadTranscriptRuns, useCallPersonName, useProvisionalSpeakers, useTranscriptRuns } from '../chunk-H626LRDN.js';
4
4
  import { useRingtoneMuted, useRingtone, IncomingCallCard, CallUserPill, contactsCallTitle, usePendingRecording, HeaderAction, isCallLive, formatCallDuration } from '../chunk-WWPDJWJT.js';
5
5
  export { BackstageBanner, CHAT_ID_PATTERN, COMPOSITE_FPS, COMPOSITE_MAX_HEIGHT, COMPOSITE_MAX_WIDTH, CallControlBar, CallControlButton, CallFocus, CallGrid, CallHeader, CallNotice, CallParticipants, CallPersonLabel, CallSidePanel, CallStageFrame, CallStateMessage, CallStatusChip, CallTile, CallUserPill, CallsExperimentalBadge, CaptionsStrip, ChatPermissionSetting, ConnectionOverlay, ControlBadge, ControlDivider, ControlGroup, EXPIRY_DAYS, ElapsedTime, EncryptionStatusChip, HeaderAction, IncomingCallCard, LEVEL_TICK_MS, LeaveButton, LobbyRequests, MIRROR_SELF_VIEW_KEY, MODE_LABEL, MediaControl, MinimisedCall, MoreMenu, OnStageCheck, PanelComposer, PreJoin, QAPanel, RECORDING_ID_PATTERN, RINGTONE_MUTED_KEY, RaiseHandButton, RecordControl, RecordingStatusChip, SpeakingNow, TranscriptionStatusChip, VoiceMeter, WebinarAudiencePanel, WebinarEndConfirm, WebinarLiveChip, WebinarLiveControl, WebinarViewer, WebinarWaiting, chatPermissionSection, contactsCallTitle, describeMediaError, drawStageFrame, expiryChoiceOf, expiryFor, fitMedia, fitStage, formatCallDuration, getPendingRecording, isCallLive, parseCallLogDetail, parseRecordingLinkParams, publishCallStatus, recordingLink, setMirrorSelfView, setPendingRecording, sortQuestions, startCompositeCapture, startRingtone, startVoiceLevels, useBriefNotice, useElementSize, useIsSpeaking, useMirrorSelfView, useMyCallStatus, usePendingRecording, useRingtone, useRingtoneMuted, useShortcutKeys, useSpeakingIds, useSpotlightId, useVoiceLevel, useVoiceLevels } from '../chunk-WWPDJWJT.js';
6
- import { useConnectedConversations } from '../chunk-UN4C2ORE.js';
7
- import { useConnectedWorkspace } from '../chunk-Q5QLV5SQ.js';
6
+ import { useConnectedConversations } from '../chunk-RG4SLXZG.js';
7
+ import { useConnectedWorkspace } from '../chunk-4AAM6UQG.js';
8
8
  import '../chunk-ECERC6TI.js';
9
9
  import { DmInviteChip } from '../chunk-2S3LT5KE.js';
10
10
  import '../chunk-T4P237N6.js';
11
11
  import '../chunk-ABEKUV6L.js';
12
12
  import '../chunk-P6GHJSLR.js';
13
- import { useBlocksEnvironment, requestCalendarComposer } from '../chunk-CKLG6B3L.js';
13
+ import { useBlocksEnvironment, requestCalendarComposer } from '../chunk-5TALCIRH.js';
14
14
  import '../chunk-TX2ZICS7.js';
15
15
  import { transcriptRuns, ConversationFilter } from '../chunk-FXTNUJHP.js';
16
16
  export { CAPTION_LINES, CAPTION_TTL_MS, INITIAL_SPOTLIGHT, MAX_GRID_TILES, NOTICE_MS, SPEAKER_ACCENTS, SPEAKING_LEVEL, TILE_ASPECT, formatElapsed, gridLayout, gridSlots, initialsOf, nearestCorner, nextSpotlight, pickSpotlight, rowCounts, speakerAccent, speakerBorder, spotlightBox, stageContentHeight } from '../chunk-FXTNUJHP.js';
@@ -66,10 +66,10 @@ function ConnectedIncomingCall() {
66
66
  );
67
67
  }
68
68
  var ConnectedCallDock = lazy(
69
- () => import('../ConnectedCallDock-QM2TY67C.js').then((m) => ({ default: m.ConnectedCallDock }))
69
+ () => import('../ConnectedCallDock-ET7DL5PF.js').then((m) => ({ default: m.ConnectedCallDock }))
70
70
  );
71
71
  var ConnectedCallRoom = lazy(
72
- () => import('../ConnectedCallRoom-VT5Z5BFO.js').then((m) => ({ default: m.ConnectedCallRoom }))
72
+ () => import('../ConnectedCallRoom-QQMTM76E.js').then((m) => ({ default: m.ConnectedCallRoom }))
73
73
  );
74
74
  function ConnectedCallLayer() {
75
75
  const hasActiveCall = useCallSession((s) => s.active !== null);
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { useBlocksEnvironment } from './chunk-CKLG6B3L.js';
2
+ import { useBlocksEnvironment } from './chunk-5TALCIRH.js';
3
3
  import { useCallback, useState, useRef, useEffect } from 'react';
4
4
  import { Check, Copy } from 'lucide-react';
5
5
  import { cn, MarkMenu, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui';
@@ -402,5 +402,5 @@ function NoteMark({
402
402
  }
403
403
 
404
404
  export { DEFAULT_PASSAGE_PILL_LABELS, DEFAULT_QUIET_MARK_LABELS, LabelMark, NoteMark, PassageMark, PassagePill, QuietLink, useCopyText };
405
- //# sourceMappingURL=chunk-SYXJ3QOS.js.map
406
- //# sourceMappingURL=chunk-SYXJ3QOS.js.map
405
+ //# sourceMappingURL=chunk-3B75YVZL.js.map
406
+ //# sourceMappingURL=chunk-3B75YVZL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/citations/PassagePill.tsx","../src/citations/QuietMarks.tsx"],"names":["jsx","cn"],"mappings":"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","file":"chunk-SYXJ3QOS.js","sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\n/** Every fixed string of the passage pill. */\nexport interface PassagePillLabels {\n copyLink: string\n /** Announced and notified after the link was copied. */\n copied: string\n /** Notified when the clipboard refused the write. */\n copyFailed: string\n viewPassage: string\n page: string\n pages: string\n passage: string\n passages: string\n /** Visible abbreviation of \"page\" in the pill (\"p.3\"). */\n pageAbbreviation: string\n}\n\nexport const DEFAULT_PASSAGE_PILL_LABELS: PassagePillLabels = {\n copyLink: 'Copy passage link',\n copied: 'Passage link copied',\n copyFailed: 'Could not copy the passage link',\n viewPassage: 'View passage',\n page: 'Page',\n pages: 'Pages',\n passage: 'Passage',\n passages: 'Passages',\n pageAbbreviation: 'p.',\n}\n\n/** Overridable `data-testid`s of the pill (defaults keep the app's existing ids). */\nexport interface PassagePillTestIds {\n root: string\n copy: string\n}\n\nexport interface PassagePillProps {\n /** Glyph of the cited document (host-supplied: file-type icon). */\n icon: ReactNode\n documentTitle: string\n /** `pill`: title + page; `icon`: glyph only; `compact`: page/passage ref + copy link. */\n variant?: 'icon' | 'pill' | 'compact'\n pageNumber?: number\n passageIndex?: number\n /** End of a contiguous passage run: the label collapses to \"4–9\" instead of a pill each. */\n passageIndexEnd?: number\n /** End page of a range: \"p.3–5(4–9)\". */\n pageNumberEnd?: number\n /** Makes the element a link. */\n href?: string\n /** Makes the element a button (ignored for the element role when `href` is set). */\n onClick?: (e: MouseEvent) => void\n showTooltip?: boolean\n labelMaxWidth?: string\n size?: 'sm' | 'base'\n className?: string\n labels?: Partial<PassagePillLabels>\n testIds?: Partial<PassagePillTestIds>\n /** Root test id (default `passage-entity`); the copy button gets `<id>-copy`. */\n testId?: string\n}\n\nconst COPIED_RESET_MS = 2000\n\n/** Plain-language name of a passage reference: \"Title, Page 3, Passage 4\". */\nfunction describePassage(\n documentTitle: string,\n l: PassagePillLabels,\n page: { text?: string; isRange: boolean },\n passage: { text?: string; isRange: boolean }\n): string {\n return [\n documentTitle,\n page.text !== undefined ? `${page.isRange ? l.pages : l.page} ${page.text}` : null,\n passage.text !== undefined\n ? `${passage.isRange ? l.passages : l.passage} ${passage.text}`\n : null,\n ]\n .filter(Boolean)\n .join(', ')\n}\n\ninterface PillSurfaceProps {\n href?: string\n onClick?: (e: MouseEvent) => void\n className: string\n testId: string\n /** What assistive tech reads; the visible content is hidden from it. */\n accessibleName: string\n children: ReactNode\n tooltip?: ReactNode\n tooltipSide?: 'top' | 'bottom'\n}\n\n/**\n * The ONE interactive element of a pill: a link, a button or (when there is no action) plain text.\n * Never nests another interactive element, so it is valid inside any host container.\n */\nfunction PillSurface({\n href,\n onClick,\n className,\n testId,\n accessibleName,\n children,\n tooltip,\n tooltipSide = 'bottom',\n}: PillSurfaceProps) {\n const content = (\n <>\n <span aria-hidden=\"true\" className=\"inline-flex min-w-0 items-center gap-1\">\n {children}\n </span>\n <span className=\"sr-only\">{accessibleName}</span>\n </>\n )\n const interactive = cn(\n 'relative cursor-pointer hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n \"pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']\"\n )\n\n let surface: ReactNode\n if (href) {\n surface = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </a>\n )\n } else if (onClick) {\n surface = (\n <button\n type=\"button\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </button>\n )\n } else {\n surface = (\n <span className={className} data-testid={testId}>\n {content}\n </span>\n )\n }\n\n if (!tooltip) return surface\n return (\n <Tooltip>\n <TooltipTrigger asChild>{surface as ReactElement}</TooltipTrigger>\n <TooltipContent side={tooltipSide}>{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\nfunction CopyLinkButton({\n href,\n labels,\n testId,\n}: {\n href: string\n labels: PassagePillLabels\n testId: string\n}) {\n const { notify } = useBlocksEnvironment()\n const [copied, setCopied] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n []\n )\n\n const handleCopy = async (e: MouseEvent) => {\n e.stopPropagation()\n try {\n await navigator.clipboard.writeText(href)\n } catch {\n // Say so instead of pretending: the host's notify surfaces the failure.\n notify(labels.copyFailed, 'error')\n return\n }\n setCopied(true)\n notify(labels.copied, 'success')\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), COPIED_RESET_MS)\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"relative inline-flex items-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-fine:min-h-6 pointer-fine:min-w-6 pointer-fine:justify-center pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n title={labels.copyLink}\n aria-label={labels.copyLink}\n data-testid={testId}\n >\n {copied ? (\n <Check className=\"size-3\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-3\" aria-hidden=\"true\" />\n )}\n </button>\n <span role=\"status\" className=\"sr-only\">\n {copied ? labels.copied : ''}\n </span>\n </>\n )\n}\n\n/** A citation to a passage of a document, as a pill, a bare icon or a compact page reference. */\nexport function PassagePill({\n icon,\n documentTitle,\n variant = 'pill',\n pageNumber,\n passageIndex,\n passageIndexEnd,\n pageNumberEnd,\n href,\n className,\n onClick,\n showTooltip = true,\n labelMaxWidth,\n size = 'sm',\n labels,\n testIds,\n testId = 'passage-entity',\n}: PassagePillProps) {\n const l = { ...DEFAULT_PASSAGE_PILL_LABELS, ...labels }\n const ids: PassagePillTestIds = {\n root: testIds?.root ?? testId,\n copy: testIds?.copy ?? `${testIds?.root ?? testId}-copy`,\n }\n // Ranges collapse to \"4–9\"; a range of one renders as a plain \"4\".\n const isPassageRange = passageIndexEnd !== undefined && passageIndexEnd > (passageIndex ?? 0)\n const isPageRange = pageNumberEnd !== undefined && pageNumberEnd > (pageNumber ?? 0)\n const passageText = isPassageRange ? `${passageIndex}–${passageIndexEnd}` : `${passageIndex}`\n const pageText = isPageRange ? `${pageNumber}–${pageNumberEnd}` : `${pageNumber}`\n const accessibleName = describePassage(\n documentTitle,\n l,\n { text: pageNumber !== undefined ? pageText : undefined, isRange: isPageRange },\n { text: passageIndex !== undefined ? passageText : undefined, isRange: isPassageRange }\n )\n const hasAction = Boolean(href || onClick)\n\n if (variant === 'icon') {\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn('inline-flex items-center rounded-sm', className)}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={\n showTooltip ? (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{documentTitle}</span>\n {(pageNumber !== undefined || passageIndex !== undefined) && (\n <span className=\"text-xs text-muted-foreground\">\n {pageNumber !== undefined && `${isPageRange ? l.pages : l.page} ${pageText}`}\n {pageNumber !== undefined && passageIndex !== undefined && ', '}\n {passageIndex !== undefined &&\n `${isPassageRange ? l.passages : l.passage} ${passageText}`}\n </span>\n )}\n </div>\n ) : undefined\n }\n >\n {icon}\n </PillSurface>\n )\n }\n\n if (variant === 'compact') {\n const label =\n [\n pageNumber !== undefined ? `${l.pageAbbreviation}${pageText}` : null,\n passageIndex !== undefined ? `(${passageText})` : null,\n ]\n .filter(Boolean)\n .join('') || '—'\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-transparent bg-muted px-1 text-sm font-medium',\n className\n )}\n >\n <PillSurface\n href={href}\n onClick={onClick}\n className=\"inline-flex items-center gap-1 rounded-sm\"\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip ? documentTitle : undefined}\n >\n {icon}\n <span className=\"leading-tight\">{label}</span>\n </PillSurface>\n {href && <CopyLinkButton href={href} labels={l} testId={ids.copy} />}\n </span>\n )\n }\n\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn(\n 'group/pill inline-flex items-center rounded-md border border-border bg-muted transition-all',\n size === 'base' ? 'gap-1.5 px-1.5 py-0.5 text-base' : 'gap-1 px-1 text-sm',\n className\n )}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip && hasAction ? l.viewPassage : undefined}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 truncate font-medium leading-tight',\n labelMaxWidth ?? 'max-w-[320px]'\n )}\n >\n {documentTitle}\n </span>\n {pageNumber ? (\n <span className=\"flex-shrink-0 text-xs leading-none text-muted-foreground\">\n {l.pageAbbreviation}\n {pageText}\n </span>\n ) : null}\n </PillSurface>\n )\n}\n","import { useCallback, type ReactNode } from 'react'\nimport { MarkMenu, cn, type MarkMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\n/**\n * Quiet inline marks: links, bookmarks, passage references, label and note marks.\n *\n * Each is typographically distinct TEXT (no pill, no button chrome, no icon in the flow) and owns\n * exactly one contextual menu through the shared `MarkMenu`. Domain-neutral: hosts supply the\n * handlers that make a row mean something.\n */\n\n/** Every fixed string of the quiet marks. */\nexport interface QuietMarkLabels {\n openLink: string\n copyLink: string\n linkCopied: string\n copyFailed: string\n jumpHere: string\n copyPlaceLink: string\n openDocument: string\n linkMenu: string\n bookmarkMenu: string\n}\n\nexport const DEFAULT_QUIET_MARK_LABELS: QuietMarkLabels = {\n openLink: 'Open link',\n copyLink: 'Copy link',\n linkCopied: 'Link copied',\n copyFailed: 'Could not copy',\n jumpHere: 'Jump to here',\n copyPlaceLink: 'Copy link to this place',\n openDocument: 'Open document',\n linkMenu: 'Link actions',\n bookmarkMenu: 'Bookmark actions',\n}\n\n/**\n * Copy text to the clipboard and say so (or say it failed) through the host's `notify`. Resolves\n * whether it was copied.\n */\nexport function useCopyText(labels?: Partial<Pick<QuietMarkLabels, 'linkCopied' | 'copyFailed'>>) {\n const { notify } = useBlocksEnvironment()\n const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied\n const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed\n return useCallback(\n async (text: string, message?: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n notify(message ?? done, 'success')\n return true\n } catch {\n notify(failed, 'error')\n return false\n }\n },\n [notify, done, failed]\n )\n}\n\nexport type QuietLinkKind = 'external' | 'anchor' | 'document'\n\nexport interface QuietLinkProps {\n href?: string\n /** `external` (default) opens elsewhere, `anchor` jumps within the page, `document` is an in-app target. */\n kind?: QuietLinkKind\n /** The primary action. Defaults: external opens a new tab, anchor scrolls to the id. */\n onOpen?: () => void\n /** Absolute URL a copied anchor should carry; defaults to the current page plus the hash. */\n placeLink?: string\n labels?: Partial<QuietMarkLabels>\n className?: string\n testId?: string\n children: ReactNode\n}\n\nconst LINK_STYLE: Record<QuietLinkKind, string> = {\n external:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n document:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n // A bookmark is nearly invisible until hovered or focused.\n anchor:\n 'text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70',\n}\n\nfunction scrollToHash(href: string | undefined) {\n const id = href?.startsWith('#') ? decodeURIComponent(href.slice(1)) : ''\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n}\n\n/** A hyperlink, bookmark or document link as quiet text with one menu (open / copy). */\nexport function QuietLink({\n href,\n kind = 'external',\n onOpen,\n placeLink,\n labels,\n className,\n testId,\n children,\n}: QuietLinkProps) {\n const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels }\n const copy = useCopyText(l)\n\n const open =\n onOpen ??\n (kind === 'anchor'\n ? () => scrollToHash(href)\n : () => {\n if (href) window.open(href, '_blank', 'noopener,noreferrer')\n })\n const copyTarget =\n kind === 'anchor'\n ? (placeLink ?? `${window.location.href.split('#')[0]}${href ?? ''}`)\n : (placeLink ?? href ?? '')\n\n const items: MarkMenuItem[] = [\n {\n id: 'open',\n label: kind === 'anchor' ? l.jumpHere : kind === 'document' ? l.openDocument : l.openLink,\n primary: true,\n onSelect: open,\n testId: 'mark-open',\n },\n {\n id: 'copy',\n label: kind === 'anchor' ? l.copyPlaceLink : l.copyLink,\n onSelect: () => void copy(copyTarget),\n testId: 'mark-copy',\n },\n ]\n\n return (\n <MarkMenu\n as=\"a\"\n href={href}\n items={items}\n menuLabel={kind === 'anchor' ? l.bookmarkMenu : l.linkMenu}\n preview={\n kind === 'external' && href ? (\n <span className=\"block break-all text-xs text-muted-foreground\">{href}</span>\n ) : undefined\n }\n className={cn(LINK_STYLE[kind], 'cursor-pointer', className)}\n testId={testId}\n data-mark-kind={kind}\n >\n {children}\n </MarkMenu>\n )\n}\n\nexport interface PassageMarkProps {\n /** The reference as plain text, e.g. \"¶4\" or \"¶4–9 · p.1\". */\n label: string\n menuLabel: string\n /** Menu rows: copy, link, label, open in navigator. */\n items: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/** A passage's reference as a faint text mark in the margin; its menu carries the passage actions. */\nexport function PassageMark({ label, menuLabel, items, className, testId }: PassageMarkProps) {\n return (\n <MarkMenu\n items={items}\n menuLabel={menuLabel}\n testId={testId}\n data-mark-kind=\"passage\"\n className={cn(\n 'touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n\nexport interface LabelMarkProps {\n /** Colours of every label marking the passage. */\n colors: string[]\n menuLabel: string\n /** Names of the labels, shown in the menu. */\n preview?: ReactNode\n items: MarkMenuItem[]\n /** Accessible name of the stripes. */\n name: string\n className?: string\n testId?: string\n}\n\n/** The labels on a passage as thin margin stripes (not a chip); the menu shows / removes them. */\nexport function LabelMark({\n colors,\n menuLabel,\n preview,\n items,\n name,\n className,\n testId,\n}: LabelMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={preview}\n menuLabel={menuLabel}\n testId={testId}\n aria-label={name}\n data-mark-kind=\"label\"\n className={cn(\n 'flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1',\n className\n )}\n >\n {colors.slice(0, 4).map((c, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n className=\"h-2.5 w-1 rounded-full\"\n style={{ backgroundColor: c }}\n />\n ))}\n </MarkMenu>\n )\n}\n\nexport interface NoteMarkProps {\n /** Short label, e.g. the passage range this run covers (\"¶4–9\"). */\n label: string\n /** Full note text, shown as the menu preview so the mark is self-explaining. */\n title?: string\n menuLabel?: string\n /** Rows such as \"Show note\" and \"Edit\". With none, the menu is a read-only preview. */\n items?: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/**\n * Marks a passage as cited by a Note: small text with a soft yellow underline, drawn once on\n * each CONTIGUOUS run of cited passages (a run is one citation).\n */\nexport function NoteMark({\n label,\n title,\n menuLabel = 'Note actions',\n items = [],\n className,\n testId,\n}: NoteMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={\n title ? <span className=\"block text-xs text-muted-foreground\">{title}</span> : undefined\n }\n menuLabel={menuLabel}\n testId={testId}\n data-slot=\"note-mark\"\n data-mark-kind=\"note\"\n className={cn(\n 'cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/citations/PassagePill.tsx","../src/citations/QuietMarks.tsx"],"names":["jsx","cn"],"mappings":"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","file":"chunk-3B75YVZL.js","sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\n/** Every fixed string of the passage pill. */\nexport interface PassagePillLabels {\n copyLink: string\n /** Announced and notified after the link was copied. */\n copied: string\n /** Notified when the clipboard refused the write. */\n copyFailed: string\n viewPassage: string\n page: string\n pages: string\n passage: string\n passages: string\n /** Visible abbreviation of \"page\" in the pill (\"p.3\"). */\n pageAbbreviation: string\n}\n\nexport const DEFAULT_PASSAGE_PILL_LABELS: PassagePillLabels = {\n copyLink: 'Copy passage link',\n copied: 'Passage link copied',\n copyFailed: 'Could not copy the passage link',\n viewPassage: 'View passage',\n page: 'Page',\n pages: 'Pages',\n passage: 'Passage',\n passages: 'Passages',\n pageAbbreviation: 'p.',\n}\n\n/** Overridable `data-testid`s of the pill (defaults keep the app's existing ids). */\nexport interface PassagePillTestIds {\n root: string\n copy: string\n}\n\nexport interface PassagePillProps {\n /** Glyph of the cited document (host-supplied: file-type icon). */\n icon: ReactNode\n documentTitle: string\n /** `pill`: title + page; `icon`: glyph only; `compact`: page/passage ref + copy link. */\n variant?: 'icon' | 'pill' | 'compact'\n pageNumber?: number\n passageIndex?: number\n /** End of a contiguous passage run: the label collapses to \"4–9\" instead of a pill each. */\n passageIndexEnd?: number\n /** End page of a range: \"p.3–5(4–9)\". */\n pageNumberEnd?: number\n /** Makes the element a link. */\n href?: string\n /** Makes the element a button (ignored for the element role when `href` is set). */\n onClick?: (e: MouseEvent) => void\n showTooltip?: boolean\n labelMaxWidth?: string\n size?: 'sm' | 'base'\n className?: string\n labels?: Partial<PassagePillLabels>\n testIds?: Partial<PassagePillTestIds>\n /** Root test id (default `passage-entity`); the copy button gets `<id>-copy`. */\n testId?: string\n}\n\nconst COPIED_RESET_MS = 2000\n\n/** Plain-language name of a passage reference: \"Title, Page 3, Passage 4\". */\nfunction describePassage(\n documentTitle: string,\n l: PassagePillLabels,\n page: { text?: string; isRange: boolean },\n passage: { text?: string; isRange: boolean }\n): string {\n return [\n documentTitle,\n page.text !== undefined ? `${page.isRange ? l.pages : l.page} ${page.text}` : null,\n passage.text !== undefined\n ? `${passage.isRange ? l.passages : l.passage} ${passage.text}`\n : null,\n ]\n .filter(Boolean)\n .join(', ')\n}\n\ninterface PillSurfaceProps {\n href?: string\n onClick?: (e: MouseEvent) => void\n className: string\n testId: string\n /** What assistive tech reads; the visible content is hidden from it. */\n accessibleName: string\n children: ReactNode\n tooltip?: ReactNode\n tooltipSide?: 'top' | 'bottom'\n}\n\n/**\n * The ONE interactive element of a pill: a link, a button or (when there is no action) plain text.\n * Never nests another interactive element, so it is valid inside any host container.\n */\nfunction PillSurface({\n href,\n onClick,\n className,\n testId,\n accessibleName,\n children,\n tooltip,\n tooltipSide = 'bottom',\n}: PillSurfaceProps) {\n const content = (\n <>\n <span aria-hidden=\"true\" className=\"inline-flex min-w-0 items-center gap-1\">\n {children}\n </span>\n <span className=\"sr-only\">{accessibleName}</span>\n </>\n )\n const interactive = cn(\n 'relative cursor-pointer hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n \"pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']\"\n )\n\n let surface: ReactNode\n if (href) {\n surface = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </a>\n )\n } else if (onClick) {\n surface = (\n <button\n type=\"button\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </button>\n )\n } else {\n surface = (\n <span className={className} data-testid={testId}>\n {content}\n </span>\n )\n }\n\n if (!tooltip) return surface\n return (\n <Tooltip>\n <TooltipTrigger asChild>{surface as ReactElement}</TooltipTrigger>\n <TooltipContent side={tooltipSide}>{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\nfunction CopyLinkButton({\n href,\n labels,\n testId,\n}: {\n href: string\n labels: PassagePillLabels\n testId: string\n}) {\n const { notify } = useBlocksEnvironment()\n const [copied, setCopied] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n []\n )\n\n const handleCopy = async (e: MouseEvent) => {\n e.stopPropagation()\n try {\n await navigator.clipboard.writeText(href)\n } catch {\n // Say so instead of pretending: the host's notify surfaces the failure.\n notify(labels.copyFailed, 'error')\n return\n }\n setCopied(true)\n notify(labels.copied, 'success')\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), COPIED_RESET_MS)\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"relative inline-flex items-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-fine:min-h-6 pointer-fine:min-w-6 pointer-fine:justify-center pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n title={labels.copyLink}\n aria-label={labels.copyLink}\n data-testid={testId}\n >\n {copied ? (\n <Check className=\"size-3\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-3\" aria-hidden=\"true\" />\n )}\n </button>\n <span role=\"status\" className=\"sr-only\">\n {copied ? labels.copied : ''}\n </span>\n </>\n )\n}\n\n/** A citation to a passage of a document, as a pill, a bare icon or a compact page reference. */\nexport function PassagePill({\n icon,\n documentTitle,\n variant = 'pill',\n pageNumber,\n passageIndex,\n passageIndexEnd,\n pageNumberEnd,\n href,\n className,\n onClick,\n showTooltip = true,\n labelMaxWidth,\n size = 'sm',\n labels,\n testIds,\n testId = 'passage-entity',\n}: PassagePillProps) {\n const l = { ...DEFAULT_PASSAGE_PILL_LABELS, ...labels }\n const ids: PassagePillTestIds = {\n root: testIds?.root ?? testId,\n copy: testIds?.copy ?? `${testIds?.root ?? testId}-copy`,\n }\n // Ranges collapse to \"4–9\"; a range of one renders as a plain \"4\".\n const isPassageRange = passageIndexEnd !== undefined && passageIndexEnd > (passageIndex ?? 0)\n const isPageRange = pageNumberEnd !== undefined && pageNumberEnd > (pageNumber ?? 0)\n const passageText = isPassageRange ? `${passageIndex}–${passageIndexEnd}` : `${passageIndex}`\n const pageText = isPageRange ? `${pageNumber}–${pageNumberEnd}` : `${pageNumber}`\n const accessibleName = describePassage(\n documentTitle,\n l,\n { text: pageNumber !== undefined ? pageText : undefined, isRange: isPageRange },\n { text: passageIndex !== undefined ? passageText : undefined, isRange: isPassageRange }\n )\n const hasAction = Boolean(href || onClick)\n\n if (variant === 'icon') {\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn('inline-flex items-center rounded-sm', className)}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={\n showTooltip ? (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{documentTitle}</span>\n {(pageNumber !== undefined || passageIndex !== undefined) && (\n <span className=\"text-xs text-muted-foreground\">\n {pageNumber !== undefined && `${isPageRange ? l.pages : l.page} ${pageText}`}\n {pageNumber !== undefined && passageIndex !== undefined && ', '}\n {passageIndex !== undefined &&\n `${isPassageRange ? l.passages : l.passage} ${passageText}`}\n </span>\n )}\n </div>\n ) : undefined\n }\n >\n {icon}\n </PillSurface>\n )\n }\n\n if (variant === 'compact') {\n const label =\n [\n pageNumber !== undefined ? `${l.pageAbbreviation}${pageText}` : null,\n passageIndex !== undefined ? `(${passageText})` : null,\n ]\n .filter(Boolean)\n .join('') || '—'\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-transparent bg-muted px-1 text-sm font-medium',\n className\n )}\n >\n <PillSurface\n href={href}\n onClick={onClick}\n className=\"inline-flex items-center gap-1 rounded-sm\"\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip ? documentTitle : undefined}\n >\n {icon}\n <span className=\"leading-tight\">{label}</span>\n </PillSurface>\n {href && <CopyLinkButton href={href} labels={l} testId={ids.copy} />}\n </span>\n )\n }\n\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn(\n 'group/pill inline-flex items-center rounded-md border border-border bg-muted transition-all',\n size === 'base' ? 'gap-1.5 px-1.5 py-0.5 text-base' : 'gap-1 px-1 text-sm',\n className\n )}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip && hasAction ? l.viewPassage : undefined}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 truncate font-medium leading-tight',\n labelMaxWidth ?? 'max-w-[320px]'\n )}\n >\n {documentTitle}\n </span>\n {pageNumber ? (\n <span className=\"flex-shrink-0 text-xs leading-none text-muted-foreground\">\n {l.pageAbbreviation}\n {pageText}\n </span>\n ) : null}\n </PillSurface>\n )\n}\n","import { useCallback, type ReactNode } from 'react'\nimport { MarkMenu, cn, type MarkMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\n\n/**\n * Quiet inline marks: links, bookmarks, passage references, label and note marks.\n *\n * Each is typographically distinct TEXT (no pill, no button chrome, no icon in the flow) and owns\n * exactly one contextual menu through the shared `MarkMenu`. Domain-neutral: hosts supply the\n * handlers that make a row mean something.\n */\n\n/** Every fixed string of the quiet marks. */\nexport interface QuietMarkLabels {\n openLink: string\n copyLink: string\n linkCopied: string\n copyFailed: string\n jumpHere: string\n copyPlaceLink: string\n openDocument: string\n linkMenu: string\n bookmarkMenu: string\n}\n\nexport const DEFAULT_QUIET_MARK_LABELS: QuietMarkLabels = {\n openLink: 'Open link',\n copyLink: 'Copy link',\n linkCopied: 'Link copied',\n copyFailed: 'Could not copy',\n jumpHere: 'Jump to here',\n copyPlaceLink: 'Copy link to this place',\n openDocument: 'Open document',\n linkMenu: 'Link actions',\n bookmarkMenu: 'Bookmark actions',\n}\n\n/**\n * Copy text to the clipboard and say so (or say it failed) through the host's `notify`. Resolves\n * whether it was copied.\n */\nexport function useCopyText(labels?: Partial<Pick<QuietMarkLabels, 'linkCopied' | 'copyFailed'>>) {\n const { notify } = useBlocksEnvironment()\n const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied\n const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed\n return useCallback(\n async (text: string, message?: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n notify(message ?? done, 'success')\n return true\n } catch {\n notify(failed, 'error')\n return false\n }\n },\n [notify, done, failed]\n )\n}\n\nexport type QuietLinkKind = 'external' | 'anchor' | 'document'\n\nexport interface QuietLinkProps {\n href?: string\n /** `external` (default) opens elsewhere, `anchor` jumps within the page, `document` is an in-app target. */\n kind?: QuietLinkKind\n /** The primary action. Defaults: external opens a new tab, anchor scrolls to the id. */\n onOpen?: () => void\n /** Absolute URL a copied anchor should carry; defaults to the current page plus the hash. */\n placeLink?: string\n labels?: Partial<QuietMarkLabels>\n className?: string\n testId?: string\n children: ReactNode\n}\n\nconst LINK_STYLE: Record<QuietLinkKind, string> = {\n external:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n document:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n // A bookmark is nearly invisible until hovered or focused.\n anchor:\n 'text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70',\n}\n\nfunction scrollToHash(href: string | undefined) {\n const id = href?.startsWith('#') ? decodeURIComponent(href.slice(1)) : ''\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n}\n\n/** A hyperlink, bookmark or document link as quiet text with one menu (open / copy). */\nexport function QuietLink({\n href,\n kind = 'external',\n onOpen,\n placeLink,\n labels,\n className,\n testId,\n children,\n}: QuietLinkProps) {\n const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels }\n const copy = useCopyText(l)\n\n const open =\n onOpen ??\n (kind === 'anchor'\n ? () => scrollToHash(href)\n : () => {\n if (href) window.open(href, '_blank', 'noopener,noreferrer')\n })\n const copyTarget =\n kind === 'anchor'\n ? (placeLink ?? `${window.location.href.split('#')[0]}${href ?? ''}`)\n : (placeLink ?? href ?? '')\n\n const items: MarkMenuItem[] = [\n {\n id: 'open',\n label: kind === 'anchor' ? l.jumpHere : kind === 'document' ? l.openDocument : l.openLink,\n primary: true,\n onSelect: open,\n testId: 'mark-open',\n },\n {\n id: 'copy',\n label: kind === 'anchor' ? l.copyPlaceLink : l.copyLink,\n onSelect: () => void copy(copyTarget),\n testId: 'mark-copy',\n },\n ]\n\n return (\n <MarkMenu\n as=\"a\"\n href={href}\n items={items}\n menuLabel={kind === 'anchor' ? l.bookmarkMenu : l.linkMenu}\n preview={\n kind === 'external' && href ? (\n <span className=\"block break-all text-xs text-muted-foreground\">{href}</span>\n ) : undefined\n }\n className={cn(LINK_STYLE[kind], 'cursor-pointer', className)}\n testId={testId}\n data-mark-kind={kind}\n >\n {children}\n </MarkMenu>\n )\n}\n\nexport interface PassageMarkProps {\n /** The reference as plain text, e.g. \"¶4\" or \"¶4–9 · p.1\". */\n label: string\n menuLabel: string\n /** Menu rows: copy, link, label, open in navigator. */\n items: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/** A passage's reference as a faint text mark in the margin; its menu carries the passage actions. */\nexport function PassageMark({ label, menuLabel, items, className, testId }: PassageMarkProps) {\n return (\n <MarkMenu\n items={items}\n menuLabel={menuLabel}\n testId={testId}\n data-mark-kind=\"passage\"\n className={cn(\n 'touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n\nexport interface LabelMarkProps {\n /** Colours of every label marking the passage. */\n colors: string[]\n menuLabel: string\n /** Names of the labels, shown in the menu. */\n preview?: ReactNode\n items: MarkMenuItem[]\n /** Accessible name of the stripes. */\n name: string\n className?: string\n testId?: string\n}\n\n/** The labels on a passage as thin margin stripes (not a chip); the menu shows / removes them. */\nexport function LabelMark({\n colors,\n menuLabel,\n preview,\n items,\n name,\n className,\n testId,\n}: LabelMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={preview}\n menuLabel={menuLabel}\n testId={testId}\n aria-label={name}\n data-mark-kind=\"label\"\n className={cn(\n 'flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1',\n className\n )}\n >\n {colors.slice(0, 4).map((c, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n className=\"h-2.5 w-1 rounded-full\"\n style={{ backgroundColor: c }}\n />\n ))}\n </MarkMenu>\n )\n}\n\nexport interface NoteMarkProps {\n /** Short label, e.g. the passage range this run covers (\"¶4–9\"). */\n label: string\n /** Full note text, shown as the menu preview so the mark is self-explaining. */\n title?: string\n menuLabel?: string\n /** Rows such as \"Show note\" and \"Edit\". With none, the menu is a read-only preview. */\n items?: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/**\n * Marks a passage as cited by a Note: small text with a soft yellow underline, drawn once on\n * each CONTIGUOUS run of cited passages (a run is one citation).\n */\nexport function NoteMark({\n label,\n title,\n menuLabel = 'Note actions',\n items = [],\n className,\n testId,\n}: NoteMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={\n title ? <span className=\"block text-xs text-muted-foreground\">{title}</span> : undefined\n }\n menuLabel={menuLabel}\n testId={testId}\n data-slot=\"note-mark\"\n data-mark-kind=\"note\"\n className={cn(\n 'cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { ArbiHost } from './chunk-T4P237N6.js';
3
- import { useBlocksEnvironment } from './chunk-CKLG6B3L.js';
3
+ import { useBlocksEnvironment } from './chunk-5TALCIRH.js';
4
4
  import { createContext, useState, useRef, useEffect, useCallback, useMemo, useContext } from 'react';
5
5
  import { useArbi, useArbiSessionStore, useSwitchWorkspace, useArbiSessionState, clearSealedDrafts, arbiAccountClient, toProfileView } from '@arbidocs/react';
6
6
  import { jsx } from 'react/jsx-runtime';
@@ -325,5 +325,5 @@ function useConnectedWorkspace() {
325
325
  }
326
326
 
327
327
  export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnectedWorkspace, useConnection };
328
- //# sourceMappingURL=chunk-Q5QLV5SQ.js.map
329
- //# sourceMappingURL=chunk-Q5QLV5SQ.js.map
328
+ //# sourceMappingURL=chunk-4AAM6UQG.js.map
329
+ //# sourceMappingURL=chunk-4AAM6UQG.js.map