- ConversationList: pinned first, then by day, newest first; a query keeps the titles that hold every word - ConversationItem: a Tab stop when there is something to do; its menu of rename, pin and delete shows on hover, while open, or while the row holds focus; a press on the menu leaves the row shut - new_chat_button, ProjectList, ProjectKnowledgePanel with a capacity meter - SharedConversationView: who shared it and when, and a way to carry it on - ConversationExport: format and thinking in a Dialog, Cancel or Export - icons: square-pen, corner-down-right - gallery: conversations with rename, pin and delete; projects; a shared conversation; export with a toast
335 lines
10 KiB
Markdown
335 lines
10 KiB
Markdown
# Chapters 21–30
|
||
|
||
## T21a Documents · Editing — `src/documents`
|
||
|
||
- [x] RichTextEditor
|
||
- [x] MarkdownEditor — visual, source, split
|
||
- [x] BlockEditor
|
||
- [x] Block types — paragraph, heading, list, todo, quote, code, divider, table, image, video, embed, math, callout, toggle, columns, synced; video and embed open as cards the app plays or shows
|
||
- [x] BlockHandle → the block editor's handle, a `menus::OverflowMenu` that drags its block
|
||
- [x] SlashMenu → `/` in `BlockEditor`
|
||
- [x] FloatingFormatToolbar → `overlays::FloatingToolbar`
|
||
- [x] FixedFormatToolbar
|
||
- [x] LinkEditor
|
||
- [x] MentionMenu → `@` in `RichTextEditor` and `BlockEditor`; `forms::MentionInput` in a field
|
||
- [x] EmojiAutocomplete → a colon and two letters in `RichTextEditor` and `BlockEditor`
|
||
- [x] TableEditor → the block editor's table: rows and columns added and removed, cells merged across
|
||
- [x] ImageEditorBlock → the block editor's picture: resized by its edges, aligned, captioned
|
||
- [x] MathEditor / LatexBlock → the block editor's math block over `typography::Latex`
|
||
- [x] MermaidBlock / DiagramBlock — host renders the SVG → `BlockEditor::diagrams`
|
||
- [x] CodeBlockEditor → the block editor's code block
|
||
- [x] TodoItem / Checklist
|
||
- [x] PlaceholderText → each kind's hint in `BlockEditor`
|
||
- [x] WordCount / CharacterCount → `WordCount`, with `limit` for characters
|
||
- [x] ReadingTime
|
||
|
||
## T21b Documents · Reading
|
||
|
||
- [x] MarkdownRenderer
|
||
- [x] DocumentViewer — host pages
|
||
- [x] PDFViewer — host pages; thumbnails, search, zoom, notes → `documents::DocumentViewer` with `thumbnails`, `find` (an `editor::FindWidget`) and `notes`
|
||
- [x] EpubReader — host chapters
|
||
- [x] OfficePreview — host pages → `documents::DocumentViewer`
|
||
- [x] PageThumbnailList
|
||
- [x] TableOfContents → `navigation::TableOfContents`; `MarkdownRenderer::sections` and `outline` feed it
|
||
- [x] DocumentOutline → `navigation::TableOfContents`
|
||
- [x] Footnote
|
||
- [x] Glossary / TooltipTerm
|
||
- [x] ReadingProgress
|
||
- [x] FocusMode / ZenMode → `documents::ZenMode`
|
||
- [x] PrintPreview — host pages
|
||
|
||
## T21c Documents · Knowledge
|
||
|
||
- [x] PageTree → `lists::Tree`, a page's emoji leading its label
|
||
- [x] Backlinks
|
||
- [x] GraphView → `charts::NetworkGraph`
|
||
- [x] PageCover / PageIcon
|
||
- [x] PageProperties → `data_display::PropertyGrid`
|
||
- [x] DatabaseView — table, board, gallery, calendar, timeline → lands with Project (T31): its board is the KanbanBoard, its calendar the CalendarMonthView (T30)
|
||
- [x] TemplatePicker
|
||
- [x] TrashBin
|
||
- [x] VersionHistory
|
||
- [x] PageHistoryDiff
|
||
- [x] Favorites / Pinned → `documents::Favorites`
|
||
|
||
## T22 Collaboration — `src/collab`
|
||
|
||
- [x] PresenceAvatars
|
||
- [x] RemoteCursor → over a `forms::TextInput`, placed where its offset sits as the field paints
|
||
- [x] RemoteSelection → over a `forms::TextInput`, from `TextInput::bounds_for_range`
|
||
- [x] CommentThread
|
||
- [x] CommentBubble / CommentMarker → `collab::CommentMarker`, its thread in an `overlays::Popover`
|
||
- [x] CommentSidebar
|
||
- [x] Reply / ReactionPicker
|
||
- [x] Reactions
|
||
- [x] Annotation / Highlight → `collab::AnnotatedText`; a plain mark is `typography::Highlight`
|
||
- [x] SuggestionMode → edits become suggestions through `collab::suggested`
|
||
- [x] TrackChanges
|
||
- [x] ShareDialog → with `collab::LinkAccess` for who the link lets in
|
||
- [x] PermissionSelect
|
||
- [x] InviteInput → a `forms::TagInput` that checks each address
|
||
- [x] AccessList
|
||
- [x] ActivityLog → `data_display::ActivityFeed`
|
||
- [x] FollowMode
|
||
- [x] LiveIndicator
|
||
|
||
## T23a AI Chat · Messages — `src/chat`
|
||
|
||
- [x] ChatContainer
|
||
- [x] MessageList — virtualized, stick to bottom, new-message hint
|
||
- [x] MessageBubble — user, assistant, system, error
|
||
- [x] MessageAvatar
|
||
- [x] MessageHeader
|
||
- [x] MessageFooter
|
||
- [x] StreamingText
|
||
- [x] StreamingMarkdown
|
||
- [x] StreamingCursor
|
||
- [x] CodeBlock — language, copy, download, run, fold, apply
|
||
- [x] MathBlock → `typography::Latex`
|
||
- [x] TableBlock → `documents::MarkdownRenderer`
|
||
- [x] MermaidRenderer → the host draws the SVG; `chat::ImageMessage` shows it
|
||
- [x] ImageMessage / ImageGrid
|
||
- [x] FileMessage
|
||
- [x] AudioMessage
|
||
- [x] VideoMessage — host frames
|
||
- [x] LinkPreviewCard
|
||
- [x] QuoteReply
|
||
- [x] MessageActions
|
||
- [x] MessageEditor
|
||
- [x] BranchNavigator
|
||
- [x] RegenerateButton → `chat::regenerate_button`
|
||
- [x] StopGeneratingButton → `chat::stop_button`
|
||
- [x] ContinueButton → `chat::continue_button`
|
||
- [x] ErrorMessage / RetryMessage → `chat::ErrorMessage`, over `feedback::Alert`
|
||
- [x] RateLimitNotice
|
||
- [x] FeedbackForm
|
||
- [x] ScrollToBottomButton
|
||
- [x] DateSeparator
|
||
- [x] ThinkingBlock / ReasoningPanel → `chat::ThinkingBlock`
|
||
- [x] ThinkingIndicator
|
||
- [x] ThinkingDuration
|
||
|
||
## T23b AI Chat · Citations
|
||
|
||
- [x] CitationBadge / InlineCitation → `chat::CitationBadge`, set after the words it cites
|
||
- [x] SourceCard
|
||
- [x] SourceList / SourcesPanel → `chat::SourceList`
|
||
- [x] SearchProgress
|
||
- [x] WebResultCard
|
||
- [x] DocumentChunkPreview
|
||
|
||
## T23c AI Chat · Input
|
||
|
||
- [x] PromptInput / Composer → `chat::PromptInput`
|
||
- [x] AttachmentButton
|
||
- [x] AttachmentChip / AttachmentPreview → `chat::AttachmentChip`, a picture's thumbnail or a file's icon
|
||
- [x] PasteImagePreview → a pasted picture as an `AttachmentChip`
|
||
- [x] DragDropOverlay
|
||
- [x] VoiceInputButton
|
||
- [x] VoiceWaveform / RecordingIndicator → `chat::VoiceWaveform`, a red dot and the time with the bars
|
||
- [x] SlashCommandMenu → `/` at the start of `chat::PromptInput`, over `forms::Suggestions`
|
||
- [x] PromptTemplateMenu → `menus::DropdownMenu` of saved prompts
|
||
- [x] ContextMentionMenu → `@` in `chat::PromptInput`
|
||
- [x] ContextChips
|
||
- [x] ModelSelector → `forms::Select`, a note on each model
|
||
- [x] ModeSelector → `buttons::SegmentedControl`
|
||
- [x] ToolToggleMenu → `menus::DropdownMenu` with check rows
|
||
- [x] TemperatureSlider / ParameterPanel → `chat::ParameterPanel`
|
||
- [x] SystemPromptEditor
|
||
- [x] TokenCounter
|
||
- [x] ContextWindowMeter → `data_display::UsageBar`
|
||
- [x] CostEstimator
|
||
- [x] SendButton
|
||
- [x] InputHint
|
||
|
||
## T23d AI Chat · Conversations
|
||
|
||
- [x] ConversationList
|
||
- [x] ConversationItem
|
||
- [x] ConversationSearch → `forms::SearchInput` over `chat::ConversationList::query`
|
||
- [x] NewChatButton → `chat::new_chat_button`, a `buttons::Button`
|
||
- [x] FolderList / ProjectList → `chat::ProjectList`
|
||
- [x] ProjectKnowledgePanel
|
||
- [x] SharedConversationView
|
||
- [x] ConversationExport
|
||
|
||
## T23e AI Chat · Welcome
|
||
|
||
- [ ] WelcomeScreen / Greeting
|
||
- [ ] SuggestionChips / StarterPrompts
|
||
- [ ] PromptLibrary
|
||
- [ ] FollowUpSuggestions
|
||
- [ ] CapabilityCards
|
||
|
||
## T24 Agent — `src/agent`
|
||
|
||
- [ ] ToolCallCard
|
||
- [ ] ToolCallGroup
|
||
- [ ] ToolApprovalDialog
|
||
- [ ] PermissionPrompt
|
||
- [ ] AgentStepList / TaskTimeline
|
||
- [ ] AgentPlan / TodoList
|
||
- [ ] AgentStatus
|
||
- [ ] AgentProgress
|
||
- [ ] SubAgentTree
|
||
- [ ] FileChangeCard
|
||
- [ ] MultiFileDiff Review
|
||
- [ ] CommandExecutionCard
|
||
- [ ] BrowserPreview / ScreenshotStream — host frames
|
||
- [ ] ComputerUseViewer — host frames
|
||
- [ ] ArtifactPanel
|
||
- [ ] ArtifactVersionSwitcher
|
||
- [ ] LivePreview — host content
|
||
- [ ] SandboxStatus
|
||
- [ ] MCPServerList / ConnectorList
|
||
- [ ] ToolRegistry Panel
|
||
- [ ] MemoryPanel
|
||
- [ ] CheckpointList / Rewind
|
||
- [ ] InterruptButton
|
||
- [ ] HumanInputRequest
|
||
- [ ] TokenUsageChart
|
||
- [ ] CostBreakdown
|
||
- [ ] TraceViewer
|
||
- [ ] EvalResultTable
|
||
|
||
## T25 Generative — `src/generative`
|
||
|
||
- [ ] ImageGenerationPanel
|
||
- [ ] GenerationQueue
|
||
- [ ] GenerationGrid
|
||
- [ ] VariationPicker
|
||
- [ ] PromptEnhancer
|
||
- [ ] NegativePromptInput
|
||
- [ ] StylePresetPicker
|
||
- [ ] SeedInput
|
||
- [ ] AspectRatioPicker
|
||
- [ ] InpaintCanvas
|
||
- [ ] MaskBrush
|
||
- [ ] ImageCompare → `data_display::BeforeAfter`
|
||
- [ ] AudioGenerationPlayer
|
||
- [ ] VideoGenerationTimeline
|
||
- [ ] TTSVoicePicker
|
||
- [ ] ModelCard
|
||
- [ ] ModelDownloadManager
|
||
- [ ] ModelStatus
|
||
- [ ] HardwareMonitor
|
||
- [ ] FineTuneJobCard
|
||
- [ ] DatasetViewer
|
||
- [ ] EmbeddingVisualizer — 2D, 3D projection
|
||
- [ ] PromptPlayground
|
||
- [ ] PromptDiff / PromptVersionHistory
|
||
- [ ] ABCompareView
|
||
|
||
## T26 Media — `src/media`
|
||
|
||
- [ ] ImageViewer — zoom, pan, rotate, fit
|
||
- [ ] ImageCropper — also T06e ImageUpload
|
||
- [ ] ImageAnnotator
|
||
- [ ] ImageThumbnail
|
||
- [ ] Lightbox / Gallery Viewer → `overlays::Lightbox`
|
||
- [ ] VideoPlayer — host frames
|
||
- [ ] VideoTimeline / Scrubber
|
||
- [ ] VideoThumbnailStrip
|
||
- [ ] AudioPlayer — host playback
|
||
- [ ] AudioWaveform
|
||
- [ ] AudioSpectrum / Visualizer
|
||
- [ ] VolumeControl
|
||
- [ ] PlaybackSpeedControl
|
||
- [ ] MediaControls
|
||
- [ ] Playlist
|
||
- [ ] SubtitleEditor
|
||
- [ ] ScreenRecorderControls
|
||
- [ ] CameraPreview — host frames
|
||
- [ ] MicLevelMeter
|
||
- [ ] DeviceSelector
|
||
- [ ] 3DModelViewer — host frames, orbit input
|
||
|
||
## T27 Files — `src/files`
|
||
|
||
- [ ] FileExplorer — list, icons, columns
|
||
- [ ] FileGrid
|
||
- [ ] FileList
|
||
- [ ] FileItem
|
||
- [ ] FileIcon
|
||
- [ ] FilePreview / QuickLook
|
||
- [ ] FileBreadcrumb / PathBar → `navigation::Breadcrumb`
|
||
- [ ] FolderTree → `lists::FileTree`
|
||
- [ ] FileContextMenu → `menus::ContextMenu`
|
||
- [ ] RenameInline → `forms::InlineEdit`
|
||
- [ ] DragDropFiles → `forms::DropZone`
|
||
- [ ] FileOperationProgress
|
||
- [ ] TransferQueue
|
||
- [ ] DownloadManager
|
||
- [ ] StorageUsage → `data_display::UsageBar`
|
||
- [ ] RecentFiles
|
||
- [ ] Favorites / Bookmarks → `documents::Favorites`
|
||
- [ ] FileSearch
|
||
- [ ] DuplicateFinder
|
||
- [ ] ArchiveViewer — host entries
|
||
- [ ] HexViewer → `debug::HexViewer`
|
||
|
||
## T28 Messaging — `src/messaging`
|
||
|
||
- [ ] ChannelList / ChatList
|
||
- [ ] ChannelItem
|
||
- [ ] DirectMessageItem
|
||
- [ ] MessageThread
|
||
- [ ] ThreadPanel
|
||
- [ ] ChatMessage
|
||
- [ ] UnreadDivider
|
||
- [ ] MessageReactions → `collab::Reactions`
|
||
- [ ] ReadReceipt
|
||
- [ ] TypingIndicator → `motion::TypingIndicator`
|
||
- [ ] MemberList
|
||
- [ ] UserProfileCard
|
||
- [ ] OnlineStatus
|
||
- [ ] StatusSetter
|
||
- [ ] VoiceCallBar
|
||
- [ ] VideoCallGrid — host frames
|
||
- [ ] ScreenShareView — host frames
|
||
- [ ] CallControls
|
||
- [ ] ParticipantTile
|
||
- [ ] IncomingCallDialog
|
||
- [ ] StickerPicker
|
||
- [ ] GifPicker — host images
|
||
- [ ] PinnedMessages
|
||
- [ ] ChannelHeader
|
||
- [ ] HuddleIndicator
|
||
|
||
## T29 Mail — `src/mail`
|
||
|
||
- [ ] MailboxList / FolderList
|
||
- [ ] MailList
|
||
- [ ] MailItem
|
||
- [ ] MailReader
|
||
- [ ] MailComposer
|
||
- [ ] RecipientInput
|
||
- [ ] MailThreadView
|
||
- [ ] QuotedText
|
||
- [ ] SignatureEditor
|
||
- [ ] LabelPicker
|
||
- [ ] SnoozePicker
|
||
- [ ] ScheduleSend
|
||
- [ ] InboxZeroState
|
||
|
||
## T30 Calendar — `src/calendar`
|
||
|
||
- [ ] CalendarMonthView
|
||
- [ ] CalendarWeekView
|
||
- [ ] CalendarDayView
|
||
- [ ] AgendaView
|
||
- [ ] YearView
|
||
- [ ] MiniCalendar → `forms::Calendar`
|
||
- [ ] EventCard / EventChip
|
||
- [ ] EventEditor
|
||
- [ ] EventPopover
|
||
- [ ] TimeGrid — drag to create, resize
|
||
- [ ] AllDayRow
|
||
- [ ] CurrentTimeIndicator
|
||
- [ ] RecurrenceEditor
|
||
- [ ] AvailabilityPicker
|
||
- [ ] TimezoneOverlay
|
||
- [ ] ReminderPicker
|
||
- [ ] AttendeeList
|