@cat-factory/app 0.308.0 → 0.309.0
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/README.md +21 -0
- package/app/assets/css/main.css +22 -0
- package/app/assets/css/prose.css +4 -4
- package/app/assets/css/type.css +24 -0
- package/app/components/assistant/AssistantModal.vue +3 -2
- package/app/components/auth/UserMenu.vue +1 -1
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +15 -15
- package/app/components/binaryOutput/BinaryOutputReport.vue +10 -14
- package/app/components/binaryOutput/StoredAssetView.vue +5 -5
- package/app/components/board/AddTaskModal.vue +16 -14
- package/app/components/board/AgentFailureCard.vue +9 -9
- package/app/components/board/AgentFailureHistory.vue +1 -1
- package/app/components/board/CreateInitiativeModal.vue +2 -2
- package/app/components/board/FailureDetail.vue +1 -1
- package/app/components/board/FailureHistoryList.vue +5 -5
- package/app/components/board/RecurringPipelineModal.vue +12 -11
- package/app/components/board/ReviewFrictionDialog.vue +4 -3
- package/app/components/board/StepExecutionHistory.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +1 -1
- package/app/components/board/nodes/BlockNode.vue +8 -9
- package/app/components/board/nodes/EpicNode.vue +4 -4
- package/app/components/board/nodes/FrameSwimlanes.vue +4 -7
- package/app/components/board/nodes/InitiativeCard.vue +4 -4
- package/app/components/board/nodes/LaneGroup.vue +3 -5
- package/app/components/board/nodes/TaskCard.vue +8 -8
- package/app/components/board/nodes/TaskLane.vue +3 -3
- package/app/components/board/nodes/TaskPipelineMini.vue +13 -12
- package/app/components/bootstrap/AdoptionReviewModal.vue +7 -6
- package/app/components/bootstrap/BootstrapModal.vue +11 -10
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +8 -7
- package/app/components/bugFishing/BugFishingWindow.vue +37 -36
- package/app/components/clarity/ClarityReviewWindow.vue +8 -7
- package/app/components/common/AsyncViewError.vue +1 -1
- package/app/components/common/ClarificationItem.vue +6 -6
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +1 -1
- package/app/components/common/InterviewGateNotice.vue +4 -4
- package/app/components/common/MarkdownProse.vue +8 -2
- package/app/components/common/SectionLabel.vue +38 -0
- package/app/components/consensus/ConsensusSessionWindow.vue +10 -9
- package/app/components/context/ContextAttachmentFields.vue +9 -8
- package/app/components/docs/DocInterviewWindow.vue +10 -9
- package/app/components/documents/ContextDocumentPicker.vue +10 -12
- package/app/components/documents/DocumentImportModal.vue +3 -2
- package/app/components/documents/DocumentSourceConnectModal.vue +2 -2
- package/app/components/documents/DocumentSyncState.vue +1 -1
- package/app/components/documents/DocumentTemplatesModal.vue +5 -4
- package/app/components/documents/RepoContextDocPicker.vue +3 -6
- package/app/components/documents/StartFromDesignModal.vue +4 -4
- package/app/components/documents/TaskContextDocs.vue +1 -1
- package/app/components/environments/EnvSetupStepper.vue +3 -3
- package/app/components/environments/EnvironmentStatusPanel.vue +11 -10
- package/app/components/environments/steps/EnvPreflightStep.vue +8 -8
- package/app/components/environments/steps/EnvReviewStep.vue +23 -22
- package/app/components/environments/steps/EnvSaveStep.vue +5 -5
- package/app/components/focus/BlockFocusView.vue +11 -10
- package/app/components/followUp/FollowUpWindow.vue +10 -10
- package/app/components/forkDecision/ForkDecisionWindow.vue +23 -26
- package/app/components/foundational/FoundationalContractSummary.vue +2 -2
- package/app/components/foundational/FoundationalServiceCatalogList.vue +3 -3
- package/app/components/foundational/FoundationalServiceRegistry.vue +3 -3
- package/app/components/foundational/FoundationalSuppressions.vue +2 -2
- package/app/components/fragments/FragmentLibraryManager.vue +3 -3
- package/app/components/fragments/FragmentSelector.vue +10 -11
- package/app/components/gates/GateFailingCheckList.vue +3 -3
- package/app/components/gates/GateResultView.vue +39 -38
- package/app/components/github/AddServiceFromRepoModal.vue +5 -4
- package/app/components/github/BranchProtectionPreflight.vue +5 -5
- package/app/components/github/GitHubConnect.vue +5 -3
- package/app/components/github/GitHubPanel.vue +14 -13
- package/app/components/github/RepoTreeBrowser.vue +1 -1
- package/app/components/humanTest/HumanTestWindow.vue +18 -17
- package/app/components/initiative/InitiativePlanNotice.vue +3 -3
- package/app/components/initiative/InitiativePlanReview.vue +19 -21
- package/app/components/initiative/InitiativePlanningWindow.vue +5 -5
- package/app/components/initiative/InitiativeTrackerWindow.vue +54 -53
- package/app/components/judge/JudgeResultView.vue +24 -25
- package/app/components/kaizen/KaizenPanel.vue +4 -4
- package/app/components/kaizen/KaizenStepStatus.vue +7 -6
- package/app/components/layout/AccountAuditLog.vue +1 -1
- package/app/components/layout/AccountDeploymentSettings.vue +10 -10
- package/app/components/layout/AccountFailureKindRules.vue +13 -13
- package/app/components/layout/AccountFoundationalSettings.vue +1 -1
- package/app/components/layout/AccountFragmentSettings.vue +1 -1
- package/app/components/layout/AccountModelPolicySettings.vue +7 -7
- package/app/components/layout/AccountPlatformAlertSettings.vue +8 -8
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +3 -3
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +4 -0
- package/app/components/layout/AiProvidersBanner.vue +1 -1
- package/app/components/layout/AppearanceSwitcher.vue +1 -1
- package/app/components/layout/BoardSwitcher.vue +3 -2
- package/app/components/layout/BoardToolbar.vue +6 -2
- package/app/components/layout/CommandBar.vue +4 -2
- package/app/components/layout/DefaultTestEnvBanner.vue +2 -2
- package/app/components/layout/IntegrationsHub.vue +4 -3
- package/app/components/layout/LanguageSwitcher.vue +1 -1
- package/app/components/layout/ModelProvidersHub.vue +6 -4
- package/app/components/layout/NotificationsInbox.vue +8 -7
- package/app/components/layout/PersonalSetupModal.vue +5 -3
- package/app/components/layout/RolePrompt.vue +1 -1
- package/app/components/layout/SideBar.vue +3 -5
- package/app/components/layout/SpendWarningBanner.vue +3 -3
- package/app/components/layout/TranslationWarningBanner.vue +1 -1
- package/app/components/layout/UiModeSwitcher.vue +7 -6
- package/app/components/layout/UiRoleSwitcher.vue +2 -2
- package/app/components/media/ArtifactLightbox.vue +6 -6
- package/app/components/media/ImageCompare.vue +16 -16
- package/app/components/merge/MergeEffortChips.vue +4 -6
- package/app/components/notifications/NotificationSettingsPanel.vue +6 -5
- package/app/components/observability/OutcomeFilterChips.vue +1 -1
- package/app/components/observability/RunFailureSummary.vue +14 -17
- package/app/components/observability/StepMetricsBar.vue +9 -8
- package/app/components/observability/StepModelActivity.vue +4 -3
- package/app/components/observability/ToolCallList.vue +15 -18
- package/app/components/outcome/OutcomeSummaryWindow.vue +43 -42
- package/app/components/palettes/AgentPalette.vue +7 -5
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +27 -30
- package/app/components/panels/AttemptEntryHeader.vue +2 -2
- package/app/components/panels/DecisionModal.vue +1 -1
- package/app/components/panels/GenericStructuredResultView.vue +6 -5
- package/app/components/panels/InspectorPanel.vue +15 -13
- package/app/components/panels/MergerResultView.vue +10 -9
- package/app/components/panels/ObservabilityPanel.vue +66 -76
- package/app/components/panels/OperatorDashboardPanel.vue +27 -26
- package/app/components/panels/ReportsPanel.vue +26 -25
- package/app/components/panels/ReportsSpendBreakdown.vue +2 -2
- package/app/components/panels/ResultWindowShell.vue +19 -18
- package/app/components/panels/RunDetailLoadState.vue +1 -1
- package/app/components/panels/StepContainerStatus.vue +8 -7
- package/app/components/panels/StepDelegatedStatus.vue +13 -12
- package/app/components/panels/StepEffortReport.vue +12 -17
- package/app/components/panels/StepFragmentAdherence.vue +9 -10
- package/app/components/panels/StepMetadataCard.vue +41 -43
- package/app/components/panels/StepReproductionReport.vue +18 -20
- package/app/components/panels/StepRunMeta.vue +27 -26
- package/app/components/panels/StepTestReport.vue +16 -15
- package/app/components/panels/StepToolServers.vue +7 -8
- package/app/components/panels/StepValidationReport.vue +5 -5
- package/app/components/panels/inspector/ContainerSummary.vue +4 -4
- package/app/components/panels/inspector/DocReferenceRepos.vue +5 -4
- package/app/components/panels/inspector/EnvProbeReport.vue +16 -13
- package/app/components/panels/inspector/EpicChildren.vue +8 -7
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +5 -4
- package/app/components/panels/inspector/FrontendConfig.vue +26 -34
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +7 -4
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +9 -8
- package/app/components/panels/inspector/ServiceConnections.vue +2 -2
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +9 -13
- package/app/components/panels/inspector/ServiceTestConfig.vue +41 -45
- package/app/components/panels/inspector/ServiceTestSecrets.vue +3 -3
- package/app/components/panels/inspector/ServiceTestingContext.vue +2 -2
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAprioriBranches.vue +6 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +3 -7
- package/app/components/panels/inspector/TaskExecution.vue +13 -12
- package/app/components/panels/inspector/TaskRunSettings.vue +35 -38
- package/app/components/panels/inspector/TaskStructure.vue +5 -4
- package/app/components/pipeline/AgentPromptEditor.vue +15 -14
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -52
- package/app/components/pipeline/EstimateThresholdFields.vue +2 -2
- package/app/components/pipeline/GateConfigFields.vue +6 -6
- package/app/components/pipeline/IterationCapPrompt.vue +1 -1
- package/app/components/pipeline/PipelineBuilder.vue +28 -27
- package/app/components/pipeline/PipelineHealthModal.vue +7 -7
- package/app/components/pipeline/PipelinePicker.vue +3 -3
- package/app/components/pipeline/PipelinePreview.vue +6 -7
- package/app/components/pipeline/PipelineProgress.vue +23 -24
- package/app/components/prReview/PrReviewWindow.vue +42 -41
- package/app/components/providers/AiPresetMismatchDialog.vue +4 -3
- package/app/components/providers/AiProviderOnboardingModal.vue +2 -2
- package/app/components/providers/ApiKeysSection.vue +7 -6
- package/app/components/providers/PersonalSubscriptionSection.vue +4 -3
- package/app/components/providers/VendorCredentialsModal.vue +5 -4
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +10 -9
- package/app/components/ralph/RalphLoopResultView.vue +25 -26
- package/app/components/requirements/RequirementsReviewWindow.vue +13 -12
- package/app/components/riskPolicy/RiskPolicyPicker.vue +5 -5
- package/app/components/riskPolicy/RiskPolicyPreview.vue +16 -15
- package/app/components/sandbox/SandboxPanel.vue +21 -20
- package/app/components/settings/ApiTokensPanel.vue +1 -1
- package/app/components/settings/BudgetSettings.vue +18 -17
- package/app/components/settings/CapabilityCredentialsPanel.vue +5 -5
- package/app/components/settings/CloudflareHandlerSection.vue +16 -16
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +14 -12
- package/app/components/settings/ConnectionTestVerdict.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +21 -20
- package/app/components/settings/CustomManifestTypeEditor.vue +8 -7
- package/app/components/settings/DefaultProvisionTypeSection.vue +5 -5
- package/app/components/settings/InfraHandlersConfigurator.vue +14 -15
- package/app/components/settings/InfrastructureBackendPicker.vue +2 -2
- package/app/components/settings/IssueTrackerPanel.vue +9 -15
- package/app/components/settings/KubernetesEngineForm.vue +9 -8
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -3
- package/app/components/settings/LocalContainerPoolSettings.vue +2 -2
- package/app/components/settings/LocalModelEndpointsPanel.vue +10 -9
- package/app/components/settings/MergeClassRulesEditor.vue +6 -5
- package/app/components/settings/MergeRolePolicyEditor.vue +13 -12
- package/app/components/settings/ModelConfigurationPanel.vue +8 -11
- package/app/components/settings/ModelPresetHealthModal.vue +3 -3
- package/app/components/settings/ObservabilityConnectionPanel.vue +1 -1
- package/app/components/settings/OpenRouterCatalogPanel.vue +6 -5
- package/app/components/settings/PackageRegistriesPanel.vue +4 -4
- package/app/components/settings/ProviderConnectionTab.vue +5 -4
- package/app/components/settings/ProviderManifestEditor.vue +9 -8
- package/app/components/settings/ProviderPreferenceEditor.vue +8 -7
- package/app/components/settings/RiskPolicyCreateForm.vue +40 -26
- package/app/components/settings/RiskPolicyEditorRow.vue +18 -17
- package/app/components/settings/RiskPolicyHealthModal.vue +3 -3
- package/app/components/settings/RiskPolicyPanel.vue +11 -13
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +5 -4
- package/app/components/settings/SharedStacksPanel.vue +5 -5
- package/app/components/settings/TaskSourceCard.vue +2 -2
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +4 -4
- package/app/components/settings/ToolServerChecklist.vue +22 -22
- package/app/components/settings/UsageSettings.vue +13 -13
- package/app/components/settings/UserSecretsSection.vue +4 -3
- package/app/components/settings/WorkspaceMetadataSettings.vue +6 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +72 -58
- package/app/components/skills/ReviewSkillQueue.vue +8 -7
- package/app/components/skills/SkillLibraryManager.vue +2 -2
- package/app/components/slack/SlackPanel.vue +8 -7
- package/app/components/spec/ServiceSpecWindow.vue +15 -16
- package/app/components/tasks/BugHuntModal.vue +1 -1
- package/app/components/tasks/ContextIssuePicker.vue +4 -6
- package/app/components/tasks/TaskContextIssues.vue +1 -1
- package/app/components/tasks/TaskImportModal.vue +3 -2
- package/app/components/tasks/TaskSourceConnectModal.vue +5 -5
- package/app/components/testing/TestReportWindow.vue +54 -53
- package/app/components/tutorial/TutorialNudge.vue +3 -2
- package/app/components/tutorial/TutorialOverlay.vue +3 -2
- package/app/components/vcs/GitLabConnect.vue +1 -1
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +23 -25
- package/app/utils/theme/builtins.ts +7 -1
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// (labelled by their raw id) so they stay visible and removable.
|
|
11
11
|
import type { PromptFragment } from '~/types/domain'
|
|
12
12
|
import { buildFragmentCategoryGroups } from '~/utils/fragmentPicker'
|
|
13
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
13
14
|
|
|
14
15
|
const props = withDefaults(
|
|
15
16
|
defineProps<{
|
|
@@ -76,9 +77,9 @@ function manageAccount() {
|
|
|
76
77
|
<template>
|
|
77
78
|
<div>
|
|
78
79
|
<div class="mb-1 flex items-center justify-between gap-2">
|
|
79
|
-
<
|
|
80
|
+
<SectionLabel v-if="label" as="span">
|
|
80
81
|
{{ label }}
|
|
81
|
-
</
|
|
82
|
+
</SectionLabel>
|
|
82
83
|
<span v-else />
|
|
83
84
|
<UPopover v-model:open="open" :content="{ align: 'end' }">
|
|
84
85
|
<UButton
|
|
@@ -98,16 +99,14 @@ function manageAccount() {
|
|
|
98
99
|
<div class="min-h-0 flex-1 overflow-y-auto p-1">
|
|
99
100
|
<template v-if="categoryGroups.length">
|
|
100
101
|
<div v-for="group in categoryGroups" :key="group.category">
|
|
101
|
-
<p
|
|
102
|
-
class="px-2 pb-0.5 pt-1.5 text-[11px] font-semibold uppercase tracking-wide text-dimmed"
|
|
103
|
-
>
|
|
102
|
+
<SectionLabel as="p" class="px-2 pb-0.5 pt-1.5">
|
|
104
103
|
{{ group.category }}
|
|
105
|
-
</
|
|
104
|
+
</SectionLabel>
|
|
106
105
|
<button
|
|
107
106
|
v-for="f in group.fragments"
|
|
108
107
|
:key="f.id"
|
|
109
108
|
type="button"
|
|
110
|
-
class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm hover:bg-elevated/60"
|
|
109
|
+
class="flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-start text-sm hover:bg-elevated/60"
|
|
111
110
|
:class="selectedSet.has(f.id) ? 'text-app-100' : 'text-toned'"
|
|
112
111
|
:title="f.summary"
|
|
113
112
|
:data-testid="`fragment-option-${f.id}`"
|
|
@@ -123,14 +122,14 @@ function manageAccount() {
|
|
|
123
122
|
</button>
|
|
124
123
|
</div>
|
|
125
124
|
</template>
|
|
126
|
-
<p v-else class="px-2 py-3 text-
|
|
125
|
+
<p v-else class="px-2 py-3 text-xs text-dimmed">
|
|
127
126
|
{{ t('inspector.fragments.pickerEmpty') }}
|
|
128
127
|
</p>
|
|
129
128
|
|
|
130
129
|
<div class="mt-1 border-t border-default pt-1">
|
|
131
130
|
<button
|
|
132
131
|
type="button"
|
|
133
|
-
class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm text-toned hover:bg-elevated/60"
|
|
132
|
+
class="flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-start text-sm text-toned hover:bg-elevated/60"
|
|
134
133
|
@click="manageBoard"
|
|
135
134
|
>
|
|
136
135
|
<UIcon name="i-lucide-book-marked" class="h-4 w-4 shrink-0 text-muted" />
|
|
@@ -139,7 +138,7 @@ function manageAccount() {
|
|
|
139
138
|
<button
|
|
140
139
|
v-if="accounts.enabled"
|
|
141
140
|
type="button"
|
|
142
|
-
class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm text-toned hover:bg-elevated/60"
|
|
141
|
+
class="flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-start text-sm text-toned hover:bg-elevated/60"
|
|
143
142
|
@click="manageAccount"
|
|
144
143
|
>
|
|
145
144
|
<UIcon name="i-lucide-users" class="h-4 w-4 shrink-0 text-muted" />
|
|
@@ -178,7 +177,7 @@ function manageAccount() {
|
|
|
178
177
|
{{ f.title }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
|
|
179
178
|
</UBadge>
|
|
180
179
|
</div>
|
|
181
|
-
<div v-else-if="emptyText" class="text-
|
|
180
|
+
<div v-else-if="emptyText" class="text-2xs text-dimmed">
|
|
182
181
|
{{ emptyText }}
|
|
183
182
|
</div>
|
|
184
183
|
</div>
|
|
@@ -37,7 +37,7 @@ const { t } = useI18n()
|
|
|
37
37
|
target="_blank"
|
|
38
38
|
rel="noopener"
|
|
39
39
|
class="group min-w-0 flex-1 truncate text-app-info-300 hover:text-app-info-200 hover:underline"
|
|
40
|
-
:class="dense ? 'text-
|
|
40
|
+
:class="dense ? 'text-xs' : 'text-sm'"
|
|
41
41
|
:title="t('gates.ci.openOnGithub', { name: c.name })"
|
|
42
42
|
>
|
|
43
43
|
{{ c.name }}
|
|
@@ -49,12 +49,12 @@ const { t } = useI18n()
|
|
|
49
49
|
<span
|
|
50
50
|
v-else
|
|
51
51
|
class="min-w-0 flex-1 truncate"
|
|
52
|
-
:class="dense ? 'text-
|
|
52
|
+
:class="dense ? 'text-xs text-toned' : 'text-sm text-default'"
|
|
53
53
|
>{{ c.name }}</span
|
|
54
54
|
>
|
|
55
55
|
<span
|
|
56
56
|
class="shrink-0 uppercase text-app-error-300"
|
|
57
|
-
:class="dense ? 'text-
|
|
57
|
+
:class="dense ? 'text-3xs' : 'text-2xs'"
|
|
58
58
|
>{{ c.conclusion ?? t('gates.ci.conclusionFallback') }}</span
|
|
59
59
|
>
|
|
60
60
|
</li>
|
|
@@ -13,6 +13,7 @@ import StepRunMeta from '~/components/panels/StepRunMeta.vue'
|
|
|
13
13
|
import AttemptEntryHeader from '~/components/panels/AttemptEntryHeader.vue'
|
|
14
14
|
import GateFailingCheckList from '~/components/gates/GateFailingCheckList.vue'
|
|
15
15
|
import CopyButton from '~/components/common/CopyButton.vue'
|
|
16
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
16
17
|
|
|
17
18
|
const board = useBoardStore()
|
|
18
19
|
const execution = useExecutionStore()
|
|
@@ -218,7 +219,7 @@ const conflictVerdict = computed(() => {
|
|
|
218
219
|
>
|
|
219
220
|
<UIcon :name="meta.icon" class="h-8 w-8 opacity-40" />
|
|
220
221
|
<p class="text-sm">{{ t('gates.noActivity') }}</p>
|
|
221
|
-
<p class="max-w-sm text-
|
|
222
|
+
<p class="max-w-sm text-2xs text-dimmed">
|
|
222
223
|
{{ t('gates.noActivityHint') }}
|
|
223
224
|
</p>
|
|
224
225
|
</div>
|
|
@@ -233,7 +234,7 @@ const conflictVerdict = computed(() => {
|
|
|
233
234
|
name="i-lucide-circle-check"
|
|
234
235
|
class="mt-0.5 h-4 w-4 shrink-0 text-app-success-400"
|
|
235
236
|
/>
|
|
236
|
-
<p class="text-
|
|
237
|
+
<p class="text-sm leading-relaxed text-app-success-200">
|
|
237
238
|
{{ step?.output || (isCi ? t('gates.passedCi') : t('gates.passedConflicts')) }}
|
|
238
239
|
</p>
|
|
239
240
|
</div>
|
|
@@ -244,7 +245,7 @@ const conflictVerdict = computed(() => {
|
|
|
244
245
|
class="flex items-center gap-2 rounded-md border border-default bg-app-950/40 px-3 py-2"
|
|
245
246
|
>
|
|
246
247
|
<UIcon name="i-lucide-users" class="h-4 w-4 shrink-0 text-app-secondary-300" />
|
|
247
|
-
<span class="text-
|
|
248
|
+
<span class="text-sm text-default">
|
|
248
249
|
{{
|
|
249
250
|
t(
|
|
250
251
|
'gates.humanReview.approvals',
|
|
@@ -266,7 +267,7 @@ const conflictVerdict = computed(() => {
|
|
|
266
267
|
class="relative mt-2 rounded-md border border-default bg-app-950/40 px-3 py-2"
|
|
267
268
|
>
|
|
268
269
|
<CopyButton :text="gate.lastFailureSummary" class="absolute end-1 top-1" />
|
|
269
|
-
<p class="whitespace-pre-wrap pe-8 text-
|
|
270
|
+
<p class="whitespace-pre-wrap pe-8 text-xs leading-relaxed text-toned">
|
|
270
271
|
{{ gate.lastFailureSummary }}
|
|
271
272
|
</p>
|
|
272
273
|
</div>
|
|
@@ -275,7 +276,7 @@ const conflictVerdict = computed(() => {
|
|
|
275
276
|
:href="prUrl"
|
|
276
277
|
target="_blank"
|
|
277
278
|
rel="noopener"
|
|
278
|
-
class="mt-2 inline-flex items-center gap-1 text-
|
|
279
|
+
class="mt-2 inline-flex items-center gap-1 text-xs text-app-info-300 hover:text-app-info-200 hover:underline"
|
|
279
280
|
>
|
|
280
281
|
{{ t('gates.humanReview.reviewPr') }}
|
|
281
282
|
<UIcon name="i-lucide-external-link" class="h-3 w-3" />
|
|
@@ -283,10 +284,10 @@ const conflictVerdict = computed(() => {
|
|
|
283
284
|
|
|
284
285
|
<!-- Freeform fix request: dispatch the fixer now with these instructions. -->
|
|
285
286
|
<section v-if="status !== 'gave-up'" class="mt-4">
|
|
286
|
-
<h3 class="mb-1.5
|
|
287
|
+
<SectionLabel as="h3" class="mb-1.5">
|
|
287
288
|
{{ t('gates.humanReview.requestFixHeading') }}
|
|
288
|
-
</
|
|
289
|
-
<p class="mb-2 text-
|
|
289
|
+
</SectionLabel>
|
|
290
|
+
<p class="mb-2 text-2xs leading-relaxed text-dimmed">
|
|
290
291
|
{{ t('gates.humanReview.requestFixDescription') }}
|
|
291
292
|
</p>
|
|
292
293
|
<textarea
|
|
@@ -294,7 +295,7 @@ const conflictVerdict = computed(() => {
|
|
|
294
295
|
rows="3"
|
|
295
296
|
:disabled="fixBusy"
|
|
296
297
|
:placeholder="t('gates.humanReview.requestFixPlaceholder')"
|
|
297
|
-
class="w-full resize-y rounded-md border border-default bg-app-950/60 px-3 py-2 text-
|
|
298
|
+
class="w-full resize-y rounded-md border border-default bg-app-950/60 px-3 py-2 text-sm text-default placeholder:text-app-600 focus:border-app-secondary-500/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-app-secondary-500/60"
|
|
298
299
|
/>
|
|
299
300
|
<div class="mt-2 flex justify-end">
|
|
300
301
|
<UButton
|
|
@@ -316,30 +317,30 @@ const conflictVerdict = computed(() => {
|
|
|
316
317
|
|
|
317
318
|
<!-- CI: failing checks -->
|
|
318
319
|
<template v-else-if="isCi">
|
|
319
|
-
<h3 class="mb-2
|
|
320
|
+
<SectionLabel as="h3" class="mb-2">
|
|
320
321
|
{{ t('gates.ci.failingChecks') }}
|
|
321
|
-
</
|
|
322
|
+
</SectionLabel>
|
|
322
323
|
<GateFailingCheckList v-if="failingChecks.length" :checks="failingChecks" />
|
|
323
|
-
<p v-else class="text-
|
|
324
|
+
<p v-else class="text-sm leading-relaxed text-toned">
|
|
324
325
|
{{ gate.lastFailureSummary || t('gates.ci.failureFallback') }}
|
|
325
326
|
</p>
|
|
326
327
|
</template>
|
|
327
328
|
|
|
328
329
|
<!-- Doc quality: the deterministic structural findings the gate raised -->
|
|
329
330
|
<template v-else-if="isDocQuality">
|
|
330
|
-
<h3 class="mb-2
|
|
331
|
+
<SectionLabel as="h3" class="mb-2">
|
|
331
332
|
{{ t('gates.docQuality.findings') }}
|
|
332
|
-
</
|
|
333
|
+
</SectionLabel>
|
|
333
334
|
<div
|
|
334
335
|
v-if="gate.lastFailureSummary"
|
|
335
336
|
class="relative rounded-md border border-default bg-app-950/40 px-3 py-2"
|
|
336
337
|
>
|
|
337
338
|
<CopyButton :text="gate.lastFailureSummary" class="absolute end-1 top-1" />
|
|
338
|
-
<p class="whitespace-pre-wrap pe-8 text-
|
|
339
|
+
<p class="whitespace-pre-wrap pe-8 text-xs leading-relaxed text-toned">
|
|
339
340
|
{{ gate.lastFailureSummary }}
|
|
340
341
|
</p>
|
|
341
342
|
</div>
|
|
342
|
-
<p v-else class="text-
|
|
343
|
+
<p v-else class="text-sm leading-relaxed text-toned">
|
|
343
344
|
{{ t('gates.docQuality.findingsFallback') }}
|
|
344
345
|
</p>
|
|
345
346
|
<a
|
|
@@ -347,7 +348,7 @@ const conflictVerdict = computed(() => {
|
|
|
347
348
|
:href="prUrl"
|
|
348
349
|
target="_blank"
|
|
349
350
|
rel="noopener"
|
|
350
|
-
class="mt-2 inline-flex items-center gap-1 text-
|
|
351
|
+
class="mt-2 inline-flex items-center gap-1 text-xs text-app-info-300 hover:text-app-info-200 hover:underline"
|
|
351
352
|
>
|
|
352
353
|
{{ t('gates.docQuality.viewPr') }}
|
|
353
354
|
<UIcon name="i-lucide-external-link" class="h-3 w-3" />
|
|
@@ -356,9 +357,9 @@ const conflictVerdict = computed(() => {
|
|
|
356
357
|
|
|
357
358
|
<!-- Conflicts: verdict + the resolver's account of what it left -->
|
|
358
359
|
<template v-else>
|
|
359
|
-
<h3 class="mb-2
|
|
360
|
+
<SectionLabel as="h3" class="mb-2">
|
|
360
361
|
{{ t('gates.conflicts.mergeability') }}
|
|
361
|
-
</
|
|
362
|
+
</SectionLabel>
|
|
362
363
|
<div
|
|
363
364
|
class="flex items-center gap-2 rounded-md border border-default bg-app-950/40 px-3 py-2"
|
|
364
365
|
>
|
|
@@ -367,7 +368,7 @@ const conflictVerdict = computed(() => {
|
|
|
367
368
|
class="h-4 w-4 shrink-0"
|
|
368
369
|
:class="STATUS_META[status].text"
|
|
369
370
|
/>
|
|
370
|
-
<span class="text-
|
|
371
|
+
<span class="text-sm text-default">{{ conflictVerdict }}</span>
|
|
371
372
|
</div>
|
|
372
373
|
<!-- GitHub's API reports mergeability as a single bit (no file list), but the
|
|
373
374
|
conflict resolver discovers the conflicting files in the container and
|
|
@@ -377,7 +378,7 @@ const conflictVerdict = computed(() => {
|
|
|
377
378
|
class="relative mt-2 rounded-md border border-default bg-app-950/40 px-3 py-2"
|
|
378
379
|
>
|
|
379
380
|
<CopyButton :text="gate.lastFailureSummary" class="absolute end-1 top-1" />
|
|
380
|
-
<p class="whitespace-pre-wrap pe-8 text-
|
|
381
|
+
<p class="whitespace-pre-wrap pe-8 text-xs leading-relaxed text-toned">
|
|
381
382
|
{{ gate.lastFailureSummary }}
|
|
382
383
|
</p>
|
|
383
384
|
</div>
|
|
@@ -386,7 +387,7 @@ const conflictVerdict = computed(() => {
|
|
|
386
387
|
:href="prUrl"
|
|
387
388
|
target="_blank"
|
|
388
389
|
rel="noopener"
|
|
389
|
-
class="mt-2 inline-flex items-center gap-1 text-
|
|
390
|
+
class="mt-2 inline-flex items-center gap-1 text-xs text-app-info-300 hover:text-app-info-200 hover:underline"
|
|
390
391
|
>
|
|
391
392
|
{{ t('gates.conflicts.viewPr') }}
|
|
392
393
|
<UIcon name="i-lucide-external-link" class="h-3 w-3" />
|
|
@@ -395,9 +396,9 @@ const conflictVerdict = computed(() => {
|
|
|
395
396
|
|
|
396
397
|
<!-- Attempt history (both gates): what each helper run did and how it ended. -->
|
|
397
398
|
<section v-if="attempts.length" class="mt-5">
|
|
398
|
-
<h3 class="mb-2
|
|
399
|
+
<SectionLabel as="h3" class="mb-2">
|
|
399
400
|
{{ t('gates.attemptsHeading', { helper: helperMeta.label }) }}
|
|
400
|
-
</
|
|
401
|
+
</SectionLabel>
|
|
401
402
|
<ol class="space-y-2">
|
|
402
403
|
<li
|
|
403
404
|
v-for="a in attempts"
|
|
@@ -418,7 +419,7 @@ const conflictVerdict = computed(() => {
|
|
|
418
419
|
v-if="a.instructions || (a.failingChecks && a.failingChecks.length)"
|
|
419
420
|
class="mt-1.5"
|
|
420
421
|
>
|
|
421
|
-
<p class="text-
|
|
422
|
+
<p class="text-2xs text-dimmed">
|
|
422
423
|
{{ t('gates.attemptInstructions', { helper: helperMeta.label }) }}
|
|
423
424
|
</p>
|
|
424
425
|
<GateFailingCheckList
|
|
@@ -429,17 +430,17 @@ const conflictVerdict = computed(() => {
|
|
|
429
430
|
/>
|
|
430
431
|
<p
|
|
431
432
|
v-else-if="a.instructions"
|
|
432
|
-
class="mt-1 whitespace-pre-wrap text-
|
|
433
|
+
class="mt-1 whitespace-pre-wrap text-xs leading-relaxed text-toned"
|
|
433
434
|
>
|
|
434
435
|
{{ a.instructions }}
|
|
435
436
|
</p>
|
|
436
437
|
</div>
|
|
437
438
|
<!-- The helper's own report of what it did / what remains. -->
|
|
438
439
|
<template v-if="a.summary">
|
|
439
|
-
<p class="mt-1.5 text-
|
|
440
|
+
<p class="mt-1.5 text-2xs text-dimmed">
|
|
440
441
|
{{ t('gates.attemptReport', { helper: helperMeta.label }) }}
|
|
441
442
|
</p>
|
|
442
|
-
<p class="mt-1 whitespace-pre-wrap text-
|
|
443
|
+
<p class="mt-1 whitespace-pre-wrap text-xs leading-relaxed text-muted">
|
|
443
444
|
{{ a.summary }}
|
|
444
445
|
</p>
|
|
445
446
|
</template>
|
|
@@ -454,10 +455,10 @@ const conflictVerdict = computed(() => {
|
|
|
454
455
|
class="hidden w-60 shrink-0 flex-col gap-4 border-s border-default bg-default/50 px-4 py-4 lg:flex"
|
|
455
456
|
>
|
|
456
457
|
<div v-if="gate">
|
|
457
|
-
<h4 class="mb-2
|
|
458
|
+
<SectionLabel as="h4" class="mb-2">
|
|
458
459
|
{{ t('gates.sidebar.state') }}
|
|
459
|
-
</
|
|
460
|
-
<div class="flex items-center gap-2 text-
|
|
460
|
+
</SectionLabel>
|
|
461
|
+
<div class="flex items-center gap-2 text-sm">
|
|
461
462
|
<UIcon
|
|
462
463
|
:name="STATUS_META[status].icon"
|
|
463
464
|
class="h-4 w-4"
|
|
@@ -468,10 +469,10 @@ const conflictVerdict = computed(() => {
|
|
|
468
469
|
</div>
|
|
469
470
|
|
|
470
471
|
<div v-if="gate">
|
|
471
|
-
<h4 class="mb-1
|
|
472
|
+
<SectionLabel as="h4" class="mb-1">
|
|
472
473
|
{{ helperMeta.label }}
|
|
473
|
-
</
|
|
474
|
-
<p class="text-
|
|
474
|
+
</SectionLabel>
|
|
475
|
+
<p class="text-xs text-toned">
|
|
475
476
|
<!-- The human-review gate's budget is effectively unbounded (it waits for a human
|
|
476
477
|
indefinitely), so render a plain round count rather than "0/9007199254740991". -->
|
|
477
478
|
<template v-if="isHumanReview">
|
|
@@ -496,10 +497,10 @@ const conflictVerdict = computed(() => {
|
|
|
496
497
|
</div>
|
|
497
498
|
|
|
498
499
|
<div v-if="shortSha">
|
|
499
|
-
<h4 class="mb-1
|
|
500
|
+
<SectionLabel as="h4" class="mb-1">
|
|
500
501
|
{{ t('gates.sidebar.gatedCommit') }}
|
|
501
|
-
</
|
|
502
|
-
<p class="font-mono text-
|
|
502
|
+
</SectionLabel>
|
|
503
|
+
<p class="font-mono text-xs text-toned">{{ shortSha }}</p>
|
|
503
504
|
</div>
|
|
504
505
|
|
|
505
506
|
<!-- Shared run metadata + embedded observability (model, run id, timing,
|
|
@@ -514,7 +515,7 @@ const conflictVerdict = computed(() => {
|
|
|
514
515
|
:failure-at="instance?.failure?.occurredAt"
|
|
515
516
|
/>
|
|
516
517
|
|
|
517
|
-
<p class="mt-auto text-
|
|
518
|
+
<p class="mt-auto text-3xs leading-relaxed text-app-600">
|
|
518
519
|
{{ t('gates.sidebar.footer', { helper: helperMeta.label }) }}
|
|
519
520
|
</p>
|
|
520
521
|
</aside>
|
|
@@ -27,6 +27,7 @@ import VcsConnectSurfaces from '~/components/vcs/VcsConnectSurfaces.vue'
|
|
|
27
27
|
import ServiceTestConfig from '~/components/panels/inspector/ServiceTestConfig.vue'
|
|
28
28
|
import ServiceFragments from '~/components/panels/inspector/ServiceFragments.vue'
|
|
29
29
|
import { appInstallationManageUrl, VCS_PROVIDER_LABELS } from '~/utils/vcs'
|
|
30
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
30
31
|
|
|
31
32
|
const { t } = useI18n()
|
|
32
33
|
|
|
@@ -548,14 +549,14 @@ function done() {
|
|
|
548
549
|
<!-- the selection cart + the add action sit right beside the tree, so the
|
|
549
550
|
picked services and the button that adds them are never scrolled apart -->
|
|
550
551
|
<div class="space-y-2 rounded-md border border-default bg-app-950/40 p-2.5">
|
|
551
|
-
<
|
|
552
|
+
<SectionLabel as="p">
|
|
552
553
|
{{ t('github.addService.selectedServices') }}
|
|
553
|
-
</
|
|
554
|
+
</SectionLabel>
|
|
554
555
|
<div v-if="selectedDirectories.length" class="flex flex-wrap gap-1.5">
|
|
555
556
|
<span
|
|
556
557
|
v-for="dir in selectedDirectories"
|
|
557
558
|
:key="dir"
|
|
558
|
-
class="inline-flex items-center gap-1 rounded bg-elevated px-2 py-0.5 text-xs text-default"
|
|
559
|
+
class="inline-flex items-center gap-1 rounded-sm bg-elevated px-2 py-0.5 text-xs text-default"
|
|
559
560
|
>
|
|
560
561
|
<code class="text-default">{{ dir }}</code>
|
|
561
562
|
<button
|
|
@@ -620,7 +621,7 @@ function done() {
|
|
|
620
621
|
class="space-y-4 rounded-md border border-app-success-900/50 bg-app-success-950/20 p-3"
|
|
621
622
|
>
|
|
622
623
|
<div
|
|
623
|
-
class="flex items-center gap-1.5 text-
|
|
624
|
+
class="flex items-center gap-1.5 text-2xs font-semibold uppercase tracking-wide text-app-success-400"
|
|
624
625
|
>
|
|
625
626
|
<UIcon name="i-lucide-check" class="h-3.5 w-3.5" />
|
|
626
627
|
{{ t('github.addService.addedConfigure', { title: configuredBlock.title }) }}
|
|
@@ -116,7 +116,7 @@ async function check() {
|
|
|
116
116
|
<template>
|
|
117
117
|
<section class="space-y-2" data-testid="branch-protection-preflight">
|
|
118
118
|
<h3 class="text-sm font-semibold text-default">{{ t('vcs.branchProtection.heading') }}</h3>
|
|
119
|
-
<p class="text-
|
|
119
|
+
<p class="text-2xs text-muted">{{ t('vcs.branchProtection.body') }}</p>
|
|
120
120
|
|
|
121
121
|
<UButton
|
|
122
122
|
color="neutral"
|
|
@@ -146,7 +146,7 @@ async function check() {
|
|
|
146
146
|
>
|
|
147
147
|
{{ t('errors.generic.showDetail') }}
|
|
148
148
|
</UButton>
|
|
149
|
-
<p v-if="showFailureDetail" class="font-mono text-
|
|
149
|
+
<p v-if="showFailureDetail" class="font-mono text-3xs break-all text-dimmed">
|
|
150
150
|
{{ failure.detail }}
|
|
151
151
|
</p>
|
|
152
152
|
</div>
|
|
@@ -182,11 +182,11 @@ async function check() {
|
|
|
182
182
|
>
|
|
183
183
|
<div class="flex items-baseline justify-between gap-2">
|
|
184
184
|
<span class="font-mono text-xs text-toned">{{ row.owner }}/{{ row.name }}</span>
|
|
185
|
-
<span class="text-
|
|
185
|
+
<span class="text-2xs" :class="STATE_STYLE[row.protection.state]">
|
|
186
186
|
{{ STATE_LABEL[row.protection.state]() }}
|
|
187
187
|
</span>
|
|
188
188
|
</div>
|
|
189
|
-
<p class="text-
|
|
189
|
+
<p class="text-3xs text-dimmed">
|
|
190
190
|
{{ row.defaultBranch }}<span v-if="detailLine(row)"> — {{ detailLine(row) }}</span>
|
|
191
191
|
</p>
|
|
192
192
|
</li>
|
|
@@ -194,7 +194,7 @@ async function check() {
|
|
|
194
194
|
|
|
195
195
|
<!-- A cap that truncated silently would read as "these are all your repositories", which
|
|
196
196
|
on a security report is the same failure as calling an unprobed repo protected. -->
|
|
197
|
-
<p v-if="report.omittedRepos > 0" class="text-
|
|
197
|
+
<p v-if="report.omittedRepos > 0" class="text-2xs text-app-warning-300">
|
|
198
198
|
{{ t('vcs.branchProtection.omitted', { count: report.omittedRepos }, report.omittedRepos) }}
|
|
199
199
|
</p>
|
|
200
200
|
</template>
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
// successful connect the github store flips `connected`, which the host surfaces
|
|
7
7
|
// react to. Shared by the GitHub panel and the bootstrap modal so the connect
|
|
8
8
|
// flow lives in one place.
|
|
9
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
10
|
+
|
|
9
11
|
const { t } = useI18n()
|
|
10
12
|
const github = useGitHubStore()
|
|
11
13
|
const toast = useToast()
|
|
@@ -73,9 +75,9 @@ async function connectManually() {
|
|
|
73
75
|
<!-- discovered installations: pick one the App is already on -->
|
|
74
76
|
<section class="space-y-2">
|
|
75
77
|
<div class="flex items-center justify-between">
|
|
76
|
-
<
|
|
78
|
+
<SectionLabel as="span">
|
|
77
79
|
{{ t('github.connect.yourInstallations') }}
|
|
78
|
-
</
|
|
80
|
+
</SectionLabel>
|
|
79
81
|
<UButton
|
|
80
82
|
size="xs"
|
|
81
83
|
color="neutral"
|
|
@@ -118,7 +120,7 @@ async function connectManually() {
|
|
|
118
120
|
<UIcon v-else name="i-lucide-github" class="h-4 w-4 text-muted" />
|
|
119
121
|
<div class="min-w-0">
|
|
120
122
|
<div class="truncate text-sm text-default">{{ inst.accountLogin }}</div>
|
|
121
|
-
<div class="text-
|
|
123
|
+
<div class="text-2xs text-dimmed">
|
|
122
124
|
{{
|
|
123
125
|
t('github.connect.installationMeta', {
|
|
124
126
|
targetType: inst.targetType,
|
|
@@ -11,6 +11,7 @@ import BranchProtectionPreflight from './BranchProtectionPreflight.vue'
|
|
|
11
11
|
import VcsConnectSurfaces from '~/components/vcs/VcsConnectSurfaces.vue'
|
|
12
12
|
import IntegrationBackTitle from '~/components/layout/IntegrationBackTitle.vue'
|
|
13
13
|
import { VCS_PROVIDER_ICONS, VCS_PROVIDER_LABELS } from '~/utils/vcs'
|
|
14
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
14
15
|
|
|
15
16
|
const { t } = useI18n()
|
|
16
17
|
const ui = useUiStore()
|
|
@@ -317,7 +318,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
317
318
|
<div class="truncate text-sm text-default">
|
|
318
319
|
{{ github.connection?.accountLogin }}
|
|
319
320
|
</div>
|
|
320
|
-
<div class="text-
|
|
321
|
+
<div class="text-2xs text-dimmed">{{ connectionMeta }}</div>
|
|
321
322
|
</div>
|
|
322
323
|
</div>
|
|
323
324
|
<div class="flex items-center gap-1">
|
|
@@ -380,9 +381,9 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
380
381
|
<section v-else-if="tab === 'repos'" class="space-y-2">
|
|
381
382
|
<!-- manage which repos this board links -->
|
|
382
383
|
<div class="flex items-center justify-between">
|
|
383
|
-
<
|
|
384
|
+
<SectionLabel as="span">
|
|
384
385
|
{{ t('github.panel.linkedToBoard') }}
|
|
385
|
-
</
|
|
386
|
+
</SectionLabel>
|
|
386
387
|
<UButton
|
|
387
388
|
size="xs"
|
|
388
389
|
color="neutral"
|
|
@@ -399,7 +400,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
399
400
|
</div>
|
|
400
401
|
|
|
401
402
|
<div v-if="managing" class="space-y-2 rounded-md border border-muted bg-default/80 p-3">
|
|
402
|
-
<p class="text-
|
|
403
|
+
<p class="text-xs text-muted">
|
|
403
404
|
{{
|
|
404
405
|
isAppConnection ? t('vcs.panel.manageHintApp') : t('vcs.panel.manageHintToken')
|
|
405
406
|
}}
|
|
@@ -423,7 +424,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
423
424
|
v-for="r in github.availableRepos"
|
|
424
425
|
:key="r.githubId"
|
|
425
426
|
type="button"
|
|
426
|
-
class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-start transition hover:bg-elevated/60"
|
|
427
|
+
class="flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-start transition hover:bg-elevated/60"
|
|
427
428
|
@click="toggleSelected(r.githubId)"
|
|
428
429
|
>
|
|
429
430
|
<UIcon
|
|
@@ -503,13 +504,13 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
503
504
|
</UBadge>
|
|
504
505
|
</button>
|
|
505
506
|
<div class="flex items-center gap-2">
|
|
506
|
-
<span v-if="repo.defaultBranch" class="text-
|
|
507
|
+
<span v-if="repo.defaultBranch" class="text-2xs text-dimmed">
|
|
507
508
|
{{ repo.defaultBranch }}
|
|
508
509
|
</span>
|
|
509
510
|
<ULink
|
|
510
511
|
:to="github.repoUrl(repo.githubId) ?? '#'"
|
|
511
512
|
target="_blank"
|
|
512
|
-
class="text-
|
|
513
|
+
class="text-2xs text-primary hover:underline"
|
|
513
514
|
>
|
|
514
515
|
{{ t('github.panel.open') }}
|
|
515
516
|
</ULink>
|
|
@@ -523,7 +524,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
523
524
|
<div
|
|
524
525
|
v-for="b in github.branches[repo.githubId] ?? []"
|
|
525
526
|
:key="b.name"
|
|
526
|
-
class="flex items-center justify-between gap-2 text-
|
|
527
|
+
class="flex items-center justify-between gap-2 text-xs"
|
|
527
528
|
>
|
|
528
529
|
<span class="flex items-center gap-1.5 truncate text-toned">
|
|
529
530
|
<UIcon name="i-lucide-git-branch" class="h-3.5 w-3.5 text-dimmed" />
|
|
@@ -532,7 +533,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
532
533
|
{{ t('github.panel.protected') }}
|
|
533
534
|
</UBadge>
|
|
534
535
|
</span>
|
|
535
|
-
<code class="text-
|
|
536
|
+
<code class="text-3xs text-dimmed">{{ b.headSha.slice(0, 7) }}</code>
|
|
536
537
|
</div>
|
|
537
538
|
|
|
538
539
|
<!-- new branch -->
|
|
@@ -644,7 +645,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
644
645
|
<div class="truncate text-sm text-default">
|
|
645
646
|
<span class="text-dimmed">#{{ pr.number }}</span> {{ pr.title }}
|
|
646
647
|
</div>
|
|
647
|
-
<div class="truncate text-
|
|
648
|
+
<div class="truncate text-2xs text-dimmed">
|
|
648
649
|
{{ github.repoFor(pr.repoGithubId)?.name }} · {{ pr.headRef }} → {{ pr.baseRef }}
|
|
649
650
|
</div>
|
|
650
651
|
</div>
|
|
@@ -669,7 +670,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
669
670
|
<ULink
|
|
670
671
|
:to="github.pullUrl(pr) ?? '#'"
|
|
671
672
|
target="_blank"
|
|
672
|
-
class="text-
|
|
673
|
+
class="text-2xs text-primary hover:underline"
|
|
673
674
|
>
|
|
674
675
|
{{ t('github.panel.open') }}
|
|
675
676
|
</ULink>
|
|
@@ -691,7 +692,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
691
692
|
<div class="truncate text-sm text-default">
|
|
692
693
|
<span class="text-dimmed">#{{ issue.number }}</span> {{ issue.title }}
|
|
693
694
|
</div>
|
|
694
|
-
<div class="truncate text-
|
|
695
|
+
<div class="truncate text-2xs text-dimmed">
|
|
695
696
|
{{ github.repoFor(issue.repoGithubId)?.name }}
|
|
696
697
|
<span v-if="issue.labels.length">· {{ issue.labels.join(', ') }}</span>
|
|
697
698
|
</div>
|
|
@@ -707,7 +708,7 @@ async function merge(pr: GitHubPullRequest) {
|
|
|
707
708
|
<ULink
|
|
708
709
|
:to="github.issueUrl(issue) ?? '#'"
|
|
709
710
|
target="_blank"
|
|
710
|
-
class="text-
|
|
711
|
+
class="text-2xs text-primary hover:underline"
|
|
711
712
|
>
|
|
712
713
|
{{ t('github.panel.open') }}
|
|
713
714
|
</ULink>
|
|
@@ -193,7 +193,7 @@ watch(
|
|
|
193
193
|
</div>
|
|
194
194
|
|
|
195
195
|
<!-- listing -->
|
|
196
|
-
<div class="max-h-56 overflow-auto rounded border border-default">
|
|
196
|
+
<div class="max-h-56 overflow-auto rounded-sm border border-default">
|
|
197
197
|
<div v-if="loading" class="p-3 text-sm text-muted">
|
|
198
198
|
{{ t('github.repoTree.loading') }}
|
|
199
199
|
</div>
|