zotero-kb/docs/superpowers/specs/2026-04-16-project-items-and-inline-card-detail-design.md
Saberlve cf7e2feb19 feat: Implement project management features including rename and delete functionality
- Added project renaming capability in the workspace with appropriate API endpoints.
- Implemented project deletion functionality, ensuring project directories are removed.
- Updated UI to support project renaming and deletion, including inline editing and confirmation dialogs.
- Enhanced batch generation feature for project items with selection and progress tracking.
- Added tests for project renaming and deletion to ensure functionality and integrity.
2026-04-21 16:55:42 +08:00

139 lines
3.4 KiB
Markdown

# 2026-04-16 Project Items And Inline Card Detail Design
## Goal
Fix three related UI/data issues:
- collection 列表里未选中项文字太浅,保证未选中时也清晰可读
- 文献导入项目后,项目主区要立刻显示这些条目,而不是等生成卡片后才出现
- 卡片/条目详情改成在当前条目下方展开,不再集中显示在固定详情区域
## Approved Direction
Use a single project-scoped item list as the main source of truth in the center panel.
Each project item carries a `card_status`:
- `pending`: 已导入项目,但还没生成卡片
- `done`: 已生成卡片
The center panel renders all project items, not only completed cards.
## Data Model
### Backend project view
`ProjectService.get_project_view()` should return:
- `project_id`
- `selected_items`
- `items`
- `collections`
Each `items[]` element should contain:
- `item_key`
- `title`
- `creators`
- `year`
- `item_type`
- `card_status`
- card fields when available:
- `summary`
- `claims`
- `quotable_spans`
This makes imported-but-not-generated items visible immediately after import.
### Status semantics
- imported via `imports/item-keys` and not yet generated => `pending`
- present in `cards.json` => `done`
## UI Behavior
### Collection tree readability
Unselected collection cards keep the current light theme, but their text contrast must be increased:
- title remains readable on light background
- meta line remains readable without relying on hover or selection state
### Center panel item list
Replace the current “only cards” rendering with a project item list:
- `pending` items render as project entries with a clear “未生成卡片” state
- `done` items render as completed card entries
- remove the assumption that invisible means “not imported”
### Inline detail expansion
Clicking “查看详情” or the item itself expands detail directly below that same entry.
Rules:
- only one item detail is expanded at a time
- clicking the same item again collapses it
- clicking another item moves the expanded detail to that item
### Expanded detail content
For `pending`:
- title
- item key / year / type
- a short message that the item is already in the project but card generation has not happened yet
For `done`:
- existing summary
- claims
- quotable spans
## Frontend Structure
### State
Add a current expanded item key in the page script, e.g.:
- `expandedProjectItemKey`
### Rendering
Replace the current `renderCards()` + fixed `showCardDetail()` pattern with:
- a renderer for all project items
- inline expansion markup inserted under the active item
The fixed side detail area can be removed or converted into a passive empty state, because detail no longer lives there.
## Testing
Add or update tests to cover:
- project view includes imported pending items
- index template still contains the main page and valid inline script
- center panel contract no longer depends on a fixed detail-only area for current item detail
- inline project item detail hooks exist in the template script
## Risks
### Risk: center panel mixes two incompatible data shapes
Mitigation:
- make backend project view emit a single normalized `items` list
### Risk: pending items have no detail data
Mitigation:
- pending inline detail shows metadata plus explicit status messaging, not empty summary sections
### Risk: old fixed detail panel becomes misleading
Mitigation:
- remove dependence on it from the item interaction flow