Files
multica/packages/views/locales/en/issues.json
Jiayuan Zhang 835b1d5e4f feat(issues): thread quick-jump minimap on issue detail (MUL-4389) (#5234)
* feat(issues): add thread quick-jump minimap to issue detail (MUL-4389)

A Linear-style rail of tick marks overlaid on the left edge of the issue
detail scroll area, one tick per comment thread (folded resolved bars
included). Ticks whose thread intersects the viewport render darker, so
the rail doubles as a scroll minimap. Hovering a tick grows it and opens
a preview card (bold first line + muted body excerpt, both clamped);
clicking jumps the timeline to the thread and flashes it like an inbox
deep-link landing.

Jumps go through Virtuoso's scrollToIndex in virtualized mode (the
target row may be unmounted) and direct container scrollTop math in the
flat deep-link/find modes, never native scrollIntoView (#3929).
Viewport tracking reads DOM rects on scroll/resize instead of an
IntersectionObserver because Virtuoso mounts/unmounts rows while
scrolling. Hidden on mobile: no hover, and the gutter is too tight.

Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): Dock-style hover wave on the thread minimap (MUL-4389)

Hovering the rail now magnifies ticks with a cosine falloff of their
distance to the cursor — the hovered tick peaks at 1.7x and neighbours
taper off across ~4 tick pitches, following the pointer continuously.

Driven per-pointermove with direct style writes on the native `scale`
property (compositor-friendly, no React re-render), batched
read-then-write inside one rAF; a 100ms ease-out transition smooths
between pointer samples and settles the collapse on leave. Clearing the
inline value hands control back to the CSS floor states (popup-open,
focus-visible), and prefers-reduced-motion swaps the wave for a plain
hover grow. Only the hovered tick darkens — neighbours grow but keep
their color.

Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): single glide-follow preview card on the thread minimap (MUL-4389)

Scanning the rail continuously re-paid the 150ms open delay plus the
close/open animation on every tick crossed, because each tick owned an
independent PreviewCard popover — hover felt laggy while gliding.

Replace the per-tick popovers with ONE card owned by the rail, driven
by the same rAF rect pass as the hover wave: the intent delay is paid
once when the pointer enters the rail; after that, gliding retargets
the card instantly (~1 frame) and slides it to the hovered tick with a
150ms transform transition. Leaving starts a grace timer long enough to
travel onto the card (which keeps it open for text selection); keyboard
focus anchors the card immediately. The anchor is clamped so the card
never sticks out of the column at the rail's extremes, and previews are
cached per thread content so unrelated timeline updates don't
re-flatten every comment.

Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: Lambda <lambda@multica.ai>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-11 00:51:33 +08:00

511 lines
19 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"page": {
"breadcrumb_title": "Issues",
"breadcrumb_workspace_fallback": "Workspace",
"empty_title": "No issues yet",
"empty_hint": "Create an issue to get started.",
"move_failed": "Failed to move issue"
},
"status": {
"backlog": "Backlog",
"todo": "Todo",
"in_progress": "In Progress",
"in_review": "In Review",
"done": "Done",
"blocked": "Blocked",
"cancelled": "Cancelled"
},
"priority": {
"urgent": "Urgent",
"high": "High",
"medium": "Medium",
"low": "Low",
"none": "No priority"
},
"stage": {
"none": "No stage",
"value": "Stage {{n}}"
},
"scope": {
"all_label": "All",
"all_description": "All issues in this workspace",
"members_label": "Members",
"members_description": "Issues assigned to team members",
"agents_label": "Agents",
"agents_description": "Issues assigned to AI agents"
},
"filters": {
"tooltip": "Filter",
"placeholder": "Filter...",
"no_results": "No results",
"no_labels": "No labels yet",
"no_assignee": "No assignee",
"no_project": "No project",
"section_status": "Status",
"section_priority": "Priority",
"section_assignee": "Assignee",
"section_creator": "Creator",
"section_project": "Project",
"section_label": "Label",
"section_date": "Date",
"date_field": "Field",
"date_field_created": "Created",
"date_field_updated": "Updated",
"date_today": "Today",
"date_last_3_days": "Last 3 days",
"date_last_7_days": "Last 7 days",
"date_custom_range": "Custom date or range",
"date_apply": "Apply",
"date_clear": "Clear date filter",
"members_group": "Members",
"agents_group": "Agents",
"squads_group": "Squads",
"issue_count_one": "{{count}} issue",
"issue_count_other": "{{count}} issues",
"reset": "Reset all filters",
"active_count_one": "{{count}} filter",
"active_count_other": "{{count}} filters"
},
"display": {
"tooltip": "Display settings",
"grouping_section": "Grouping",
"ordering_section": "Ordering",
"card_properties_section": "Card properties",
"ascending_title": "Ascending",
"descending_title": "Descending",
"group_status": "Status",
"group_assignee": "Assignee",
"group_parent": "Parent issue",
"group_project": "Project",
"sort_manual": "Manual",
"sort_priority": "Priority",
"sort_start_date": "Start date",
"sort_due_date": "Due date",
"sort_created": "Created date",
"sort_title": "Title",
"card_priority": "Priority",
"card_description": "Description",
"card_assignee": "Assignee",
"card_start_date": "Start date",
"card_due_date": "Due date",
"card_project": "Project",
"card_labels": "Labels",
"card_child_progress": "Sub-issue progress",
"show_sub_issues": "Show sub-issues"
},
"view": {
"tooltip_board": "Board view",
"tooltip_list": "List view",
"tooltip_gantt": "Gantt view",
"tooltip_swimlane": "Swimlane view",
"section": "View",
"board": "Board",
"list": "List",
"gantt": "Gantt",
"swimlane": "Swimlane"
},
"gantt": {
"header_issue": "Issue",
"zoom_day": "Day",
"zoom_week": "Week",
"zoom_month": "Month",
"show_completed": "Show completed",
"empty": "No scheduled issues yet — set a start or due date on any issue to see it on the timeline.",
"inverted_dates_warning": "Start date is after due date — bar shown from min to max."
},
"actor_issues": {
"scope": {
"assigned": {
"label": "Assigned",
"description": "Issues assigned to this member or agent"
},
"created": {
"label": "Created",
"description": "Issues created by this member or agent"
}
},
"empty": {
"assigned": {
"title": "No assigned issues",
"description": "Issues assigned here will appear in this view."
},
"created": {
"title": "No created issues",
"description": "Issues created here will appear in this view."
}
},
"search_placeholder": "Search issues...",
"search_empty": "No issues match your search."
},
"list": {
"empty_status": "No issues",
"add_issue_tooltip": "Add issue"
},
"swimlane": {
"no_parent": "No parent",
"other_parents": "Other parents",
"no_project": "No project",
"no_assignee": "Unassigned",
"open_parent": "Open parent issue",
"toggle_collapse": "Toggle lane"
},
"board": {
"hidden_columns_label": "Hidden columns",
"hide_column": "Hide column",
"show_column": "Show column",
"add_issue_tooltip": "Add issue",
"empty_column": "No issues",
"empty_grouping": "No matching issues",
"ordered_by": "Board ordered by {{field}}"
},
"detail": {
"not_found": "This issue does not exist or has been deleted in this workspace.",
"breadcrumb_project_unknown": "Unknown project",
"back_to_issues": "Back to Issues",
"title_placeholder": "Issue title",
"desc_placeholder": "Add description...",
"sub_issues_label": "Sub-issues",
"sub_issue_of": "Sub-issue of",
"add_sub_issues": "Add sub-issues",
"add_sub_issue_tooltip": "Add sub-issue",
"add_sub_issue_aria": "Add sub-issue",
"section_properties": "Properties",
"section_parent_issue": "Parent issue",
"section_pull_requests": "Pull requests",
"section_metadata": "Metadata",
"section_details": "Details",
"section_token_usage": "Token usage",
"pull_requests_loading": "Loading…",
"pull_requests_empty": "No linked pull requests yet. Reference this issue's identifier in a PR's branch name, title, or body to auto-link it.",
"pull_request_state_open": "Open",
"pull_request_state_draft": "Draft",
"pull_request_state_merged": "Merged",
"pull_request_state_closed": "Closed",
"pull_request_checks_passed": "Checks passed",
"pull_request_checks_failed": "Checks failed",
"pull_request_checks_pending": "Checks pending",
"pull_request_conflicts_clean": "No conflicts",
"pull_request_conflicts_dirty": "Conflicts",
"pull_request_card_status_closed": "Closed without merging",
"pull_request_card_status_merged": "Merged",
"pull_request_card_status_conflicts": "Has merge conflicts",
"pull_request_card_status_checks_failed": "Some checks failed",
"pull_request_card_status_checks_pending": "Some checks haven't completed yet",
"pull_request_card_status_checks_passed": "All checks passed",
"pull_request_card_status_ready": "Ready to merge",
"pull_request_card_status_unknown": "Checks haven't reported yet",
"pull_request_card_draft_prefix": "Draft · {{status}}",
"pull_request_card_files_count_one": "{{count}} file",
"pull_request_card_files_count_other": "{{count}} files",
"pull_request_card_show_more": "Show {{count}} more",
"pull_request_card_show_less": "Show less",
"prop_status": "Status",
"prop_priority": "Priority",
"prop_stage": "Stage",
"prop_assignee": "Assignee",
"prop_start_date": "Start date",
"prop_due_date": "Due date",
"prop_project": "Project",
"prop_labels": "Labels",
"add_property_action": "Add property",
"prop_created_by": "Created by",
"prop_created": "Created",
"prop_updated": "Updated",
"prop_input": "Input",
"prop_output": "Output",
"prop_cache": "Cache",
"prop_cache_value": "{{read}} read / {{write}} write",
"prop_runs": "Runs",
"activity_section": "Activity",
"subscribe": "Subscribe",
"unsubscribe": "Unsubscribe",
"no_subscribers_results": "No results found",
"change_subscribers_placeholder": "Change subscribers...",
"members_group": "Members",
"agents_group": "Agents",
"mark_done_tooltip": "Mark as done",
"archive_tooltip": "Archive",
"pin_tooltip": "Pin to sidebar",
"unpin_tooltip": "Unpin from sidebar",
"thread_nav_label": "Jump to comment thread",
"sidebar_tooltip": "Toggle sidebar",
"find": {
"placeholder": "Find in issue...",
"count": "{{current}}/{{total}}",
"no_matches": "No matches",
"previous": "Previous match",
"next": "Next match",
"close": "Close find"
},
"update_failed": "Failed to update issue",
"link_copied": "Link copied",
"link_copy_failed": "Failed to copy link",
"workdir_path_copied": "Workdir path copied",
"workdir_path_copy_failed": "Failed to copy workdir path",
"workdir_path_unavailable": "No local workdir yet — issue has not been run by a local agent"
},
"timeline": {
"loading": "Loading..."
},
"activity": {
"created": "created this issue",
"self_assigned": "self-assigned this issue",
"assigned_to": "assigned to {{name}}",
"removed_assignee": "removed assignee",
"changed_assignee": "changed assignee",
"status_changed": "changed status from {{from}} to {{to}}",
"priority_changed": "changed priority from {{from}} to {{to}}",
"start_date_set": "set start date to {{date}}",
"start_date_removed": "removed start date",
"due_date_set": "set due date to {{date}}",
"due_date_removed": "removed due date",
"title_renamed": "renamed this issue from \"{{from}}\" to \"{{to}}\"",
"description_updated": "updated the description",
"task_completed_one": "completed the task",
"task_completed_other": "completed the task ({{count}} times)",
"task_failed_one": "task failed",
"task_failed_other": "task failed ({{count}} times)",
"squad_leader_evaluated": "evaluated the squad trigger",
"squad_leader_action": "evaluated and took action",
"squad_leader_action_reason": "evaluated and took action: {{reason}}",
"squad_leader_no_action": "evaluated: no action needed",
"squad_leader_no_action_reason": "evaluated: no action needed ({{reason}})",
"squad_leader_failed": "evaluation failed",
"squad_leader_failed_reason": "evaluation failed: {{reason}}",
"coalesced_badge": "×{{count}}",
"activity_count_one": "{{count}} activity",
"activity_count_other": "{{count}} activities",
"show_more_activities_one": "Show {{count}} more activity",
"show_more_activities_other": "Show {{count}} more activities"
},
"comment": {
"delete_title": "Delete comment",
"delete_desc": "This comment will be permanently deleted. This cannot be undone.",
"delete_desc_with_replies": "This comment and all its replies will be permanently deleted. This cannot be undone.",
"delete_action": "Delete",
"cancel_action": "Cancel",
"edit_placeholder": "Edit comment...",
"save_action": "Save",
"cancel_edit": "Cancel",
"copy_action": "Copy",
"copied_toast": "Copied",
"edit_action": "Edit",
"update_failed": "Failed to update comment",
"send_failed": "Failed to send comment",
"send_reply_failed": "Failed to send reply",
"delete_failed": "Failed to delete comment",
"reply_count_one": "{{count}} reply",
"reply_count_other": "{{count}} replies",
"leave_comment_placeholder": "Leave a comment...",
"send_tooltip": "Send",
"trigger_source_issue_assignee": "assignee",
"trigger_source_mention_agent": "@mention",
"trigger_source_mention_squad_leader": "squad",
"trigger_source_unknown": "trigger",
"trigger_skipped_label": "Skipped",
"trigger_wont_trigger": "Won't start this time",
"trigger_none_will_trigger": "No agents will start",
"trigger_reason_mention_squad_leader": "Leads a squad mentioned here.",
"trigger_reason_unknown": "Will start from this comment.",
"trigger_will_start": "Will start when sent",
"trigger_will_start_count_one": "{{count}} agent will start when sent",
"trigger_will_start_count_other": "{{count}} agents will start when sent",
"trigger_starts_now": "Starts right away.",
"trigger_starts_when_online": "Offline now — starts once online.",
"trigger_click_to_skip": "Click to skip this time.",
"trigger_click_to_manage": "Click to choose who runs this time.",
"trigger_click_to_restore": "Won't start this time. Click to restore.",
"trigger_preview_title": "Will start when sent",
"trigger_chip_aria": "{{name}} trigger: {{state}}",
"resolve": {
"resolve_thread_action": "Resolve thread",
"unresolve_thread_action": "Unresolve thread",
"resolve_with_comment_action": "Resolve thread with comment",
"unresolve_action": "Unresolve",
"resolution_badge": "Resolution",
"collapse": "Collapse",
"bar_one": "{{count}} resolved comment from {{authors}}",
"bar_other": "{{count}} resolved comments from {{authors}}",
"fold_one": "{{count}} comment from {{authors}}",
"fold_other": "{{count}} comments from {{authors}}",
"bar_authors_more_one": "{{names}} and {{count}} other",
"bar_authors_more_other": "{{names}} and {{count}} others",
"resolve_failed": "Failed to resolve thread",
"unresolve_failed": "Failed to unresolve thread"
}
},
"reply": {
"placeholder": "Leave a reply..."
},
"agent_activity": {
"hover_header_one": "{{count}} agent working",
"hover_header_other": "{{count}} agents working",
"hover_header_tasks_one": "{{count}} task working",
"hover_header_tasks_other": "{{count}} tasks working",
"hover_header_queued_one": "{{count}} agent queued",
"hover_header_queued_other": "{{count}} agents queued",
"status_running": "Working",
"status_queued": "Queued",
"chip_label": "working",
"empty_hover": "No agents currently working",
"filter_active_label": "Viewing only working agents"
},
"agent_live": {
"is_working": "{{name}} is working",
"is_queued": "{{name}} is queued",
"is_waiting_local_directory": "{{name}} is waiting for the local directory",
"queued_elapsed_prefix": "queued for {{elapsed}}",
"fallback_name": "Agent",
"tool_count_one": "{{count}} tool",
"tool_count_other": "{{count}} tools",
"transcript_button": "View transcript",
"stop_button": "Stop",
"stop_tooltip": "Stop agent",
"cancel_failed": "Failed to cancel task"
},
"execution_log": {
"section": "Execution log",
"show_past": "Show past runs ({{count}})",
"hide_past": "Hide past runs ({{count}})",
"cancel_task_tooltip": "Cancel task",
"cancel_task_aria": "Cancel task",
"retry_task_tooltip": "Retry task",
"retry_task_aria": "Retry task",
"retry_failed": "Failed to retry task",
"transcript_tooltip": "View transcript",
"cancel_failed": "Failed to cancel task",
"trigger_retry": "Retry",
"trigger_retry_attempt": "Retry #{{attempt}}",
"trigger_retry_attempt_prefix": "Retry #{{attempt}} · ",
"trigger_retry_prefix": "Retry · ",
"trigger_autopilot": "Autopilot run",
"trigger_comment": "Comment trigger",
"trigger_initial": "Initial run",
"trigger_handoff_prefix": "Handoff: ",
"included_comments_one": "Includes {{count}} comment",
"included_comments_other": "Includes {{count}} comments",
"status_queued": "Queued",
"status_dispatched": "Starting",
"status_waiting_local_directory": "Waiting for local directory",
"status_running": "Working",
"status_completed": "Completed",
"status_failed": "Failed",
"status_cancelled": "Cancelled"
},
"terminate_dialog": {
"title": "Stop this task?",
"body": "The task will be cancelled and cannot be resumed.",
"running_note": " Running work may take a few seconds to fully halt.",
"keep": "Keep running",
"confirm": "Stop task"
},
"batch": {
"selected": "{{count}} selected",
"status": "Status",
"priority": "Priority",
"assignee": "Assignee",
"delete": "Delete",
"update_success_one": "Updated {{count}} issue",
"update_success_other": "Updated {{count}} issues",
"update_failed": "Failed to update issues",
"delete_success_one": "Deleted {{count}} issue",
"delete_success_other": "Deleted {{count}} issues",
"delete_failed": "Failed to delete issues",
"delete_dialog_title_one": "Delete {{count}} issue?",
"delete_dialog_title_other": "Delete {{count}} issues?",
"delete_dialog_desc_one": "This action cannot be undone. This will permanently delete the selected issue and all associated data.",
"delete_dialog_desc_other": "This action cannot be undone. This will permanently delete the selected issues and all associated data.",
"delete_dialog_warning": "Any workspace member can delete issues.",
"cancel": "Cancel"
},
"card": {
"update_failed": "Failed to update issue",
"updated_ago": "Updated {{time}}"
},
"actions": {
"status": "Status",
"priority": "Priority",
"assignee": "Assignee",
"start_date": "Start date",
"start_today": "Today",
"start_tomorrow": "Tomorrow",
"start_next_week": "Next week",
"start_clear": "Clear date",
"due_date": "Due date",
"due_today": "Today",
"due_tomorrow": "Tomorrow",
"due_next_week": "Next week",
"due_clear": "Clear date",
"unassigned": "Unassigned",
"pin_to_sidebar": "Pin to sidebar",
"unpin_from_sidebar": "Unpin from sidebar",
"copy_link": "Copy link",
"copy_workdir_path": "Copy local workdir path",
"relations": "Relations",
"create_sub_issue": "Create sub-issue",
"set_parent_issue": "Set parent issue...",
"remove_parent_issue": "Remove parent issue",
"remove_parent_issue_success": "Removed parent issue",
"add_sub_issue": "Add sub-issue...",
"delete_issue": "Delete issue"
},
"pickers": {
"filter_options_aria": "Filter options",
"no_results": "No results",
"assignee": {
"trigger_unassigned": "Unassigned",
"search_placeholder": "Assign to...",
"members_group": "Members",
"agents_group": "Agents",
"squads_group": "Squads"
},
"start_date": {
"trigger_label": "Start date",
"clear_action": "Clear date"
},
"due_date": {
"trigger_label": "Due date",
"clear_action": "Clear date"
},
"label": {
"trigger_label": "Add label",
"search_placeholder": "Find or create a label…",
"manage_action": "Manage labels…",
"manage_dialog_title": "Manage labels",
"create_action": "Create",
"create_failed": "Failed to create label"
}
},
"labels_panel": {
"intro": "Create and manage labels to categorize issues across your workspace.",
"new_placeholder": "New label name…",
"new_aria": "New label name",
"add_action": "Add",
"loading": "Loading…",
"empty": "No labels yet.",
"name_required": "Label name is required.",
"color_label": "Color",
"pick_color_aria": "Pick a color",
"edit_aria": "Edit {{name}}",
"delete_aria": "Delete {{name}}",
"save_aria": "Save",
"cancel_aria": "Cancel",
"delete_dialog_title": "Delete label?",
"delete_dialog_desc_prefix": "The label ",
"delete_dialog_desc_suffix": " will be removed from all issues. This cannot be undone.",
"delete_dialog_cancel": "Cancel",
"delete_dialog_confirm": "Delete",
"create_failed": "Failed to create label",
"update_failed": "Failed to update label",
"delete_failed": "Failed to delete label"
},
"backlog_hint": {
"title": "Agent is paused in Backlog",
"description": "This issue is parked, so the assigned agent will wait. Move it to Todo when you want the agent to start.",
"row_backlog_label": "Backlog",
"row_backlog_hint": "keeps the agent paused",
"row_todo_label": "Todo",
"row_todo_hint": "starts the agent"
}
}