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.
<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.
Zero default 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.
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. blocked@company.test to see an email server error. ops@example.com is valid. None yet. Submit with reserved slug or blocked email to populate this.
{
"ownerName": "",
"ownerEmail": "ops@example.com",
"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.