@@ -25,9 +25,9 @@ Ely GPUI Component. A component library for GPUI, in light and dark.
-`cargo run --example gallery -- --capture <dir>` writes PNGs of every page, light and dark, top to bottom, then each page's scripted states, including windows the demos open. macOS only.
-`cargo run --example gallery -- --narrow 280 --capture <dir>` lays each page, header and body, at that width in a padded card and shoots it without its script, whose aims are measured at full width. Demos that set their own width run past the card.
-`RUSTC_BOOTSTRAP=1 cargo check --lib --target wasm32-unknown-unknown` checks the web build; gpui_web's `wasm_thread` needs the bootstrap, as Zed's web examples do.
-`ELY_GALLERY_ASSETS=<address of out/assets/> scripts/web.sh <out>` builds the gallery for the browser, profile `web`, and fails past Cloudflare's 25 MiB. It opens at `?page=<slug>&story=<title or slug>&theme=light|dark`; the host page calls `gallery.setTheme(mode)` or posts `{ ely: "theme", theme }` later.
-`python3 scripts/stories.py` writes `examples/gallery/stories.json`, every page's sections in drawing order with their components, for the site. `scripts/check.sh` refuses a stale one.
-`cargo test --lib --features test-support`, `cargo clippy --all-targets --features test-support -- -D warnings`, `cargo fmt --check`. `scripts/check.sh` runs them with the house rules.
-`ELY_GALLERY_ASSETS=<address of out/assets/> scripts/web.sh <out>` builds the gallery for the browser, profile `web`, and fails past Cloudflare's 25 MiB. It opens at `?page=<slug>&story=<title or slug>&theme=light|dark`; the host page calls `gallery.setTheme(mode)` or posts `{ ely: "theme", theme }`, before the wasm runs or after, and the page posts `{ ely: "ready" }` to its parent once it runs.
-`python3 scripts/stories.py` writes `examples/gallery/stories.json`, every page's sections in drawing order with their components, for the site: the names in a title, and in its `SHOWN` table what a story draws beyond them. It fails on a section opened inside another and on a ticked entry with a home of its own that no story names. `scripts/check.sh` refuses a stale one.
-`cargo test --lib --features test-support`, `cargo clippy --all-targets --features test-support -- -D warnings`, `cargo fmt --check`. `scripts/check.sh` runs them with the house rules and lints the gallery for wasm32.
-`rm -rf target/debug/incremental` and `cargo clean -p ely-gpui-component` after each task item keep the disk lean. Cargo keeps every old build of the crate and its tests under a new hash; by T25 they had filled the disk.
-`scripts/icons.sh <lucide-name>...` adds icons. Then add a line to `IconName` in `src/primitives/icon.rs`.
-`python3 scripts/countries.py <ne_110m_admin_0_countries.geojson>` writes the bundled world; `python3 scripts/tiles.py <same file>` writes the gallery's map tiles.
@@ -180,9 +180,10 @@ Ely GPUI Component. A component library for GPUI, in light and dark.
- Time reads `web_time::Instant`: std's compiles for wasm32 and panics in the browser. `scripts/check.sh` refuses std's in `src` and the gallery.
- What cannot build for wasm32 is absent there through `cfg(not(target_family = "wasm"))`, never faked: the live terminal, `Terminal` and `Launch` with their grid, keys and search, and the gallery's capture harness.
- A gallery demo a browser cannot run says why on the web through `ui::web_note`, in the blocked style: a second window (`own_window`), files from the dialog or a drop (`NO_FILES`), the menu bar, window moves, a clipboard read.
- A story is a gallery section: its title is a literal, one per page. Under `ui::Story` the one asked for draws without its title and the rest hide, which skips their prepaint and paint; a story the page lacks fails in the page.
- A story is a gallery section: its title is a literal, one per page. Under `ui::Story` the one asked for draws without its title; the rest drop their demos (`ui::Section`), so nothing of theirs lays out, loads or moves. A story the page lacks fails in the page.
- The gallery's pictures go through `asset!` and `ui::picture` or `ui::resource`: a file natively, on the web an address under `ELY_GALLERY_ASSETS`, since gpui reads no files there.
-The first frame wears the host's mode through `Theme::set_mode_now`; `set_mode` fades from the colors on screen.
-On the web a paste reaches the focused field as the browser's paste event, through `EntityInputHandler::paste`: gpui_web reads no clipboard on demand, so Paste stays unbound there (`TextInput`, `CodeEditor`).
- The first frame wears the host's mode through `Theme::set_mode_now`, a mode sent before the window opens included; `set_mode` fades from the colors on screen.
- The system time zone comes from `typography::format::system_zone`, which fails loud; jiff's `TimeZone::system()` falls back to UTC in silence.
- A Select with nothing to pick stays shut: disabled, it shows its placeholder; open, it fails (`media::DeviceSelector` says no device was found).
- A list opens with its cursor on the current choice: Select on the chosen row, Combobox on its value, MultiSelect on the first one ticked, SelectableList on its first selected row. A selection the owner makes, not the echo of the list's own pick, moves SelectableList's cursor there.
"LiveRegion / Announcer, AccessibleIcon, AriaLabel, ScreenReaderOnly: not yet shown: gpui builds an AccessKit tree from elements with an id and a role, and no screen reader here reads it.",
format!("LiveRegion / Announcer, AccessibleIcon, AriaLabel, ScreenReaderOnly: not yet shown: {UNREAD}."),
"A box resized from its edges or its grip; a picture turned by its knob, as gpui turns svgs alone; tiles taken by a band drawn on empty space; rows sorted by drag through motion::Reorder.",
"A long press is primitives::Pressable; a double press is gpui's click_count. The wheel pans and, with Command, zooms layout::Viewport; two fingers swipe lists::SwipeableListItem.",
cx,
)
.child(
section(
"LongPress · DoubleClick · Gesture · PanZoom",
"A long press is primitives::Pressable; a double press is gpui's click_count. The wheel pans and, with Command, zooms layout::Viewport; two fingers swipe lists::SwipeableListItem.",
"A browser page has no menu bar, and gpui on the web keeps no cx.set_menus: this bar draws the gallery's own list of the same menus.",
"A browser page has no menu bar, and gpui on the web keeps no cx.set_menus: this bar draws the gallery's own list of the same menus. About Ely would open a second window and Quit would end the app, neither of which a page can, so both only log.",
"Cells to edit like a spreadsheet's. Arrows walk, Shift stretches a range, typing or a double press edits, Delete clears, and Cmd-C and Cmd-V copy and paste.",
cx,
)
.children(web_note(
"A browser reads its clipboard only as it pastes into a text field, so Cmd-V pastes no cells here.",
"A browser starts no processes and has no pseudo-terminal, so no shell runs here, and alacritty's grid, which draws the build's output, does not build for the web. The blocks, colored output, logs and processes below draw without one.",
"A browser starts no processes and has no pseudo-terminal, so no shell runs here, and alacritty's grid, which draws the build's output, does not build for the web. The page's other stories, command blocks, colored output, logs and processes, draw without one.",
{"number":1,"slug":"primitives","title":"Primitives","summary":"The smallest parts. Most are gpui itself; Ely adds the rest.","stories":[{"title":"Box / View","slug":"box-view","components":["Box","View"]},{"title":"Text","slug":"text","components":["Text"]},{"title":"Icon","slug":"icon","components":["Icon"]},{"title":"IconSet / IconRegistry","slug":"iconset-iconregistry","components":["IconSet","IconRegistry"]},{"title":"Svg","slug":"svg","components":["Svg"]},{"title":"Image","slug":"image","components":["Image"]},{"title":"Canvas","slug":"canvas","components":["Canvas"]},{"title":"Divider / Separator","slug":"divider-separator","components":["Divider","Separator"]},{"title":"Spacer","slug":"spacer","components":["Spacer"]},{"title":"Portal","slug":"portal","components":["Portal"]},{"title":"Overlay / Backdrop","slug":"overlay-backdrop","components":["Overlay","Backdrop"]},{"title":"Slot","slug":"slot","components":["Slot"]},{"title":"Show / When","slug":"show-when","components":["Show","When"]},{"title":"For / Each","slug":"for-each","components":["For","Each"]},{"title":"Fragment","slug":"fragment","components":["Fragment"]},{"title":"VisuallyHidden","slug":"visuallyhidden","components":["VisuallyHidden"]},{"title":"FocusRing","slug":"focusring","components":["FocusRing"]},{"title":"FocusScope / FocusTrap","slug":"focusscope-focustrap","components":["FocusScope","FocusTrap"]},{"title":"ClickOutside","slug":"clickoutside","components":["ClickOutside"]},{"title":"HoverArea","slug":"hoverarea","components":["HoverArea"]},{"title":"Pressable","slug":"pressable","components":["Pressable"]},{"title":"KeyboardHandler","slug":"keyboardhandler","components":["KeyboardHandler"]},{"title":"Measure","slug":"measure","components":["Measure"]},{"title":"IntersectionObserver","slug":"intersectionobserver","components":["IntersectionObserver"]},{"title":"Clipboard","slug":"clipboard","components":["Clipboard"]},{"title":"Tooltip Trigger","slug":"tooltip-trigger","components":["Tooltip Trigger"]}]},
{"number":2,"slug":"typography","title":"Typography","summary":"Inter for words, tabular figures for numbers, one ink for everything.","stories":[{"title":"Heading (H1–H6)","slug":"heading-h1-h6","components":["Heading"]},{"title":"Title / Subtitle","slug":"title-subtitle","components":["Title","Subtitle"]},{"title":"Paragraph","slug":"paragraph","components":["Paragraph"]},{"title":"Label","slug":"label","components":["Label"]},{"title":"Caption","slug":"caption","components":["Caption"]},{"title":"Overline","slug":"overline","components":["Overline"]},{"title":"Code","slug":"code","components":["Code"]},{"title":"Kbd","slug":"kbd","components":["Kbd"]},{"title":"KbdCombo","slug":"kbdcombo","components":["KbdCombo"]},{"title":"Blockquote","slug":"blockquote","components":["Blockquote"]},{"title":"Highlight / Mark","slug":"highlight-mark","components":["Highlight","Mark"]},{"title":"Truncate / Ellipsis","slug":"truncate-ellipsis","components":["Truncate"]},{"title":"LineClamp","slug":"lineclamp","components":["LineClamp"]},{"title":"MiddleEllipsis","slug":"middleellipsis","components":["MiddleEllipsis"]},{"title":"EllipsisTooltip","slug":"ellipsistooltip","components":["EllipsisTooltip"]},{"title":"Link","slug":"link","components":["Link"]},{"title":"ExternalLink","slug":"externallink","components":["ExternalLink"]},{"title":"RelativeTime","slug":"relativetime","components":["RelativeTime"]},{"title":"DateTimeText","slug":"datetimetext","components":["DateTimeText"]},{"title":"NumberText","slug":"numbertext","components":["NumberText"]},{"title":"CurrencyText","slug":"currencytext","components":["CurrencyText"]},{"title":"PercentText","slug":"percenttext","components":["PercentText"]},{"title":"FileSizeText","slug":"filesizetext","components":["FileSizeText"]},{"title":"DurationText","slug":"durationtext","components":["DurationText"]},{"title":"PluralText","slug":"pluraltext","components":["PluralText"]},{"title":"CopyableText","slug":"copyabletext","components":["CopyableText"]},{"title":"SelectableText","slug":"selectabletext","components":["SelectableText"]},{"title":"Emoji","slug":"emoji","components":["Emoji"]},{"title":"Latex / MathInline","slug":"latex-mathinline","components":["Latex","MathInline"]},{"title":"AnimatedNumber","slug":"animatednumber","components":["AnimatedNumber"]},{"title":"Typewriter","slug":"typewriter","components":["Typewriter"]},{"title":"GradientText","slug":"gradienttext","components":["GradientText"]},{"title":"ShimmerText","slug":"shimmertext","components":["ShimmerText"]}]},
{"number":7,"slug":"navigation","title":"Navigation","summary":"Tabs, paths, places and palettes: where you are, and the ways out.","stories":[{"title":"Tabs","slug":"tabs","components":["Tabs"]},{"title":"EditorTabs / TabOverflowMenu","slug":"editortabs-taboverflowmenu","components":["EditorTabs","TabOverflowMenu"]},{"title":"Breadcrumb","slug":"breadcrumb","components":["Breadcrumb"]},{"title":"Pagination","slug":"pagination","components":["Pagination"]},{"title":"Steps / Wizard","slug":"steps-wizard","components":["Steps","Wizard"]},{"title":"Sidebar Navigation / NavItem / NavGroup","slug":"sidebar-navigation-navitem-navgroup","components":["Sidebar Navigation","NavItem","NavGroup"]},{"title":"NavigationMenu","slug":"navigationmenu","components":["NavigationMenu"]},{"title":"BackForwardNavigation / History","slug":"backforwardnavigation-history","components":["BackForwardNavigation"]},{"title":"Anchor / TableOfContents","slug":"anchor-tableofcontents","components":["Anchor","TableOfContents"]},{"title":"JumpTo / GoToLine","slug":"jumpto-gotoline","components":["JumpTo","GoToLine"]},{"title":"CommandPalette","slug":"commandpalette","components":["CommandPalette"]},{"title":"QuickOpen","slug":"quickopen","components":["QuickOpen"]},{"title":"QuickSwitcher","slug":"quickswitcher","components":["QuickSwitcher"]},{"title":"SearchPalette / SpotlightSearch / QuickLauncher","slug":"searchpalette-spotlightsearch-quicklauncher","components":["SearchPalette","SpotlightSearch","QuickLauncher"]}]},
{"number":8,"slug":"menus","title":"Menus","summary":"Rows of actions that open from a button, a right click or an arrow, and nest.","stories":[{"title":"Menu / MenuItem / MenuGroup / MenuSeparator / SubMenu / MenuItemShortcut / MenuItemIcon","slug":"menu-menuitem-menugroup-menuseparator-submenu-menuitemshortcut-menuitemicon","components":["Menu","MenuItem","MenuGroup","MenuSeparator","SubMenu","MenuItemShortcut","MenuItemIcon"]},{"title":"CheckboxMenuItem / RadioMenuItem","slug":"checkboxmenuitem-radiomenuitem","components":["CheckboxMenuItem","RadioMenuItem"]},{"title":"DropdownMenu / SplitButton / OverflowMenu","slug":"dropdownmenu-splitbutton-overflowmenu","components":["DropdownMenu","SplitButton","OverflowMenu"]},{"title":"ContextMenu","slug":"contextmenu","components":["ContextMenu"]},{"title":"MenuBar Menu","slug":"menubar-menu","components":["MenuBar Menu"]},{"title":"MegaMenu","slug":"megamenu","components":["MegaMenu"]},{"title":"SearchableMenu","slug":"searchablemenu","components":["SearchableMenu"]},{"title":"PieMenu / RadialMenu","slug":"piemenu-radialmenu","components":["PieMenu","RadialMenu"]}]},
{"number":9,"slug":"overlays","title":"Overlays","summary":"Panels over the page: anchored to a control, over a scrim, or over everything.","stories":[{"title":"Popover / DropdownPanel / InlinePopup","slug":"popover-dropdownpanel-inlinepopup","components":["Popover","DropdownPanel","InlinePopup"]},{"title":"HoverCard","slug":"hovercard","components":["HoverCard"]},{"title":"Dialog / Modal / AlertDialog / ConfirmDialog / PromptDialog / FullscreenDialog","slug":"dialog-modal-alertdialog-confirmdialog-promptdialog-fullscreendialog","components":["Dialog","Modal","AlertDialog","ConfirmDialog","PromptDialog","FullscreenDialog"]},{"title":"Lightbox","slug":"lightbox","components":["Lightbox"]},{"title":"Spotlight / Coachmark / Tour","slug":"spotlight-coachmark-tour","components":["Spotlight","Coachmark","Tour"]},{"title":"FloatingToolbar","slug":"floatingtoolbar","components":["FloatingToolbar"]},{"title":"Callout / Peek","slug":"callout-peek","components":["Callout","Peek"]},{"title":"Tooltip / Sheet / Drawer / DropdownPanel / InlinePopup / ToastViewport","slug":"tooltip-sheet-drawer-dropdownpanel-inlinepopup-toastviewport","components":["Tooltip","Sheet","Drawer","DropdownPanel","InlinePopup","ToastViewport"]}]},
{"number":17,"slug":"editor","title":"Editor","summary":"A code editor with the gutter, folds and cursors it needs, the help a language server gives, search, the panels around it and its status row.","stories":[{"title":"CodeEditor / EditorGutter / LineNumbers / FoldingControl / Minimap / Ruler / IndentGuide / BracketMatcher / RainbowBrackets / MultiCursor / SelectionHighlight / StickyScroll / Breadcrumb / InlayHints / CodeLens / InlineDecoration","slug":"codeeditor-editorgutter-linenumbers-foldingcontrol-minimap-ruler-indentguide-bracketmatcher-rainbowbrackets-multicursor-selectionhighlight-stickyscroll-breadcrumb-inlayhints-codelens-inlinedecoration","components":["CodeEditor","EditorGutter","LineNumbers","FoldingControl","MiniMap","Ruler","IndentGuide","BracketMatcher","RainbowBrackets","MultiCursor","SelectionHighlight","StickyScroll","Breadcrumb","InlayHints","CodeLens","InlineDecoration"]},{"title":"WhitespaceRenderer / CursorRenderer","slug":"whitespacerenderer-cursorrenderer","components":["WhitespaceRenderer","CursorRenderer"]},{"title":"InlineDiff / GhostText / InlineChat / ReadOnlyBanner / VimModeIndicator","slug":"inlinediff-ghosttext-inlinechat-readonlybanner-vimmodeindicator","components":["InlineDiff","GhostText","InlineChat","ReadOnlyBanner","VimModeIndicator"]},{"title":"CompletionMenu / SignatureHelp / HoverInfo","slug":"completionmenu-signaturehelp-hoverinfo","components":["CompletionMenu","SignatureHelp","HoverInfo"]},{"title":"CodeActionMenu / RenameInput / PeekView / ReferencesPanel / SymbolOutline / GoToSymbol / CallHierarchy / TypeHierarchy","slug":"codeactionmenu-renameinput-peekview-referencespanel-symboloutline-gotosymbol-callhierarchy-typehierarchy","components":["CodeActionMenu","RenameInput","PeekView","ReferencesPanel","SymbolOutline","GoToSymbol","CallHierarchy","TypeHierarchy"]},{"title":"FindWidget / ReplaceWidget","slug":"findwidget-replacewidget","components":["FindWidget","ReplaceWidget"]},{"title":"SearchPanel / SearchResultItem / SearchFilters","slug":"searchpanel-searchresultitem-searchfilters","components":["SearchPanel","SearchResultItem","SearchFilters"]},{"title":"ProblemsPanel / DiagnosticsList / OutputPanel","slug":"problemspanel-diagnosticslist-outputpanel","components":["ProblemsPanel","DiagnosticsList","OutputPanel"]},{"title":"DebugConsole / ExtensionsPanel / PluginList","slug":"debugconsole-extensionspanel-pluginlist","components":["DebugConsole","ExtensionsPanel","PluginList"]},{"title":"SettingsEditor / KeybindingsEditor","slug":"settingseditor-keybindingseditor","components":["SettingsEditor","KeybindingsEditor"]},{"title":"WelcomePage / RecentProjects / ProjectSwitcher / ThemePreview / TaskRunner / RunConfiguration","slug":"welcomepage-recentprojects-projectswitcher-themepreview-taskrunner-runconfiguration","components":["WelcomePage","RecentProjects","ProjectSwitcher","ThemePreview","TaskRunner","RunConfiguration"]},{"title":"CursorPosition / LanguageMode / Encoding / LineEnding / IndentSettings / BranchIndicator / LspStatus / NotificationBell","slug":"cursorposition-languagemode-encoding-lineending-indentsettings-branchindicator-lspstatus-notificationbell","components":["CursorPosition","LanguageMode","Encoding","LineEnding","IndentSettings","BranchIndicator","LspStatus","NotificationBell"]}]},
@@ -21,7 +21,7 @@
{"number":20,"slug":"debug","title":"Debug","summary":"A paused program: its breakpoints, stack, threads and values, memory and machine code; profiles and network.","stories":[{"title":"DebugToolbar","slug":"debugtoolbar","components":["DebugToolbar"]},{"title":"BreakpointList / BreakpointGutter / CallStack / ThreadList","slug":"breakpointlist-breakpointgutter-callstack-threadlist","components":["BreakpointList","BreakpointGutter","CallStack","ThreadList"]},{"title":"VariablesPanel / WatchPanel / ConsoleREPL","slug":"variablespanel-watchpanel-consolerepl","components":["VariablesPanel","WatchPanel","ConsoleREPL"]},{"title":"MemoryViewer / HexViewer / Disassembly","slug":"memoryviewer-hexviewer-disassembly","components":["MemoryViewer","HexViewer","Disassembly"]},{"title":"PerformanceProfiler / Flamegraph / TimelineProfiler","slug":"performanceprofiler-flamegraph-timelineprofiler","components":["PerformanceProfiler","Flamegraph","TimelineProfiler"]},{"title":"NetworkInspector","slug":"networkinspector","components":["NetworkInspector"]}]},
{"number":21,"slug":"documents","title":"Documents","summary":"Markdown written and read, blocks like a notebook's, and a knowledge base around them.","stories":[{"title":"RichTextEditor / FixedFormatToolbar / FloatingFormatToolbar / LinkEditor / MentionMenu / EmojiAutocomplete / WordCount / ReadingTime","slug":"richtexteditor-fixedformattoolbar-floatingformattoolbar-linkeditor-mentionmenu-emojiautocomplete-wordcount-readingtime","components":["RichTextEditor","FixedFormatToolbar","FloatingFormatToolbar","LinkEditor","MentionMenu","EmojiAutocomplete","WordCount","ReadingTime"]},{"title":"MarkdownEditor","slug":"markdowneditor","components":["MarkdownEditor"]},{"title":"BlockEditor / BlockHandle / SlashMenu / PlaceholderText","slug":"blockeditor-blockhandle-slashmenu-placeholdertext","components":["BlockEditor","BlockHandle","SlashMenu","PlaceholderText"]},{"title":"Block types / TableEditor / ImageEditorBlock / MathEditor / DiagramBlock / CodeBlockEditor","slug":"block-types-tableeditor-imageeditorblock-matheditor-diagramblock-codeblockeditor","components":["Block types","TableEditor","ImageEditorBlock","MathEditor","DiagramBlock","CodeBlockEditor"]},{"title":"TodoItem / Checklist","slug":"todoitem-checklist","components":["TodoItem","Checklist"]},{"title":"MarkdownRenderer / TableOfContents / DocumentOutline / ReadingProgress","slug":"markdownrenderer-tableofcontents-documentoutline-readingprogress","components":["MarkdownRenderer","TableOfContents","DocumentOutline","ReadingProgress"]},{"title":"DocumentViewer / PDFViewer / PageThumbnailList","slug":"documentviewer-pdfviewer-pagethumbnaillist","components":["DocumentViewer","PDFViewer","PageThumbnailList"]},{"title":"OfficePreview","slug":"officepreview","components":["OfficePreview"]},{"title":"EpubReader","slug":"epubreader","components":["EpubReader"]},{"title":"Footnote / Glossary / TooltipTerm","slug":"footnote-glossary-tooltipterm","components":["Footnote","Glossary","TooltipTerm"]},{"title":"FocusMode / ZenMode","slug":"focusmode-zenmode","components":["FocusMode","ZenMode"]},{"title":"PrintPreview","slug":"printpreview","components":["PrintPreview"]},{"title":"PageTree / Favorites / Pinned","slug":"pagetree-favorites-pinned","components":["PageTree","Favorites","Pinned"]},{"title":"PageCover / PageIcon / PageProperties","slug":"pagecover-pageicon-pageproperties","components":["PageCover","PageIcon","PageProperties"]},{"title":"Backlinks / GraphView","slug":"backlinks-graphview","components":["Backlinks","GraphView"]},{"title":"TemplatePicker","slug":"templatepicker","components":["TemplatePicker"]},{"title":"TrashBin","slug":"trashbin","components":["TrashBin"]},{"title":"VersionHistory / PageHistoryDiff","slug":"versionhistory-pagehistorydiff","components":["VersionHistory","PageHistoryDiff"]}]},
{"number":22,"slug":"collab","title":"Collaboration","summary":"People in the same document: who is here and where, comments and reactions, suggested changes, and sharing.","stories":[{"title":"PresenceAvatars / LiveIndicator / FollowMode / RemoteCursor / RemoteSelection","slug":"presenceavatars-liveindicator-followmode-remotecursor-remoteselection","components":["PresenceAvatars","LiveIndicator","FollowMode","RemoteCursor","RemoteSelection"]},{"title":"CommentThread / Reply / Reactions / ReactionPicker","slug":"commentthread-reply-reactions-reactionpicker","components":["CommentThread","Reply","Reactions","ReactionPicker"]},{"title":"CommentBubble / CommentMarker","slug":"commentbubble-commentmarker","components":["CommentBubble","CommentMarker"]},{"title":"CommentSidebar","slug":"commentsidebar","components":["CommentSidebar"]},{"title":"Annotation / Highlight","slug":"annotation-highlight","components":["Annotation","Highlight"]},{"title":"SuggestionMode / TrackChanges","slug":"suggestionmode-trackchanges","components":["SuggestionMode","TrackChanges"]},{"title":"ShareDialog / InviteInput / PermissionSelect / AccessList","slug":"sharedialog-inviteinput-permissionselect-accesslist","components":["ShareDialog","InviteInput","PermissionSelect","AccessList"]},{"title":"ActivityLog → data_display::ActivityFeed","slug":"activitylog-data-display-activityfeed","components":["ActivityLog"]}]},
{"number":24,"slug":"agent","title":"Agent","summary":"An assistant at work: the tools it calls, what it asks before it acts, how far it has come, what it would change, what it sees and what it makes.","stories":[{"title":"ToolCallCard / ToolCallGroup","slug":"toolcallcard-toolcallgroup","components":["ToolCallCard","ToolCallGroup"]},{"title":"ToolApprovalDialog / PermissionPrompt","slug":"toolapprovaldialog-permissionprompt","components":["ToolApprovalDialog","PermissionPrompt"]},{"title":"AgentStepList / TaskTimeline / AgentPlan / TodoList / AgentStatus / AgentProgress","slug":"agentsteplist-tasktimeline-agentplan-todolist-agentstatus-agentprogress","components":["AgentStepList","TaskTimeline","AgentPlan","TodoList","AgentStatus","AgentProgress"]},{"title":"SubAgentTree","slug":"subagenttree","components":["SubAgentTree"]},{"title":"FileChangeCard / MultiFileDiff Review / CommandExecutionCard","slug":"filechangecard-multifilediff-review-commandexecutioncard","components":["FileChangeCard","MultiFileDiff Review","CommandExecutionCard"]},{"title":"BrowserPreview / ScreenshotStream / ComputerUseViewer","slug":"browserpreview-screenshotstream-computeruseviewer","components":["BrowserPreview","ScreenshotStream","ComputerUseViewer"]},{"title":"ArtifactPanel / ArtifactVersionSwitcher / LivePreview","slug":"artifactpanel-artifactversionswitcher-livepreview","components":["ArtifactPanel","ArtifactVersionSwitcher","LivePreview"]},{"title":"SandboxStatus","slug":"sandboxstatus","components":["SandboxStatus"]},{"title":"MCPServerList / ConnectorList / ToolRegistry Panel","slug":"mcpserverlist-connectorlist-toolregistry-panel","components":["MCPServerList","ConnectorList","ToolRegistry Panel"]},{"title":"MemoryPanel / CheckpointList / Rewind","slug":"memorypanel-checkpointlist-rewind","components":["MemoryPanel","CheckpointList","Rewind"]},{"title":"InterruptButton / HumanInputRequest","slug":"interruptbutton-humaninputrequest","components":["InterruptButton","HumanInputRequest"]},{"title":"TokenUsageChart / CostBreakdown","slug":"tokenusagechart-costbreakdown","components":["TokenUsageChart","CostBreakdown"]},{"title":"TraceViewer / EvalResultTable","slug":"traceviewer-evalresulttable","components":["TraceViewer","EvalResultTable"]}]},
{"number":25,"slug":"generative","title":"Generative","summary":"Making pictures, sound and video with a model: the prompt and its settings, the queue and what comes back, the canvas, the models behind them, and the data and prompts they work from.","stories":[{"title":"ImageGenerationPanel / PromptEnhancer / NegativePromptInput / StylePresetPicker / AspectRatioPicker / SeedInput","slug":"imagegenerationpanel-promptenhancer-negativepromptinput-stylepresetpicker-aspectratiopicker-seedinput","components":["ImageGenerationPanel","PromptEnhancer","NegativePromptInput","StylePresetPicker","AspectRatioPicker","SeedInput"]},{"title":"GenerationQueue","slug":"generationqueue","components":["GenerationQueue"]},{"title":"GenerationGrid / ImageCompare","slug":"generationgrid-imagecompare","components":["GenerationGrid","ImageCompare"]},{"title":"VariationPicker / ABCompareView","slug":"variationpicker-abcompareview","components":["VariationPicker","ABCompareView"]},{"title":"InpaintCanvas / MaskBrush","slug":"inpaintcanvas-maskbrush","components":["InpaintCanvas","MaskBrush"]},{"title":"AudioGenerationPlayer","slug":"audiogenerationplayer","components":["AudioGenerationPlayer"]},{"title":"TTSVoicePicker","slug":"ttsvoicepicker","components":["TTSVoicePicker"]},{"title":"VideoGenerationTimeline","slug":"videogenerationtimeline","components":["VideoGenerationTimeline"]},{"title":"ModelCard","slug":"modelcard","components":["ModelCard"]},{"title":"ModelDownloadManager","slug":"modeldownloadmanager","components":["ModelDownloadManager"]},{"title":"ModelStatus / HardwareMonitor","slug":"modelstatus-hardwaremonitor","components":["ModelStatus","HardwareMonitor"]},{"title":"FineTuneJobCard","slug":"finetunejobcard","components":["FineTuneJobCard"]},{"title":"DatasetViewer → tables::DataTable","slug":"datasetviewer-tables-datatable","components":["DatasetViewer"]},{"title":"EmbeddingVisualizer","slug":"embeddingvisualizer","components":["EmbeddingVisualizer"]},{"title":"PromptPlayground","slug":"promptplayground","components":["PromptPlayground"]},{"title":"PromptDiff / PromptVersionHistory","slug":"promptdiff-promptversionhistory","components":["PromptDiff","PromptVersionHistory"]}]},
{"number":26,"slug":"media","title":"Media","summary":"Pictures, video and sound: looking closely, cropping and marking up, playing, and the controls and devices around them.","stories":[{"title":"ImageViewer","slug":"imageviewer","components":["ImageViewer"]},{"title":"ImageThumbnail / Lightbox → overlays::Lightbox","slug":"imagethumbnail-lightbox-overlays-lightbox","components":["ImageThumbnail","Lightbox"]},{"title":"ImageCropper","slug":"imagecropper","components":["ImageCropper"]},{"title":"ImageUpload","slug":"imageupload","components":["ImageUpload"]},{"title":"ImageAnnotator","slug":"imageannotator","components":["ImageAnnotator"]},{"title":"VideoPlayer","slug":"videoplayer","components":["VideoPlayer"]},{"title":"VideoTimeline / Scrubber","slug":"videotimeline-scrubber","components":["VideoTimeline","Scrubber"]},{"title":"VideoThumbnailStrip","slug":"videothumbnailstrip","components":["VideoThumbnailStrip"]},{"title":"SubtitleEditor","slug":"subtitleeditor","components":["SubtitleEditor"]},{"title":"AudioPlayer","slug":"audioplayer","components":["AudioPlayer"]},{"title":"AudioWaveform","slug":"audiowaveform","components":["AudioWaveform"]},{"title":"AudioSpectrum / Visualizer","slug":"audiospectrum-visualizer","components":["AudioSpectrum","Visualizer"]},{"title":"VolumeControl","slug":"volumecontrol","components":["VolumeControl"]},{"title":"PlaybackSpeedControl","slug":"playbackspeedcontrol","components":["PlaybackSpeedControl"]},{"title":"MediaControls","slug":"mediacontrols","components":["MediaControls"]},{"title":"Playlist","slug":"playlist","components":["Playlist"]},{"title":"ScreenRecorderControls","slug":"screenrecordercontrols","components":["ScreenRecorderControls"]},{"title":"CameraPreview","slug":"camerapreview","components":["CameraPreview"]},{"title":"MicLevelMeter","slug":"miclevelmeter","components":["MicLevelMeter"]},{"title":"DeviceSelector","slug":"deviceselector","components":["DeviceSelector"]},{"title":"3DModelViewer","slug":"3dmodelviewer","components":["3DModelViewer"]}]},
@@ -33,11 +33,11 @@
{"number":32,"slug":"canvas","title":"Canvas & Design","summary":"An endless plane to lay work on, the tools and panels around it, and graphs of nodes.","stories":[{"title":"InfiniteCanvas · CanvasGrid / Guides · Ruler · ArtboardFrame · ZoomControls / ZoomIndicator · MiniMap","slug":"infinitecanvas-canvasgrid-guides-ruler-artboardframe-zoomcontrols-zoomindicator-minimap","components":["InfiniteCanvas","CanvasGrid","Guides","Ruler","ArtboardFrame","ZoomControls","ZoomIndicator","MiniMap"]},{"title":"ToolPalette · SelectionBox · TransformHandles · SnapIndicator · ShapeTools · PenTool / PathEditor · TextTool · BrushTool / BrushSettings · HistoryPanel","slug":"toolpalette-selectionbox-transformhandles-snapindicator-shapetools-pentool-patheditor-texttool-brushtool-brushsettings-historypanel","components":["ToolPalette","SelectionBox","TransformHandles","SnapIndicator","ShapeTools","PenTool","PathEditor","TextTool","BrushTool","BrushSettings","HistoryPanel"]},{"title":"LayerPanel · InspectorPanel · AlignmentToolbar · AssetPanel","slug":"layerpanel-inspectorpanel-alignmenttoolbar-assetpanel","components":["LayerPanel","InspectorPanel","AlignmentToolbar","AssetPanel"]},{"title":"ColorPanel · GradientPanel · ShadowEditor · BorderEditor · TypographyPanel","slug":"colorpanel-gradientpanel-shadoweditor-bordereditor-typographypanel","components":["ColorPanel","GradientPanel","ShadowEditor","BorderEditor","TypographyPanel"]},{"title":"ConstraintsEditor · AutoLayoutControls · ExportPanel","slug":"constraintseditor-autolayoutcontrols-exportpanel","components":["ConstraintsEditor","AutoLayoutControls","ExportPanel"]},{"title":"NodeEditor / NodeGraph · Node / Port / Edge / Connection","slug":"nodeeditor-nodegraph-node-port-edge-connection","components":["NodeEditor","NodeGraph","Node","Port","Edge","Connection"]},{"title":"FlowChart / DiagramEditor · Connector Line","slug":"flowchart-diagrameditor-connector-line","components":["FlowChart","DiagramEditor","Connector Line"]},{"title":"MindMap","slug":"mindmap","components":["MindMap"]},{"title":"Whiteboard · StickyNote","slug":"whiteboard-stickynote","components":["Whiteboard","StickyNote"]}]},
{"number":33,"slug":"devtools","title":"DB & Dev Tools","summary":"Connections, schemas and queries, data to read, requests to send, and the machines that run them.","stories":[{"title":"ConnectionManager · ConnectionForm","slug":"connectionmanager-connectionform","components":["ConnectionManager","ConnectionForm"]},{"title":"SchemaTree · ERDiagram","slug":"schematree-erdiagram","components":["SchemaTree","ERDiagram"]},{"title":"QueryEditor → editor::CodeEditor · QueryResultGrid → tables::DataGrid · QueryHistory · QueryPlanViewer","slug":"queryeditor-editor-codeeditor-queryresultgrid-tables-datagrid-queryhistory-queryplanviewer","components":["QueryEditor","QueryResultGrid","QueryHistory","QueryPlanViewer"]},{"title":"TableStructureEditor · IndexManager","slug":"tablestructureeditor-indexmanager","components":["TableStructureEditor","IndexManager"]},{"title":"RedisKeyBrowser","slug":"rediskeybrowser","components":["RedisKeyBrowser"]},{"title":"DocumentViewer (MongoDB / JSON) → devtools::JsonViewer · JsonViewer / JsonTree · JsonEditor · YamlViewer · XmlViewer","slug":"documentviewer-mongodb-json-devtools-jsonviewer-jsonviewer-jsontree-jsoneditor-yamlviewer-xmlviewer","components":["DocumentViewer","JsonViewer","JsonTree","JsonEditor","YamlViewer","XmlViewer"]},{"title":"ApiRequestBuilder · ResponseViewer · HeadersTable · QueryParamsEditor → forms::KeyValueInput · EnvironmentSelector · CollectionTree","slug":"apirequestbuilder-responseviewer-headerstable-queryparamseditor-forms-keyvalueinput-environmentselector-collectiontree","components":["ApiRequestBuilder","ResponseViewer","HeadersTable","QueryParamsEditor","EnvironmentSelector","CollectionTree"]},{"title":"WebSocketConsole","slug":"websocketconsole","components":["WebSocketConsole"]},{"title":"GraphQLExplorer","slug":"graphqlexplorer","components":["GraphQLExplorer"]},{"title":"RegexTester · Base64 / Encoder · ColorContrastChecker","slug":"regextester-base64-encoder-colorcontrastchecker","components":["RegexTester","Base64","Encoder","ColorContrastChecker"]},{"title":"ContainerList · PodList · ResourceMonitor","slug":"containerlist-podlist-resourcemonitor","components":["ContainerList","PodList","ResourceMonitor"]}]},
{"number":34,"slug":"dashboard","title":"Dashboard & Monitoring","summary":"Widgets on a grid you arrange, what is firing and what is up, and the stream of what happens.","stories":[{"title":"Dashboard Grid · Widget / DashboardCard · RefreshIntervalSelector · DashboardFilterBar · StatCard → data_display::Statistic · MetricsChart → charts::LineChart · ResourceGauge → data_display::Gauge","slug":"dashboard-grid-widget-dashboardcard-refreshintervalselector-dashboardfilterbar-statcard-data-display-statistic-metricschart-charts-linechart-resourcegauge-data-display-gauge","components":["Dashboard Grid","Widget","DashboardCard","RefreshIntervalSelector","DashboardFilterBar","StatCard","MetricsChart","ResourceGauge"]},{"title":"UptimeBar · ServiceStatus · HealthCheck Indicator","slug":"uptimebar-servicestatus-healthcheck-indicator","components":["UptimeBar","ServiceStatus","HealthCheck Indicator"]},{"title":"AlertList · IncidentCard","slug":"alertlist-incidentcard","components":["AlertList","IncidentCard"]},{"title":"EventStream · LogStream → terminal::LogViewer · TraceWaterfall → debug::TimelineProfiler · SystemMonitor → devtools::ResourceMonitor · ProcessTable → terminal::ProcessList · NetworkGraph (throughput) → charts::RealtimeChart · MapView / GeoHeatmap → maps::MapView, maps::GeoHeatmap · WorldMap → maps::WorldMap","slug":"eventstream-logstream-terminal-logviewer-tracewaterfall-debug-timelineprofiler-systemmonitor-devtools-resourcemonitor-processtable-terminal-processlist-networkgraph-throughput-charts-realtimechart-mapview-geoheatmap-maps-mapview-maps-geoheatmap-worldmap-maps-worldmap","components":["EventStream","LogStream","TraceWaterfall","SystemMonitor","ProcessTable","NetworkGraph","MapView","GeoHeatmap","WorldMap"]}]},
{"number":35,"slug":"settings","title":"Settings","summary":"A settings window: its sections, a search over them, and the controls each one holds.","stories":[{"title":"SettingsLayout · SettingsSection · SettingsRow · SettingsSearch","slug":"settingslayout-settingssection-settingsrow-settingssearch","components":["SettingsLayout","SettingsSection","SettingsRow","SettingsSearch"]}]},
{"number":35,"slug":"settings","title":"Settings","summary":"A settings window: its sections, a search over them, and the controls each one holds.","stories":[{"title":"SettingsLayout · SettingsSection · SettingsRow · SettingsSearch","slug":"settingslayout-settingssection-settingsrow-settingssearch","components":["SettingsLayout","ThemeSelector","AccentColorPicker","FontSizeControl","DensitySelector","KeyboardShortcutsList","ProxySettings","PrivacySettings","NotificationSettings","StartupSettings","StorageSettings","ResetToDefault","ImportExportSettings","AdvancedSettings","DeveloperMode Toggle","SettingsSection","SettingsRow","SettingsSearch"]}]},
{"number":36,"slug":"account","title":"Account","summary":"Signing in and up, a link by email, a second factor, and the account once inside.","stories":[{"title":"LoginForm · OAuthButtons","slug":"loginform-oauthbuttons","components":["LoginForm","OAuthButtons"]},{"title":"SignupForm","slug":"signupform","components":["SignupForm"]},{"title":"MagicLinkForm · ForgotPassword","slug":"magiclinkform-forgotpassword","components":["MagicLinkForm","ForgotPassword"]},{"title":"TwoFactorInput","slug":"twofactorinput","components":["TwoFactorInput"]},{"title":"AccountSwitcher · WorkspaceSwitcher / OrgSwitcher · UserMenu","slug":"accountswitcher-workspaceswitcher-orgswitcher-usermenu","components":["AccountSwitcher","WorkspaceSwitcher","OrgSwitcher","UserMenu"]},{"title":"ProfileCard · ProfileEditor","slug":"profilecard-profileeditor","components":["ProfileCard","ProfileEditor"]},{"title":"SessionList · ApiKeyManager","slug":"sessionlist-apikeymanager","components":["SessionList","ApiKeyManager"]},{"title":"SubscriptionCard / PlanBadge · UsageQuota · PaymentMethodForm","slug":"subscriptioncard-planbadge-usagequota-paymentmethodform","components":["SubscriptionCard","PlanBadge","UsageQuota","PaymentMethodForm"]},{"title":"BillingHistory · UpgradePrompt / Paywall","slug":"billinghistory-upgradeprompt-paywall","components":["BillingHistory","UpgradePrompt","Paywall"]},{"title":"TeamMemberTable · RoleSelector · InvitationList","slug":"teammembertable-roleselector-invitationlist","components":["TeamMemberTable","RoleSelector","InvitationList"]}]},
{"number":37,"slug":"onboarding","title":"Onboarding & Help","summary":"A first run in steps, what is new called out, first things to do, and help where it is needed.","stories":[{"title":"OnboardingWizard · WelcomeTour","slug":"onboardingwizard-welcometour","components":["OnboardingWizard","WelcomeTour"]},{"title":"Coachmark / Hotspot · FeatureHighlight / NewBadge","slug":"coachmark-hotspot-featurehighlight-newbadge","components":["Coachmark","Hotspot","FeatureHighlight","NewBadge"]},{"title":"Checklist (first-run tasks)","slug":"checklist-first-run-tasks","components":["Checklist"]},{"title":"HelpTooltip · InlineHelp · EmptyStateWithAction","slug":"helptooltip-inlinehelp-emptystatewithaction","components":["HelpTooltip","InlineHelp","EmptyStateWithAction"]},{"title":"HelpPanel / DocsSidebar","slug":"helppanel-docssidebar","components":["HelpPanel","DocsSidebar"]},{"title":"KeyboardShortcutCheatsheet · WhatsNewDialog","slug":"keyboardshortcutcheatsheet-whatsnewdialog","components":["KeyboardShortcutCheatsheet","WhatsNewDialog"]},{"title":"FeedbackWidget · ContactSupport","slug":"feedbackwidget-contactsupport","components":["FeedbackWidget","ContactSupport"]}]},
{"number":39,"slug":"theme","title":"Theme","summary":"Tokens every component reads. Light and dark share one grammar.","stories":[{"title":"Surfaces","slug":"surfaces","components":[]},{"title":"Ink","slug":"ink","components":[]},{"title":"Signals","slug":"signals","components":[]},{"title":"Series","slug":"series","components":[]},{"title":"Syntax","slug":"syntax","components":[]},{"title":"Type","slug":"type","components":[]},{"title":"Shape","slug":"shape","components":[]},{"title":"Motion","slug":"motion","components":["Motion"]},{"title":"ThemeEditor · DensityProvider · RadiusProvider · FontProvider · HighContrastMode · ReducedMotionProvider","slug":"themeeditor-densityprovider-radiusprovider-fontprovider-highcontrastmode-reducedmotionprovider","components":["ThemeEditor","DensityProvider","RadiusProvider","FontProvider","HighContrastMode","ReducedMotionProvider"]},{"title":"ThemeImporter · SyntaxThemes","slug":"themeimporter-syntaxthemes","components":["ThemeImporter","SyntaxThemes"]},{"title":"Platform Style · IconThemeProvider · VibrancyBackground","slug":"platform-style-iconthemeprovider-vibrancybackground","components":["Platform Style","IconThemeProvider","VibrancyBackground"]}]},
{"number":39,"slug":"theme","title":"Theme","summary":"Tokens every component reads. Light and dark share one grammar.","stories":[{"title":"Surfaces","slug":"surfaces","components":["ColorTokens"]},{"title":"Ink","slug":"ink","components":["ColorTokens"]},{"title":"Signals","slug":"signals","components":["ColorTokens"]},{"title":"Series","slug":"series","components":["ColorTokens"]},{"title":"Syntax","slug":"syntax","components":["ColorTokens"]},{"title":"Type","slug":"type","components":[]},{"title":"Shape","slug":"shape","components":["Elevation"]},{"title":"Motion","slug":"motion","components":["Motion","Spring"]},{"title":"ThemeEditor · DensityProvider · RadiusProvider · FontProvider · HighContrastMode · ReducedMotionProvider","slug":"themeeditor-densityprovider-radiusprovider-fontprovider-highcontrastmode-reducedmotionprovider","components":["ThemeEditor","ThemeProvider","DensityProvider","RadiusProvider","FontProvider","HighContrastMode","ReducedMotionProvider"]},{"title":"ThemeImporter · SyntaxThemes","slug":"themeimporter-syntaxthemes","components":["ThemeImporter","SyntaxThemes"]},{"title":"Platform Style · IconThemeProvider · VibrancyBackground","slug":"platform-style-iconthemeprovider-vibrancybackground","components":["Platform Style","IconThemeProvider","VibrancyBackground"]}]},
{"number":40,"slug":"i18n","title":"i18n & a11y","summary":"Messages, numbers and dates in the reader's locale. A right-to-left locale mirrors its stacks.","stories":[{"title":"I18nProvider · Trans / LocalizedText","slug":"i18nprovider-trans-localizedtext","components":["I18nProvider","Trans","LocalizedText"]},{"title":"LocaleNumber / LocaleDate","slug":"localenumber-localedate","components":["LocaleNumber","LocaleDate"]},{"title":"RTL layout","slug":"rtl-layout","components":["RTL layout"]},{"title":"SkipLink · KeyboardNavigationHelper","slug":"skiplink-keyboardnavigationhelper","components":["SkipLink","KeyboardNavigationHelper"]},{"title":"ColorBlindSafe Palette","slug":"colorblindsafe-palette","components":["ColorBlindSafe Palette"]}]},
{"number":41,"slug":"maps","title":"Maps","summary":"Tiles the host supplies, pins with a popup, a picker's crosshair, routes, GeoJSON, heat, clusters and choropleths. The land is Natural Earth's.","stories":[{"title":"MapView · MapMarker · MapPopup","slug":"mapview-mapmarker-mappopup","components":["MapView","MapMarker","MapPopup"]},{"title":"CoordinateDisplay","slug":"coordinatedisplay","components":["CoordinateDisplay"]},{"title":"LocationPicker","slug":"locationpicker","components":["LocationPicker"]},{"title":"RouteLine · GeoJSON Layer","slug":"routeline-geojson-layer","components":["RouteLine","GeoJSON Layer"]},{"title":"GeoHeatmap","slug":"geoheatmap","components":["GeoHeatmap"]},{"title":"MapCluster","slug":"mapcluster","components":["MapCluster"]},{"title":"ChoroplethMap · WorldMap","slug":"choroplethmap-worldmap","components":["ChoroplethMap","WorldMap"]}]},
{"number":42,"slug":"misc","title":"Misc","summary":"Small tools that stand alone: clocks, a stopwatch, a calculator, a unit converter, a QR code scanner, a captcha, a poll, a survey, a quiz, flashcards, licenses, terms, a cookie banner, data out and in, and web views.","stories":[{"title":"Clock / WorldClock","slug":"clock-worldclock","components":["Clock","WorldClock"]},{"title":"Stopwatch","slug":"stopwatch","components":["Stopwatch"]},{"title":"Calculator","slug":"calculator","components":["Calculator"]},{"title":"UnitConverter","slug":"unitconverter","components":["UnitConverter"]},{"title":"QRCodeScanner","slug":"qrcodescanner","components":["QRCodeScanner"]},{"title":"Captcha","slug":"captcha","components":["Captcha"]},{"title":"BarcodeDisplay · Signature · Rating Widget","slug":"barcodedisplay-signature-rating-widget","components":["BarcodeDisplay","Signature","Rating Widget"]},{"title":"Poll / Survey","slug":"poll-survey","components":["Poll","Survey"]},{"title":"Quiz / Flashcard","slug":"quiz-flashcard","components":["Quiz","Flashcard"]},{"title":"ChangeLog Viewer","slug":"changelog-viewer","components":["ChangeLog Viewer"]},{"title":"LicenseViewer","slug":"licenseviewer","components":["LicenseViewer"]},{"title":"Terms / Consent Dialog / CookieBanner","slug":"terms-consent-dialog-cookiebanner","components":["Terms","Consent Dialog","CookieBanner"]},{"title":"ExportDialog / ImportDialog / CSVImporter","slug":"exportdialog-importdialog-csvimporter","components":["ExportDialog","ImportDialog","CSVImporter"]},{"title":"WebView / HTMLPreview","slug":"webview-htmlpreview","components":["WebView","HTMLPreview"]},{"title":"IframeEmbed / EmbedCard","slug":"iframeembed-embedcard","components":["IframeEmbed","EmbedCard"]},{"title":"PrintButton · ShareSheet","slug":"printbutton-sharesheet","components":["PrintButton","ShareSheet"]}]},
log::info!("grid: the clipboard holds no text to paste");
return;
};
letedits=pasted(&text,(row,col),(rows,cols));
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.