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);
|
Add full company search page (#5293)
## Thinking Path
> - Paperclip orchestrates AI agents for zero-human companies.
> - Operators need to find work, documents, agents, projects, comments,
and activity across a company without jumping through separate surfaces.
> - The existing Command-K flow was useful for fast navigation but not
enough for deeper company-wide discovery.
> - Search also needs company-scoped backend contracts, query cost
controls, and indexed document matching so it stays safe as company data
grows.
> - This pull request adds a full company search API and a dedicated
board search page that Command-K can hand off to.
> - The benefit is a single searchable control-plane surface with richer
result context, recents, highlights, and test coverage across server and
UI behavior.
## What Changed
- Added a company-scoped search endpoint/service with query validation,
rate limiting, text matching, fuzzy title matching, and result typing
shared through `@paperclipai/shared`.
- Added idempotent search migrations for document search indexes and
fuzzy matching support.
- Added the full `/companies/:companyKey/search` UI, search result row
components, highlighted snippets, recent searches, and sidebar/Command-K
handoff.
- Added Storybook coverage for search surfaces and Vitest coverage for
server search behavior, rate limiting, route generation, Command-K
behavior, and the search page.
- Addressed Greptile findings by renaming the no-match SQL helper,
applying search pagination after cross-type merge sorting, and
lazy-initializing the default search service so unrelated route-test
mocks do not need to know about it.
- Merged current `public-gh/master` and renumbered the search migrations
behind upstream `0078_white_darwin`: search indexes are now
`0079_company_search_document_indexes` and fuzzy matching is
`0080_company_search_fuzzystrmatch`.
## Verification
- `git fetch public-gh master`
- `git diff --check public-gh/master...HEAD`
- `git diff --name-only public-gh/master...HEAD | rg '^pnpm-lock\.yaml$'
|| true` produced no output before opening the PR.
- `pnpm run preflight:workspace-links && pnpm exec vitest run
server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts
ui/src/pages/Search.test.tsx ui/src/components/CommandPalette.test.tsx
ui/src/lib/company-routes.test.ts` passed: 5 files, 25 tests.
- `pnpm --filter @paperclipai/shared typecheck && pnpm --filter
@paperclipai/db typecheck && pnpm --filter @paperclipai/server typecheck
&& pnpm --filter @paperclipai/ui typecheck` passed.
- `pnpm exec vitest run
server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts && pnpm
--filter @paperclipai/server typecheck` passed after Greptile pagination
fixes.
- `pnpm exec vitest run
server/src/__tests__/issue-agent-mutation-ownership-routes.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts
server/src/__tests__/company-search-service.test.ts && pnpm --filter
@paperclipai/server typecheck` passed after the CI mock fix.
- After resolving the migration conflict with current
`public-gh/master`: `pnpm --filter @paperclipai/db typecheck && pnpm
exec vitest run server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts && pnpm
--filter @paperclipai/server typecheck` passed.
- DB migration numbering check passed as part of `@paperclipai/db`
typecheck.
- UI states are covered by the added Storybook stories in
`ui/storybook/stories/search.stories.tsx`.
- GitHub reports the PR merge state as `CLEAN` on head `18e54fa8`.
- GitHub PR checks are green on head `18e54fa8`: policy, verify,
serialized server shards 1/4 through 4/4, e2e, canary dry run, Snyk, and
Greptile Review.
## Risks
- Search ranking and snippets are new user-facing behavior, so reviewers
should check whether result ordering feels right on real company data.
- Search touches broad company data, so company scoping and query
cost/rate-limit behavior should be reviewed carefully.
- The migrations add search indexes/extensions; they are idempotent with
`IF NOT EXISTS` for users who may have applied an earlier branch
migration number.
> ROADMAP.md checked. This PR adds a focused board search surface and
does not duplicate an open roadmap item.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled shell/git/GitHub CLI
session with medium reasoning effort. Existing branch commits were
produced across prior agent sessions; this packaging pass verified,
opened the PR, addressed Greptile findings, resolved migration conflicts
after upstream PRs landed, and got PR checks green.
## 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: Paperclip <noreply@paperclip.ing>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 06:32:37 -05:00
|
|
|
|
--chip-match-title-bg: oklch(0.97 0.02 265);
|
|
|
|
|
|
--chip-match-title-fg: oklch(0.4 0.13 265);
|
|
|
|
|
|
--chip-match-title-border: oklch(0.85 0.05 265);
|
|
|
|
|
|
--chip-match-comment-bg: oklch(0.97 0.02 145);
|
|
|
|
|
|
--chip-match-comment-fg: oklch(0.4 0.10 145);
|
|
|
|
|
|
--chip-match-comment-border: oklch(0.85 0.05 145);
|
|
|
|
|
|
--chip-match-document-bg: oklch(0.97 0.02 295);
|
|
|
|
|
|
--chip-match-document-fg: oklch(0.4 0.10 295);
|
|
|
|
|
|
--chip-match-document-border: oklch(0.85 0.05 295);
|
|
|
|
|
|
--chip-match-identifier-bg: var(--muted);
|
|
|
|
|
|
--chip-match-identifier-fg: var(--muted-foreground);
|
|
|
|
|
|
--chip-match-identifier-border: var(--border);
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.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);
|
Add full company search page (#5293)
## Thinking Path
> - Paperclip orchestrates AI agents for zero-human companies.
> - Operators need to find work, documents, agents, projects, comments,
and activity across a company without jumping through separate surfaces.
> - The existing Command-K flow was useful for fast navigation but not
enough for deeper company-wide discovery.
> - Search also needs company-scoped backend contracts, query cost
controls, and indexed document matching so it stays safe as company data
grows.
> - This pull request adds a full company search API and a dedicated
board search page that Command-K can hand off to.
> - The benefit is a single searchable control-plane surface with richer
result context, recents, highlights, and test coverage across server and
UI behavior.
## What Changed
- Added a company-scoped search endpoint/service with query validation,
rate limiting, text matching, fuzzy title matching, and result typing
shared through `@paperclipai/shared`.
- Added idempotent search migrations for document search indexes and
fuzzy matching support.
- Added the full `/companies/:companyKey/search` UI, search result row
components, highlighted snippets, recent searches, and sidebar/Command-K
handoff.
- Added Storybook coverage for search surfaces and Vitest coverage for
server search behavior, rate limiting, route generation, Command-K
behavior, and the search page.
- Addressed Greptile findings by renaming the no-match SQL helper,
applying search pagination after cross-type merge sorting, and
lazy-initializing the default search service so unrelated route-test
mocks do not need to know about it.
- Merged current `public-gh/master` and renumbered the search migrations
behind upstream `0078_white_darwin`: search indexes are now
`0079_company_search_document_indexes` and fuzzy matching is
`0080_company_search_fuzzystrmatch`.
## Verification
- `git fetch public-gh master`
- `git diff --check public-gh/master...HEAD`
- `git diff --name-only public-gh/master...HEAD | rg '^pnpm-lock\.yaml$'
|| true` produced no output before opening the PR.
- `pnpm run preflight:workspace-links && pnpm exec vitest run
server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts
ui/src/pages/Search.test.tsx ui/src/components/CommandPalette.test.tsx
ui/src/lib/company-routes.test.ts` passed: 5 files, 25 tests.
- `pnpm --filter @paperclipai/shared typecheck && pnpm --filter
@paperclipai/db typecheck && pnpm --filter @paperclipai/server typecheck
&& pnpm --filter @paperclipai/ui typecheck` passed.
- `pnpm exec vitest run
server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts && pnpm
--filter @paperclipai/server typecheck` passed after Greptile pagination
fixes.
- `pnpm exec vitest run
server/src/__tests__/issue-agent-mutation-ownership-routes.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts
server/src/__tests__/company-search-service.test.ts && pnpm --filter
@paperclipai/server typecheck` passed after the CI mock fix.
- After resolving the migration conflict with current
`public-gh/master`: `pnpm --filter @paperclipai/db typecheck && pnpm
exec vitest run server/src/__tests__/company-search-service.test.ts
server/src/__tests__/company-search-rate-limit-routes.test.ts && pnpm
--filter @paperclipai/server typecheck` passed.
- DB migration numbering check passed as part of `@paperclipai/db`
typecheck.
- UI states are covered by the added Storybook stories in
`ui/storybook/stories/search.stories.tsx`.
- GitHub reports the PR merge state as `CLEAN` on head `18e54fa8`.
- GitHub PR checks are green on head `18e54fa8`: policy, verify,
serialized server shards 1/4 through 4/4, e2e, canary dry run, Snyk, and
Greptile Review.
## Risks
- Search ranking and snippets are new user-facing behavior, so reviewers
should check whether result ordering feels right on real company data.
- Search touches broad company data, so company scoping and query
cost/rate-limit behavior should be reviewed carefully.
- The migrations add search indexes/extensions; they are idempotent with
`IF NOT EXISTS` for users who may have applied an earlier branch
migration number.
> ROADMAP.md checked. This PR adds a focused board search surface and
does not duplicate an open roadmap item.
## Model Used
- OpenAI Codex, GPT-5 coding agent, tool-enabled shell/git/GitHub CLI
session with medium reasoning effort. Existing branch commits were
produced across prior agent sessions; this packaging pass verified,
opened the PR, addressed Greptile findings, resolved migration conflicts
after upstream PRs landed, and got PR checks green.
## 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: Paperclip <noreply@paperclip.ing>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 06:32:37 -05:00
|
|
|
|
--chip-match-title-bg: oklch(0.27 0.04 265 / 0.5);
|
|
|
|
|
|
--chip-match-title-fg: oklch(0.78 0.10 265);
|
|
|
|
|
|
--chip-match-title-border: oklch(0.4 0.06 265);
|
|
|
|
|
|
--chip-match-comment-bg: oklch(0.27 0.04 145 / 0.5);
|
|
|
|
|
|
--chip-match-comment-fg: oklch(0.78 0.08 145);
|
|
|
|
|
|
--chip-match-comment-border: oklch(0.4 0.05 145);
|
|
|
|
|
|
--chip-match-document-bg: oklch(0.27 0.04 295 / 0.5);
|
|
|
|
|
|
--chip-match-document-fg: oklch(0.78 0.08 295);
|
|
|
|
|
|
--chip-match-document-border: oklch(0.4 0.05 295);
|
|
|
|
|
|
--chip-match-identifier-bg: var(--muted);
|
|
|
|
|
|
--chip-match-identifier-fg: var(--muted-foreground);
|
|
|
|
|
|
--chip-match-identifier-border: var(--border);
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@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
|
|
|
|
|
2026-05-19 15:52:39 -05:00
|
|
|
|
/* Small inline widgets keep their design size on touch devices —
|
|
|
|
|
|
forcing 44px here stretches checkboxes, chip menus, and icon buttons
|
|
|
|
|
|
that live inside dense rows (sidebar headers, issue rows, filter
|
|
|
|
|
|
popovers). The surrounding row provides the touch area. */
|
|
|
|
|
|
[data-slot="toggle"],
|
|
|
|
|
|
[data-slot="checkbox"],
|
|
|
|
|
|
[data-slot="icon-button"],
|
|
|
|
|
|
[data-size="xs"],
|
|
|
|
|
|
[data-size="icon-xs"],
|
|
|
|
|
|
[data-size="icon-sm"],
|
|
|
|
|
|
input[type="checkbox"],
|
|
|
|
|
|
input[type="radio"] {
|
2026-03-22 06:35:32 -05:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
/* Auto-hide scrollbar: thin, stable gutter with the thumb visible only on hover */
|
|
|
|
|
|
.scrollbar-auto-hide {
|
|
|
|
|
|
scrollbar-gutter: stable;
|
|
|
|
|
|
scrollbar-width: thin;
|
|
|
|
|
|
scrollbar-color: transparent transparent;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-18 12:57:26 -05:00
|
|
|
|
.scrollbar-auto-hide::-webkit-scrollbar {
|
2026-03-18 14:40:50 -05:00
|
|
|
|
width: 8px !important;
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
height: 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 */
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
.scrollbar-auto-hide:hover {
|
|
|
|
|
|
scrollbar-color: oklch(0.7 0 0) transparent;
|
|
|
|
|
|
}
|
2026-03-14 13:47:55 -05:00
|
|
|
|
.scrollbar-auto-hide:hover::-webkit-scrollbar-track {
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
background: transparent !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;
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
border-radius: 999px !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 */
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
.dark .scrollbar-auto-hide:hover {
|
|
|
|
|
|
scrollbar-color: oklch(0.4 0 0) transparent;
|
|
|
|
|
|
}
|
2026-04-02 11:45:15 -05:00
|
|
|
|
.dark .scrollbar-auto-hide:hover::-webkit-scrollbar-track {
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
background: transparent !important;
|
2026-04-02 11:45:15 -05:00
|
|
|
|
}
|
|
|
|
|
|
.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;
|
Improve issue thread scale and markdown polish (#4861)
## Thinking Path
> - Paperclip's board UI is the operator surface for supervising
AI-agent companies.
> - Issue threads are where operators read progress, respond to agents,
inspect markdown, and jump through long histories.
> - Large threads and rich markdown had become difficult to navigate and
expensive to render.
> - The previous rollup mixed these UI scale fixes with unrelated
backend recovery, costs, backups, and settings changes.
> - This pull request isolates the issue-thread scale and markdown
polish work.
> - The benefit is a reviewable UI slice that can merge independently of
the backend reliability, database backup, workflow, and board QoL PRs.
## What Changed
- Virtualized long issue chat threads and stabilized
anchor/jump-to-latest behavior for large histories.
- Added incremental issue-list row loading and tests for
scroll-triggered pagination behavior.
- Hardened markdown body rendering and markdown editor behavior around
HTML tags, image drops, code-copy UI, and escaped newline handling.
- Added a long-thread measurement harness at
`scripts/measure-issue-chat-long-thread.mjs` plus
`perf:issue-chat-long-thread`.
- Added focused UI/lib regression coverage for thread rendering,
markdown, optimistic comments, and message building.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/components/IssuesList.test.tsx
ui/src/components/MarkdownBody.test.tsx
ui/src/components/MarkdownEditor.test.tsx
ui/src/lib/issue-chat-messages.test.ts
ui/src/lib/optimistic-issue-comments.test.ts`
- Result: 6 test files passed, 170 tests passed.
- UI screenshots not included because this PR is covered by targeted
component tests and does not introduce a new page layout.
## Risks
- Virtualization changes can affect scroll anchoring in edge cases on
very long threads.
- Markdown/editor hardening changes are intentionally defensive, but
malformed content may render differently than before.
> 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.5, code execution and GitHub CLI tool use, medium
reasoning effort.
## 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: Paperclip <noreply@paperclip.ing>
2026-04-30 13:18:01 -05:00
|
|
|
|
padding: 0 0.625rem;
|
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 code,
|
|
|
|
|
|
.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Improve issue thread scale and markdown polish (#4861)
## Thinking Path
> - Paperclip's board UI is the operator surface for supervising
AI-agent companies.
> - Issue threads are where operators read progress, respond to agents,
inspect markdown, and jump through long histories.
> - Large threads and rich markdown had become difficult to navigate and
expensive to render.
> - The previous rollup mixed these UI scale fixes with unrelated
backend recovery, costs, backups, and settings changes.
> - This pull request isolates the issue-thread scale and markdown
polish work.
> - The benefit is a reviewable UI slice that can merge independently of
the backend reliability, database backup, workflow, and board QoL PRs.
## What Changed
- Virtualized long issue chat threads and stabilized
anchor/jump-to-latest behavior for large histories.
- Added incremental issue-list row loading and tests for
scroll-triggered pagination behavior.
- Hardened markdown body rendering and markdown editor behavior around
HTML tags, image drops, code-copy UI, and escaped newline handling.
- Added a long-thread measurement harness at
`scripts/measure-issue-chat-long-thread.mjs` plus
`perf:issue-chat-long-thread`.
- Added focused UI/lib regression coverage for thread rendering,
markdown, optimistic comments, and message building.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/components/IssuesList.test.tsx
ui/src/components/MarkdownBody.test.tsx
ui/src/components/MarkdownEditor.test.tsx
ui/src/lib/issue-chat-messages.test.ts
ui/src/lib/optimistic-issue-comments.test.ts`
- Result: 6 test files passed, 170 tests passed.
- UI screenshots not included because this PR is covered by targeted
component tests and does not introduce a new page layout.
## Risks
- Virtualization changes can affect scroll anchoring in edge cases on
very long threads.
- Markdown/editor hardening changes are intentionally defensive, but
malformed content may render differently than before.
> 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.5, code execution and GitHub CLI tool use, medium
reasoning effort.
## 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: Paperclip <noreply@paperclip.ing>
2026-04-30 13:18:01 -05:00
|
|
|
|
/* Copy-to-clipboard button on fenced code blocks */
|
|
|
|
|
|
.paperclip-markdown-codeblock {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 0.4rem;
|
|
|
|
|
|
right: 0.4rem;
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 0.25rem;
|
|
|
|
|
|
padding: 0.2rem 0.4rem;
|
|
|
|
|
|
border-radius: calc(var(--radius) - 4px);
|
|
|
|
|
|
border: 1px solid color-mix(in oklab, var(--foreground) 14%, transparent);
|
|
|
|
|
|
background-color: color-mix(in oklab, var(--muted) 92%, var(--background) 8%);
|
|
|
|
|
|
color: var(--muted-foreground);
|
|
|
|
|
|
font-size: 0.7rem;
|
|
|
|
|
|
line-height: 1;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transition: opacity 0.12s ease, background-color 0.12s ease, color 0.12s ease;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock:hover .paperclip-markdown-codeblock-copy,
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy:focus-visible,
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy[data-copied] {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy:hover {
|
|
|
|
|
|
background-color: var(--accent);
|
|
|
|
|
|
color: var(--accent-foreground);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy[data-copied] {
|
|
|
|
|
|
color: var(--primary);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy[data-failed] {
|
|
|
|
|
|
color: var(--destructive);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-codeblock-copy-label {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
.paperclip-markdown :where(p, ul, ol, blockquote, pre, .paperclip-markdown-table-scroll) {
|
2026-03-10 20:55:41 -05:00
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
Improve operator workflow QoL (#5291)
## Thinking Path
> - Paperclip is a control plane operators use repeatedly to supervise
agent companies.
> - Common operator workflows depend on fast scanning of inboxes, issue
sidebars, workspaces, cost totals, and runtime services.
> - Several small UI and service gaps made those workflows slower or
less clear.
> - This pull request groups the operator-facing QoL changes that can
stand alone from recovery and adapter work.
> - The benefit is a denser, clearer board experience for issue triage
and workspace operation.
## What Changed
- Added inbox assignee/project grouping and issue list token/runtime
totals.
- Improved issue properties with removable blocker chips and workspace
task links.
- Improved execution workspace layout, runtime controls, issues tab
default, and stopped-port reuse behavior.
- Added mobile markdown/routine dialog fixes, page title company names,
sidebar polish, and dashboard run task label cleanup.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/lib/inbox.test.ts
ui/src/components/IssueProperties.test.tsx
ui/src/components/WorkspaceRuntimeControls.test.tsx
server/src/__tests__/workspace-runtime.test.ts
server/src/__tests__/costs-service.test.ts`
## Risks
- Medium UI risk because this touches several operator surfaces. The
branch is intentionally grouped around workflow/QoL files and keeps the
file count below the Greptile limit.
## Model Used
- OpenAI GPT-5 Codex via Paperclip `codex_local` adapter, with
shell/git/GitHub CLI tool use.
## 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: Paperclip <noreply@paperclip.ing>
2026-05-06 06:30:44 -05:00
|
|
|
|
.paperclip-markdown-table-scroll {
|
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
|
overflow-x: auto;
|
|
|
|
|
|
overscroll-behavior-x: contain;
|
|
|
|
|
|
-webkit-overflow-scrolling: touch;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-table-scroll:focus-visible {
|
|
|
|
|
|
outline: 2px solid var(--ring);
|
|
|
|
|
|
outline-offset: 2px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-table-scroll table {
|
|
|
|
|
|
width: max-content;
|
|
|
|
|
|
min-width: 100%;
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.paperclip-markdown-table-scroll :where(th, td) {
|
|
|
|
|
|
min-width: 8rem;
|
|
|
|
|
|
max-width: 18rem;
|
|
|
|
|
|
vertical-align: top;
|
2026-03-10 20:55:41 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.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;
|
Improve issue thread scale and markdown polish (#4861)
## Thinking Path
> - Paperclip's board UI is the operator surface for supervising
AI-agent companies.
> - Issue threads are where operators read progress, respond to agents,
inspect markdown, and jump through long histories.
> - Large threads and rich markdown had become difficult to navigate and
expensive to render.
> - The previous rollup mixed these UI scale fixes with unrelated
backend recovery, costs, backups, and settings changes.
> - This pull request isolates the issue-thread scale and markdown
polish work.
> - The benefit is a reviewable UI slice that can merge independently of
the backend reliability, database backup, workflow, and board QoL PRs.
## What Changed
- Virtualized long issue chat threads and stabilized
anchor/jump-to-latest behavior for large histories.
- Added incremental issue-list row loading and tests for
scroll-triggered pagination behavior.
- Hardened markdown body rendering and markdown editor behavior around
HTML tags, image drops, code-copy UI, and escaped newline handling.
- Added a long-thread measurement harness at
`scripts/measure-issue-chat-long-thread.mjs` plus
`perf:issue-chat-long-thread`.
- Added focused UI/lib regression coverage for thread rendering,
markdown, optimistic comments, and message building.
## Verification
- `pnpm install --frozen-lockfile`
- `pnpm exec vitest run ui/src/components/IssueChatThread.test.tsx
ui/src/components/IssuesList.test.tsx
ui/src/components/MarkdownBody.test.tsx
ui/src/components/MarkdownEditor.test.tsx
ui/src/lib/issue-chat-messages.test.ts
ui/src/lib/optimistic-issue-comments.test.ts`
- Result: 6 test files passed, 170 tests passed.
- UI screenshots not included because this PR is covered by targeted
component tests and does not introduce a new page layout.
## Risks
- Virtualization changes can affect scroll anchoring in edge cases on
very long threads.
- Markdown/editor hardening changes are intentionally defensive, but
malformed content may render differently than before.
> 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.5, code execution and GitHub CLI tool use, medium
reasoning effort.
## 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: Paperclip <noreply@paperclip.ing>
2026-04-30 13:18:01 -05:00
|
|
|
|
padding: 0 0.625rem;
|
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;
|
|
|
|
|
|
}
|