@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.
- package/dist/{ConnectedCallDock-T4E3JVQV.cjs → ConnectedCallDock-3EQOPJNT.cjs} +5 -5
- package/dist/{ConnectedCallDock-T4E3JVQV.cjs.map → ConnectedCallDock-3EQOPJNT.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-QM2TY67C.js → ConnectedCallDock-ET7DL5PF.js} +4 -4
- package/dist/{ConnectedCallDock-QM2TY67C.js.map → ConnectedCallDock-ET7DL5PF.js.map} +1 -1
- package/dist/{ConnectedCallRoom-VT5Z5BFO.js → ConnectedCallRoom-QQMTM76E.js} +4 -4
- package/dist/{ConnectedCallRoom-VT5Z5BFO.js.map → ConnectedCallRoom-QQMTM76E.js.map} +1 -1
- package/dist/{ConnectedCallRoom-4SWU33XP.cjs → ConnectedCallRoom-TQ6LXQEQ.cjs} +5 -5
- package/dist/{ConnectedCallRoom-4SWU33XP.cjs.map → ConnectedCallRoom-TQ6LXQEQ.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-L2YQ2RHW.js → ConnectedNativeDocxComparison-5XYKZMXL.js} +10 -10
- package/dist/{ConnectedNativeDocxComparison-L2YQ2RHW.js.map → ConnectedNativeDocxComparison-5XYKZMXL.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-JPVXK6OZ.cjs → ConnectedNativeDocxComparison-I2ALQR2Y.cjs} +11 -11
- package/dist/{ConnectedNativeDocxComparison-JPVXK6OZ.cjs.map → ConnectedNativeDocxComparison-I2ALQR2Y.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-S3OBWGRN.js → ConnectedNativeDocxEditor-T4W74AD2.js} +9 -9
- package/dist/{ConnectedNativeDocxEditor-S3OBWGRN.js.map → ConnectedNativeDocxEditor-T4W74AD2.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-KURMLAOF.cjs → ConnectedNativeDocxEditor-XLRQVOB5.cjs} +11 -11
- package/dist/{ConnectedNativeDocxEditor-KURMLAOF.cjs.map → ConnectedNativeDocxEditor-XLRQVOB5.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-SPM5P6MI.js → ConnectedStreamedWordArtifact-2JL7B5P6.js} +10 -10
- package/dist/ConnectedStreamedWordArtifact-2JL7B5P6.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-AO46WD7W.cjs → ConnectedStreamedWordArtifact-PQZJAHR7.cjs} +11 -11
- package/dist/ConnectedStreamedWordArtifact-PQZJAHR7.cjs.map +1 -0
- package/dist/agents/index.cjs +328 -328
- package/dist/agents/index.js +6 -6
- package/dist/calls/index.cjs +39 -39
- package/dist/calls/index.js +7 -7
- package/dist/{chunk-SYXJ3QOS.js → chunk-3B75YVZL.js} +3 -3
- package/dist/{chunk-SYXJ3QOS.js.map → chunk-3B75YVZL.js.map} +1 -1
- package/dist/{chunk-Q5QLV5SQ.js → chunk-4AAM6UQG.js} +3 -3
- package/dist/{chunk-Q5QLV5SQ.js.map → chunk-4AAM6UQG.js.map} +1 -1
- package/dist/{chunk-R6XPHQOS.js → chunk-4IMTH6Z4.js} +3 -3
- package/dist/{chunk-R6XPHQOS.js.map → chunk-4IMTH6Z4.js.map} +1 -1
- package/dist/{chunk-I45TWXAG.cjs → chunk-4MADJGGF.cjs} +4 -4
- package/dist/{chunk-I45TWXAG.cjs.map → chunk-4MADJGGF.cjs.map} +1 -1
- package/dist/{chunk-FUVUFFFA.js → chunk-4OLM7LQX.js} +3 -3
- package/dist/{chunk-FUVUFFFA.js.map → chunk-4OLM7LQX.js.map} +1 -1
- package/dist/{chunk-X24LIKQ7.cjs → chunk-5NEILZQR.cjs} +4 -4
- package/dist/{chunk-X24LIKQ7.cjs.map → chunk-5NEILZQR.cjs.map} +1 -1
- package/dist/{chunk-NFEROK3R.js → chunk-5QJDDEYV.js} +3 -3
- package/dist/{chunk-NFEROK3R.js.map → chunk-5QJDDEYV.js.map} +1 -1
- package/dist/{chunk-CKLG6B3L.js → chunk-5TALCIRH.js} +2 -2
- package/dist/{chunk-CKLG6B3L.js.map → chunk-5TALCIRH.js.map} +1 -1
- package/dist/{chunk-WGXUAHKD.cjs → chunk-6WX7ZMKL.cjs} +5 -5
- package/dist/{chunk-WGXUAHKD.cjs.map → chunk-6WX7ZMKL.cjs.map} +1 -1
- package/dist/{chunk-YTK5EU5U.js → chunk-7HCHMQOH.js} +3 -3
- package/dist/{chunk-YTK5EU5U.js.map → chunk-7HCHMQOH.js.map} +1 -1
- package/dist/{chunk-BGCGKHLZ.cjs → chunk-A6MGGHHN.cjs} +4 -4
- package/dist/{chunk-BGCGKHLZ.cjs.map → chunk-A6MGGHHN.cjs.map} +1 -1
- package/dist/{chunk-V576JOF4.js → chunk-AAWF27UG.js} +3 -3
- package/dist/{chunk-V576JOF4.js.map → chunk-AAWF27UG.js.map} +1 -1
- package/dist/{chunk-R65GBJUW.cjs → chunk-ATUPWVAL.cjs} +12 -12
- package/dist/{chunk-R65GBJUW.cjs.map → chunk-ATUPWVAL.cjs.map} +1 -1
- package/dist/{chunk-KD4N6F2F.cjs → chunk-AUDT4L2H.cjs} +4 -4
- package/dist/{chunk-KD4N6F2F.cjs.map → chunk-AUDT4L2H.cjs.map} +1 -1
- package/dist/{chunk-X56B2VGH.cjs → chunk-BZF6E46W.cjs} +2 -2
- package/dist/{chunk-X56B2VGH.cjs.map → chunk-BZF6E46W.cjs.map} +1 -1
- package/dist/{chunk-PQDKGPEL.js → chunk-DCQGJNZQ.js} +3 -3
- package/dist/{chunk-PQDKGPEL.js.map → chunk-DCQGJNZQ.js.map} +1 -1
- package/dist/{chunk-LPB2X4YD.cjs → chunk-DJ4BTWMA.cjs} +4 -4
- package/dist/{chunk-LPB2X4YD.cjs.map → chunk-DJ4BTWMA.cjs.map} +1 -1
- package/dist/{chunk-Z5222UQ2.js → chunk-E3RPCHU7.js} +3 -3
- package/dist/{chunk-Z5222UQ2.js.map → chunk-E3RPCHU7.js.map} +1 -1
- package/dist/{chunk-DIKG6SH3.js → chunk-EMNTZIMB.js} +6 -6
- package/dist/{chunk-DIKG6SH3.js.map → chunk-EMNTZIMB.js.map} +1 -1
- package/dist/{chunk-SJX3IUEG.cjs → chunk-FJV72FP6.cjs} +5 -5
- package/dist/{chunk-SJX3IUEG.cjs.map → chunk-FJV72FP6.cjs.map} +1 -1
- package/dist/{chunk-E5N6MD5T.js → chunk-H626LRDN.js} +5 -5
- package/dist/{chunk-E5N6MD5T.js.map → chunk-H626LRDN.js.map} +1 -1
- package/dist/{chunk-QQRZQC4W.cjs → chunk-HHABG6MV.cjs} +14 -14
- package/dist/{chunk-QQRZQC4W.cjs.map → chunk-HHABG6MV.cjs.map} +1 -1
- package/dist/{chunk-UWRFHQGA.cjs → chunk-J3EXEAUA.cjs} +4 -4
- package/dist/{chunk-UWRFHQGA.cjs.map → chunk-J3EXEAUA.cjs.map} +1 -1
- package/dist/{chunk-DIPFR3EP.js → chunk-JUKF7YVT.js} +5 -5
- package/dist/{chunk-DIPFR3EP.js.map → chunk-JUKF7YVT.js.map} +1 -1
- package/dist/{chunk-FUFPQBKR.cjs → chunk-MB5F7SPD.cjs} +4 -4
- package/dist/{chunk-FUFPQBKR.cjs.map → chunk-MB5F7SPD.cjs.map} +1 -1
- package/dist/{chunk-OAH5IHX6.cjs → chunk-ML27HIMM.cjs} +6 -6
- package/dist/{chunk-OAH5IHX6.cjs.map → chunk-ML27HIMM.cjs.map} +1 -1
- package/dist/{chunk-4SKRNAWF.cjs → chunk-MWFSLLFX.cjs} +11 -11
- package/dist/{chunk-4SKRNAWF.cjs.map → chunk-MWFSLLFX.cjs.map} +1 -1
- package/dist/{chunk-H5PEFD2H.js → chunk-N7INPGON.js} +5 -5
- package/dist/{chunk-H5PEFD2H.js.map → chunk-N7INPGON.js.map} +1 -1
- package/dist/{chunk-KB5DESUR.js → chunk-NA3BE3YY.js} +3 -3
- package/dist/{chunk-KB5DESUR.js.map → chunk-NA3BE3YY.js.map} +1 -1
- package/dist/{chunk-RTHDSCCU.cjs → chunk-OHU27AJ4.cjs} +26 -26
- package/dist/{chunk-RTHDSCCU.cjs.map → chunk-OHU27AJ4.cjs.map} +1 -1
- package/dist/{chunk-DQNCUPIQ.js → chunk-OLBL2XNE.js} +3 -3
- package/dist/{chunk-DQNCUPIQ.js.map → chunk-OLBL2XNE.js.map} +1 -1
- package/dist/{chunk-G7RWVM2L.cjs → chunk-PBM6BFFH.cjs} +4 -4
- package/dist/{chunk-G7RWVM2L.cjs.map → chunk-PBM6BFFH.cjs.map} +1 -1
- package/dist/{chunk-WBM7VXTE.cjs → chunk-PE3RIWNX.cjs} +18 -18
- package/dist/{chunk-WBM7VXTE.cjs.map → chunk-PE3RIWNX.cjs.map} +1 -1
- package/dist/{chunk-AVBZWX6J.js → chunk-PSWTOD7E.js} +3 -3
- package/dist/{chunk-AVBZWX6J.js.map → chunk-PSWTOD7E.js.map} +1 -1
- package/dist/{chunk-UN4C2ORE.js → chunk-RG4SLXZG.js} +3 -3
- package/dist/{chunk-UN4C2ORE.js.map → chunk-RG4SLXZG.js.map} +1 -1
- package/dist/{chunk-VEKR5R6V.cjs → chunk-SWBD76UN.cjs} +9 -9
- package/dist/{chunk-VEKR5R6V.cjs.map → chunk-SWBD76UN.cjs.map} +1 -1
- package/dist/{chunk-WQGNQEEE.cjs → chunk-TDIC7IXS.cjs} +7 -7
- package/dist/{chunk-WQGNQEEE.cjs.map → chunk-TDIC7IXS.cjs.map} +1 -1
- package/dist/{chunk-EIAKSVBV.js → chunk-TRHAIU6U.js} +4 -4
- package/dist/{chunk-EIAKSVBV.js.map → chunk-TRHAIU6U.js.map} +1 -1
- package/dist/{chunk-MCVJLNGE.js → chunk-U32UNUEZ.js} +3 -3
- package/dist/{chunk-MCVJLNGE.js.map → chunk-U32UNUEZ.js.map} +1 -1
- package/dist/{chunk-ZZJ5XKG5.js → chunk-WINJF2AK.js} +3 -3
- package/dist/{chunk-ZZJ5XKG5.js.map → chunk-WINJF2AK.js.map} +1 -1
- package/dist/{chunk-CDFJOXTF.cjs → chunk-WT5AKLD4.cjs} +52 -52
- package/dist/{chunk-CDFJOXTF.cjs.map → chunk-WT5AKLD4.cjs.map} +1 -1
- package/dist/{chunk-NS6AZE6U.cjs → chunk-XF6TAXB5.cjs} +8 -8
- package/dist/{chunk-NS6AZE6U.cjs.map → chunk-XF6TAXB5.cjs.map} +1 -1
- package/dist/{chunk-55PLUQZF.cjs → chunk-XUWZMZP5.cjs} +5 -5
- package/dist/{chunk-55PLUQZF.cjs.map → chunk-XUWZMZP5.cjs.map} +1 -1
- package/dist/{chunk-JTVZZX2I.js → chunk-Y5HQUPRW.js} +3 -3
- package/dist/{chunk-JTVZZX2I.js.map → chunk-Y5HQUPRW.js.map} +1 -1
- package/dist/{chunk-6JHHWVFZ.cjs → chunk-Y7KDWKPZ.cjs} +7 -7
- package/dist/{chunk-6JHHWVFZ.cjs.map → chunk-Y7KDWKPZ.cjs.map} +1 -1
- package/dist/{chunk-HQ3B2RMV.js → chunk-ZBIKL6Q5.js} +6 -6
- package/dist/{chunk-HQ3B2RMV.js.map → chunk-ZBIKL6Q5.js.map} +1 -1
- package/dist/citations/index.cjs +10 -10
- package/dist/citations/index.js +2 -2
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/docx.js +9 -9
- package/dist/connect/index.cjs +804 -707
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +132 -39
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +77 -77
- package/dist/connect/viewer.js +12 -12
- package/dist/connection/projects/index.d.ts +1 -0
- package/dist/connection/projects/useProjectSummaries.d.ts +155 -0
- package/dist/connection/storage/ConnectedStorageProjectCard.d.ts +1 -3
- package/dist/connection/storage/ConnectedStorageSettings.d.ts +1 -3
- package/dist/databases/index.cjs +1 -1
- package/dist/databases/index.cjs.map +1 -1
- package/dist/databases/index.js +1 -1
- package/dist/databases/index.js.map +1 -1
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +2 -2
- package/dist/files/index.cjs +223 -223
- package/dist/files/index.js +3 -3
- package/dist/home/index.cjs +30 -30
- package/dist/home/index.js +5 -5
- package/dist/index.cjs +452 -452
- package/dist/index.js +13 -13
- package/dist/provider/environment.d.ts +2 -0
- package/dist/retrieval/index.cjs +4 -4
- package/dist/retrieval/index.js +2 -2
- package/dist/shell/index.cjs +46 -46
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +13 -13
- package/dist/studio/index.js +5 -5
- package/dist/workflow-canvas/index.cjs +26 -26
- package/dist/workflow-canvas/index.js +8 -8
- package/dist/workspaces/index.cjs +20 -20
- package/dist/workspaces/index.js +4 -4
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-AO46WD7W.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-SPM5P6MI.js.map +0 -1
package/dist/agents/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
6
|
-
import '../chunk-
|
|
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-
|
|
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-
|
|
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';
|
package/dist/calls/index.cjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkATUPWVAL_cjs = require('../chunk-ATUPWVAL.cjs');
|
|
5
5
|
var chunkRQRDR5NK_cjs = require('../chunk-RQRDR5NK.cjs');
|
|
6
|
-
var
|
|
7
|
-
var
|
|
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
|
|
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-
|
|
68
|
+
() => import('../ConnectedCallDock-3EQOPJNT.cjs').then((m) => ({ default: m.ConnectedCallDock }))
|
|
69
69
|
);
|
|
70
70
|
var ConnectedCallRoom = react.lazy(
|
|
71
|
-
() => import('../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 } =
|
|
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 } =
|
|
333
|
+
const { notify } = chunkBZF6E46W_cjs.useBlocksEnvironment();
|
|
334
334
|
const createContact = react$1.useCreateContact();
|
|
335
|
-
const { userId: me, workspaceId: selectedWorkspaceId } =
|
|
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 } =
|
|
550
|
-
const { workspaceId: workspaceExtId } =
|
|
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 } =
|
|
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 } =
|
|
692
|
-
const { openCalendar } =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
|
1075
|
+
get: function () { return chunkATUPWVAL_cjs.CallConversationEmpty; }
|
|
1076
1076
|
});
|
|
1077
1077
|
Object.defineProperty(exports, "PickThreadDialog", {
|
|
1078
1078
|
enumerable: true,
|
|
1079
|
-
get: function () { return
|
|
1079
|
+
get: function () { return chunkATUPWVAL_cjs.PickThreadDialog; }
|
|
1080
1080
|
});
|
|
1081
1081
|
Object.defineProperty(exports, "ProvisionalSpeakers", {
|
|
1082
1082
|
enumerable: true,
|
|
1083
|
-
get: function () { return
|
|
1083
|
+
get: function () { return chunkATUPWVAL_cjs.ProvisionalSpeakers; }
|
|
1084
1084
|
});
|
|
1085
1085
|
Object.defineProperty(exports, "RecordingCard", {
|
|
1086
1086
|
enumerable: true,
|
|
1087
|
-
get: function () { return
|
|
1087
|
+
get: function () { return chunkATUPWVAL_cjs.RecordingCard; }
|
|
1088
1088
|
});
|
|
1089
1089
|
Object.defineProperty(exports, "RecordingsList", {
|
|
1090
1090
|
enumerable: true,
|
|
1091
|
-
get: function () { return
|
|
1091
|
+
get: function () { return chunkATUPWVAL_cjs.RecordingsList; }
|
|
1092
1092
|
});
|
|
1093
1093
|
Object.defineProperty(exports, "SaveTranscriptToThread", {
|
|
1094
1094
|
enumerable: true,
|
|
1095
|
-
get: function () { return
|
|
1095
|
+
get: function () { return chunkATUPWVAL_cjs.SaveTranscriptToThread; }
|
|
1096
1096
|
});
|
|
1097
1097
|
Object.defineProperty(exports, "ThreadCallLogCard", {
|
|
1098
1098
|
enumerable: true,
|
|
1099
|
-
get: function () { return
|
|
1099
|
+
get: function () { return chunkATUPWVAL_cjs.ThreadCallLogCard; }
|
|
1100
1100
|
});
|
|
1101
1101
|
Object.defineProperty(exports, "TranscriptEntry", {
|
|
1102
1102
|
enumerable: true,
|
|
1103
|
-
get: function () { return
|
|
1103
|
+
get: function () { return chunkATUPWVAL_cjs.TranscriptEntry; }
|
|
1104
1104
|
});
|
|
1105
1105
|
Object.defineProperty(exports, "TranscriptRunsContext", {
|
|
1106
1106
|
enumerable: true,
|
|
1107
|
-
get: function () { return
|
|
1107
|
+
get: function () { return chunkATUPWVAL_cjs.TranscriptRunsContext; }
|
|
1108
1108
|
});
|
|
1109
1109
|
Object.defineProperty(exports, "threadTranscriptRuns", {
|
|
1110
1110
|
enumerable: true,
|
|
1111
|
-
get: function () { return
|
|
1111
|
+
get: function () { return chunkATUPWVAL_cjs.threadTranscriptRuns; }
|
|
1112
1112
|
});
|
|
1113
1113
|
Object.defineProperty(exports, "useCallPersonName", {
|
|
1114
1114
|
enumerable: true,
|
|
1115
|
-
get: function () { return
|
|
1115
|
+
get: function () { return chunkATUPWVAL_cjs.useCallPersonName; }
|
|
1116
1116
|
});
|
|
1117
1117
|
Object.defineProperty(exports, "useProvisionalSpeakers", {
|
|
1118
1118
|
enumerable: true,
|
|
1119
|
-
get: function () { return
|
|
1119
|
+
get: function () { return chunkATUPWVAL_cjs.useProvisionalSpeakers; }
|
|
1120
1120
|
});
|
|
1121
1121
|
Object.defineProperty(exports, "useTranscriptRuns", {
|
|
1122
1122
|
enumerable: true,
|
|
1123
|
-
get: function () { return
|
|
1123
|
+
get: function () { return chunkATUPWVAL_cjs.useTranscriptRuns; }
|
|
1124
1124
|
});
|
|
1125
1125
|
Object.defineProperty(exports, "BackstageBanner", {
|
|
1126
1126
|
enumerable: true,
|
package/dist/calls/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { SaveTranscriptToThread, RecordingsList, useMeetingThreadMessages, useProvisionalSpeakers, CallConversationEmpty, ProvisionalSpeakers, RecordingCard, TranscriptEntry } from '../chunk-
|
|
3
|
-
export { CallConversationEmpty, PickThreadDialog, ProvisionalSpeakers, RecordingCard, RecordingsList, SaveTranscriptToThread, ThreadCallLogCard, TranscriptEntry, TranscriptRunsContext, threadTranscriptRuns, useCallPersonName, useProvisionalSpeakers, useTranscriptRuns } from '../chunk-
|
|
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-
|
|
7
|
-
import { useConnectedWorkspace } from '../chunk-
|
|
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-
|
|
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-
|
|
69
|
+
() => import('../ConnectedCallDock-ET7DL5PF.js').then((m) => ({ default: m.ConnectedCallDock }))
|
|
70
70
|
);
|
|
71
71
|
var ConnectedCallRoom = lazy(
|
|
72
|
-
() => import('../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-
|
|
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-
|
|
406
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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-
|
|
329
|
-
//# sourceMappingURL=chunk-
|
|
328
|
+
//# sourceMappingURL=chunk-4AAM6UQG.js.map
|
|
329
|
+
//# sourceMappingURL=chunk-4AAM6UQG.js.map
|