view design_system/src/component_catalog.js @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents 60a876c4587a
children
line wrap: on
line source

/** @const {!ReadonlyArray<!Object>} Component concepts shown by the catalog. */
export const componentCatalog = [
  {
    name: "Accordion",
    slug: "accordion",
    element: "zen-accordion",
    group: "Disclosure",
    description: "A group of native details elements with optional single-open behavior.",
    markup: `<zen-accordion>
  <details open><summary>Is it accessible?</summary><p>It keeps native details and summary semantics.</p></details>
  <details><summary>Can several open?</summary><p>Add the multiple attribute to allow it.</p></details>
</zen-accordion>`,
  },
  {
    name: "Alert",
    slug: "alert",
    element: "zen-alert",
    group: "Feedback",
    description: "Status messaging with semantic tones and optional dismissal.",
    existing: true,
  },
  {
    name: "Alert Dialog",
    slug: "alert-dialog",
    element: "zen-alert-dialog",
    group: "Overlays",
    description: "A native modal dialog for decisions that require confirmation.",
    markup: `<zen-alert-dialog>
  <zen-button size="md" variant="danger">
    <button type="button" data-zen-trigger>Delete deployment</button>
  </zen-button>
  <dialog>
    <h3>Delete deployment?</h3>
    <p>This action cannot be undone.</p>
    <zen-button size="md" variant="quiet">
      <button type="button" data-zen-close>Cancel</button>
    </zen-button>
    <zen-button size="md" variant="danger">
      <button type="button" value="confirm" data-zen-close>Delete</button>
    </zen-button>
  </dialog>
</zen-alert-dialog>`,
  },
  {
    name: "Aspect Ratio",
    slug: "aspect-ratio",
    element: "zen-aspect-ratio",
    group: "Layout",
    description: "A media frame driven by a readable ratio attribute.",
    markup: `<zen-aspect-ratio ratio="16/9">
  <div class="demo-media">16 / 9</div>
</zen-aspect-ratio>`,
  },
  {
    name: "Attachment",
    slug: "attachment",
    element: "zen-attachment",
    group: "Chat",
    description: "File and upload state presentation using ordinary links and buttons.",
    markup: `<zen-attachment state="complete">
  <span aria-hidden="true">PDF</span>
  <div><strong>release-notes.pdf</strong><small>248 KB · Ready</small></div>
  <button type="button" aria-label="Remove attachment"><zen-icon name="close"></zen-icon></button>
</zen-attachment>`,
  },
  {
    name: "Avatar",
    slug: "avatar",
    element: "zen-avatar",
    group: "Display",
    description: "A compact identity image with a visible text fallback.",
    markup: `<zen-avatar aria-label="June Park"><span>JP</span></zen-avatar>`,
  },
  {
    name: "Badge",
    slug: "badge",
    element: "zen-badge",
    group: "Display",
    description: "A small label for metadata, state, or counts.",
    markup: `<zen-stack direction="row">
  <zen-badge>Default</zen-badge>
  <zen-badge tone="success">Healthy</zen-badge>
  <zen-badge tone="danger">Failed</zen-badge>
</zen-stack>`,
  },
  {
    name: "Breadcrumb",
    slug: "breadcrumb",
    element: "zen-breadcrumb",
    group: "Navigation",
    description: "A native navigation landmark for hierarchical location.",
    markup: `<zen-breadcrumb>
  <nav><ol>
    <li><a href="/">Home</a></li>
    <li><a href="/components">Components</a></li>
    <li aria-current="page">Breadcrumb</li>
  </ol></nav>
</zen-breadcrumb>`,
  },
  {
    name: "Bubble",
    slug: "bubble",
    element: "zen-bubble",
    group: "Chat",
    description: "A message bubble with incoming and outgoing alignment.",
    markup: `<zen-stack>
  <zen-bubble><p>The deployment is ready.</p></zen-bubble>
  <zen-bubble align="end"><p>Ship it.</p></zen-bubble>
</zen-stack>`,
  },
  {
    name: "Box",
    slug: "box",
    element: "zen-box",
    group: "Layout",
    description: "A container with canonical xs through xl padding.",
    markup: `<zen-stack direction="row">
  <zen-box padding="xs">XS padding</zen-box>
  <zen-box padding="sm">SM padding</zen-box>
  <zen-box padding="md">MD padding</zen-box>
  <zen-box padding="lg">LG padding</zen-box>
  <zen-box padding="xl">XL padding</zen-box>
</zen-stack>`,
  },
  {
    name: "Button",
    slug: "button",
    element: "zen-button",
    group: "Actions",
    description: "Native buttons and links with shared variants and states.",
    existing: true,
  },
  {
    name: "Button Group",
    slug: "button-group",
    element: "zen-button-group",
    group: "Actions",
    description: "Related native buttons joined into one visual control.",
    markup: `<zen-button-group aria-label="Text alignment">
  <button type="button">Left</button>
  <button type="button">Center</button>
  <button type="button">Right</button>
</zen-button-group>`,
  },
  {
    name: "Calendar",
    slug: "calendar",
    element: "zen-calendar",
    group: "Forms",
    description: "A first-party date month grid backed by a native form value.",
    markup: `<zen-calendar>
  <label for="calendar-demo">Release date</label>
  <input id="calendar-demo" type="date" value="2026-08-04" />
</zen-calendar>`,
  },
  {
    name: "Card",
    slug: "card",
    element: "zen-card",
    group: "Display",
    description: "A visual container around native article or section content.",
    existing: true,
  },
  {
    name: "Carousel",
    slug: "carousel",
    element: "zen-carousel",
    group: "Collections",
    description: "A scroll-snap collection with native buttons and keyboard controls.",
    markup: `<zen-carousel aria-label="Recent projects">
  <div data-zen-viewport>
    <article>Mercurial forge</article>
    <article>HLS player</article>
    <article>LaTeX editor</article>
  </div>
  <button type="button" data-zen-prev aria-label="Previous slide"><zen-icon name="arrow-left"></zen-icon></button>
  <button type="button" data-zen-next aria-label="Next slide"><zen-icon name="arrow-right"></zen-icon></button>
</zen-carousel>`,
  },
  {
    name: "Chart",
    slug: "chart",
    element: "zen-chart",
    group: "Data",
    description: "A dependency-free chart frame for semantic labels and custom marks.",
    markup: `<zen-chart aria-label="Build minutes by day">
  <div data-zen-chart-plot>
    <span style="--zen-chart-value: 42%" data-label="Mon"></span>
    <span style="--zen-chart-value: 76%" data-label="Tue"></span>
    <span style="--zen-chart-value: 58%" data-label="Wed"></span>
    <span style="--zen-chart-value: 88%" data-label="Thu"></span>
  </div>
</zen-chart>`,
  },
  {
    name: "Checkbox",
    slug: "checkbox",
    element: "zen-checkbox",
    group: "Forms",
    description: "A styled native checkbox that remains form-associated.",
    markup: `<zen-checkbox>
  <label><input type="checkbox" checked /> Include deployment artifacts</label>
</zen-checkbox>`,
  },
  {
    name: "Collapsible",
    slug: "collapsible",
    element: "zen-collapsible",
    group: "Disclosure",
    description: "A single native details disclosure.",
    markup: `<zen-collapsible>
  <details><summary>Three changed files</summary><p>server.c, styles.css, README.md</p></details>
</zen-collapsible>`,
  },
  {
    name: "Combobox",
    slug: "combobox",
    element: "zen-combobox",
    group: "Forms",
    description: "A filterable text input backed by an accessible option list.",
    markup: `<zen-combobox>
  <label for="repo-combobox">Repository</label>
  <input id="repo-combobox" autocomplete="off" placeholder="Find repository" />
  <div role="listbox">
    <button type="button" role="option" data-value="zenbu">zenbu</button>
    <button type="button" role="option" data-value="hg-web">hg-web</button>
    <button type="button" role="option" data-value="seobeo">seobeo</button>
  </div>
</zen-combobox>`,
  },
  {
    name: "Command",
    slug: "command",
    element: "zen-command",
    group: "Navigation",
    description: "A keyboard-first filterable command list.",
    markup: `<zen-command>
  <input type="search" aria-label="Commands" placeholder="Type a command" />
  <div role="menu">
    <button type="button" role="menuitem" data-value="new">New repository</button>
    <button type="button" role="menuitem" data-value="deploy">Deploy release</button>
    <button type="button" role="menuitem" data-value="theme">Toggle theme</button>
  </div>
</zen-command>`,
  },
  {
    name: "Context Menu",
    slug: "context-menu",
    element: "zen-context-menu",
    group: "Menus",
    description: "A right-click menu with keyboard navigation and native buttons.",
    markup: `<zen-context-menu>
  <div data-zen-trigger tabindex="0">Right-click this repository</div>
  <div role="menu" hidden>
    <button type="button" role="menuitem">Open</button>
    <button type="button" role="menuitem">Clone</button>
    <button type="button" role="menuitem">Archive</button>
  </div>
</zen-context-menu>`,
  },
  {
    name: "Data Table",
    slug: "data-table",
    element: "zen-data-table",
    group: "Data",
    description: "A native table enhanced with optional client-side sorting.",
    markup: `<zen-data-table>
  <table>
    <thead><tr>
      <th><button type="button" data-zen-sort="name">Repository</button></th>
      <th><button type="button" data-zen-sort="commits">Commits</button></th>
    </tr></thead>
    <tbody>
      <tr><td data-key="name">seobeo</td><td data-key="commits">87</td></tr>
      <tr><td data-key="name">hg-web</td><td data-key="commits">142</td></tr>
      <tr><td data-key="name">design-system</td><td data-key="commits">12</td></tr>
    </tbody>
  </table>
</zen-data-table>`,
  },
  {
    name: "Date Picker",
    slug: "date-picker",
    element: "zen-date-picker",
    group: "Forms",
    description: "A tokenized date trigger and first-party keyboard calendar.",
    markup: `<zen-date-picker>
  <label for="date-picker-demo">Deploy on</label>
  <input id="date-picker-demo" type="date" />
</zen-date-picker>`,
  },
  {
    name: "Dialog",
    slug: "dialog",
    element: "zen-dialog",
    group: "Overlays",
    description: "A native modal dialog with trigger and close wiring.",
    markup: `<zen-dialog>
  <zen-button size="md">
    <button type="button" data-zen-trigger>Edit profile</button>
  </zen-button>
  <dialog>
    <h3>Edit profile</h3>
    <zen-field>
      <label>Display name</label>
      <input value="June" />
    </zen-field>
    <zen-button size="md">
      <button type="button" data-zen-close>Done</button>
    </zen-button>
  </dialog>
</zen-dialog>`,
  },
  {
    name: "Direction",
    slug: "direction",
    element: "zen-direction",
    group: "Utilities",
    description: "A light-DOM boundary for left-to-right or right-to-left content.",
    markup: `<zen-direction dir="rtl"><p>مرحبا بالعالم</p></zen-direction>`,
  },
  {
    name: "Drawer",
    slug: "drawer",
    element: "zen-drawer",
    group: "Overlays",
    description: "A native dialog presented as an edge drawer.",
    markup: `<zen-drawer placement="bottom">
  <zen-button size="md">
    <button type="button" data-zen-trigger>Open drawer</button>
  </zen-button>
  <dialog>
    <h3>Build queue</h3>
    <p>Two jobs are running.</p>
    <zen-button size="md">
      <button type="button" data-zen-close>Close</button>
    </zen-button>
  </dialog>
</zen-drawer>`,
  },
  {
    name: "Dropdown Menu",
    slug: "dropdown-menu",
    element: "zen-dropdown-menu",
    group: "Menus",
    description: "A button-owned action menu with arrow-key navigation.",
    markup: `<zen-dropdown-menu>
  <button type="button" data-zen-trigger>Repository actions</button>
  <div role="menu" hidden>
    <button type="button" role="menuitem">Clone</button>
    <button type="button" role="menuitem">Bookmark</button>
    <button type="button" role="menuitem">Archive</button>
  </div>
</zen-dropdown-menu>`,
  },
  {
    name: "Empty",
    slug: "empty",
    element: "zen-empty",
    group: "Feedback",
    description: "A structured empty state with an optional native action.",
    markup: `<zen-empty>
  <strong>No deployments yet</strong>
  <p>Create the first release from the current default branch.</p>
  <zen-button size="md"><button type="button">Create deployment</button></zen-button>
</zen-empty>`,
  },
  {
    name: "Field",
    slug: "field",
    element: "zen-field",
    group: "Forms",
    description: "Label, help text, validity, and a native form control.",
    existing: true,
  },
  {
    name: "Form",
    slug: "form",
    element: "zen-form",
    group: "Forms",
    description: "A native form boundary with visible browser validity state.",
    markup: `<zen-form>
  <form>
    <zen-field><label>Repository name</label><input required /><small>Required</small></zen-field>
    <zen-button size="md"><button type="submit">Create</button></zen-button>
  </form>
</zen-form>`,
  },
  {
    name: "Hover Card",
    slug: "hover-card",
    element: "zen-hover-card",
    group: "Overlays",
    description: "Supplemental content shown on hover or keyboard focus.",
    markup: `<zen-hover-card>
  <a href="#" data-zen-trigger>@mrjunejune</a>
  <div data-zen-content hidden><strong>June Park</strong><p>Building Zenbu in C and native HTML.</p></div>
</zen-hover-card>`,
  },
  {
    name: "Heading",
    slug: "heading",
    element: "zen-heading",
    group: "Typography",
    description: "Strong native headings on the canonical type scale.",
    markup: `<zen-stack>
  <zen-heading size="xs"><h3>Extra small heading</h3></zen-heading>
  <zen-heading size="sm"><h3>Small heading</h3></zen-heading>
  <zen-heading size="md"><h3>Medium heading</h3></zen-heading>
  <zen-heading size="lg"><h3>Large heading</h3></zen-heading>
  <zen-heading size="xl"><h3>Extra large heading</h3></zen-heading>
</zen-stack>`,
  },
  {
    name: "Input",
    slug: "input",
    element: "zen-input",
    group: "Forms",
    description: "A styled native input with no replacement semantics.",
    markup: `<zen-input><input type="email" placeholder="[email protected]" aria-label="Email" /></zen-input>`,
  },
  {
    name: "Input Group",
    slug: "input-group",
    element: "zen-input-group",
    group: "Forms",
    description: "A native input with prefix, suffix, or inline actions.",
    markup: `<zen-input-group>
  <span aria-hidden="true">https://</span>
  <input aria-label="Host" value="zenbu.babocoder.com" />
  <button type="button">Copy</button>
</zen-input-group>`,
  },
  {
    name: "Input OTP",
    slug: "input-otp",
    element: "zen-input-otp",
    group: "Forms",
    description: "A single native one-time-code input with visual slots.",
    markup: `<zen-input-otp>
  <label for="otp-demo">Verification code</label>
  <input id="otp-demo" inputmode="numeric" autocomplete="one-time-code" maxlength="6" />
  <div data-zen-otp-slots aria-hidden="true"></div>
</zen-input-otp>`,
  },
  {
    name: "Item",
    slug: "item",
    element: "zen-item",
    group: "Display",
    description: "A flexible list row for an icon, content, and actions.",
    markup: `<zen-item>
  <zen-icon name="repository"></zen-icon>
  <div><strong>hg-web</strong><small>Updated two minutes ago</small></div>
  <zen-button size="sm" variant="quiet"><button type="button">Open</button></zen-button>
</zen-item>`,
  },
  {
    name: "Kbd",
    slug: "kbd",
    element: "zen-kbd",
    group: "Display",
    description: "Keyboard shortcut presentation using native kbd elements.",
    markup: `<p>Open commands with <zen-kbd><kbd>Ctrl</kbd><span>+</span><kbd>K</kbd></zen-kbd>.</p>`,
  },
  {
    name: "Label",
    slug: "label",
    element: "zen-label",
    group: "Forms",
    description: "A styled native label that keeps browser association.",
    markup: `<zen-label><label for="label-demo">Branch name</label></zen-label>
<zen-input><input id="label-demo" value="default" /></zen-input>`,
  },
  {
    name: "Link",
    slug: "link",
    element: "zen-link",
    group: "Navigation",
    description: "A native link with optional reusable first-party effects.",
    markup: `<zen-link effect="paw">
  <a href="/components/link">A link with the paw effect</a>
</zen-link>`,
  },
  {
    name: "Marker",
    slug: "marker",
    element: "zen-marker",
    group: "Chat",
    description: "An inline system marker for chat and activity streams.",
    markup: `<zen-marker><span>Today</span></zen-marker>`,
  },
  {
    name: "Menubar",
    slug: "menubar",
    element: "zen-menubar",
    group: "Menus",
    description: "A horizontal application menu using native buttons and menu roles.",
    markup: `<zen-menubar>
  <button type="button" data-zen-trigger>File</button>
  <div role="menu" hidden><button role="menuitem">New</button><button role="menuitem">Open</button></div>
  <button type="button" data-zen-trigger>View</button>
  <div role="menu" hidden><button role="menuitem">Graph</button><button role="menuitem">History</button></div>
</zen-menubar>`,
  },
  {
    name: "Message",
    slug: "message",
    element: "zen-message",
    group: "Chat",
    description: "An avatar, author, and content row for conversations.",
    markup: `<zen-message>
  <zen-avatar aria-label="June"><span>JP</span></zen-avatar>
  <div><strong>June</strong><zen-bubble><p>Can we deploy this release?</p></zen-bubble></div>
</zen-message>`,
  },
  {
    name: "Message Scroller",
    slug: "message-scroller",
    element: "zen-message-scroller",
    group: "Chat",
    description: "A chat viewport that follows new content until the reader scrolls away.",
    markup: `<zen-message-scroller>
  <div data-zen-viewport>
    <p>Worker connected.</p><p>Build started.</p><p>Bundle created.</p><p>Deployment complete.</p>
  </div>
  <button type="button" data-zen-scroll-end hidden>Jump to latest</button>
</zen-message-scroller>`,
  },
  {
    name: "Native Select",
    slug: "native-select",
    element: "zen-native-select",
    group: "Forms",
    description: "A styled native select with full platform behavior.",
    markup: `<zen-native-select><select aria-label="Environment"><option>Development</option><option>Production</option></select></zen-native-select>`,
  },
  {
    name: "Navigation Menu",
    slug: "navigation-menu",
    element: "zen-navigation-menu",
    group: "Navigation",
    description: "Top-level navigation with optional keyboard-accessible flyouts.",
    markup: `<zen-navigation-menu>
  <nav aria-label="Products">
    <button type="button" data-zen-trigger>Projects</button>
    <div role="menu" hidden><a role="menuitem" href="/components">Zenbu UI</a><a role="menuitem" href="/">hg-web</a></div>
    <a href="/tokens">Tokens</a>
  </nav>
</zen-navigation-menu>`,
  },
  {
    name: "Pagination",
    slug: "pagination",
    element: "zen-pagination",
    group: "Navigation",
    description: "Page navigation built from native links.",
    markup: `<zen-pagination>
  <nav><a href="#">Previous</a><a href="#">1</a><a href="#" aria-current="page">2</a><a href="#">3</a><a href="#">Next</a></nav>
</zen-pagination>`,
  },
  {
    name: "Popover",
    slug: "popover",
    element: "zen-popover",
    group: "Overlays",
    description: "A lightweight panel using the native Popover API when available.",
    markup: `<zen-popover>
  <zen-button size="md">
    <button type="button" data-zen-trigger>Open settings</button>
  </zen-button>
  <div data-zen-content>
    <strong>Dimensions</strong>
    <zen-field><label>Width</label><input value="100%" /></zen-field>
  </div>
</zen-popover>`,
  },
  {
    name: "Progress",
    slug: "progress",
    element: "zen-progress",
    group: "Feedback",
    description: "A styled native progress element.",
    markup: `<zen-progress><label for="progress-demo">Uploading</label><progress id="progress-demo" value="68" max="100">68%</progress></zen-progress>`,
  },
  {
    name: "Radio Group",
    slug: "radio-group",
    element: "zen-radio-group",
    group: "Forms",
    description: "A fieldset of native radio inputs.",
    markup: `<zen-radio-group>
  <fieldset><legend>Visibility</legend>
    <label><input type="radio" name="visibility" checked /> Public</label>
    <label><input type="radio" name="visibility" /> Private</label>
  </fieldset>
</zen-radio-group>`,
  },
  {
    name: "Resizable",
    slug: "resizable",
    element: "zen-resizable",
    group: "Layout",
    description: "Two native panels separated by a pointer and keyboard handle.",
    markup: `<zen-resizable>
  <section data-zen-panel>Repository tree</section>
  <div data-zen-handle tabindex="0"></div>
  <section data-zen-panel>File preview</section>
</zen-resizable>`,
  },
  {
    name: "Scroll Area",
    slug: "scroll-area",
    element: "zen-scroll-area",
    group: "Layout",
    description: "A bounded native scroll container with theme-aware scrollbars.",
    markup: `<zen-scroll-area tabindex="0">
  <p>default</p><p>feature/design-system</p><p>release/2026-08</p><p>experiment/trading</p>
</zen-scroll-area>`,
  },
  {
    name: "Select",
    slug: "select",
    element: "zen-select",
    group: "Forms",
    description: "A native select styled as the default accessible implementation.",
    markup: `<zen-select><label>Branch <select><option>default</option><option>stable</option></select></label></zen-select>`,
  },
  {
    name: "Separator",
    slug: "separator",
    element: "zen-separator",
    group: "Layout",
    description: "A native horizontal rule or ARIA separator.",
    markup: `<div>Repository</div><zen-separator><hr /></zen-separator><div>Changesets</div>`,
  },
  {
    name: "Sheet",
    slug: "sheet",
    element: "zen-sheet",
    group: "Overlays",
    description: "A native dialog presented from a selected screen edge.",
    markup: `<zen-sheet placement="right">
  <zen-button size="md">
    <button type="button" data-zen-trigger>Open filters</button>
  </zen-button>
  <dialog>
    <h3>Filters</h3>
    <zen-field><label>Author</label><input /></zen-field>
    <zen-button size="md">
      <button type="button" data-zen-close>Apply</button>
    </zen-button>
  </dialog>
</zen-sheet>`,
  },
  {
    name: "Sidebar",
    slug: "sidebar",
    element: "zen-sidebar",
    group: "Navigation",
    description: "A collapsible navigation region with an explicit native trigger.",
    markup: `<zen-sidebar open>
  <button type="button" data-zen-sidebar-trigger>Toggle sidebar</button>
  <aside data-zen-sidebar-panel><nav><a href="/">Overview</a><a href="/components">Components</a><a href="/tokens">Tokens</a></nav></aside>
</zen-sidebar>`,
  },
  {
    name: "Skeleton",
    slug: "skeleton",
    element: "zen-skeleton",
    group: "Feedback",
    description: "A reduced-motion-safe placeholder for pending content.",
    markup: `<zen-stack>
  <zen-skeleton shape="circle"></zen-skeleton>
  <zen-skeleton></zen-skeleton>
  <zen-skeleton width="60%"></zen-skeleton>
</zen-stack>`,
  },
  {
    name: "Slider",
    slug: "slider",
    element: "zen-slider",
    group: "Forms",
    description: "A native range input with browser keyboard and pointer behavior.",
    markup: `<zen-slider><label for="slider-demo">Volume</label><input id="slider-demo" type="range" value="65" /></zen-slider>`,
  },
  {
    name: "Notifications",
    slug: "notifications",
    element: "zen-notifications",
    group: "Feedback",
    description: "A bounded, scoped notification stack.",
    existing: true,
  },
  {
    name: "Spinner",
    slug: "spinner",
    element: "zen-spinner",
    group: "Feedback",
    description: "A small CSS loading indicator with status semantics.",
    markup: `<zen-spinner aria-label="Loading repositories"></zen-spinner>`,
  },
  {
    name: "Switch",
    slug: "switch",
    element: "zen-switch",
    group: "Forms",
    description: "A native checkbox presented with switch semantics.",
    markup: `<zen-switch><label><input type="checkbox" checked /> Automatic deployment</label></zen-switch>`,
  },
  {
    name: "Table",
    slug: "table",
    element: "zen-table",
    group: "Data",
    description: "Responsive styling around a native HTML table.",
    markup: `<zen-table><table>
  <caption>Recent changesets</caption>
  <thead><tr><th>Revision</th><th>Author</th></tr></thead>
  <tbody><tr><td>253:fdf3816959cb</td><td>June</td></tr><tr><td>252:7a7581f040e8</td><td>June</td></tr></tbody>
</table></zen-table>`,
  },
  {
    name: "Tabs",
    slug: "tabs",
    element: "zen-tabs",
    group: "Disclosure",
    description: "ARIA tabs with automatic or manual keyboard activation.",
    markup: `<zen-tabs>
  <div role="tablist" aria-label="Repository views">
    <button type="button" role="tab" data-value="files">Files</button>
    <button type="button" role="tab" data-value="history">History</button>
    <button type="button" role="tab" data-value="graph">Graph</button>
  </div>
  <section role="tabpanel">Browse repository files.</section>
  <section role="tabpanel">Inspect changesets.</section>
  <section role="tabpanel">View branch topology.</section>
</zen-tabs>`,
  },
  {
    name: "Textarea",
    slug: "textarea",
    element: "zen-textarea",
    group: "Forms",
    description: "A styled native multiline text control.",
    markup: `<zen-textarea><textarea aria-label="Commit message" placeholder="Describe this change"></textarea></zen-textarea>`,
  },
  {
    name: "Text",
    slug: "text",
    element: "zen-text",
    group: "Typography",
    description: "Native text on the canonical xs through xl type scale.",
    markup: `<zen-stack>
  <zen-text size="xs"><p>Extra small text</p></zen-text>
  <zen-text size="sm"><p>Small text</p></zen-text>
  <zen-text size="md"><p>Medium text</p></zen-text>
  <zen-text size="lg"><p>Large text</p></zen-text>
  <zen-text size="xl"><p>Extra large text</p></zen-text>
</zen-stack>`,
  },
  {
    name: "Toast",
    slug: "toast",
    element: "zen-notifications",
    group: "Feedback",
    description: "The deprecated toast concept maps to zen-notifications.",
    markup: `<zen-alert tone="warning"><p><strong>Toast is deprecated.</strong> Use <code>zen-notifications</code> for scoped transient messages.</p></zen-alert>`,
  },
  {
    name: "Toggle",
    slug: "toggle",
    element: "zen-toggle",
    group: "Actions",
    description: "A native button with managed pressed state.",
    markup: `<zen-toggle><button type="button">Bold</button></zen-toggle>`,
  },
  {
    name: "Toggle Group",
    slug: "toggle-group",
    element: "zen-toggle-group",
    group: "Actions",
    description: "Single or multiple pressed-state buttons with roving keyboard focus.",
    markup: `<zen-toggle-group type="single" value="center" aria-label="Alignment">
  <button type="button" value="left">Left</button>
  <button type="button" value="center">Center</button>
  <button type="button" value="right">Right</button>
</zen-toggle-group>`,
  },
  {
    name: "Tooltip",
    slug: "tooltip",
    element: "zen-tooltip",
    group: "Overlays",
    description: "A delayed, non-interactive description for hover and focus.",
    markup: `<zen-tooltip>
  <zen-button size="sm" variant="quiet">
    <button type="button" data-zen-trigger aria-label="Add repository"><zen-icon name="add"></zen-icon></button>
  </zen-button>
  <span data-zen-content hidden>Add repository</span>
</zen-tooltip>`,
  },
  {
    name: "Typography",
    slug: "typography",
    element: "zen-typography",
    group: "Foundations",
    description: "Readable defaults for native headings, paragraphs, lists, and code.",
    markup: `<zen-typography>
  <h2>The Mercurial forge</h2>
  <p>Typography stays semantic and inherits Zenbu tokens.</p>
  <blockquote>Own the stack, understand the stack.</blockquote>
</zen-typography>`,
  },
];

/** @const {number} Number of component concepts in the catalog. */
export const componentConceptCount = componentCatalog.length;