@rafael_dias/akoma 0.3.0 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,9 +13,12 @@ Built with **Vue 3 Composition API + TypeScript**. Styles use CSS variables (no
13
13
  | **Site** | Composed, precise, trustworthy | Finance, B2B and institutional sites | `<html data-mood="site">` |
14
14
 
15
15
  Both moods share DM Sans, an optional Lora editorial accent, components, spacing,
16
- and accessible interaction states. Their palettes, radii, controls, and elevation
16
+ and accessible interaction states. Their palettes, radii, and surface treatment
17
17
  adapt to context. Dark mode works in both via `data-theme="dark"`.
18
18
 
19
+ Design guides ship as Markdown in the npm package and in the docs under **Guides**
20
+ (`/philosophy`).
21
+
19
22
  ## Quick start
20
23
 
21
24
  ```bash
@@ -23,12 +26,14 @@ npm install
23
26
  npm run dev
24
27
  ```
25
28
 
26
- Interactive docs: [http://localhost:5173](http://localhost:5173)
29
+ Interactive docs (local): [http://localhost:5173](http://localhost:5173)
30
+
31
+ Published docs: [https://rafaelgondi.github.io/akoma-vue/](https://rafaelgondi.github.io/akoma-vue/)
27
32
 
28
33
  ## Library usage (after publish)
29
34
 
30
35
  ```bash
31
- npm install @rafael_dias/akoma
36
+ npm install @rafael_dias/akoma @sysvale/cuida-icons
32
37
  ```
33
38
 
34
39
  ```ts
@@ -50,18 +55,46 @@ import { AkButton, AkInput } from '@rafael_dias/akoma'
50
55
  ### Dark mode & mood
51
56
 
52
57
  ```ts
53
- document.documentElement.dataset.theme = 'dark' // warm dark theme
54
- document.documentElement.dataset.mood = 'site' // sober "Site" mood
58
+ document.documentElement.dataset.theme = 'dark'
59
+ document.documentElement.dataset.mood = 'site'
60
+ document.documentElement.dataset.accent = 'teal' // optional brand color
61
+ ```
62
+
63
+ ### Accent palettes (v0.5)
64
+
65
+ Eight named palettes — apps are not locked to purple. Mood controls shape; accent controls brand color.
66
+
67
+ | Palette | Use for |
68
+ |---------|---------|
69
+ | `violet` | Default App |
70
+ | `evergreen` | Default Site |
71
+ | `teal` | Productivity, study, wellness |
72
+ | `ocean` | Data, analytics |
73
+ | `amber` | Warm consumer apps |
74
+ | `rose` / `coral` | Lifestyle, creative |
75
+ | `slate` | Neutral B2B |
76
+
77
+ ```ts
78
+ import { accentPaletteIds, applyAccentPalette } from '@rafael_dias/akoma'
79
+
80
+ applyAccentPalette(document.documentElement, 'teal')
55
81
  ```
56
82
 
57
- ## Components (v0.3)
83
+ ## Components (v0.6)
58
84
 
59
85
  | Component | Description |
60
86
  |-----------|-------------|
87
+ | `AkIcon` | Cuida Icons wrapper |
61
88
  | `AkButton` | Primary / secondary / ghost / danger |
89
+ | `AkIconButton` | Icon-only actions |
62
90
  | `AkBadge` | Status pills |
63
91
  | `AkChip` | Filter & category chips |
64
- | `AkCard` | Elevated surface with slots |
92
+ | `AkCard` | Flat surface with slots |
93
+ | `AkList` / `AkListRow` | Grouped flat rows |
94
+ | `AkSectionHeader` | Uppercase section labels |
95
+ | `AkProgress` | Progress bars |
96
+ | `AkDivider` | Section separators |
97
+ | `AkSwitch` | Toggle settings |
65
98
  | `AkInput` | Labeled text field |
66
99
  | `AkTextarea` | Multi-line field |
67
100
  | `AkEmptyState` | Empty list placeholder |
@@ -77,6 +110,24 @@ document.documentElement.dataset.mood = 'site' // sober "Site" mood
77
110
  | `npm run build:docs` | Build static docs (`dist-docs/`) |
78
111
  | `npm run preview` | Preview docs build |
79
112
 
113
+ ## Design guides (Markdown)
114
+
115
+ Guides live in `content/` and ship with the package:
116
+
117
+ | File | Topic |
118
+ |------|-------|
119
+ | `philosophy.md` | North star, pillars, anti-patterns |
120
+ | `moods.md` | App vs Site |
121
+ | `decisions.md` | Design decision log |
122
+ | `implementation.md` | Migration checklist |
123
+
124
+ ```ts
125
+ // Vite
126
+ import philosophy from '@rafael_dias/akoma/content/philosophy.md?raw'
127
+ ```
128
+
129
+ See [content/README.md](./content/README.md) for Node usage.
130
+
80
131
  ## Project structure
81
132
 
82
133
  ```
@@ -87,6 +138,7 @@ akoma/
87
138
  │ ├── plugin.ts
88
139
  │ └── index.ts
89
140
  ├── docs/ # Interactive playground
141
+ ├── content/ # Markdown guides (npm + docs)
90
142
  ├── vite.config.ts # Docs app
91
143
  └── vite.lib.config.ts # npm library build
92
144
  ```
@@ -0,0 +1,30 @@
1
+ # Akoma guides
2
+
3
+ Design philosophy and implementation guides shipped with the npm package.
4
+
5
+ | File | Description |
6
+ |------|-------------|
7
+ | [philosophy.md](./philosophy.md) | North star, pillars, anti-patterns |
8
+ | [moods.md](./moods.md) | App vs Site — when to use each |
9
+ | [colors.md](./colors.md) | Accent palettes — brand color options |
10
+ | [icons.md](./icons.md) | Cuida Icons usage |
11
+ | [decisions.md](./decisions.md) | Design decision log |
12
+ | [implementation.md](./implementation.md) | Checklist for migrating apps |
13
+
14
+ ## Usage in apps
15
+
16
+ ```ts
17
+ // Vite — import as raw text
18
+ import philosophy from '@rafael_dias/akoma/content/philosophy.md?raw'
19
+
20
+ // Node / bundlers without ?raw — read from node_modules
21
+ import { readFileSync } from 'node:fs'
22
+ import { fileURLToPath } from 'node:url'
23
+
24
+ const path = fileURLToPath(
25
+ import.meta.resolve('@rafael_dias/akoma/content/philosophy.md'),
26
+ )
27
+ const text = readFileSync(path, 'utf8')
28
+ ```
29
+
30
+ Published docs: https://rafaelgondi.github.io/akoma-vue/
@@ -0,0 +1,56 @@
1
+ # Accent palettes
2
+
3
+ Mood (App / Site) controls shape and surfaces. **Accent** controls brand color independently — so apps are not locked to violet or green.
4
+
5
+ ## Usage
6
+
7
+ ```html
8
+ <html data-mood="app" data-accent="teal">
9
+ ```
10
+
11
+ ```ts
12
+ import { accentPaletteIds, applyAccentPalette } from '@rafael_dias/akoma'
13
+
14
+ document.documentElement.dataset.mood = 'app'
15
+ document.documentElement.dataset.accent = 'teal'
16
+
17
+ // Or use the helper:
18
+ applyAccentPalette(document.documentElement, 'ocean')
19
+ ```
20
+
21
+ ## Defaults (no `data-accent`)
22
+
23
+ | Mood | Default accent |
24
+ |------|----------------|
25
+ | App | Violet |
26
+ | Site | Evergreen |
27
+
28
+ ## Available palettes
29
+
30
+ | ID | Character | Good for |
31
+ |----|-----------|----------|
32
+ | `violet` | Mineral purple | Personal apps, creative tools |
33
+ | `evergreen` | Confident green | Finance, operations, B2B |
34
+ | `teal` | Calm mineral teal | Productivity, wellness, study apps |
35
+ | `ocean` | Trustworthy blue | Data, analytics, institutional |
36
+ | `amber` | Warm gold | Optimistic consumer products |
37
+ | `rose` | Dusty rose | Lifestyle, journaling |
38
+ | `coral` | Terracotta | Human, warm interfaces |
39
+ | `slate` | Blue-gray | Neutral enterprise UI |
40
+
41
+ All palettes include light and dark variants for `--accent`, `--accent-hover`, `--accent-soft`, `--accent-contrast`, `--bg-tinted`, and ambient orbs.
42
+
43
+ ## Custom accent
44
+
45
+ Override tokens in your app — no fork required:
46
+
47
+ ```css
48
+ :root {
49
+ --accent: #006d77;
50
+ --accent-hover: #005a62;
51
+ --accent-soft: #e0f2f3;
52
+ --accent-contrast: #ffffff;
53
+ }
54
+ ```
55
+
56
+ Prefer named palettes when possible — they stay tested across components and dark mode.
@@ -0,0 +1,45 @@
1
+ # Design decisions
2
+
3
+ When in doubt, follow these choices instead of improvising.
4
+
5
+ ## Typography
6
+
7
+ - **Choice:** DM Sans primary; Lora optional for editorial (`--font-editorial`)
8
+ - **Why:** Humanist sans, readable, quietly expressive
9
+ - **Rejected:** Display serifs everywhere; cold geometric sans
10
+
11
+ ## Color
12
+
13
+ - **Choice:** Mood for shape; `data-accent` for brand color (8 named palettes)
14
+ - **Why:** Apps should not all look violet; finance can stay evergreen, study apps can use teal
15
+ - **Rejected:** One global accent; hardcoded purple in every App product
16
+
17
+ ## Surfaces
18
+
19
+ - **Choice:** Flat layers — border + background step; shadows only where needed (nav, modals)
20
+ - **Why:** Asana-like calm; less visual noise in data-heavy screens
21
+ - **Rejected:** Floating cards with heavy blur/shadow stacks
22
+
23
+ ## Radius
24
+
25
+ - **Choice:** App generous but not bubbly; Site controlled 8–16px
26
+ - **Why:** Shape signals mood without changing APIs
27
+ - **Rejected:** Identical radius everywhere; sharp 0px enterprise corners
28
+
29
+ ## Motion
30
+
31
+ - **Choice:** Short transitions; reveal on entry; subtle tap feedback
32
+ - **Why:** Tactile without theatre; always respect `prefers-reduced-motion`
33
+ - **Rejected:** Bouncy motion on every element
34
+
35
+ ## Forms
36
+
37
+ - **Choice:** Sentence-case labels; soft fills in App; bordered fields in Site
38
+ - **Why:** Friendly vs precise contexts
39
+ - **Rejected:** Uppercase micro-labels; inputs without focus rings
40
+
41
+ ## API
42
+
43
+ - **Choice:** Vue 3 + TS; props in English; CSS variables; no Tailwind in the library
44
+ - **Why:** Portable, themeable, npm-friendly
45
+ - **Rejected:** Utility-class coupling in components
@@ -0,0 +1,76 @@
1
+ # Icons
2
+
3
+ Akoma uses **[Cuida Icons](https://github.com/Sysvale/cuida-icons)** (`@sysvale/cuida-icons`) — the same open-source set from the Cuida design system.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @rafael_dias/akoma @sysvale/cuida-icons
9
+ ```
10
+
11
+ `@sysvale/cuida-icons` is a **peer dependency** of Akoma.
12
+
13
+ ### Vite alias (recommended)
14
+
15
+ The Cuida Icons npm package entry is misconfigured. In your `vite.config.ts`:
16
+
17
+ ```ts
18
+ import path from 'node:path'
19
+
20
+ export default defineConfig({
21
+ resolve: {
22
+ alias: {
23
+ '@sysvale/cuida-icons': path.resolve(
24
+ __dirname,
25
+ 'node_modules/@sysvale/cuida-icons/dist/index.js',
26
+ ),
27
+ },
28
+ },
29
+ })
30
+ ```
31
+
32
+ Akoma docs and library build already use this alias.
33
+
34
+ ## Usage
35
+
36
+ ```vue
37
+ <script setup lang="ts">
38
+ import { AkIcon, AkIconButton } from '@rafael_dias/akoma'
39
+ </script>
40
+
41
+ <template>
42
+ <AkIcon name="home-outline" :size="20" />
43
+
44
+ <AkIconButton label="Delete" icon="trash-outline" variant="danger" />
45
+
46
+ <AkButton>
47
+ <template #icon>
48
+ <AkIcon name="plus-outline" :size="18" />
49
+ </template>
50
+ Add item
51
+ </AkButton>
52
+ </template>
53
+ ```
54
+
55
+ ## Naming
56
+
57
+ Icon names match Cuida Icons exports: `kebab-case` with suffix, e.g. `edit-outline`, `check-circle-outline`, `open-book-outline`.
58
+
59
+ Browse the full set: [cuida.sysvale.com — Iconografia](https://cuida.sysvale.com/foundation/iconografia.html) or the [GitHub repo](https://github.com/Sysvale/cuida-icons).
60
+
61
+ ## TypeScript
62
+
63
+ ```ts
64
+ import type { CuidaIconName } from '@rafael_dias/akoma'
65
+
66
+ const icon: CuidaIconName = 'calendar-outline'
67
+ ```
68
+
69
+ ## Accessibility
70
+
71
+ - Decorative icons inside labelled buttons: omit `label` on `AkIcon` (uses `aria-hidden`)
72
+ - Standalone icons: pass `label` for screen readers
73
+
74
+ ```vue
75
+ <AkIcon name="warning-outline" label="Warning" />
76
+ ```
@@ -0,0 +1,33 @@
1
+ # Implementation checklist
2
+
3
+ Use when migrating an app to Akoma or briefing an agent.
4
+
5
+ 1. Install `@rafael_dias/akoma`, `@sysvale/cuida-icons`, and import `@rafael_dias/akoma/style.css` once at entry
6
+ 2. Pick mood at root: App for products, Site for finance/B2B
7
+ 3. Map buttons, inputs, cards, lists, badges, chips to Akoma components
8
+ 4. Replace loose hex/radius/shadow with tokens (`--bg`, `--accent`, `--space-*`, etc.)
9
+ 5. Use `AkEmptyState` and `AkShimmer` instead of one-off empty/loading UI
10
+ 6. Use `.numeric` for financial figures (tabular nums)
11
+ 7. Map domain colors to `--cat-1` … `--cat-6` in app `:root` if needed
12
+ 8. Do **not** refactor stores, routes, or API during UI-only work
13
+
14
+ ## Setup example (finance app)
15
+
16
+ ```ts
17
+ document.documentElement.dataset.mood = 'site'
18
+
19
+ import { createApp } from 'vue'
20
+ import { Akoma } from '@rafael_dias/akoma'
21
+ import '@rafael_dias/akoma/style.css'
22
+
23
+ createApp(App).use(Akoma).mount('#app')
24
+ ```
25
+
26
+ ## Reading guides in your app
27
+
28
+ ```ts
29
+ import philosophy from '@rafael_dias/akoma/content/philosophy.md?raw'
30
+ import checklist from '@rafael_dias/akoma/content/implementation.md?raw'
31
+ ```
32
+
33
+ Use in dev panels, onboarding, or agent prompts — versioned with the package.
@@ -0,0 +1,43 @@
1
+ # App vs Site
2
+
3
+ Same components. Different tokens. Pick once per product.
4
+
5
+ ## App (default)
6
+
7
+ - **Activate:** no attribute needed
8
+ - **Use when:** daily-use products, personal tools, creative apps, mobile-first PWAs
9
+ - **Character:** tactile, optimistic, relaxed
10
+ - **Accent:** soft violet on warm stone
11
+ - **Shape:** pill buttons, round chips, 16px cards
12
+ - **Surfaces:** soft fills, minimal shadow, light borders on cards
13
+
14
+ ## Site
15
+
16
+ - **Activate:** `<html data-mood="site">`
17
+ - **Use when:** finance, operations, dashboards, institutional marketing
18
+ - **Character:** composed, precise, trustworthy
19
+ - **Accent:** evergreen on mineral white
20
+ - **Shape:** 8–12px radii, structured controls
21
+ - **Surfaces:** white cards with hairline borders, almost no shadow
22
+
23
+ ## Dark mode
24
+
25
+ Both moods support warm dark themes:
26
+
27
+ ```ts
28
+ document.documentElement.dataset.theme = 'dark'
29
+ ```
30
+
31
+ Never use cold pure black — backgrounds stay mineral or forest-toned.
32
+
33
+ ## Accent palettes
34
+
35
+ Brand color is independent from mood. Without `data-accent`, App defaults to **violet** and Site to **evergreen**.
36
+
37
+ ```html
38
+ <html data-mood="app" data-accent="teal">
39
+ ```
40
+
41
+ Available: `violet`, `evergreen`, `teal`, `ocean`, `amber`, `rose`, `coral`, `slate`.
42
+
43
+ See [colors.md](./colors.md) for the full guide.
@@ -0,0 +1,43 @@
1
+ # Philosophy
2
+
3
+ ## North star
4
+
5
+ Software for real life should feel **clear enough to trust** and **warm enough to return to**. Akoma helps teams ship both — without choosing between friendly and professional.
6
+
7
+ ## Pillars
8
+
9
+ ### Human first
10
+
11
+ Interfaces should feel made for people, not demos. Calm, proximity, clarity, and trust come before visual novelty.
12
+
13
+ ### Rhythm over decoration
14
+
15
+ Hierarchy is built with spacing, type scale, and surface tone — not heavy borders, dense grids, or loud contrast for its own sake.
16
+
17
+ ### Warm, never cold
18
+
19
+ Neutrals stay mineral and natural. Accents are botanical, not neon. Even serious products should feel approachable, not clinical.
20
+
21
+ ### Flat before float
22
+
23
+ Surfaces sit close to the page. Prefer subtle borders and background steps over stacked shadows. Elevation is rare and intentional — closer to Asana than to glassy SaaS dashboards.
24
+
25
+ ### One family, two expressions
26
+
27
+ App and Site moods share components and anatomy. Only tokens change — teams do not maintain two design systems.
28
+
29
+ ## What we avoid
30
+
31
+ - Engineering-first aesthetics (Linear, Vercel, Cursor, OpenAI-style cold UI)
32
+ - Heavy drop shadows on every card and button
33
+ - Hard borders as the only way to separate content
34
+ - Decorative motion without purpose
35
+ - Hardcoded hex when a token exists
36
+ - Childish UI in finance and operations contexts
37
+ - Refactoring business logic during visual migrations
38
+
39
+ ## References (principles, not pixels)
40
+
41
+ **Warm & human:** Headspace, old Dovetail, Canva, Mailchimp, Zendesk Garden
42
+
43
+ **Trust & clarity:** Asana, old Help Scout, finance-friendly B2B surfaces
package/dist/akoma.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};let n=require("vue");var r=[`type`,`disabled`,`aria-busy`],i={key:0,class:`ak-button__spinner`,"aria-hidden":`true`},a={key:1,class:`ak-button__icon`},o={class:`ak-button__label`},s=(0,n.defineComponent)({__name:`AkButton`,props:{variant:{default:`primary`},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},type:{default:`button`},block:{type:Boolean,default:!1}},setup(e){return(t,s)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{class:(0,n.normalizeClass)([`ak-button tap-scale`,[`ak-button--${e.variant}`,`ak-button--${e.size}`,{"ak-button--block":e.block,"ak-button--loading":e.loading}]]),type:e.type,disabled:e.disabled||e.loading,"aria-busy":e.loading||void 0},[e.loading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,i)):(0,n.createCommentVNode)(``,!0),t.$slots.icon&&!e.loading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,a,[(0,n.renderSlot)(t.$slots,`icon`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,o,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)])],10,r))}}),c=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},l=c(s,[[`__scopeId`,`data-v-78a39ccd`]]),u=c((0,n.defineComponent)({__name:`AkBadge`,props:{variant:{default:`neutral`},label:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{class:(0,n.normalizeClass)([`ak-badge`,`ak-badge--${e.variant}`])},[(0,n.renderSlot)(t.$slots,`default`,{},()=>[(0,n.createTextVNode)((0,n.toDisplayString)(e.label),1)],!0)],2))}}),[[`__scopeId`,`data-v-02933f09`]]),d=[`disabled`,`aria-pressed`],f=c((0,n.defineComponent)({__name:`AkChip`,props:{active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},color:{}},emits:[`click`],setup(e,{emit:t}){let r=t;return(t,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{type:`button`,class:(0,n.normalizeClass)([`ak-chip tap-scale`,{"ak-chip--active":e.active}]),style:(0,n.normalizeStyle)(e.active&&e.color?{"--ak-chip-active-bg":e.color}:void 0),disabled:e.disabled,"aria-pressed":e.active,onClick:i[0]||=e=>r(`click`,e)},[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)],14,d))}}),[[`__scopeId`,`data-v-c782362c`]]),p={key:0,class:`ak-card__media`},m={key:1,class:`ak-card__header`},h={key:2,class:`ak-card__body`},g={key:3,class:`ak-card__footer`},_=c((0,n.defineComponent)({__name:`AkCard`,props:{interactive:{type:Boolean,default:!1},padding:{default:`md`}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`article`,{class:(0,n.normalizeClass)([`ak-card`,[`ak-card--pad-${e.padding}`,{"ak-card--interactive tap-scale":e.interactive}]])},[t.$slots.media?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,p,[(0,n.renderSlot)(t.$slots,`media`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.header?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[(0,n.renderSlot)(t.$slots,`header`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.default?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,h,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.footer?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,g,[(0,n.renderSlot)(t.$slots,`footer`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-0eb2f676`]]),v={key:0,class:`ak-field__label`},y={key:0,class:`ak-field__required`,"aria-hidden":`true`},b=[`id`,`type`,`value`,`placeholder`,`disabled`,`required`,`name`,`autocomplete`,`aria-invalid`,`aria-describedby`],x=[`id`],S=c((0,n.defineComponent)({__name:`AkInput`,props:{modelValue:{default:``},label:{},placeholder:{},hint:{},error:{},type:{default:`text`},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},size:{default:`md`},autocomplete:{},name:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.useId)(),o=(0,n.computed)(()=>`ak-input-${a}`),s=(0,n.computed)(()=>r.hint||r.error?`ak-input-hint-${a}`:void 0);function c(e){let t=e.target;i(`update:modelValue`,t.value)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`label`,{class:(0,n.normalizeClass)([`ak-field`,{"ak-field--disabled":e.disabled,"ak-field--error":!!e.error}])},[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,v,[(0,n.createTextVNode)((0,n.toDisplayString)(e.label)+` `,1),e.required?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,y,`*`)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`input`,{id:o.value,class:(0,n.normalizeClass)([`ak-field__control`,`ak-field__control--${e.size}`]),type:e.type,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,required:e.required,name:e.name,autocomplete:e.autocomplete,"aria-invalid":!!e.error||void 0,"aria-describedby":s.value,onInput:c},null,42,b),e.error||e.hint?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:1,id:s.value,class:`ak-field__hint`},(0,n.toDisplayString)(e.error||e.hint),9,x)):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-60d7d2d0`]]),C={key:0,class:`ak-field__label`},w={key:0,class:`ak-field__required`,"aria-hidden":`true`},T=[`id`,`value`,`placeholder`,`disabled`,`required`,`name`,`rows`,`aria-invalid`,`aria-describedby`],E=[`id`],D=c((0,n.defineComponent)({__name:`AkTextarea`,props:{modelValue:{default:``},label:{},placeholder:{},hint:{},error:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},rows:{default:4},name:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.useId)(),o=(0,n.computed)(()=>`ak-textarea-${a}`),s=(0,n.computed)(()=>r.hint||r.error?`ak-textarea-hint-${a}`:void 0);function c(e){let t=e.target;i(`update:modelValue`,t.value)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`label`,{class:(0,n.normalizeClass)([`ak-field`,{"ak-field--disabled":e.disabled,"ak-field--error":!!e.error}])},[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,C,[(0,n.createTextVNode)((0,n.toDisplayString)(e.label)+` `,1),e.required?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,w,`*`)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`textarea`,{id:o.value,class:`ak-field__control`,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,required:e.required,name:e.name,rows:e.rows,"aria-invalid":!!e.error||void 0,"aria-describedby":s.value,onInput:c},null,40,T),e.error||e.hint?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:1,id:s.value,class:`ak-field__hint`},(0,n.toDisplayString)(e.error||e.hint),9,E)):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-d34da198`]]),O={class:`ak-empty`},k={class:`ak-empty__icon`,"aria-hidden":`true`},A={key:0,class:`ak-empty__glyph`},j={class:`ak-empty__title`},M={key:0,class:`ak-empty__description`},N={key:1,class:`ak-empty__action`},P=c((0,n.defineComponent)({__name:`AkEmptyState`,props:{title:{},description:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,O,[(0,n.createElementVNode)(`div`,k,[r[0]||=(0,n.createElementVNode)(`span`,{class:`ak-empty__ring ak-empty__ring--outer`},null,-1),r[1]||=(0,n.createElementVNode)(`span`,{class:`ak-empty__ring ak-empty__ring--inner`},null,-1),t.$slots.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,A,[(0,n.renderSlot)(t.$slots,`icon`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`h3`,j,(0,n.toDisplayString)(e.title),1),e.description?((0,n.openBlock)(),(0,n.createElementBlock)(`p`,M,(0,n.toDisplayString)(e.description),1)):(0,n.createCommentVNode)(``,!0),t.$slots.action?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,N,[(0,n.renderSlot)(t.$slots,`action`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-b8b16929`]]),F=c((0,n.defineComponent)({__name:`AkShimmer`,props:{width:{default:`100%`},height:{default:`16px`},radius:{default:`md`}},setup(e){function t(e){return e===`sm`||e===`md`||e===`lg`||e===`full`?`var(--radius-${e})`:e}return(r,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:`ak-shimmer`,style:(0,n.normalizeStyle)({width:e.width,height:e.height,borderRadius:t(e.radius)}),"aria-hidden":`true`},null,4))}}),[[`__scopeId`,`data-v-de7bd16d`]]),I=c((0,n.defineComponent)({__name:`AkAmbientBg`,props:{contained:{type:Boolean,default:!1}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`ambient`,{"ambient--contained":e.contained}]),"aria-hidden":`true`},[...r[0]||=[(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--1`},null,-1),(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--2`},null,-1),(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--3`},null,-1)]],2))}}),[[`__scopeId`,`data-v-b34dece3`]]),L=t({AkAmbientBg:()=>I,AkBadge:()=>u,AkButton:()=>l,AkCard:()=>_,AkChip:()=>f,AkEmptyState:()=>P,AkInput:()=>S,AkShimmer:()=>F,AkTextarea:()=>D}),R={install(e,t={}){let n=t.prefix??``;for(let[t,r]of Object.entries(L))e.component(`${n}${t}`,r)}};exports.AkAmbientBg=I,exports.AkBadge=u,exports.AkButton=l,exports.AkCard=_,exports.AkChip=f,exports.AkEmptyState=P,exports.AkInput=S,exports.AkShimmer=F,exports.AkTextarea=D,exports.Akoma=R;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};let n=require("vue"),r=require("@sysvale/cuida-icons");var i=[`type`,`disabled`,`aria-busy`],a={key:0,class:`ak-button__spinner`,"aria-hidden":`true`},o={key:1,class:`ak-button__icon`},s={class:`ak-button__label`},c=(0,n.defineComponent)({__name:`AkButton`,props:{variant:{default:`primary`},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},type:{default:`button`},block:{type:Boolean,default:!1}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{class:(0,n.normalizeClass)([`ak-button tap-scale`,[`ak-button--${e.variant}`,`ak-button--${e.size}`,{"ak-button--block":e.block,"ak-button--loading":e.loading}]]),type:e.type,disabled:e.disabled||e.loading,"aria-busy":e.loading||void 0},[e.loading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,a)):(0,n.createCommentVNode)(``,!0),t.$slots.icon&&!e.loading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,o,[(0,n.renderSlot)(t.$slots,`icon`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,s,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)])],10,i))}}),l=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},u=l(c,[[`__scopeId`,`data-v-7786dae9`]]),d=l((0,n.defineComponent)({__name:`AkBadge`,props:{variant:{default:`neutral`},label:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{class:(0,n.normalizeClass)([`ak-badge`,`ak-badge--${e.variant}`])},[(0,n.renderSlot)(t.$slots,`default`,{},()=>[(0,n.createTextVNode)((0,n.toDisplayString)(e.label),1)],!0)],2))}}),[[`__scopeId`,`data-v-02933f09`]]),f=[`disabled`,`aria-pressed`],p=l((0,n.defineComponent)({__name:`AkChip`,props:{active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},color:{}},emits:[`click`],setup(e,{emit:t}){let r=t;return(t,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{type:`button`,class:(0,n.normalizeClass)([`ak-chip tap-scale`,{"ak-chip--active":e.active}]),style:(0,n.normalizeStyle)(e.active&&e.color?{"--ak-chip-active-bg":e.color}:void 0),disabled:e.disabled,"aria-pressed":e.active,onClick:i[0]||=e=>r(`click`,e)},[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)],14,f))}}),[[`__scopeId`,`data-v-c782362c`]]),m={key:0,class:`ak-card__media`},ee={key:1,class:`ak-card__header`},te={key:2,class:`ak-card__body`},ne={key:3,class:`ak-card__footer`},h=l((0,n.defineComponent)({__name:`AkCard`,props:{interactive:{type:Boolean,default:!1},padding:{default:`md`}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`article`,{class:(0,n.normalizeClass)([`ak-card`,[`ak-card--pad-${e.padding}`,{"ak-card--interactive":e.interactive}]])},[t.$slots.media?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[(0,n.renderSlot)(t.$slots,`media`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.header?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ee,[(0,n.renderSlot)(t.$slots,`header`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.default?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,te,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),t.$slots.footer?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ne,[(0,n.renderSlot)(t.$slots,`footer`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-73ac6197`]]),g={key:0,class:`ak-field__label`},_={key:0,class:`ak-field__required`,"aria-hidden":`true`},v=[`id`,`type`,`value`,`placeholder`,`disabled`,`required`,`name`,`autocomplete`,`aria-invalid`,`aria-describedby`],y=[`id`],b=l((0,n.defineComponent)({__name:`AkInput`,props:{modelValue:{default:``},label:{},placeholder:{},hint:{},error:{},type:{default:`text`},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},size:{default:`md`},autocomplete:{},name:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.useId)(),o=(0,n.computed)(()=>`ak-input-${a}`),s=(0,n.computed)(()=>r.hint||r.error?`ak-input-hint-${a}`:void 0);function c(e){let t=e.target;i(`update:modelValue`,t.value)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`label`,{class:(0,n.normalizeClass)([`ak-field`,{"ak-field--disabled":e.disabled,"ak-field--error":!!e.error}])},[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,g,[(0,n.createTextVNode)((0,n.toDisplayString)(e.label)+` `,1),e.required?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,`*`)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`input`,{id:o.value,class:(0,n.normalizeClass)([`ak-field__control`,`ak-field__control--${e.size}`]),type:e.type,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,required:e.required,name:e.name,autocomplete:e.autocomplete,"aria-invalid":!!e.error||void 0,"aria-describedby":s.value,onInput:c},null,42,v),e.error||e.hint?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:1,id:s.value,class:`ak-field__hint`},(0,n.toDisplayString)(e.error||e.hint),9,y)):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-60d7d2d0`]]),x={key:0,class:`ak-field__label`},re={key:0,class:`ak-field__required`,"aria-hidden":`true`},ie=[`id`,`value`,`placeholder`,`disabled`,`required`,`name`,`rows`,`aria-invalid`,`aria-describedby`],ae=[`id`],S=l((0,n.defineComponent)({__name:`AkTextarea`,props:{modelValue:{default:``},label:{},placeholder:{},hint:{},error:{},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},rows:{default:4},name:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.useId)(),o=(0,n.computed)(()=>`ak-textarea-${a}`),s=(0,n.computed)(()=>r.hint||r.error?`ak-textarea-hint-${a}`:void 0);function c(e){let t=e.target;i(`update:modelValue`,t.value)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`label`,{class:(0,n.normalizeClass)([`ak-field`,{"ak-field--disabled":e.disabled,"ak-field--error":!!e.error}])},[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,x,[(0,n.createTextVNode)((0,n.toDisplayString)(e.label)+` `,1),e.required?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,re,`*`)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`textarea`,{id:o.value,class:`ak-field__control`,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,required:e.required,name:e.name,rows:e.rows,"aria-invalid":!!e.error||void 0,"aria-describedby":s.value,onInput:c},null,40,ie),e.error||e.hint?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:1,id:s.value,class:`ak-field__hint`},(0,n.toDisplayString)(e.error||e.hint),9,ae)):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-d34da198`]]),oe={class:`ak-empty`},se={class:`ak-empty__icon`,"aria-hidden":`true`},ce={key:0,class:`ak-empty__glyph`},le={class:`ak-empty__title`},ue={key:0,class:`ak-empty__description`},de={key:1,class:`ak-empty__action`},C=l((0,n.defineComponent)({__name:`AkEmptyState`,props:{title:{},description:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[(0,n.createElementVNode)(`div`,se,[r[0]||=(0,n.createElementVNode)(`span`,{class:`ak-empty__ring ak-empty__ring--outer`},null,-1),r[1]||=(0,n.createElementVNode)(`span`,{class:`ak-empty__ring ak-empty__ring--inner`},null,-1),t.$slots.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ce,[(0,n.renderSlot)(t.$slots,`icon`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`h3`,le,(0,n.toDisplayString)(e.title),1),e.description?((0,n.openBlock)(),(0,n.createElementBlock)(`p`,ue,(0,n.toDisplayString)(e.description),1)):(0,n.createCommentVNode)(``,!0),t.$slots.action?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,de,[(0,n.renderSlot)(t.$slots,`action`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-ab81ece0`]]),w=l((0,n.defineComponent)({__name:`AkShimmer`,props:{width:{default:`100%`},height:{default:`16px`},radius:{default:`md`}},setup(e){function t(e){return e===`sm`||e===`md`||e===`lg`||e===`full`?`var(--radius-${e})`:e}return(r,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:`ak-shimmer`,style:(0,n.normalizeStyle)({width:e.width,height:e.height,borderRadius:t(e.radius)}),"aria-hidden":`true`},null,4))}}),[[`__scopeId`,`data-v-de7bd16d`]]),T=l((0,n.defineComponent)({__name:`AkAmbientBg`,props:{contained:{type:Boolean,default:!1}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`ambient`,{"ambient--contained":e.contained}]),"aria-hidden":`true`},[...r[0]||=[(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--1`},null,-1),(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--2`},null,-1),(0,n.createElementVNode)(`span`,{class:`ambient__orb ambient__orb--3`},null,-1)]],2))}}),[[`__scopeId`,`data-v-b34dece3`]]),E=new Map(r.completeIconSet.map(e=>[e.name,D(e.data)]));function D(e){let t=e.match(/<path\b[^>]*\/>/g);return t?.length?`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">${t.map(e=>e.replace(/\sfill="[^"]*"/g,``).replace(/\s(fill-rule|clip-rule)="[^"]*"/g,``)).join(``)}</svg>`:e}function O(e){return E.get(e)??``}var k=[`role`,`aria-label`,`aria-hidden`,`innerHTML`],A=l((0,n.defineComponent)({__name:`AkIcon`,props:{name:{},size:{default:20},label:{}},setup(e){let t=e,r=(0,n.computed)(()=>typeof t.size==`number`?`${t.size}px`:t.size),i=(0,n.computed)(()=>O(t.name));return(t,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{class:(0,n.normalizeClass)([`ak-icon`,{"ak-icon--missing":!i.value}]),style:(0,n.normalizeStyle)({width:r.value,height:r.value}),role:e.label?`img`:void 0,"aria-label":e.label,"aria-hidden":!e.label||void 0,innerHTML:i.value},null,14,k))}}),[[`__scopeId`,`data-v-083f6c55`]]),j=[`aria-orientation`],M={key:0,class:`ak-divider__label`},N=l((0,n.defineComponent)({__name:`AkDivider`,props:{spacing:{default:`md`},label:{},vertical:{type:Boolean,default:!1}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`ak-divider`,[e.vertical?`ak-divider--vertical`:`ak-divider--horizontal`,`ak-divider--spacing-${e.spacing}`]]),role:`separator`,"aria-orientation":e.vertical?`vertical`:`horizontal`},[e.label&&!e.vertical?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,M,(0,n.toDisplayString)(e.label),1)):(0,n.createCommentVNode)(``,!0)],10,j))}}),[[`__scopeId`,`data-v-17bc7513`]]),P={key:0,class:`ak-progress__meta`},F={key:0,class:`ak-progress__label`},I={key:1,class:`ak-progress__value numeric`},L=[`aria-valuenow`,`aria-valuemax`,`aria-label`],R=l((0,n.defineComponent)({__name:`AkProgress`,props:{value:{default:0},max:{default:100},size:{default:`md`},color:{},label:{},showValue:{type:Boolean,default:!1}},setup(e){let t=e,r=(0,n.computed)(()=>t.max<=0?0:Math.min(100,Math.max(0,t.value/t.max*100))),i=(0,n.computed)(()=>({width:`${r.value}%`,...t.color?{background:t.color}:{}}));return(t,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`ak-progress`,`ak-progress--${e.size}`])},[e.label||e.showValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,P,[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,F,(0,n.toDisplayString)(e.label),1)):(0,n.createCommentVNode)(``,!0),e.showValue?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,I,(0,n.toDisplayString)(Math.round(r.value))+`%`,1)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,{class:`ak-progress__track`,role:`progressbar`,"aria-valuenow":e.value,"aria-valuemin":0,"aria-valuemax":e.max,"aria-label":e.label},[(0,n.createElementVNode)(`span`,{class:`ak-progress__fill`,style:(0,n.normalizeStyle)(i.value)},null,4)],8,L)],2))}}),[[`__scopeId`,`data-v-ed0a6fcd`]]),z={class:`ak-section-header`},B={class:`ak-section-header__title`},V={key:0,class:`ak-section-header__action`},H=l((0,n.defineComponent)({__name:`AkSectionHeader`,props:{title:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`header`,z,[(0,n.createElementVNode)(`h2`,B,[(0,n.renderSlot)(t.$slots,`default`,{},()=>[(0,n.createTextVNode)((0,n.toDisplayString)(e.title),1)],!0)]),t.$slots.action?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,V,[(0,n.renderSlot)(t.$slots,`action`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-65fca8d1`]]),fe={class:`ak-list`},U=l((0,n.defineComponent)({__name:`AkList`,setup(e){return(0,n.provide)(`ak-list`,!0),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`ul`,fe,[(0,n.renderSlot)(e.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-708bdd68`]]),pe=[`disabled`],me={key:0,class:`ak-list-row__leading`},he={class:`ak-list-row__content`},ge={class:`ak-list-row__title`},_e={key:0,class:`ak-list-row__subtitle`},ve={key:1,class:`ak-list-row__trailing`},ye={key:0,class:`ak-list-row__leading`},be={class:`ak-list-row__content`},xe={class:`ak-list-row__title`},Se={key:0,class:`ak-list-row__subtitle`},Ce={key:1,class:`ak-list-row__trailing`},we=[`disabled`],Te={key:0,class:`ak-list-row__leading`},Ee={class:`ak-list-row__content`},De={class:`ak-list-row__title`},Oe={key:0,class:`ak-list-row__subtitle`},ke={key:1,class:`ak-list-row__trailing`},Ae={key:0,class:`ak-list-row__leading`},je={class:`ak-list-row__content`},Me={class:`ak-list-row__title`},Ne={key:0,class:`ak-list-row__subtitle`},Pe={key:1,class:`ak-list-row__trailing`},W=l((0,n.defineComponent)({__name:`AkListRow`,props:{interactive:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},padding:{default:`md`},divider:{type:Boolean,default:!0}},setup(e){let t=e,r=(0,n.inject)(`ak-list`,!1),i=(0,n.computed)(()=>[`ak-list-row`,`ak-list-row--pad-${t.padding}`,{"ak-list-row--interactive":t.interactive,"ak-list-row--disabled":t.disabled}]);return(t,a)=>(0,n.unref)(r)?((0,n.openBlock)(),(0,n.createElementBlock)(`li`,{key:0,class:(0,n.normalizeClass)([`ak-list-row-item`,{"ak-list-row-item--divider":e.divider}])},[e.interactive?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,type:`button`,class:(0,n.normalizeClass)(i.value),disabled:e.disabled},[t.$slots.leading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,me,[(0,n.renderSlot)(t.$slots,`leading`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,he,[(0,n.createElementVNode)(`span`,ge,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)]),t.$slots.subtitle?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_e,[(0,n.renderSlot)(t.$slots,`subtitle`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),t.$slots.trailing?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ve,[(0,n.renderSlot)(t.$slots,`trailing`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],10,pe)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:1,class:(0,n.normalizeClass)(i.value)},[t.$slots.leading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ye,[(0,n.renderSlot)(t.$slots,`leading`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,be,[(0,n.createElementVNode)(`span`,xe,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)]),t.$slots.subtitle?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Se,[(0,n.renderSlot)(t.$slots,`subtitle`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),t.$slots.trailing?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Ce,[(0,n.renderSlot)(t.$slots,`trailing`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],2))],2)):e.interactive?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:1,type:`button`,class:(0,n.normalizeClass)(i.value),disabled:e.disabled},[t.$slots.leading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Te,[(0,n.renderSlot)(t.$slots,`leading`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,Ee,[(0,n.createElementVNode)(`span`,De,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)]),t.$slots.subtitle?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Oe,[(0,n.renderSlot)(t.$slots,`subtitle`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),t.$slots.trailing?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ke,[(0,n.renderSlot)(t.$slots,`trailing`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],10,we)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:2,class:(0,n.normalizeClass)(i.value)},[t.$slots.leading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Ae,[(0,n.renderSlot)(t.$slots,`leading`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,je,[(0,n.createElementVNode)(`span`,Me,[(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0)]),t.$slots.subtitle?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Ne,[(0,n.renderSlot)(t.$slots,`subtitle`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),t.$slots.trailing?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Pe,[(0,n.renderSlot)(t.$slots,`trailing`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-9f8ea96f`]]),Fe=[`type`,`disabled`,`aria-label`,`aria-busy`],Ie={key:0,class:`ak-icon-button__spinner`,"aria-hidden":`true`},Le={key:1,class:`ak-icon-button__icon`},G=l((0,n.defineComponent)({__name:`AkIconButton`,props:{variant:{default:`ghost`},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},type:{default:`button`},label:{},icon:{}},setup(e){let t=e,r=(0,n.computed)(()=>({sm:18,md:20,lg:22})[t.size]);return(t,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{class:(0,n.normalizeClass)([`ak-icon-button tap-scale`,[`ak-icon-button--${e.variant}`,`ak-icon-button--${e.size}`,{"ak-icon-button--loading":e.loading}]]),type:e.type,disabled:e.disabled||e.loading,"aria-label":e.label,"aria-busy":e.loading||void 0},[e.loading?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Ie)):((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Le,[e.icon?((0,n.openBlock)(),(0,n.createBlock)(A,{key:0,name:e.icon,size:r.value},null,8,[`name`,`size`])):(0,n.renderSlot)(t.$slots,`default`,{},void 0,!0,1)]))],10,Fe))}}),[[`__scopeId`,`data-v-b4833b10`]]),Re={key:0,class:`ak-switch__copy`},ze={key:0,class:`ak-switch__label`},Be={key:1,class:`ak-switch__description`},Ve={class:`ak-switch__control`},He=[`id`,`checked`,`disabled`],K=l((0,n.defineComponent)({__name:`AkSwitch`,props:{modelValue:{type:Boolean,default:!1},label:{},description:{},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=t,i=(0,n.useId)(),a=(0,n.computed)(()=>`ak-switch-${i}`);function o(e){let t=e.target;r(`update:modelValue`,t.checked)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`label`,{class:(0,n.normalizeClass)([`ak-switch`,{"ak-switch--disabled":e.disabled,"ak-switch--on":e.modelValue}])},[e.label||e.description?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Re,[e.label?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ze,(0,n.toDisplayString)(e.label),1)):(0,n.createCommentVNode)(``,!0),e.description?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,Be,(0,n.toDisplayString)(e.description),1)):(0,n.createCommentVNode)(``,!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,Ve,[(0,n.createElementVNode)(`input`,{id:a.value,class:`ak-switch__input`,type:`checkbox`,role:`switch`,checked:e.modelValue,disabled:e.disabled,onChange:o},null,40,He),r[0]||=(0,n.createElementVNode)(`span`,{class:`ak-switch__track`,"aria-hidden":`true`},[(0,n.createElementVNode)(`span`,{class:`ak-switch__thumb`})],-1)])],2))}}),[[`__scopeId`,`data-v-d49f3b2e`]]),q=Symbol(`ak-tab-bar`),Ue={class:`ak-tab-bar`,"aria-label":`Primary`},J=l((0,n.defineComponent)({__name:`AkTabBar`,props:{modelValue:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.ref)(null),o=(0,n.reactive)(new Map),s=(0,n.ref)({x:0,y:0,w:0,h:0,ready:!1});function c(){let e=a.value,t=o.get(r.modelValue);if(!e||!t){s.value.ready=!1;return}let n=e.getBoundingClientRect(),i=(t.querySelector(`.ak-tab-bar__icon`)??t).getBoundingClientRect();s.value={x:i.left-n.left,y:i.top-n.top,w:i.width,h:i.height,ready:!0}}function l(e,t){o.set(e,t),(0,n.nextTick)(c)}function u(e){o.delete(e),(0,n.nextTick)(c)}let d;return(0,n.onMounted)(()=>{(0,n.nextTick)(c),d=new ResizeObserver(()=>c()),a.value&&d.observe(a.value)}),(0,n.onUnmounted)(()=>d?.disconnect()),(0,n.watch)(()=>r.modelValue,()=>void(0,n.nextTick)(c)),(0,n.provide)(q,{active:(0,n.toRef)(r,`modelValue`),select:e=>i(`update:modelValue`,e),register:l,unregister:u}),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`nav`,Ue,[(0,n.createElementVNode)(`div`,{ref_key:`trackRef`,ref:a,class:`ak-tab-bar__track`,role:`tablist`},[(0,n.createElementVNode)(`span`,{class:(0,n.normalizeClass)([`ak-tab-bar__indicator`,{"ak-tab-bar__indicator--ready":s.value.ready}]),style:(0,n.normalizeStyle)({transform:`translate(${s.value.x}px, ${s.value.y}px)`,width:`${s.value.w}px`,height:`${s.value.h}px`}),"aria-hidden":`true`},null,6),(0,n.renderSlot)(e.$slots,`default`,{},void 0,!0)],512)]))}}),[[`__scopeId`,`data-v-636977ec`]]),We=[`aria-selected`,`aria-label`,`disabled`],Ge={class:`ak-tab-bar__icon`,"aria-hidden":`true`},Y={class:`ak-tab-bar__label`},X=l((0,n.defineComponent)({__name:`AkTabBarItem`,props:{value:{},label:{},icon:{},disabled:{type:Boolean,default:!1}},setup(e){let t=e,r=(0,n.inject)(q);if(!r)throw Error(`AkTabBarItem must be used inside AkTabBar`);let i=r,a=(0,n.ref)(null),o=(0,n.computed)(()=>i.active.value===t.value);(0,n.onMounted)(()=>{a.value&&i.register(t.value,a.value)}),(0,n.onUnmounted)(()=>{i.unregister(t.value)});function s(){t.disabled||i.select(t.value)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{ref_key:`itemRef`,ref:a,type:`button`,class:(0,n.normalizeClass)([`ak-tab-bar__item`,{"ak-tab-bar__item--active":o.value}]),role:`tab`,"aria-selected":o.value,"aria-label":e.label,disabled:e.disabled,onClick:s},[(0,n.createElementVNode)(`span`,Ge,[(0,n.renderSlot)(t.$slots,`icon`,{},()=>[e.icon?((0,n.openBlock)(),(0,n.createBlock)(A,{key:0,name:e.icon,size:20},null,8,[`name`])):(0,n.createCommentVNode)(``,!0)],!0)]),(0,n.createElementVNode)(`span`,Y,(0,n.toDisplayString)(e.label),1)],10,We))}}),[[`__scopeId`,`data-v-2a73a441`]]),Ke=t({AkAmbientBg:()=>T,AkBadge:()=>d,AkButton:()=>u,AkCard:()=>h,AkChip:()=>p,AkDivider:()=>N,AkEmptyState:()=>C,AkIcon:()=>A,AkIconButton:()=>G,AkInput:()=>b,AkList:()=>U,AkListRow:()=>W,AkProgress:()=>R,AkSectionHeader:()=>H,AkShimmer:()=>w,AkSwitch:()=>K,AkTabBar:()=>J,AkTabBarItem:()=>X,AkTextarea:()=>S}),qe={install(e,t={}){let n=t.prefix??``;for(let[t,r]of Object.entries(Ke))e.component(`${n}${t}`,r)}},Z={violet:{label:`Violet`,description:`Mineral violet — default for App mood.`,sample:`#6658b8`},evergreen:{label:`Evergreen`,description:`Confident green — default for Site mood.`,sample:`#2e684f`},teal:{label:`Teal`,description:`Calm mineral teal for productivity and wellness apps.`,sample:`#3a7d85`},ocean:{label:`Ocean`,description:`Trustworthy blue for data-heavy products.`,sample:`#3d6a94`},amber:{label:`Amber`,description:`Warm gold for optimistic, human interfaces.`,sample:`#9a702d`},rose:{label:`Rose`,description:`Dusty rose for lifestyle and creative tools.`,sample:`#a8586a`},coral:{label:`Coral`,description:`Terracotta warmth without feeling playful.`,sample:`#b5644a`},slate:{label:`Slate`,description:`Blue-gray for neutral B2B surfaces.`,sample:`#4a5d73`}},Je=Object.keys(Z),Q=`violet`,$=`evergreen`;function Ye(e,t){if(t===`auto`){delete e.dataset.accent;return}e.dataset.accent=t}function Xe(e,t){return t||(e===`site`?$:Q)}exports.AkAmbientBg=T,exports.AkBadge=d,exports.AkButton=u,exports.AkCard=h,exports.AkChip=p,exports.AkDivider=N,exports.AkEmptyState=C,exports.AkIcon=A,exports.AkIconButton=G,exports.AkInput=b,exports.AkList=U,exports.AkListRow=W,exports.AkProgress=R,exports.AkSectionHeader=H,exports.AkShimmer=w,exports.AkSwitch=K,exports.AkTabBar=J,exports.AkTabBarItem=X,exports.AkTextarea=S,exports.Akoma=qe,exports.accentPaletteIds=Je,exports.accentPalettes=Z,exports.appDefaultAccent=Q,exports.applyAccentPalette=Ye,exports.cuidaIconMap=E,exports.getCuidaIconMarkup=O,exports.resolveAccentPalette=Xe,exports.siteDefaultAccent=$;