2026-02-16 13:32:04 -06:00
|
|
|
|
@import "tailwindcss";
|
UI: approval detail page, agent hiring UX, costs breakdown, sidebar badges, and dashboard improvements
Add ApprovalDetail page with comment thread, revision request/resubmit flow,
and ApprovalPayload component for structured payload display. Extend AgentDetail
with permissions management, config revision history, and duplicate action.
Add agent hire dialog with permission-gated access. Rework Costs page with
per-agent breakdown table and period filtering. Add sidebar badge counts for
pending approvals and inbox items. Enhance Dashboard with live metrics and
sparkline trends. Extend Agents list with pending_approval status and bulk
actions. Update IssueDetail with approval linking. Various component improvements
to MetricCard, InlineEditor, CommentThread, and StatusBadge.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 13:03:08 -06:00
|
|
|
|
@plugin "@tailwindcss/typography";
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
|
|
|
|
|
|
@custom-variant dark (&:is(.dark *));
|
|
|
|
|
|
|
|
|
|
|
|
@theme inline {
|
|
|
|
|
|
--color-background: var(--background);
|
|
|
|
|
|
--color-foreground: var(--foreground);
|
|
|
|
|
|
--color-card: var(--card);
|
|
|
|
|
|
--color-card-foreground: var(--card-foreground);
|
|
|
|
|
|
--color-popover: var(--popover);
|
|
|
|
|
|
--color-popover-foreground: var(--popover-foreground);
|
|
|
|
|
|
--color-primary: var(--primary);
|
|
|
|
|
|
--color-primary-foreground: var(--primary-foreground);
|
|
|
|
|
|
--color-secondary: var(--secondary);
|
|
|
|
|
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
|
|
|
|
--color-muted: var(--muted);
|
|
|
|
|
|
--color-muted-foreground: var(--muted-foreground);
|
|
|
|
|
|
--color-accent: var(--accent);
|
|
|
|
|
|
--color-accent-foreground: var(--accent-foreground);
|
|
|
|
|
|
--color-destructive: var(--destructive);
|
|
|
|
|
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
|
|
|
|
--color-border: var(--border);
|
|
|
|
|
|
--color-input: var(--input);
|
|
|
|
|
|
--color-ring: var(--ring);
|
|
|
|
|
|
--color-chart-1: var(--chart-1);
|
|
|
|
|
|
--color-chart-2: var(--chart-2);
|
|
|
|
|
|
--color-chart-3: var(--chart-3);
|
|
|
|
|
|
--color-chart-4: var(--chart-4);
|
|
|
|
|
|
--color-chart-5: var(--chart-5);
|
|
|
|
|
|
--color-sidebar: var(--sidebar);
|
|
|
|
|
|
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
|
|
|
|
--color-sidebar-primary: var(--sidebar-primary);
|
|
|
|
|
|
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
|
|
|
|
--color-sidebar-accent: var(--sidebar-accent);
|
|
|
|
|
|
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
|
|
|
|
--color-sidebar-border: var(--sidebar-border);
|
|
|
|
|
|
--color-sidebar-ring: var(--sidebar-ring);
|
2026-02-26 16:30:12 -06:00
|
|
|
|
--radius-sm: 0.375rem;
|
|
|
|
|
|
--radius-md: 0.5rem;
|
2026-02-26 16:24:26 -06:00
|
|
|
|
--radius-lg: 0px;
|
|
|
|
|
|
--radius-xl: 0px;
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
:root {
|
2026-02-26 16:24:26 -06:00
|
|
|
|
color-scheme: light;
|
|
|
|
|
|
--radius: 0;
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
--background: oklch(1 0 0);
|
|
|
|
|
|
--foreground: oklch(0.145 0 0);
|
|
|
|
|
|
--card: oklch(1 0 0);
|
|
|
|
|
|
--card-foreground: oklch(0.145 0 0);
|
|
|
|
|
|
--popover: oklch(1 0 0);
|
|
|
|
|
|
--popover-foreground: oklch(0.145 0 0);
|
|
|
|
|
|
--primary: oklch(0.205 0 0);
|
|
|
|
|
|
--primary-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--secondary: oklch(0.97 0 0);
|
|
|
|
|
|
--secondary-foreground: oklch(0.205 0 0);
|
|
|
|
|
|
--muted: oklch(0.97 0 0);
|
|
|
|
|
|
--muted-foreground: oklch(0.556 0 0);
|
|
|
|
|
|
--accent: oklch(0.97 0 0);
|
|
|
|
|
|
--accent-foreground: oklch(0.205 0 0);
|
|
|
|
|
|
--destructive: oklch(0.577 0.245 27.325);
|
|
|
|
|
|
--destructive-foreground: oklch(0.577 0.245 27.325);
|
|
|
|
|
|
--border: oklch(0.922 0 0);
|
|
|
|
|
|
--input: oklch(0.922 0 0);
|
|
|
|
|
|
--ring: oklch(0.708 0 0);
|
|
|
|
|
|
--chart-1: oklch(0.646 0.222 41.116);
|
|
|
|
|
|
--chart-2: oklch(0.6 0.118 184.704);
|
|
|
|
|
|
--chart-3: oklch(0.398 0.07 227.392);
|
|
|
|
|
|
--chart-4: oklch(0.828 0.189 84.429);
|
|
|
|
|
|
--chart-5: oklch(0.769 0.188 70.08);
|
|
|
|
|
|
--sidebar: oklch(0.985 0 0);
|
|
|
|
|
|
--sidebar-foreground: oklch(0.145 0 0);
|
|
|
|
|
|
--sidebar-primary: oklch(0.205 0 0);
|
|
|
|
|
|
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--sidebar-accent: oklch(0.97 0 0);
|
|
|
|
|
|
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
|
|
|
|
--sidebar-border: oklch(0.922 0 0);
|
|
|
|
|
|
--sidebar-ring: oklch(0.708 0 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark {
|
|
|
|
|
|
--background: oklch(0.145 0 0);
|
|
|
|
|
|
--foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--card: oklch(0.205 0 0);
|
|
|
|
|
|
--card-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--popover: oklch(0.205 0 0);
|
|
|
|
|
|
--popover-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--primary: oklch(0.985 0 0);
|
|
|
|
|
|
--primary-foreground: oklch(0.205 0 0);
|
|
|
|
|
|
--secondary: oklch(0.269 0 0);
|
|
|
|
|
|
--secondary-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--muted: oklch(0.269 0 0);
|
|
|
|
|
|
--muted-foreground: oklch(0.708 0 0);
|
|
|
|
|
|
--accent: oklch(0.269 0 0);
|
|
|
|
|
|
--accent-foreground: oklch(0.985 0 0);
|
2026-03-06 13:53:08 -06:00
|
|
|
|
--destructive: oklch(0.637 0.237 25.331);
|
|
|
|
|
|
--destructive-foreground: oklch(0.985 0 0);
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
--border: oklch(0.269 0 0);
|
|
|
|
|
|
--input: oklch(0.269 0 0);
|
|
|
|
|
|
--ring: oklch(0.439 0 0);
|
|
|
|
|
|
--chart-1: oklch(0.488 0.243 264.376);
|
|
|
|
|
|
--chart-2: oklch(0.696 0.17 162.48);
|
|
|
|
|
|
--chart-3: oklch(0.769 0.188 70.08);
|
|
|
|
|
|
--chart-4: oklch(0.627 0.265 303.9);
|
|
|
|
|
|
--chart-5: oklch(0.645 0.246 16.439);
|
Polish UI components and rework AgentConfigForm
Major AgentConfigForm rework with improved adapter configuration
fields and layout. Refine sidebar, breadcrumbs, and card/tab
components for visual consistency. Clean up page layouts across
Activity, Agents, Approvals, Costs, Dashboard, Goals, Inbox,
Issues, Org, and Projects pages. Minor heartbeat-run CLI fix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 10:43:25 -06:00
|
|
|
|
--sidebar: oklch(0.145 0 0);
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
--sidebar-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
|
|
|
|
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--sidebar-accent: oklch(0.269 0 0);
|
|
|
|
|
|
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
|
|
|
|
--sidebar-border: oklch(0.269 0 0);
|
|
|
|
|
|
--sidebar-ring: oklch(0.439 0 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@layer base {
|
|
|
|
|
|
* {
|
|
|
|
|
|
@apply border-border;
|
|
|
|
|
|
}
|
2026-02-25 21:36:06 -06:00
|
|
|
|
html {
|
|
|
|
|
|
height: 100%;
|
2026-03-02 16:44:03 -06:00
|
|
|
|
-webkit-tap-highlight-color: color-mix(in oklab, var(--foreground) 20%, transparent);
|
2026-02-25 21:36:06 -06:00
|
|
|
|
}
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
body {
|
ui: apply interface polish from design article review
- Add global font smoothing (antialiased) to body
- Add tabular-nums to all numeric displays: MetricCard values, Costs page,
AgentDetail token/cost grids and tables, IssueDetail cost summary,
Companies page budget display
- Replace markdown image hard border with subtle inset box-shadow overlay
- Replace all animate-ping status dots with calmer animate-pulse across
AgentDetail, IssueDetail, Agents, sidebar, kanban, issues list, and
active agents panel
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:20:24 -05:00
|
|
|
|
@apply bg-background text-foreground antialiased;
|
2026-02-25 21:36:06 -06:00
|
|
|
|
height: 100%;
|
|
|
|
|
|
overflow: hidden;
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
}
|
2026-03-02 16:44:03 -06:00
|
|
|
|
h1,
|
|
|
|
|
|
h2,
|
|
|
|
|
|
h3 {
|
|
|
|
|
|
text-wrap: balance;
|
|
|
|
|
|
}
|
2026-02-23 16:51:17 -06:00
|
|
|
|
/* Prevent double-tap-to-zoom on interactive elements for mobile */
|
|
|
|
|
|
a,
|
|
|
|
|
|
button,
|
|
|
|
|
|
[role="button"],
|
|
|
|
|
|
input,
|
|
|
|
|
|
select,
|
|
|
|
|
|
textarea,
|
|
|
|
|
|
label {
|
|
|
|
|
|
touch-action: manipulation;
|
|
|
|
|
|
}
|
2026-04-02 23:47:00 -07:00
|
|
|
|
/* Let font-mono (utilities layer) override for monospace editors */
|
|
|
|
|
|
.paperclip-mdxeditor [class*="_placeholder_"],
|
|
|
|
|
|
.paperclip-mdxeditor-content {
|
|
|
|
|
|
font-family: inherit;
|
|
|
|
|
|
}
|
Overhaul UI with shadcn components and new pages
Add shadcn/ui components (badge, button, card, input, select,
separator). Add company context provider. New pages: Activity,
Approvals, Companies, Costs, Org chart. Restyle existing pages
(Dashboard, Agents, Issues, Goals, Projects) with shadcn components
and dark theme. Update layout, sidebar navigation, and routing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:07:32 -06:00
|
|
|
|
}
|
2026-02-17 10:53:20 -06:00
|
|
|
|
|
2026-03-02 16:44:03 -06:00
|
|
|
|
@media (pointer: coarse) {
|
|
|
|
|
|
button,
|
|
|
|
|
|
[role="button"],
|
|
|
|
|
|
input,
|
|
|
|
|
|
select,
|
|
|
|
|
|
textarea,
|
|
|
|
|
|
[data-slot="select-trigger"] {
|
|
|
|
|
|
min-height: 44px;
|
|
|
|
|
|
}
|
2026-03-22 06:35:32 -05:00
|
|
|
|
|
|
|
|
|
|
[data-slot="toggle"] {
|
|
|
|
|
|
min-height: 0;
|
|
|
|
|
|
}
|
2026-03-02 16:44:03 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-17 21:12:31 -06:00
|
|
|
|
/* Dark mode scrollbars */
|
|
|
|
|
|
.dark {
|
|
|
|
|
|
color-scheme: dark;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark *::-webkit-scrollbar {
|
|
|
|
|
|
width: 8px;
|
|
|
|
|
|
height: 8px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark *::-webkit-scrollbar-track {
|
|
|
|
|
|
background: oklch(0.205 0 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark *::-webkit-scrollbar-thumb {
|
|
|
|
|
|
background: oklch(0.4 0 0);
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark *::-webkit-scrollbar-thumb:hover {
|
|
|
|
|
|
background: oklch(0.5 0 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-18 14:40:50 -05:00
|
|
|
|
/* Auto-hide scrollbar: always reserves space, thumb visible only on hover */
|
2026-03-18 12:57:26 -05:00
|
|
|
|
.scrollbar-auto-hide::-webkit-scrollbar {
|
2026-03-18 14:40:50 -05:00
|
|
|
|
width: 8px !important;
|
2026-03-18 12:57:26 -05:00
|
|
|
|
background: transparent !important;
|
|
|
|
|
|
}
|
2026-03-14 13:47:55 -05:00
|
|
|
|
.scrollbar-auto-hide::-webkit-scrollbar-track {
|
|
|
|
|
|
background: transparent !important;
|
|
|
|
|
|
}
|
2026-03-06 07:39:35 -06:00
|
|
|
|
.scrollbar-auto-hide::-webkit-scrollbar-thumb {
|
|
|
|
|
|
background: transparent !important;
|
2026-03-18 12:57:26 -05:00
|
|
|
|
}
|
2026-04-02 11:45:15 -05:00
|
|
|
|
/* Light mode scrollbar on hover */
|
2026-03-14 13:47:55 -05:00
|
|
|
|
.scrollbar-auto-hide:hover::-webkit-scrollbar-track {
|
2026-04-02 11:45:15 -05:00
|
|
|
|
background: oklch(0.92 0 0) !important;
|
2026-03-14 13:47:55 -05:00
|
|
|
|
}
|
2026-03-06 07:39:35 -06:00
|
|
|
|
.scrollbar-auto-hide:hover::-webkit-scrollbar-thumb {
|
2026-04-02 11:45:15 -05:00
|
|
|
|
background: oklch(0.7 0 0) !important;
|
2026-03-06 07:39:35 -06:00
|
|
|
|
}
|
|
|
|
|
|
.scrollbar-auto-hide:hover::-webkit-scrollbar-thumb:hover {
|
2026-04-02 11:45:15 -05:00
|
|
|
|
background: oklch(0.6 0 0) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
/* Dark mode scrollbar on hover */
|
|
|
|
|
|
.dark .scrollbar-auto-hide:hover::-webkit-scrollbar-track {
|
|
|
|
|
|
background: oklch(0.205 0 0) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
.dark .scrollbar-auto-hide:hover::-webkit-scrollbar-thumb {
|
|
|
|
|
|
background: oklch(0.4 0 0) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
.dark .scrollbar-auto-hide:hover::-webkit-scrollbar-thumb:hover {
|
2026-03-06 07:39:35 -06:00
|
|
|
|
background: oklch(0.5 0 0) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-17 10:53:20 -06:00
|
|
|
|
/* Expandable dialog transition for max-width changes */
|
|
|
|
|
|
[data-slot="dialog-content"] {
|
|
|
|
|
|
transition: max-width 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
|
|
|
|
}
|
UI: approval detail page, agent hiring UX, costs breakdown, sidebar badges, and dashboard improvements
Add ApprovalDetail page with comment thread, revision request/resubmit flow,
and ApprovalPayload component for structured payload display. Extend AgentDetail
with permissions management, config revision history, and duplicate action.
Add agent hire dialog with permission-gated access. Rework Costs page with
per-agent breakdown table and period filtering. Add sidebar badge counts for
pending approvals and inbox items. Enhance Dashboard with live metrics and
sparkline trends. Extend Agents list with pending_approval status and bulk
actions. Update IssueDetail with approval linking. Various component improvements
to MetricCard, InlineEditor, CommentThread, and StatusBadge.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 13:03:08 -06:00
|
|
|
|
|
|
|
|
|
|
/* Dashboard activity row entry motion */
|
|
|
|
|
|
@keyframes dashboard-activity-enter {
|
|
|
|
|
|
0% {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transform: translateY(-14px) scale(0.985);
|
|
|
|
|
|
filter: blur(4px);
|
|
|
|
|
|
}
|
|
|
|
|
|
62% {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: translateY(2px) scale(1.002);
|
|
|
|
|
|
filter: blur(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
100% {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: translateY(0) scale(1);
|
|
|
|
|
|
filter: blur(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@keyframes dashboard-activity-highlight {
|
|
|
|
|
|
0% {
|
|
|
|
|
|
box-shadow: inset 2px 0 0 var(--primary);
|
|
|
|
|
|
background-color: color-mix(in oklab, var(--accent) 55%, transparent);
|
|
|
|
|
|
}
|
|
|
|
|
|
100% {
|
|
|
|
|
|
box-shadow: inset 0 0 0 transparent;
|
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.activity-row-enter {
|
|
|
|
|
|
animation:
|
|
|
|
|
|
dashboard-activity-enter 520ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
|
|
|
|
dashboard-activity-highlight 920ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
|
|
|
|
.activity-row-enter {
|
|
|
|
|
|
animation: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
|
2026-04-07 17:02:48 -05:00
|
|
|
|
/* Chain-of-thought reasoning line ticker animations.
|
|
|
|
|
|
Pure translate, no opacity — the overflow-hidden container clips.
|
|
|
|
|
|
Both keyframes share the same easing so the two spans move in lockstep. */
|
|
|
|
|
|
@keyframes cot-line-slide-in {
|
|
|
|
|
|
from { transform: translateY(100%); }
|
|
|
|
|
|
to { transform: translateY(0); }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@keyframes cot-line-slide-out {
|
|
|
|
|
|
from { transform: translateY(0); }
|
|
|
|
|
|
to { transform: translateY(-100%); }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cot-line-enter {
|
|
|
|
|
|
animation: cot-line-slide-in 300ms cubic-bezier(0.4, 0, 0.2, 1) both;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cot-line-exit {
|
|
|
|
|
|
animation: cot-line-slide-out 300ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
|
|
|
|
.cot-line-enter,
|
|
|
|
|
|
.cot-line-exit {
|
|
|
|
|
|
animation: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-08 06:42:25 -05:00
|
|
|
|
/* Shimmer text effect for active "Working" state — Cursor-style sweep */
|
2026-04-07 17:02:48 -05:00
|
|
|
|
@keyframes shimmer-text-slide {
|
2026-04-08 07:24:19 -05:00
|
|
|
|
0% { background-position: 100% center; }
|
2026-04-08 07:33:27 -05:00
|
|
|
|
60% { background-position: 0% center; }
|
2026-04-08 07:24:19 -05:00
|
|
|
|
100% { background-position: 0% center; }
|
2026-04-07 17:02:48 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.shimmer-text {
|
2026-04-08 07:03:12 -05:00
|
|
|
|
--shimmer-base: var(--foreground);
|
|
|
|
|
|
--shimmer-highlight: color-mix(in oklch, var(--foreground) 35%, transparent);
|
2026-04-07 17:02:48 -05:00
|
|
|
|
background: linear-gradient(
|
2026-04-08 06:42:25 -05:00
|
|
|
|
90deg,
|
|
|
|
|
|
var(--shimmer-base) 0%,
|
|
|
|
|
|
var(--shimmer-base) 40%,
|
2026-04-07 17:02:48 -05:00
|
|
|
|
var(--shimmer-highlight) 50%,
|
2026-04-08 06:42:25 -05:00
|
|
|
|
var(--shimmer-base) 60%,
|
|
|
|
|
|
var(--shimmer-base) 100%
|
2026-04-07 17:02:48 -05:00
|
|
|
|
);
|
2026-04-08 06:42:25 -05:00
|
|
|
|
background-size: 200% 100%;
|
2026-04-07 17:02:48 -05:00
|
|
|
|
-webkit-background-clip: text;
|
|
|
|
|
|
background-clip: text;
|
|
|
|
|
|
-webkit-text-fill-color: transparent;
|
2026-04-08 07:33:27 -05:00
|
|
|
|
animation: shimmer-text-slide 2.5s linear infinite;
|
2026-04-07 17:02:48 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
|
|
|
|
.shimmer-text {
|
|
|
|
|
|
animation: none;
|
|
|
|
|
|
-webkit-text-fill-color: unset;
|
|
|
|
|
|
background: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
/* MDXEditor theme integration */
|
|
|
|
|
|
.paperclip-mdxeditor-scope,
|
|
|
|
|
|
.paperclip-mdxeditor {
|
|
|
|
|
|
--baseBase: var(--background);
|
|
|
|
|
|
--baseBg: transparent;
|
|
|
|
|
|
--baseBgSubtle: color-mix(in oklab, var(--accent) 35%, transparent);
|
|
|
|
|
|
--baseLine: var(--border);
|
|
|
|
|
|
--baseSolid: var(--muted-foreground);
|
|
|
|
|
|
--baseSolidHover: var(--foreground);
|
|
|
|
|
|
--baseText: var(--muted-foreground);
|
|
|
|
|
|
--baseBorderColor: var(--border);
|
|
|
|
|
|
--baseBorder: var(--border);
|
|
|
|
|
|
--baseBorderHover: var(--ring);
|
|
|
|
|
|
--baseTextContrast: var(--foreground);
|
|
|
|
|
|
--baseTextContrastMuted: var(--muted-foreground);
|
|
|
|
|
|
--baseTextEmphasis: var(--foreground);
|
|
|
|
|
|
--basePageBg: var(--background);
|
|
|
|
|
|
--baseRadius: var(--radius);
|
|
|
|
|
|
--baseLineHeight: 1.5;
|
|
|
|
|
|
--accentBorder: color-mix(in oklab, var(--primary) 35%, var(--border));
|
|
|
|
|
|
--accentSolid: var(--primary);
|
|
|
|
|
|
--accentSolidHover: var(--primary);
|
|
|
|
|
|
--accentLine: color-mix(in oklab, var(--primary) 20%, transparent);
|
|
|
|
|
|
--accentBg: var(--accent);
|
|
|
|
|
|
--accentBgHover: color-mix(in oklab, var(--accent) 80%, var(--background));
|
|
|
|
|
|
--accentBgActive: color-mix(in oklab, var(--accent) 72%, var(--background));
|
|
|
|
|
|
--accentText: var(--accent-foreground);
|
|
|
|
|
|
font-family: inherit;
|
[codex] Polish issue and operator workflow UI (#4090)
## Thinking Path
> - Paperclip operators spend much of their time in issues, inboxes,
selectors, and rich comment threads.
> - Small interaction problems in those surfaces slow down supervision
of AI-agent work.
> - The branch included related operator quality-of-life fixes for issue
layout, inbox actions, recent selectors, mobile inputs, and chat
rendering stability.
> - These changes are UI-focused and can land independently from
workspace navigation and access-profile work.
> - This pull request groups the operator QoL fixes into one standalone
branch.
> - The benefit is a more stable and efficient board workflow for issue
triage and task editing.
## What Changed
- Widened issue detail content and added a desktop inbox archive action.
- Fixed mobile text-field zoom by keeping touch input font sizes at
16px.
- Prioritized recent picker selections for assignees/projects in issue
and routine flows.
- Showed actionable approvals in the Mine inbox model.
- Fixed issue chat renderer state crashes and hardened tests.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/lib/inbox.test.ts ui/src/lib/recent-selections.test.ts`
- Split integration check: merged last after the other
[PAP-1614](/PAP/issues/PAP-1614) branches with no merge conflicts.
- Confirmed this branch does not include `pnpm-lock.yaml`.
## Risks
- Low to medium risk: mostly UI state, layout, and selection-priority
behavior.
- Visual layout and mobile zoom behavior may need browser/device QA
beyond component tests.
- No database migrations are included.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5.4 tool-enabled coding model, agentic
code-editing/runtime with local shell and GitHub CLI access; exact
context window and reasoning mode are not exposed by the Paperclip
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-20 06:16:41 -05:00
|
|
|
|
font-size: 1rem;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
line-height: 1.5;
|
|
|
|
|
|
color: var(--foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
[codex] Polish issue and operator workflow UI (#4090)
## Thinking Path
> - Paperclip operators spend much of their time in issues, inboxes,
selectors, and rich comment threads.
> - Small interaction problems in those surfaces slow down supervision
of AI-agent work.
> - The branch included related operator quality-of-life fixes for issue
layout, inbox actions, recent selectors, mobile inputs, and chat
rendering stability.
> - These changes are UI-focused and can land independently from
workspace navigation and access-profile work.
> - This pull request groups the operator QoL fixes into one standalone
branch.
> - The benefit is a more stable and efficient board workflow for issue
triage and task editing.
## What Changed
- Widened issue detail content and added a desktop inbox archive action.
- Fixed mobile text-field zoom by keeping touch input font sizes at
16px.
- Prioritized recent picker selections for assignees/projects in issue
and routine flows.
- Showed actionable approvals in the Mine inbox model.
- Fixed issue chat renderer state crashes and hardened tests.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/lib/inbox.test.ts ui/src/lib/recent-selections.test.ts`
- Split integration check: merged last after the other
[PAP-1614](/PAP/issues/PAP-1614) branches with no merge conflicts.
- Confirmed this branch does not include `pnpm-lock.yaml`.
## Risks
- Low to medium risk: mostly UI state, layout, and selection-priority
behavior.
- Visual layout and mobile zoom behavior may need browser/device QA
beyond component tests.
- No database migrations are included.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5.4 tool-enabled coding model, agentic
code-editing/runtime with local shell and GitHub CLI access; exact
context window and reasoning mode are not exposed by the Paperclip
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-20 06:16:41 -05:00
|
|
|
|
@media (min-width: 768px) {
|
|
|
|
|
|
.paperclip-mdxeditor-scope,
|
|
|
|
|
|
.paperclip-mdxeditor {
|
|
|
|
|
|
font-size: 0.875rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
.paperclip-mdxeditor-scope [class*="_iconButton_"],
|
|
|
|
|
|
.paperclip-mdxeditor [class*="_iconButton_"] {
|
|
|
|
|
|
color: var(--baseText);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-scope [class*="_iconButton_"]:hover,
|
|
|
|
|
|
.paperclip-mdxeditor [class*="_iconButton_"]:hover {
|
|
|
|
|
|
color: var(--baseTextContrast);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .mdxeditor-root-contenteditable {
|
|
|
|
|
|
min-height: 2.5rem;
|
2026-02-20 16:07:37 -06:00
|
|
|
|
padding: 0;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
line-height: 1.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-20 16:07:37 -06:00
|
|
|
|
.paperclip-mdxeditor [class*="_contentEditable_"] {
|
|
|
|
|
|
padding: 0.375rem 0.625rem !important;
|
2026-02-20 13:47:13 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor--borderless [class*="_contentEditable_"] {
|
|
|
|
|
|
padding: 0 !important;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor [class*="_placeholder_"] {
|
[codex] Polish issue and operator workflow UI (#4090)
## Thinking Path
> - Paperclip operators spend much of their time in issues, inboxes,
selectors, and rich comment threads.
> - Small interaction problems in those surfaces slow down supervision
of AI-agent work.
> - The branch included related operator quality-of-life fixes for issue
layout, inbox actions, recent selectors, mobile inputs, and chat
rendering stability.
> - These changes are UI-focused and can land independently from
workspace navigation and access-profile work.
> - This pull request groups the operator QoL fixes into one standalone
branch.
> - The benefit is a more stable and efficient board workflow for issue
triage and task editing.
## What Changed
- Widened issue detail content and added a desktop inbox archive action.
- Fixed mobile text-field zoom by keeping touch input font sizes at
16px.
- Prioritized recent picker selections for assignees/projects in issue
and routine flows.
- Showed actionable approvals in the Mine inbox model.
- Fixed issue chat renderer state crashes and hardened tests.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/lib/inbox.test.ts ui/src/lib/recent-selections.test.ts`
- Split integration check: merged last after the other
[PAP-1614](/PAP/issues/PAP-1614) branches with no merge conflicts.
- Confirmed this branch does not include `pnpm-lock.yaml`.
## Risks
- Low to medium risk: mostly UI state, layout, and selection-priority
behavior.
- Visual layout and mobile zoom behavior may need browser/device QA
beyond component tests.
- No database migrations are included.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5.4 tool-enabled coding model, agentic
code-editing/runtime with local shell and GitHub CLI access; exact
context window and reasoning mode are not exposed by the Paperclip
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-20 06:16:41 -05:00
|
|
|
|
font-size: inherit;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
line-height: 1.5;
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content {
|
|
|
|
|
|
font-size: inherit;
|
|
|
|
|
|
line-height: inherit;
|
|
|
|
|
|
color: inherit;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-13 21:30:48 -05:00
|
|
|
|
.paperclip-edit-in-place-content {
|
|
|
|
|
|
font-size: 0.9375rem;
|
|
|
|
|
|
line-height: 1.75rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
.paperclip-mdxeditor-content > *:first-child {
|
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content > *:last-child {
|
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content p {
|
|
|
|
|
|
margin: 0;
|
2026-03-13 21:30:48 -05:00
|
|
|
|
line-height: inherit;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content p + p {
|
2026-03-13 21:30:48 -05:00
|
|
|
|
margin-top: 1.1em;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-27 07:54:26 -05:00
|
|
|
|
.paperclip-mdxeditor-content a:not(.paperclip-mention-chip):not(.paperclip-project-mention-chip) {
|
|
|
|
|
|
color: color-mix(in oklab, var(--foreground) 76%, #0969da 24%);
|
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
|
text-underline-offset: 0.15em;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.dark .paperclip-mdxeditor-content a:not(.paperclip-mention-chip):not(.paperclip-project-mention-chip) {
|
|
|
|
|
|
color: color-mix(in oklab, var(--foreground) 80%, #58a6ff 20%);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-21 14:48:10 -05:00
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip,
|
2026-03-02 13:31:58 -06:00
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-project-mention-chip {
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 0.25rem;
|
|
|
|
|
|
margin: 0 0.1rem;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
padding: 0 0.45rem;
|
2026-03-02 13:31:58 -06:00
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
|
border-radius: 999px;
|
|
|
|
|
|
font-size: 0.75rem;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
line-height: 1.25;
|
2026-03-02 13:31:58 -06:00
|
|
|
|
text-decoration: none;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
vertical-align: middle;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
top: -1px;
|
2026-03-02 13:31:58 -06:00
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
user-select: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-24 09:39:21 -05:00
|
|
|
|
/* Strip the MDXEditor's default inline-code styling from the text inside chips
|
|
|
|
|
|
(the link label otherwise picks up a monospace font + gray tint). */
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip,
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip code,
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-project-mention-chip,
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-project-mention-chip code {
|
|
|
|
|
|
font-family: inherit;
|
|
|
|
|
|
background: none;
|
|
|
|
|
|
color: inherit;
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-21 14:48:10 -05:00
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip::before,
|
|
|
|
|
|
a.paperclip-mention-chip::before {
|
|
|
|
|
|
content: "";
|
|
|
|
|
|
flex: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip[data-mention-kind="project"]::before,
|
|
|
|
|
|
a.paperclip-mention-chip[data-mention-kind="project"]::before {
|
|
|
|
|
|
width: 0.45rem;
|
|
|
|
|
|
height: 0.45rem;
|
|
|
|
|
|
border-radius: 999px;
|
|
|
|
|
|
background-color: var(--paperclip-mention-project-color, currentColor);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content a.paperclip-mention-chip[data-mention-kind="agent"]::before,
|
|
|
|
|
|
a.paperclip-mention-chip[data-mention-kind="agent"]::before {
|
|
|
|
|
|
width: 0.75rem;
|
|
|
|
|
|
height: 0.75rem;
|
|
|
|
|
|
background-color: currentColor;
|
|
|
|
|
|
-webkit-mask-image: var(--paperclip-mention-icon-mask);
|
|
|
|
|
|
mask-image: var(--paperclip-mention-icon-mask);
|
|
|
|
|
|
-webkit-mask-position: center;
|
|
|
|
|
|
mask-position: center;
|
|
|
|
|
|
-webkit-mask-repeat: no-repeat;
|
|
|
|
|
|
mask-repeat: no-repeat;
|
|
|
|
|
|
-webkit-mask-size: contain;
|
|
|
|
|
|
mask-size: contain;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
.paperclip-mdxeditor-content ul,
|
|
|
|
|
|
.paperclip-mdxeditor-content ol {
|
2026-03-13 21:30:48 -05:00
|
|
|
|
margin: 1.1em 0;
|
|
|
|
|
|
padding-left: 1.6em;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content ul {
|
|
|
|
|
|
list-style: disc;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content ol {
|
|
|
|
|
|
list-style: decimal;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content li {
|
|
|
|
|
|
display: list-item;
|
2026-03-13 21:30:48 -05:00
|
|
|
|
margin: 0.3em 0;
|
|
|
|
|
|
line-height: inherit;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content li::marker {
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-13 21:30:48 -05:00
|
|
|
|
.paperclip-mdxeditor-content h1 {
|
2026-03-16 12:33:20 -05:00
|
|
|
|
margin: 1.4em 0 0.9em;
|
2026-03-13 21:30:48 -05:00
|
|
|
|
font-size: 1.75em;
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
line-height: 1.2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content h2 {
|
2026-03-16 12:33:20 -05:00
|
|
|
|
margin: 1.3em 0 0.85em;
|
2026-03-13 21:30:48 -05:00
|
|
|
|
font-size: 1.35em;
|
|
|
|
|
|
font-weight: 700;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
line-height: 1.3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-13 21:30:48 -05:00
|
|
|
|
.paperclip-mdxeditor-content h3 {
|
2026-03-16 12:33:20 -05:00
|
|
|
|
margin: 1.2em 0 0.8em;
|
2026-03-13 21:30:48 -05:00
|
|
|
|
font-size: 1.15em;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
line-height: 1.35;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
.paperclip-mdxeditor-content img {
|
|
|
|
|
|
max-height: 18rem;
|
|
|
|
|
|
border-radius: calc(var(--radius) - 2px);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content blockquote {
|
2026-03-13 21:30:48 -05:00
|
|
|
|
margin: 1.2em 0;
|
|
|
|
|
|
padding-left: 1em;
|
|
|
|
|
|
border-left: 3px solid var(--border);
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
color: var(--muted-foreground);
|
2026-03-13 21:30:48 -05:00
|
|
|
|
line-height: inherit;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content code {
|
|
|
|
|
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
2026-03-21 11:38:27 -05:00
|
|
|
|
font-size: 1em;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content pre {
|
2026-03-15 10:48:27 -05:00
|
|
|
|
margin: 0.4rem 0;
|
2026-03-15 14:39:09 -05:00
|
|
|
|
padding: 0;
|
2026-03-15 10:48:27 -05:00
|
|
|
|
border: 1px solid color-mix(in oklab, var(--foreground) 12%, transparent);
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
border-radius: calc(var(--radius) - 3px);
|
2026-03-15 10:48:27 -05:00
|
|
|
|
background: #1e1e2e;
|
|
|
|
|
|
color: #cdd6f4;
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
overflow-x: auto;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-15 14:39:09 -05:00
|
|
|
|
/* Dark theme for CodeMirror code blocks inside the MDXEditor.
|
|
|
|
|
|
Overrides the default cm6-theme-basic-light that MDXEditor bundles. */
|
|
|
|
|
|
.paperclip-mdxeditor .cm-editor {
|
|
|
|
|
|
background-color: #1e1e2e !important;
|
|
|
|
|
|
color: #cdd6f4 !important;
|
2026-03-21 11:38:27 -05:00
|
|
|
|
font-size: 1em;
|
2026-03-15 14:39:09 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-gutters {
|
|
|
|
|
|
background-color: #181825 !important;
|
|
|
|
|
|
color: #585b70 !important;
|
|
|
|
|
|
border-right: 1px solid #313244 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-activeLineGutter {
|
|
|
|
|
|
background-color: #1e1e2e !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-activeLine {
|
|
|
|
|
|
background-color: color-mix(in oklab, #cdd6f4 5%, transparent) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-cursor,
|
|
|
|
|
|
.paperclip-mdxeditor .cm-dropCursor {
|
|
|
|
|
|
border-left-color: #cdd6f4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-selectionBackground {
|
|
|
|
|
|
background-color: color-mix(in oklab, #89b4fa 25%, transparent) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-focused .cm-selectionBackground {
|
|
|
|
|
|
background-color: color-mix(in oklab, #89b4fa 30%, transparent) !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor .cm-content {
|
|
|
|
|
|
caret-color: #cdd6f4;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* MDXEditor code block language selector – show on hover only */
|
2026-03-15 10:48:27 -05:00
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"] {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorToolbar_"],
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeBlockToolbar_"] {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 0.25rem;
|
|
|
|
|
|
right: 0.25rem;
|
|
|
|
|
|
z-index: 2;
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transition: opacity 150ms ease;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-15 14:39:09 -05:00
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorToolbar_"] select,
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeBlockToolbar_"] select {
|
|
|
|
|
|
background-color: #313244;
|
|
|
|
|
|
color: #cdd6f4;
|
|
|
|
|
|
border-color: #45475a;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-15 10:48:27 -05:00
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:hover [class*="_codeMirrorToolbar_"],
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:hover [class*="_codeBlockToolbar_"],
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:focus-within [class*="_codeMirrorToolbar_"],
|
|
|
|
|
|
.paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:focus-within [class*="_codeBlockToolbar_"] {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-03 09:28:49 -06:00
|
|
|
|
/* Rendered markdown code blocks & inline code (prose/MarkdownBody context).
|
2026-03-15 14:27:34 -05:00
|
|
|
|
Dark theme code blocks with compact sizing.
|
|
|
|
|
|
Override prose CSS variables so prose-invert can't revert to defaults. */
|
|
|
|
|
|
.paperclip-markdown {
|
|
|
|
|
|
--tw-prose-pre-bg: #1e1e2e;
|
|
|
|
|
|
--tw-prose-pre-code: #cdd6f4;
|
|
|
|
|
|
--tw-prose-invert-pre-bg: #1e1e2e;
|
|
|
|
|
|
--tw-prose-invert-pre-code: #cdd6f4;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown pre {
|
|
|
|
|
|
border: 1px solid color-mix(in oklab, var(--foreground) 12%, transparent) !important;
|
|
|
|
|
|
border-radius: calc(var(--radius) - 3px) !important;
|
|
|
|
|
|
background-color: #1e1e2e !important;
|
|
|
|
|
|
color: #cdd6f4 !important;
|
|
|
|
|
|
padding: 0.5rem 0.65rem !important;
|
|
|
|
|
|
margin: 0.4rem 0 !important;
|
2026-03-21 11:38:27 -05:00
|
|
|
|
font-size: 1em !important;
|
2026-03-15 10:48:27 -05:00
|
|
|
|
overflow-x: auto;
|
2026-03-15 14:27:34 -05:00
|
|
|
|
white-space: pre;
|
2026-03-03 09:28:49 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-15 14:27:34 -05:00
|
|
|
|
.paperclip-markdown code {
|
2026-03-03 09:28:49 -06:00
|
|
|
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
2026-03-21 11:38:27 -05:00
|
|
|
|
font-size: 1em;
|
2026-03-03 09:28:49 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-15 14:27:34 -05:00
|
|
|
|
.paperclip-markdown pre code {
|
|
|
|
|
|
font-size: inherit;
|
|
|
|
|
|
color: inherit;
|
|
|
|
|
|
background: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-03 09:28:49 -06:00
|
|
|
|
/* Remove backtick pseudo-elements from inline code (prose default adds them) */
|
|
|
|
|
|
.prose code::before,
|
|
|
|
|
|
.prose code::after {
|
|
|
|
|
|
content: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Inline code background (not inside a code block) */
|
|
|
|
|
|
.prose :not(pre) > code {
|
|
|
|
|
|
background-color: color-mix(in oklab, var(--accent) 60%, transparent);
|
|
|
|
|
|
padding: 0.15em 0.35em;
|
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-21 08:12:49 -05:00
|
|
|
|
.dark .prose :not(pre) > code {
|
|
|
|
|
|
background-color: #ffffff0f;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-10 20:55:41 -05:00
|
|
|
|
.paperclip-markdown {
|
|
|
|
|
|
color: var(--foreground);
|
|
|
|
|
|
font-size: 0.9375rem;
|
|
|
|
|
|
line-height: 1.6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown > :first-child {
|
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown > :last-child {
|
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown :where(p, ul, ol, blockquote, pre, table) {
|
|
|
|
|
|
margin-top: 0.7rem;
|
|
|
|
|
|
margin-bottom: 0.7rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown :where(ul, ol) {
|
|
|
|
|
|
padding-left: 1.15rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown ul {
|
|
|
|
|
|
list-style-type: disc;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown ol {
|
|
|
|
|
|
list-style-type: decimal;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown li {
|
|
|
|
|
|
margin: 0.14rem 0;
|
|
|
|
|
|
padding-left: 0.2rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown li > :where(p, ul, ol) {
|
|
|
|
|
|
margin-top: 0.3rem;
|
|
|
|
|
|
margin-bottom: 0.3rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown li::marker {
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-16 12:33:20 -05:00
|
|
|
|
.paperclip-markdown h1,
|
|
|
|
|
|
.paperclip-markdown h2,
|
|
|
|
|
|
.paperclip-markdown h3,
|
|
|
|
|
|
.paperclip-markdown h4 {
|
|
|
|
|
|
margin-top: 1.75rem;
|
2026-03-10 20:55:41 -05:00
|
|
|
|
margin-bottom: 0.45rem;
|
|
|
|
|
|
color: var(--foreground);
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
letter-spacing: -0.01em;
|
|
|
|
|
|
line-height: 1.3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown h1 {
|
|
|
|
|
|
font-size: 1.5rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown h2 {
|
|
|
|
|
|
font-size: 1.25rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown h3 {
|
|
|
|
|
|
font-size: 1.05rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown h4 {
|
|
|
|
|
|
font-size: 0.95rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown :where(strong, b) {
|
|
|
|
|
|
color: var(--foreground);
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown a {
|
|
|
|
|
|
color: color-mix(in oklab, var(--foreground) 76%, #0969da 24%);
|
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
|
text-underline-offset: 0.15em;
|
2026-03-27 07:54:26 -05:00
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown a.paperclip-mention-chip {
|
|
|
|
|
|
text-decoration: none;
|
2026-03-10 20:55:41 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
Add first-class issue references (#4214)
## Thinking Path
> - Paperclip orchestrates AI agents for zero-human companies.
> - Operators and agents coordinate through company-scoped issues,
comments, documents, and task relationships.
> - Issue text can mention other tickets, but those references were
previously plain markdown/text without durable relationship data.
> - That made it harder to understand related work, surface backlinks,
and keep cross-ticket context visible in the board.
> - This pull request adds first-class issue reference extraction,
storage, API responses, and UI surfaces.
> - The benefit is that issue references become queryable, navigable,
and visible without relying on ad hoc text scanning.
## What Changed
- Added shared issue-reference parsing utilities and exported
reference-related types/constants.
- Added an `issue_reference_mentions` table, idempotent migration DDL,
schema exports, and database documentation.
- Added server-side issue reference services, route integration,
activity summaries, and a backfill command for existing issue content.
- Added UI reference pills, related-work panels, markdown/editor mention
handling, and issue detail/property rendering updates.
- Added focused shared, server, and UI tests for parsing, persistence,
display, and related-work behavior.
- Rebased `PAP-735-first-class-task-references` cleanly onto
`public-gh/master`; no `pnpm-lock.yaml` changes are included.
## Verification
- `pnpm -r typecheck`
- `pnpm test:run packages/shared/src/issue-references.test.ts
server/src/__tests__/issue-references-service.test.ts
ui/src/components/IssueRelatedWorkPanel.test.tsx
ui/src/components/IssueProperties.test.tsx
ui/src/components/MarkdownBody.test.tsx`
## Risks
- Medium risk because this adds a new issue-reference persistence path
that touches shared parsing, database schema, server routes, and UI
rendering.
- Migration risk is mitigated by `CREATE TABLE IF NOT EXISTS`, guarded
foreign-key creation, and `CREATE INDEX IF NOT EXISTS` statements so
users who have applied an older local version of the numbered migration
can re-run safely.
- UI risk is limited by focused component coverage, but reviewers should
still manually inspect issue detail pages containing ticket references
before merge.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5-based coding agent, tool-using shell workflow with
repository inspection, git rebase/push, typecheck, and focused Vitest
verification.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: dotta <dotta@example.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-21 10:02:52 -05:00
|
|
|
|
.paperclip-markdown a.paperclip-mention-chip[data-mention-kind="issue"] {
|
|
|
|
|
|
border-color: color-mix(in oklab, var(--foreground) 14%, var(--border) 86%);
|
|
|
|
|
|
background: color-mix(in oklab, var(--accent) 42%, transparent);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-24 09:39:21 -05:00
|
|
|
|
/* Inline issue references in markdown: no pill chrome, just a status icon
|
|
|
|
|
|
beside the link label — keeps the pair from splitting across lines. */
|
|
|
|
|
|
.paperclip-markdown-issue-ref {
|
|
|
|
|
|
display: inline;
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-10 20:55:41 -05:00
|
|
|
|
.dark .paperclip-markdown a {
|
|
|
|
|
|
color: color-mix(in oklab, var(--foreground) 80%, #58a6ff 20%);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown blockquote {
|
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
|
padding-left: 0.95rem;
|
|
|
|
|
|
border-left: 0.24rem solid color-mix(in oklab, var(--border) 84%, var(--muted-foreground) 16%);
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown hr {
|
|
|
|
|
|
margin: 1.25rem 0;
|
|
|
|
|
|
border-color: var(--border);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown img {
|
|
|
|
|
|
border-radius: calc(var(--radius) + 2px);
|
ui: apply interface polish from design article review
- Add global font smoothing (antialiased) to body
- Add tabular-nums to all numeric displays: MetricCard values, Costs page,
AgentDetail token/cost grids and tables, IssueDetail cost summary,
Companies page budget display
- Replace markdown image hard border with subtle inset box-shadow overlay
- Replace all animate-ping status dots with calmer animate-pulse across
AgentDetail, IssueDetail, Agents, sidebar, kanban, issues list, and
active agents panel
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:20:24 -05:00
|
|
|
|
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent);
|
2026-03-10 20:55:41 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown table {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown th {
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
text-align: left;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-07 08:59:39 -06:00
|
|
|
|
.paperclip-mermaid {
|
|
|
|
|
|
margin: 0.5rem 0;
|
|
|
|
|
|
padding: 0.45rem 0.55rem;
|
|
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
|
border-radius: calc(var(--radius) - 3px);
|
|
|
|
|
|
background-color: color-mix(in oklab, var(--accent) 35%, transparent);
|
|
|
|
|
|
overflow-x: auto;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mermaid svg {
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
width: max-content;
|
|
|
|
|
|
max-width: none;
|
|
|
|
|
|
min-width: 100%;
|
|
|
|
|
|
height: auto;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mermaid-status {
|
|
|
|
|
|
margin: 0 0 0.45rem;
|
|
|
|
|
|
font-size: 0.75rem;
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mermaid-status-error {
|
|
|
|
|
|
color: var(--destructive);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-mermaid-source {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
border: 0;
|
|
|
|
|
|
background: transparent;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-24 09:39:21 -05:00
|
|
|
|
/* Mention chips rendered inline in prose (MarkdownBody or inline anchors) */
|
2026-03-21 14:48:10 -05:00
|
|
|
|
a.paperclip-mention-chip,
|
2026-04-24 09:39:21 -05:00
|
|
|
|
a.paperclip-project-mention-chip,
|
|
|
|
|
|
span.paperclip-mention-chip,
|
|
|
|
|
|
span.paperclip-project-mention-chip {
|
2026-03-03 09:28:49 -06:00
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 0.25rem;
|
|
|
|
|
|
margin: 0 0.1rem;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
padding: 0 0.45rem;
|
2026-03-03 09:28:49 -06:00
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
|
border-radius: 999px;
|
|
|
|
|
|
font-size: 0.75rem;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
line-height: 1.25;
|
2026-03-03 09:28:49 -06:00
|
|
|
|
text-decoration: none;
|
[codex] Split PR #4692 UI/QoL updates (#4701)
## Thinking Path
> - Paperclip orchestrates AI agents through a company-scoped control
plane.
> - The affected surface is the board UI for issue threads, issue lists,
routines, dialogs, navigation, and issue review indicators.
> - Closed PR #4692 bundled backend, schema, docs, workflow, and UI/QoL
work into one oversized change set.
> - Greptile could not keep reviewing that broad PR because it exceeded
the 100-file review limit and mixed unrelated concerns.
> - This pull request extracts the UI/QoL slice into a fresh branch
under the review limit while leaving workflow and lockfile churn out.
> - The benefit is a focused review path for the board UI performance
and workflow improvements without reopening the oversized PR.
## What Changed
- Added long issue-thread virtualization, scroll-container binding,
anchor preservation, latest-comment jump targeting, and related
regression/perf fixtures.
- Improved issue list scalability with scroll-based loading, server
offset parameters, and pagination-focused UI tests.
- Reduced new issue dialog typing churn and split dialog action
subscriptions so broad layout/nav surfaces avoid unnecessary renders.
- Added routine variables help and routine description mention options
for users, agents, and projects.
- Added productivity review badge/link UI and fixed the badge to use
Paperclip's company-prefixed router link.
- Kept the split PR below Greptile's review limit and excluded
`.github/workflows/pr.yml` and `pnpm-lock.yaml`.
## Verification
- `pnpm install --no-frozen-lockfile` in the clean worktree to install
`@tanstack/react-virtual` locally without committing lockfile churn.
- `pnpm --filter @paperclipai/ui exec vitest run --config
vitest.config.ts src/components/IssueChatThread.test.tsx
src/components/IssuesList.test.tsx
src/components/NewIssueDialog.test.tsx src/pages/Routines.test.tsx
src/pages/Issues.test.tsx` passed: 5 files, 83 tests.
- `pnpm --filter @paperclipai/ui typecheck` passed.
- `git diff --check origin/master..HEAD` passed.
- Split-scope checks: 53 changed files; no `.github/workflows/pr.yml`;
no `pnpm-lock.yaml`.
- Screenshots were not captured in this heartbeat; the changes are
primarily virtualization, routing, pagination, and editor behavior
covered by focused regression tests.
## Risks
- Moderate UI risk because issue-thread virtualization changes scroll
behavior on long conversations; regression tests cover anchor jumps,
latest-comment targeting, row metadata, and short-thread fallback.
- Moderate integration risk because the issue-list offset parameter and
productivity review field depend on matching API behavior.
- Dependency risk: the UI package adds `@tanstack/react-virtual` while
repository policy keeps `pnpm-lock.yaml` out of PRs, so CI must resolve
dependency changes through the repo's normal lockfile policy.
> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled local repository and
GitHub workflow. Exact runtime context window was not exposed by the
harness.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
---------
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-28 17:18:58 -05:00
|
|
|
|
/* Center the pill on the surrounding x-height so it sits on the text line
|
|
|
|
|
|
instead of hanging below it. inline-flex baseline alignment is unreliable
|
|
|
|
|
|
across browsers, so use vertical-align: middle for a predictable result.
|
|
|
|
|
|
Nudge up 1px so it visually centers with the cap height of the text. */
|
|
|
|
|
|
vertical-align: middle;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
top: -1px;
|
2026-03-03 09:28:49 -06:00
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-24 09:39:21 -05:00
|
|
|
|
/* When the identifier inside a chip is backtick-wrapped in markdown, strip the
|
|
|
|
|
|
inline-code monospace/gray styling so the pill label reads cleanly. */
|
|
|
|
|
|
.paperclip-markdown a.paperclip-mention-chip code,
|
|
|
|
|
|
.paperclip-markdown a.paperclip-project-mention-chip code,
|
|
|
|
|
|
.paperclip-markdown span.paperclip-mention-chip code,
|
|
|
|
|
|
.paperclip-markdown span.paperclip-project-mention-chip code {
|
|
|
|
|
|
font-family: inherit;
|
|
|
|
|
|
background: none;
|
|
|
|
|
|
color: inherit;
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
font-size: inherit;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-10 21:01:47 -05:00
|
|
|
|
/* Keep MDXEditor popups above app dialogs, even when they portal to <body>. */
|
|
|
|
|
|
[class*="_popupContainer_"] {
|
|
|
|
|
|
z-index: 81 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[class*="_dialogOverlay_"] {
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
z-index: 80;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-10 21:01:47 -05:00
|
|
|
|
[class*="_dialogContent_"],
|
|
|
|
|
|
[class*="_largeDialogContent_"],
|
|
|
|
|
|
[class*="_popoverContent_"],
|
|
|
|
|
|
[class*="_linkDialogPopoverContent_"],
|
|
|
|
|
|
[class*="_tableColumnEditorPopoverContent_"],
|
|
|
|
|
|
[class*="_toolbarButtonDropdownContainer_"],
|
|
|
|
|
|
[class*="_toolbarNodeKindSelectContainer_"] {
|
Add MarkdownEditor component, asset image upload, and rich description editing
Introduce MarkdownEditor built on @mdxeditor/editor with headings,
lists, links, quotes, image upload with drag-and-drop, and themed CSS
integration. Add asset image upload API (routes, service, storage) and
wire image upload into InlineEditor multiline mode, NewIssueDialog,
NewProjectDialog, GoalDetail, IssueDetail, and ProjectDetail
description fields. Tighten prompt template editor styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:50:45 -06:00
|
|
|
|
z-index: 81 !important;
|
|
|
|
|
|
}
|