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;
|
|
|
|
|
|
padding: 0.05rem 0.45rem;
|
|
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
|
border-radius: 999px;
|
|
|
|
|
|
font-size: 0.75rem;
|
|
|
|
|
|
line-height: 1.3;
|
|
|
|
|
|
text-decoration: none;
|
2026-04-24 09:39:21 -05:00
|
|
|
|
vertical-align: baseline;
|
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;
|
|
|
|
|
|
padding: 0.05rem 0.45rem;
|
|
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
|
border-radius: 999px;
|
|
|
|
|
|
font-size: 0.75rem;
|
|
|
|
|
|
line-height: 1.3;
|
|
|
|
|
|
text-decoration: none;
|
2026-04-24 09:39:21 -05:00
|
|
|
|
/* Align the pill relative to the surrounding text baseline instead of its
|
|
|
|
|
|
x-height midpoint so it sits on the text line rather than floating above. */
|
|
|
|
|
|
vertical-align: baseline;
|
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;
|
|
|
|
|
|
}
|