Skip to content

Add TendrilCard widget and Kanban board view in JobsApp#1306

Draft
dcrjodle wants to merge 7 commits into
developmentfrom
feature/tendril-card-kanban-board
Draft

Add TendrilCard widget and Kanban board view in JobsApp#1306
dcrjodle wants to merge 7 commits into
developmentfrom
feature/tendril-card-kanban-board

Conversation

@dcrjodle

@dcrjodle dcrjodle commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator
Screenshot 2026-07-16 at 13 46 12

Summary

Adds a custom TendrilCard widget and uses it to render a Kanban board of jobs in JobsApp, matching the Tendril card-board design. Pairs with the column-chrome restyle in Ivy-Framework#4624 — the framework PR styles the columns; this one supplies the card bodies.

TendrilCard (Ivy.Tendril.Widgets)

  • C# (TendrilCard.cs): [ExternalWidget] record with core fields — title, type badge + icon, assignee avatar (initials + color), footer description line — plus an OnClick event. Fluent setters use a With* prefix to avoid colliding with same-named framework extension methods (MenuItem.Badge, Card.Footer/Title).
  • Frontend (frontend/src/TendrilCard/): React component + scoped CSS matching the card design. Badge icon resolved by Lucide name; avatar color derived from initials when none is given. Registered in the widget bundle (frontend/src/index.ts).
  • Demo (.samples/Apps/TendrilCard/DemoApp.cs): standalone board reproducing the screenshot data.

JobsApp (Ivy.Tendril)

  • New Table / Board tab toggle (JobsApp.cs, JobsApp.Board.cs). The Board groups jobs by JobStatus and renders each as a TendrilCard (type → badge, project → avatar w/ its configured color, plan title → title, status/timer → footer). Drag-to-move updates job status; clicking a card opens its output sheet.
  • The existing data table is untouched and remains the default view.

Verification

  • dotnet build src/Ivy.Tendril/Ivy.Tendril.csproj -p:IvySource=true0 errors, 0 warnings.
  • Widget frontend bundle builds with TendrilCard/tc-card included; dotnet format clean.

Note: until #4624 merges and the Ivy package is bumped, the board renders cards against the current column styling; the columns get their new look once the framework change lands.

🤖 Generated with Claude Code

Introduces a custom TendrilCard widget and uses it to render a Kanban board
of jobs alongside the existing data table.

TendrilCard (Ivy.Tendril.Widgets):
- C# [ExternalWidget] record with core fields: title, type badge + icon,
  assignee avatar (initials + color), and a footer description line; plus an
  OnClick event. Fluent setters use a With* prefix to avoid colliding with
  same-named framework extension methods (MenuItem.Badge, Card.Footer/Title).
- React component + scoped CSS matching the board card design; Lucide badge
  icon resolved by name, avatar color derived from initials when unset.
- Registered in the widgets frontend bundle; demo app under .samples.

JobsApp (Ivy.Tendril):
- New Table/Board tab toggle. The Board groups jobs by JobStatus and renders
  each as a TendrilCard (type -> badge, project -> avatar, plan title -> title,
  status/timer -> footer). Drag-to-move updates status; click opens the output
  sheet. The existing data table is unchanged and remains the default view.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@dcrjodle
dcrjodle marked this pull request as draft June 22, 2026 13:48
dcrjodle and others added 6 commits July 15, 2026 10:20
…l-card-kanban-board

# Conflicts:
#	src/Ivy.Tendril.Widgets/frontend/src/index.ts
Card: status icon tile (spinner/eye), tinted project pill, "..." actions
menu, bold title, muted status line with leading icon, and a footer meta
row (plan id, duration, tokens). Board maps job/plan state to the new
props and pulls time/token spend from the active or latest finished job.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Card widget: drop the border (shadow only), fix the title to two lines
with ellipsis truncation, and split the meta row into a lead item (plan
id) on the left and a trailing time/tokens group on the right. Plan-id
meta is now a clickable button firing OnMetaClick.

Board: columns are Planning, Draft, Implementing, Review (PR folded into
Review). A plan an ExecutePlan/RetryPlan job is working on stays in
Implementing through its brief Creating window so the card no longer
flashes into Planning and vanishes. Dragging a Draft card into
Implementing starts execution; the plan-id meta opens the plan sheet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Draft->Planning opens Update dialog, Implementing->Draft stops the job,
  Review->Implementing opens Request Changes (drags now reach the handler
  via the KanbanBuilder enum-conversion fix in Ivy-Framework)
- Planning/Implementing cards get Stop/Debug/Restart/Delete menu;
  Review/PR cards get the ReviewApp actions incl. Create PR
- New PR column as done column for reviewed plans with open PRs
- Draft card click opens the plan sheet instead of DraftsApp
- TendrilCard ticks elapsed time client-side via TimerStartedAt
- Card styling: 12px radius, subtler shadows, title weight 500

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- TendrilCard gains a Selected prop: 5% info-tinted background and a full
  info-colored border; the board marks the card whose detail sheet is open
  and clears it when the sheet closes
- Card hover now tints the background and lifts the shadow; base shadow
  opacity/blur bumped slightly
- Every Planning-column card is deletable: plan cards with no backing job
  get a Delete-only menu opening the delete-plan dialog

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@artem-ivy-ai

Copy link
Copy Markdown

Staging preview

📄 Docs: https://ivy-tendril-staging-docs-1306.sliplane.app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants