# WireLayer > WireLayer: a component library for Vue 3 (@wirecore/wirelayer-vue), React (@wirecore/wirelayer-react), React Native (@wirecore/wirelayer-native) and plain HTML (@wirecore/wirelayer-css). Vue and React share the same API and DOM; Tailwind CSS v4 recipes in @wirecore/wirelayer-recipes; WCAG 2.2 AA; English UI texts by default, German and other languages via LocaleProvider. Full API in llms-full.txt; MCP server: `npx -y -p @wirecore/wirelayer-mcp wirelayer-mcp` (tools list_components, get_component, search_components, get_guide). ## Conventions - React props in camelCase; Vue takes the same props in kebab-case. Controlled values: React `value` + `onValueChange`, Vue `v-model`; other `onXChange` pairs are `v-model:x` in Vue, other callbacks `@x` events. - `className` (React) is `class` (Vue). Every component takes `classes` (extra Tailwind classes per part) and reads defaults from `RecipesProvider`. - Content: React props of type ReactNode/render functions are named slots in Vue (e.g. DataTable `cell` → `#cell-`, `expansion` → `#expansion`). - DataTable feature modules in `features` (only these end up in the bundle): `virtualRows` from `@wirecore/wirelayer-react/virtual` for `virtual`; `dateInput` and `numberInput` from `@wirecore/wirelayer-react/data-table` for DatePicker/NumberInput in date and number filters and editors (without them: the browser's inputs). Vue: the same from `@wirecore/wirelayer-vue/…`. - Texts come from `LocaleProvider` (en-US built in; de, fr, es, it, pt, pt-BR, nl, pl, cs, hu, lv, ar, tr via `registerLocale('fr', fr)` with `fr` from `@wirecore/wirelayer-vue/locales/fr` or `@wirecore/wirelayer-react/locales/fr`); dates are ISO strings ("2026-10-20", "2026-10-20T10:00"). ## Layout - [Accordion](?path=/story/react_layout-accordion--playground): Sections that open and close (one or several at a time); each item is a heading with a button (aria-expanded) (`@wirecore/wirelayer-react`) - [AccordionItem](?path=/story/react_layout-accordion--playground): One section of an Accordion: heading button and content (`@wirecore/wirelayer-react`) - [Affix](?path=/story/react_layout-affix--playground): Fixed in a corner of the window, e.g. a help or chat button (`@wirecore/wirelayer-react`) - [AppShell](?path=/story/react_layout-appshell--playground): App frame with landmarks: skip link, header (banner), side navigation (from lg on; below a drawer behind the menu button), main (target of the skip link), an optional aside (from xl on) and footer. Optional: rail, resize handles (role="separator"), headroom header, navbar running the full height. (`@wirecore/wirelayer-react`) - [AspectRatio](?path=/story/react_layout-aspectratio--playground): Keeps the ratio of width to height; an image, video or iframe inside fills it (`@wirecore/wirelayer-react`) - [BlockUi](?path=/story/react_layout-blockui--playground): While blocked: the content is inert (no focus, no clicks) and busy; the overlay says why (`@wirecore/wirelayer-react`) - [Center](?path=/story/react_layout-center--playground): Centres its content horizontally and vertically (`@wirecore/wirelayer-react`) - [Collapse](?path=/story/react_layout-collapse--playground): Content that opens and closes with an animated height (or width, motion-safe). Give it an id and point the button's aria-controls at it; the button carries aria-expanded. (`@wirecore/wirelayer-react`) - [ConfigProvider](?path=/story/react_layout-configprovider--playground): Locale, recipe defaults, size and theme for a part of the page – one wrapper instead of several providers (`@wirecore/wirelayer-react`) - [Container](?path=/story/react_layout-container--playground): Centred content with a maximum width and side padding (`@wirecore/wirelayer-react`) - [Divider](?path=/story/react_layout-divider--playground): Horizontal or vertical line, optionally with a label (`@wirecore/wirelayer-react`) - [Group](?path=/story/react_layout-group--playground): Children side by side, wrapping onto new lines (`@wirecore/wirelayer-react`) - [Masonry](?path=/story/react_layout-masonry--playground): Cards of different heights in columns; the order of the children stays the reading order (`@wirecore/wirelayer-react`) - [PageHeader](?path=/story/react_layout-pageheader--playground): Top of a page: breadcrumb, back link, title (heading) with status, subtitle and meta, actions, tabs (`@wirecore/wirelayer-react`) - [Panel](?path=/story/react_layout-panel--playground): Card with a heading (and actions); toggleable: the heading holds a button with aria-expanded (`@wirecore/wirelayer-react`) - [RecipesProvider](?path=/story/react_layout-recipesprovider--playground): Own defaults and classes per part for the components below (inner providers win) (`@wirecore/wirelayer-react`) - [Scroller](?path=/story/react_layout-scroller--playground): A row that scrolls sideways: the row is a focusable region (arrow keys scroll it); the arrow buttons are for the pointer only and show while there is more in that direction, the edges fade. (`@wirecore/wirelayer-react`) - [ScrollPanel](?path=/story/react_layout-scrollpanel--playground): Native scrolling with slim scrollbars; the viewport is a named, focusable region (arrow keys scroll) (`@wirecore/wirelayer-react`) - [SimpleGrid](?path=/story/react_layout-simplegrid--playground): Columns of equal width, fixed per breakpoint or as many as fit (`@wirecore/wirelayer-react`) - [Splitter](?path=/story/react_layout-splitter--playground): Panels with handles between them (role="separator"): drag, or arrow keys (Shift for bigger steps) and Home/End on the handle; Enter folds a collapsible panel; double click resets. Splitters can be nested in a panel. (`@wirecore/wirelayer-react`) - [Spoiler](?path=/story/react_layout-spoiler--playground): Content cut to maxHeight; the button (aria-expanded) shows the rest. Hidden text stays in the reading order. (`@wirecore/wirelayer-react`) - [Stack](?path=/story/react_layout-stack--playground): Children below each other with an even gap (`@wirecore/wirelayer-react`) - [Sticky](?path=/story/react_layout-sticky--playground): Sticks to the top or bottom edge while its container scrolls (`@wirecore/wirelayer-react`) - [Toolbar](?path=/story/react_layout-toolbar--playground): Groups controls (role="toolbar"): one tab stop, arrow keys move between the controls (across all areas) (`@wirecore/wirelayer-react`) - [TopBar](?path=/story/react_layout-topbar--playground): Slim header of an app outside AppShell: `start`, the middle (children, takes the free space) and `end` – no menus and no toolbar keyboard navigation, the content keeps its own (`@wirecore/wirelayer-react`) ## Data - [ActionBar](?path=/story/react_data-actionbar--playground): Actions for the selected items: a toolbar (one tab stop, arrow keys) with the count and a clear button (`@wirecore/wirelayer-react`) - [AiLabel](?path=/story/react_data-ailabel--playground): "AI-generated" (text, not only an icon) with the explanation in a toggletip (`@wirecore/wirelayer-react`) - [Avatar](?path=/story/react_data-avatar--playground): Image, initials or icon of a person or organisation; `as="button"` makes it a trigger, e.g. of a user menu (`@wirecore/wirelayer-react`) - [AvatarGroup](?path=/story/react_data-avatar--playground): Overlapping avatars, with "+n" for the ones not shown (`@wirecore/wirelayer-react`) - [Badge](?path=/story/react_data-badge--playground): Short label or status (solid, soft, outline or a status colour) (`@wirecore/wirelayer-react`) - [BarChart](?path=/story/react_data-barchart--playground): Bars per category for one or more series – vertical or horizontal, grouped or stacked; canvas named by the title, the data table is its text alternative (`@wirecore/wirelayer-react/chart`) - [BarsList](?path=/story/react_data-barslist--playground): A list of labels and values; the bars behind the labels show the values as lengths (`@wirecore/wirelayer-react`) - [BulletChart](?path=/story/react_data-bulletchart--playground): A meter (role="meter") with the value, the end of the scale and the target as its text (`@wirecore/wirelayer-react`) - [Card](?path=/story/react_data-card--playground): Surface for grouped content, optionally with title, media and footer; interactive cards with asChild (`@wirecore/wirelayer-react`) - [Chart](?path=/story/react_data-chart--playground): Canvas with role="img" named by the title; the data table is its text alternative (WCAG 1.1.1) (`@wirecore/wirelayer-react/chart`) - [ChatMessage](?path=/story/react_data-chat--playground): A message: author and time (only for screen readers when grouped), the bubble, the delivery status (`@wirecore/wirelayer-react`) - [ChatMessages](?path=/story/react_data-chat--playground): Message list: role="log" (announcements of new messages come from the live announcer, streamed ones once complete); aria-busy while a reply is being written. Scrolled up, a button leads to the new messages. (`@wirecore/wirelayer-react`) - [ChatPrompt](?path=/story/react_data-chat--playground): A form with a growing text field: Enter sends, Shift+Enter adds a line; while replying a stop button (`@wirecore/wirelayer-react`) - [ChatSources](?path=/story/react_data-chat--playground): Sources of an answer: a disclosure (
) with a list of links (`@wirecore/wirelayer-react`) - [ChatThinking](?path=/story/react_data-chat--playground): The reasoning of an answer: collapsed by default, "Thinking …" while it is being written (`@wirecore/wirelayer-react`) - [ChatToolCall](?path=/story/react_data-chat--playground): A tool call of an assistant: name and status in the summary, arguments and result inside (`@wirecore/wirelayer-react`) - [Chip](?path=/story/react_data-chip--playground): One option of a ChipGroup (a toggle button); outside a ChipGroup a standalone chip, optionally removable (`@wirecore/wirelayer-react`) - [Code](?path=/story/react_data-code--playground): Code inside a sentence, without syntax colours: the look of InlineCode (/code) without shiki (`@wirecore/wirelayer-react`) - [CodeHighlight](?path=/story/react_data-codehighlight--playground): Code block with syntax colours; the scroll area is focusable, the copy button copies the plain code (`@wirecore/wirelayer-react/code`) - [CodeHighlightTabs](?path=/story/react_data-codehighlight--playground): Several files: tabs with the file names (and an icon by type) above the shown code (`@wirecore/wirelayer-react/code`) - [CompositeChart](?path=/story/react_data-compositechart--playground): Bars and lines in one chart (series[].type), e.g. revenue as bars and margin as a line on a second axis (`@wirecore/wirelayer-react/chart`) - [Countdown](?path=/story/react_data-countdown--playground): role="timer": screen readers read the current value on demand, without announcing every second (`@wirecore/wirelayer-react`) - [DataList](?path=/story/react_data-datalist--playground): Terms and values as a description list (
), e.g. the details of a record (`@wirecore/wirelayer-react`) - [DataListItem](?path=/story/react_data-datalist--playground): One term and its value in a DataList (`@wirecore/wirelayer-react`) - [DataTable](?path=/story/react_data-datatable--playground): Data table on TanStack Table: sorting (also by several columns), search, filter row or filter menus with match modes, pagination, selection, column menu (pin, move, hide, group), resizing, column groups, totals, row details, row actions, row reordering, editing (cell or row), virtual scrolling, full screen, CSV export and saved state (`@wirecore/wirelayer-react/data-table`) - [DataView](?path=/story/react_data-dataview--playground): Items as a list or grid (a list either way); the switch is a radio group "View" (`@wirecore/wirelayer-react`) - [Descriptions](?path=/story/react_data-descriptions--playground): Terms and values (
) in columns, with an optional title and actions; values can turn into inputs (`@wirecore/wirelayer-react`) - [FormatBytes](?path=/story/react_data-format--playground): A file or memory size: "1.2 MB" (`@wirecore/wirelayer-react`) - [FormatDate](?path=/story/react_data-format--playground): A date in the format of the locale, in a