Ely-built primitives plus gallery demos for every chapter-one entry, including gpui natives. The gallery now scripts real input by posting NSEvents to its own queue and shoots each interaction in both modes. Codex gpt-6-astra (max): three rounds; the last finding, a two-line doc comment, was fixed after the three-review cap.
366 lines
8.9 KiB
Markdown
366 lines
8.9 KiB
Markdown
# Chapters 1–10
|
||
|
||
## T01 Primitives — `src/primitives`
|
||
|
||
- [x] Box / View — native `div()`
|
||
- [x] Text — native: strings and `StyledText` are elements
|
||
- [x] Icon (T00)
|
||
- [x] IconSet / IconRegistry (T00)
|
||
- [x] Svg — native `svg()`
|
||
- [x] Image — loading, failed, placeholder over `img()`
|
||
- [x] Canvas — native `canvas()`
|
||
- [x] Divider / Separator
|
||
- [x] Spacer — native `div().flex_1()`
|
||
- [x] Portal — native `deferred(anchored())`
|
||
- [x] Overlay / Backdrop
|
||
- [x] Slot — native `impl IntoElement` params and `ParentElement`
|
||
- [x] Show / When — native `.when()` / `.when_some()`
|
||
- [x] For / Each — native `.children(iter)`
|
||
- [x] Fragment — native: children take iterators
|
||
- [x] VisuallyHidden — blocked: gpui 0.2.2 has no accessibility tree
|
||
- [x] FocusRing
|
||
- [x] FocusScope / FocusTrap
|
||
- [x] ClickOutside — native `on_mouse_down_out`
|
||
- [x] HoverArea — native `on_hover` / `.hover()`
|
||
- [x] Pressable — press state, long press
|
||
- [x] KeyboardHandler — native `on_key_down` / `on_action`
|
||
- [x] Measure
|
||
- [x] ResizeObserver → `primitives::Measure`
|
||
- [x] IntersectionObserver
|
||
- [x] Clipboard — native `write_to_clipboard` / `read_from_clipboard`
|
||
- [x] Tooltip Trigger — owns `Tooltip`: delay, follow mouse, rich content
|
||
|
||
## T02 Typography — `src/typography`
|
||
|
||
- [ ] Heading (H1–H6)
|
||
- [ ] Title / Subtitle
|
||
- [ ] Paragraph
|
||
- [ ] Label
|
||
- [ ] Caption
|
||
- [ ] Overline
|
||
- [ ] Code
|
||
- [ ] Kbd — ⌘ / Ctrl by platform
|
||
- [ ] KbdCombo
|
||
- [ ] Blockquote
|
||
- [ ] Highlight / Mark
|
||
- [ ] Truncate — native `.truncate()`
|
||
- [ ] LineClamp — native `.line_clamp(n)`
|
||
- [ ] MiddleEllipsis
|
||
- [ ] EllipsisTooltip
|
||
- [ ] Link
|
||
- [ ] ExternalLink
|
||
- [ ] RelativeTime
|
||
- [ ] DateTimeText
|
||
- [ ] NumberText
|
||
- [ ] CurrencyText
|
||
- [ ] PercentText
|
||
- [ ] FileSizeText
|
||
- [ ] DurationText
|
||
- [ ] PluralText
|
||
- [ ] CopyableText
|
||
- [ ] SelectableText — prove: selection over `StyledText` layout
|
||
- [ ] Emoji — shortcodes
|
||
- [ ] Latex / MathInline — prove: TeX subset
|
||
- [ ] AnimatedNumber
|
||
- [ ] Typewriter
|
||
- [ ] GradientText — per-glyph tonal ramp
|
||
- [ ] ShimmerText
|
||
|
||
## T03 Layout — `src/layout`
|
||
|
||
- [ ] Stack / HStack / VStack
|
||
- [ ] Flex — native `.flex()`
|
||
- [ ] Grid / GridItem — native `.grid()`, `.col_span()`
|
||
- [ ] SimpleGrid
|
||
- [ ] Masonry
|
||
- [ ] Center — native `.flex().items_center().justify_center()`
|
||
- [ ] Container
|
||
- [ ] AspectRatio
|
||
- [ ] Inset / Padding — native `.p_*()`
|
||
- [ ] Wrap — native `.flex_wrap()`
|
||
- [ ] Absolute / Positioned — native `.absolute()`
|
||
- [ ] Layer / ZStack
|
||
- [ ] ScrollArea
|
||
- [ ] Scrollbar
|
||
- [ ] ScrollShadow
|
||
- [ ] ScrollToTop
|
||
- [ ] StickyHeader
|
||
- [ ] SplitPane — horizontal, vertical, nested
|
||
- [ ] ResizablePanel / ResizablePanelGroup → `layout::SplitPane`
|
||
- [ ] ResizeHandle
|
||
- [ ] Collapsible
|
||
- [ ] Accordion / AccordionItem
|
||
- [ ] Card / CardHeader / CardBody / CardFooter
|
||
- [ ] Panel / PanelHeader
|
||
- [ ] Section / SectionHeader
|
||
- [ ] Group / Fieldset
|
||
- [ ] Frame
|
||
- [ ] Well
|
||
- [ ] Sidebar
|
||
- [ ] Drawer
|
||
- [ ] Sheet
|
||
- [ ] Page / PageHeader / PageContent
|
||
- [ ] AppShell
|
||
- [ ] MasterDetail
|
||
- [ ] ThreeColumnLayout → `layout::SplitPane`
|
||
- [ ] Dock / DockPanel
|
||
- [ ] DockZone / DropIndicator
|
||
- [ ] FloatingPanel
|
||
- [ ] Pane / PaneGroup
|
||
- [ ] Workspace — versioned layout snapshot
|
||
- [ ] Viewport
|
||
|
||
## T04 Window & Shell — `src/shell`
|
||
|
||
- [ ] TitleBar
|
||
- [ ] WindowControls — macOS, Windows, Linux
|
||
- [ ] TrafficLights → `shell::WindowControls`
|
||
- [ ] WindowDragRegion — native `window_control_area`
|
||
- [ ] WindowResizeBorder — prove: client-side decorations
|
||
- [ ] MenuBar
|
||
- [ ] NativeMenu — native `cx.set_menus()`
|
||
- [ ] Toolbar / ToolbarGroup / ToolbarSeparator
|
||
- [ ] StatusBar / StatusBarItem
|
||
- [ ] ActivityBar
|
||
- [ ] NavigationRail → `shell::ActivityBar`
|
||
- [ ] TabBar
|
||
- [ ] SplashScreen
|
||
- [ ] AboutDialog
|
||
- [ ] TrayIcon / TrayMenu — prove
|
||
- [ ] DockBadge — prove
|
||
- [ ] JumpList — native `cx.set_dock_menu()`
|
||
- [ ] SystemNotification — prove
|
||
- [ ] MultiWindow Manager
|
||
- [ ] WindowSwitcher
|
||
- [ ] QuickLauncher
|
||
- [ ] MiniWindow / CompactMode
|
||
- [ ] AlwaysOnTop — native `WindowKind::PopUp`
|
||
- [ ] PictureInPicture — host content
|
||
- [ ] UpdateBanner / UpdateDialog
|
||
- [ ] CrashReporter
|
||
- [ ] OfflineIndicator
|
||
- [ ] ZoomControl
|
||
|
||
## T05 Buttons & Actions — `src/buttons`
|
||
|
||
- [x] Button (T00)
|
||
- [x] IconButton (T00)
|
||
- [ ] ButtonGroup
|
||
- [ ] SplitButton
|
||
- [ ] DropdownButton / MenuButton
|
||
- [ ] ToggleButton
|
||
- [ ] ToggleGroup
|
||
- [ ] SegmentedControl
|
||
- [ ] FloatingActionButton
|
||
- [ ] LoadingButton → `buttons::Button` loading state
|
||
- [ ] ConfirmButton — hold or click twice
|
||
- [ ] HoldToConfirm → `buttons::ConfirmButton`
|
||
- [ ] CopyButton
|
||
- [ ] ShareButton
|
||
- [ ] CloseButton
|
||
- [ ] BackButton
|
||
- [ ] MoreButton
|
||
- [ ] ActionBar
|
||
- [ ] BulkActionBar
|
||
- [ ] ActionSheet
|
||
- [ ] QuickActions
|
||
- [ ] ShortcutHint
|
||
|
||
## T06a Forms · Text — `src/forms`
|
||
|
||
- [ ] Input / TextField
|
||
- [ ] TextArea
|
||
- [ ] PasswordInput
|
||
- [ ] SearchInput
|
||
- [ ] NumberInput
|
||
- [ ] ScrubInput
|
||
- [ ] CurrencyInput
|
||
- [ ] PercentInput
|
||
- [ ] UnitInput
|
||
- [ ] EmailInput
|
||
- [ ] UrlInput
|
||
- [ ] PhoneInput
|
||
- [ ] MaskedInput
|
||
- [ ] PinInput / OTPInput
|
||
- [ ] InlineEdit / EditableText
|
||
- [ ] InputGroup / InputAddon
|
||
- [ ] ClearableInput → `forms::Input`
|
||
- [ ] AutoResizeInput → `forms::Input`
|
||
- [ ] MentionInput
|
||
- [ ] HashtagInput
|
||
- [ ] TagInput / TokenInput
|
||
- [ ] KeyValueInput
|
||
- [ ] ListInput
|
||
- [ ] PathInput — native dialog via `prompt_for_paths`
|
||
- [ ] RegexInput
|
||
- [ ] ExpressionInput
|
||
- [ ] HotkeyInput / ShortcutRecorder
|
||
|
||
## T06b Forms · Selection
|
||
|
||
- [ ] Checkbox
|
||
- [ ] CheckboxGroup
|
||
- [ ] CheckboxCard
|
||
- [ ] Radio / RadioGroup
|
||
- [ ] RadioCard
|
||
- [ ] Switch / Toggle
|
||
- [ ] Select
|
||
- [ ] NativeSelect — blocked: gpui 0.2.2 has no native popup menu
|
||
- [ ] Combobox
|
||
- [ ] Autocomplete
|
||
- [ ] MultiSelect
|
||
- [ ] CascadeSelect / Cascader
|
||
- [ ] TreeSelect
|
||
- [ ] TransferList
|
||
- [ ] ListBox
|
||
- [ ] ChoiceChips / FilterChips
|
||
- [ ] Rating
|
||
- [ ] Slider
|
||
- [ ] RangeSlider
|
||
- [ ] VerticalSlider → `forms::Slider`
|
||
- [ ] Knob / Dial
|
||
- [ ] Stepper
|
||
|
||
## T06c Forms · Date & Time
|
||
|
||
- [ ] Calendar
|
||
- [ ] DatePicker
|
||
- [ ] DateRangePicker
|
||
- [ ] TimePicker
|
||
- [ ] DateTimePicker
|
||
- [ ] MonthPicker / YearPicker / QuarterPicker
|
||
- [ ] WeekPicker
|
||
- [ ] RelativeDatePicker
|
||
- [ ] TimezoneSelect
|
||
- [ ] DurationPicker
|
||
- [ ] CronEditor
|
||
|
||
## T06d Forms · Color
|
||
|
||
- [ ] ColorPicker — HSV, RGB, HEX, alpha
|
||
- [ ] ColorSwatch
|
||
- [ ] ColorPalette
|
||
- [ ] EyeDropper — prove: `NSColorSampler`
|
||
- [ ] GradientEditor
|
||
|
||
## T06e Forms · Files
|
||
|
||
- [ ] FilePicker / FileInput
|
||
- [ ] FolderPicker
|
||
- [ ] DropZone
|
||
- [ ] UploadList
|
||
- [ ] ImageUpload — preview, crop
|
||
- [ ] AvatarUpload
|
||
|
||
## T06f Forms · Other
|
||
|
||
- [ ] SignaturePad
|
||
- [ ] CodeInput
|
||
- [ ] JsonInput
|
||
- [ ] FontPicker
|
||
- [ ] IconPicker
|
||
- [ ] EmojiPicker
|
||
- [ ] LanguageSelect
|
||
- [ ] CountrySelect
|
||
- [ ] CurrencySelect
|
||
|
||
## T06g Forms · Structure
|
||
|
||
- [ ] Form
|
||
- [ ] FormField
|
||
- [ ] FormLabel
|
||
- [ ] FormDescription / HelperText
|
||
- [ ] FormError / ValidationMessage
|
||
- [ ] FormSection
|
||
- [ ] FormActions
|
||
- [ ] FieldArray
|
||
- [ ] InlineForm
|
||
- [ ] WizardForm / MultiStepForm
|
||
- [ ] DirtyIndicator
|
||
|
||
## T07 Navigation — `src/navigation`
|
||
|
||
- [ ] Tabs — top, left, bottom
|
||
- [ ] EditorTabs
|
||
- [ ] TabOverflowMenu
|
||
- [ ] Breadcrumb
|
||
- [ ] Pagination
|
||
- [ ] LoadMore
|
||
- [ ] Stepper / Steps / Wizard — as `Steps`
|
||
- [ ] Sidebar Navigation / NavItem / NavGroup
|
||
- [ ] NavigationMenu
|
||
- [ ] ActivityBar Item → `shell::ActivityBar`
|
||
- [ ] BackForwardNavigation
|
||
- [ ] History Navigation → `navigation::BackForwardNavigation`
|
||
- [ ] Anchor / TableOfContents
|
||
- [ ] JumpTo / GoToLine
|
||
- [ ] CommandPalette
|
||
- [ ] QuickOpen
|
||
- [ ] QuickSwitcher
|
||
- [ ] SearchPalette
|
||
- [ ] SpotlightSearch → `navigation::SearchPalette`
|
||
- [ ] Tour / Onboarding
|
||
|
||
## T08 Menus — `src/menus`
|
||
|
||
- [ ] Menu / MenuItem / MenuGroup / MenuSeparator
|
||
- [ ] SubMenu
|
||
- [ ] CheckboxMenuItem
|
||
- [ ] RadioMenuItem
|
||
- [ ] MenuItemShortcut
|
||
- [ ] MenuItemIcon
|
||
- [ ] ContextMenu
|
||
- [ ] DropdownMenu
|
||
- [ ] MenuBar Menu → `shell::MenuBar`
|
||
- [ ] OverflowMenu
|
||
- [ ] MegaMenu
|
||
- [ ] SearchableMenu
|
||
- [ ] PieMenu / RadialMenu
|
||
|
||
## T09 Overlays — `src/overlays`
|
||
|
||
- [ ] Tooltip → `primitives::Tooltip`
|
||
- [ ] Popover
|
||
- [ ] HoverCard
|
||
- [ ] Dialog / Modal
|
||
- [ ] AlertDialog
|
||
- [ ] ConfirmDialog
|
||
- [ ] PromptDialog
|
||
- [ ] FullscreenDialog
|
||
- [ ] Sheet → `layout::Sheet`
|
||
- [ ] Drawer → `layout::Drawer`
|
||
- [ ] Lightbox
|
||
- [ ] Spotlight / Coachmark
|
||
- [ ] FloatingToolbar
|
||
- [ ] Callout / Peek
|
||
- [ ] DropdownPanel → `overlays::Popover`
|
||
- [ ] InlinePopup → `overlays::Popover`
|
||
- [ ] ToastViewport
|
||
|
||
## T10 Feedback — `src/feedback`
|
||
|
||
- [ ] Toast — success, error, warning, info, action, undo
|
||
- [ ] Notification
|
||
- [ ] NotificationCenter
|
||
- [ ] Alert
|
||
- [ ] Banner
|
||
- [ ] Callout / Admonition
|
||
- [ ] InlineMessage
|
||
- [ ] StatusMessage
|
||
- [ ] Snackbar → `feedback::Toast`
|
||
- [ ] UndoToast → `feedback::Toast`
|
||
- [ ] ErrorView
|
||
- [ ] ErrorBoundary — renders and logs a `Result` error; never catches panics
|
||
- [ ] NotFound / 404 → `feedback::ErrorView`
|
||
- [ ] NoPermission / 403 → `feedback::ErrorView`
|
||
- [ ] Maintenance → `feedback::ErrorView`
|
||
- [ ] Offline → `feedback::ErrorView`
|
||
- [ ] EmptyState
|
||
- [ ] Result
|
||
- [ ] ConfirmationCard
|
||
- [ ] SavingIndicator
|
||
- [ ] SyncStatus
|
||
- [ ] ConnectionStatus
|
||
- [ ] Countdown
|
||
- [ ] Timer
|