# HaTchi-MaXchi > An htmx4-native design system. The unit of reuse is a Hyperpart: a > server-rendered partial + its endpoint exchange contracts + an > optional vanilla-JS controller. No client framework. ## Sources - [AGENTS.md](https://github.com/manwithacat/hatchi-maxchi/blob/main/AGENTS.md): **always-on curriculum** — stems, layers, invention ladder, authority hierarchy - [Package stems](https://github.com/manwithacat/hatchi-maxchi/tree/main/stems): compressed Hyperpart judgement (INDEX + stem files) - [Agent playbooks](https://github.com/manwithacat/hatchi-maxchi/tree/main/docs/agent): pick-a-surface, compose-or-refuse, mutate-a-primitive, invent-safely - [Decisions (expressions of stems)](https://github.com/manwithacat/hatchi-maxchi/tree/main/docs/decisions): dated why — Hyperpart, layers, composition, invention ladder, swap/identity (0012) - [0012 — Swap / identity contract](https://github.com/manwithacat/hatchi-maxchi/blob/main/docs/decisions/0012-swap-identity-contract.md): exchange envelopes (`body_only` | `outer` | …) orthogonal to dual-lock - [Component registry (source of truth)](https://github.com/manwithacat/hatchi-maxchi/blob/main/site/registry.py): canonical markup + exchange contracts (`Exchange.envelope`) per component — parse this, don't scrape the gallery - [CONSUMER_MAP](https://github.com/manwithacat/hatchi-maxchi/blob/main/CONSUMER_MAP.md): reverse composition / refusal index (blast radius) - [CONTRACT_SURFACE](https://github.com/manwithacat/hatchi-maxchi/blob/main/CONTRACT_SURFACE.md): dual-lock attr/field breaking-change detector - [Contract modules (typed)](https://github.com/manwithacat/hatchi-maxchi/tree/main/contracts): per-part typed ingestion model + DOM contract + executable exemplar; authoring path in contracts/AUTHORING.md - [README](https://github.com/manwithacat/hatchi-maxchi#readme): setup, theming, prefixing, releases - [Guide](https://manwithacat.github.io/hatchi-maxchi/guide): human theory track — hypermedia model, tokens, Hyperpart anatomy, exchanges & contracts (incl. swap contract / envelopes), Blueprints, layers - [Guide § Exchanges & contracts](https://manwithacat.github.io/hatchi-maxchi/guide#contracts): Server exchange + Swap contract worked example (grid) ## Per-part agent files (one chunk per Hyperpart) - [Button](https://manwithacat.github.io/hatchi-maxchi/agents/button.md): Primary, outline, ghost, destructive — chromatic accent CTAs. - [Badge](https://manwithacat.github.io/hatchi-maxchi/agents/badge.md): Colour + icon + text — status never relies on colour alone (WCAG 1.4.1). - [Alert](https://manwithacat.github.io/hatchi-maxchi/agents/alert.md): Tone-wash surfaces — an identity layer shadcn has no vocabulary for. - [Toast](https://manwithacat.github.io/hatchi-maxchi/agents/toast.md): Stack host + auto-dismiss notifications — title, body, optional actions; hover/focus pauses the timer (htmx OOB or client bridge). - [Card](https://manwithacat.github.io/hatchi-maxchi/agents/card.md): Bordered surface with a resting stacked shadow. Content classes (label / value / delta) build KPI tiles; compose several in auto-grid so each card keeps a natural width instead of stretching full-bleed across the preview. - [Pagination](https://manwithacat.github.io/hatchi-maxchi/agents/pagination.md): The footer beneath a data table — a summary and page buttons. Each button hx-gets a page into the list body (an Exchange, not a widget). - [Data table](https://manwithacat.github.io/hatchi-maxchi/agents/grid.md): A server-rendered data table on a real , all HTML over the wire: search, sortable headers, filters, row selection (one page or every matching row), bulk actions, pagination, and deep-linkable URL-synced state. Optional extensions add column visibility, column resize, and inline cell editing. See How to use it and the DOM contract on this page for wiring. - [Command palette](https://manwithacat.github.io/hatchi-maxchi/agents/command.md): The hx-get palette — the htmx4 flagship. Press ⌘K. - [Confirm dialog](https://manwithacat.github.io/hatchi-maxchi/agents/confirm.md): Designed replacement for window.confirm — every hx-confirm upgrades automatically. - [Menu](https://manwithacat.github.io/hatchi-maxchi/agents/menu.md): Disclosure menu (`
`) — no JS for open state. A disclosure, not a full ARIA menu: no roving tabindex or typeahead. - [Popover](https://manwithacat.github.io/hatchi-maxchi/agents/popover.md): Disclosure popover (`
`) — free-content panel; body can lazy-load via htmx. Not a focus-trapped/positioned popover. - [Tooltip](https://manwithacat.github.io/hatchi-maxchi/agents/tooltip.md): CSS-only visual hint (`data-dz-tooltip`) — zero JS. A hint, not an accessible tooltip: keep it non-critical (no touch/SR/keyboard path). Optional `data-dz-tooltip-open` forces the hint visible (capture/docs). - [Dialog](https://manwithacat.github.io/hatchi-maxchi/agents/dialog.md): Modal on the native — one line of JS to open, close for free (Esc / backdrop / method=dialog submit). Focus-trapped by the platform. - [Drawer](https://manwithacat.github.io/hatchi-maxchi/agents/drawer.md): Edge-anchored panel on the native — a drawer with a modal's guarantees (focus trap, inert background, Esc, backdrop). Built on the dialog: shares its opener, adds a side + slide. No drawer-specific JS. Body is a composition host — nest field, badge, card, controls, … - [Selection controls](https://manwithacat.github.io/hatchi-maxchi/agents/controls.md): Designed checkbox / radio / switch on native inputs — semantics free. - [Field](https://manwithacat.github.io/hatchi-maxchi/agents/field.md): The label + control + help + error triad as one accessible unit. Error state derives from aria-invalid; help/error bind via aria-describedby. - [Slider](https://manwithacat.github.io/hatchi-maxchi/agents/slider.md): Native — styled track + thumb, both themes, with a live value readout via a tiny delegated controller. - [Confirm panel](https://manwithacat.github.io/hatchi-maxchi/agents/confirm-panel.md): The irreversible-action consent gate: a checklist of obligations that must be ticked before the primary action arms, plus live and revoked summary states. - [Search box](https://manwithacat.github.io/hatchi-maxchi/agents/search-box.md): The FTS search region: a debounced search input, an aria-live results panel, and a coaching line that hides — via pure CSS — the moment the user types. - [Form chrome](https://manwithacat.github.io/hatchi-maxchi/agents/form-chrome.md): The structural form pieces: titled sections, the validation-error summary, and the multi-section progress stepper. - [Wizard](https://manwithacat.github.io/hatchi-maxchi/agents/wizard.md): Multi-stage form navigation: the stepper drives stage reveal — back freely, forward one validated step at a time. - [Money field](https://manwithacat.github.io/hatchi-maxchi/agents/money.md): Major-unit decimal input over a hidden minor-unit carrier — the form posts integer minor units, never floats. - [PDF viewer](https://manwithacat.github.io/hatchi-maxchi/agents/pdf.md): The hx-pdf viewing shell: server-authorized bytes, lazy PDF.js rendering, toolbar slots for paging/zoom, URL deep-links — progressive enhancement over a download link. - [Two-factor panel](https://manwithacat.github.io/hatchi-maxchi/agents/two-factor.md): The 2FA enrolment/settings card: QR + manual secret, the big-digit code input, recovery-code grid, and factor status rows. - [Search select](https://manwithacat.github.io/hatchi-maxchi/agents/search-select.md): The FK typeahead: debounced remote search into a listbox, then a per-row select exchange that fills a hidden id. Domain data maps into a fixed result-row anatomy (name / secondary / optional media) — do not invent a new combobox per entity. Demo: focus the input (or type) to open; media is optional so some rows are text-only. - [Combobox](https://manwithacat.github.io/hatchi-maxchi/agents/combobox.md): Searchable single-select over a list of options — a native