Fully Accessible
Built on WAI-ARIA patterns. Keyboard navigation, focus management, and screen reader support are handled for you out of the box.
Accessible, unstyled primitives built from scratch for Vue 3. Use v-model, named scoped slots, and the ui prop without React-style sub-component trees.
pnpm add akaza-uiOpen source. MIT licensed. Made for Vue 3 & Nuxt.
<script setup lang="ts">
import { ref } from "vue"
import { Tabs } from "akaza-ui"
const tabs = [
{ value: "overview", label: "Overview" },
{ value: "usage", label: "Usage" },
]
const active = ref("overview")
</script>
<template>
<Tabs v-model="active" :items="tabs">
<template #panel-overview>
Accessible behavior, your styles.
</template>
</Tabs>
</template>Built on WAI-ARIA patterns. Keyboard navigation, focus management, and screen reader support are handled for you out of the box.
No default visual styles. Bring your own CSS, Tailwind, or any design system — full control over every pixel, no overrides needed.
Composing UI feels natural in Vue. Use slots instead of sub-components — no Radix-style boilerplate, just idiomatic Vue templates.
Components expose all state and behavior through slots and props. You control the markup — Akaza UI handles the logic.
No runtime bloat. Each component is self-contained with minimal dependencies, so you only ship what you actually use.
Full type safety throughout. Slot props, component props, and emits are all typed — autocomplete works everywhere.
No ports. No new component grammar. Just the building blocks for interfaces that work, with room to make them your own.
Use the Vue patterns you already know. State and actions come through scoped slots, without a tree of compound components.
<template #trigger="{ isOpen }">
{{ isOpen ? 'Close' : 'Open' }}
</template>Keyboard navigation, focus management, and accessibility semantics are part of the component. Build your interface on top of them.
<Dialog title="Make it yours">
<template #body>
Your content. Your layout.
</template>
</Dialog>Akaza supplies structural CSS for interaction and positioning. Everything visual is up to you: Tailwind, plain CSS, or your own design system.
<Button class="your-button">
Ship something good
</Button>From a single switch to a complete application layout. Try the components, then take a look at the API.
Account settings
Manage your name, email, and profile picture.
Native validation, server errors, disabled groups, custom controls, and nested fields work together in one real flow.
admin, root, or billing to see server errors. [email protected] to see an email server error. [email protected] is valid. None yet. Submit with reserved slug or blocked email to populate this.
{
"ownerName": "",
"ownerEmail": "[email protected]",
"workspaceSlug": "support",
"plan": "(missing)",
"seats": 3,
"riskScore": 72,
"permissions": [
"read",
"export"
],
"billingLocked": true,
"submittedBillingFields": "(disabled fieldset omitted from FormData)"
}Install the package, then choose a component.