@kungal/ui-vue 1.6.1 → 1.6.3

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/CHANGELOG.md ADDED
@@ -0,0 +1,1273 @@
1
+ # @kungal/ui-vue
2
+
3
+ ## 1.6.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 0019f45: fix(vue): icon-only buttons now match the height of same-size text buttons
8
+
9
+ `isIconOnly` previously only swapped the padding (`p-2.5` etc.), so an icon-only
10
+ button collapsed to the icon's `1em` height instead of the text line-height —
11
+ leaving it ~8px shorter than a text button of the same `size` and breaking
12
+ alignment in a toolbar row. Icon-only buttons are now a fixed square whose side
13
+ equals the same-size text-button height (the new `kunControlSquareClasses`),
14
+ matching how shadcn/HeroUI/Chakra/Ant size their icon buttons. The icon stays at
15
+ its natural `1em`, centered.
16
+
17
+ Also pins `KunPagination`'s prev/next arrows to `size="sm"` so they line up with
18
+ the (already `sm`) numbered page buttons — without it the now-correct default
19
+ `md` icon button would render 4px taller than the numbers.
20
+
21
+ - @kungal/ui-core@1.6.3
22
+
23
+ ## 1.6.2
24
+
25
+ ### Patch Changes
26
+
27
+ - 05f2bee: chore: ship CHANGELOG.md in the published packages
28
+
29
+ `CHANGELOG.md` is now included in each package's npm tarball (added to `files`),
30
+ so downstream can read the per-version changes straight from the npm package
31
+ page — not only from the GitHub repo. (Releases also now appear on GitHub
32
+ Releases and the docs site's auto-generated /changelog page.)
33
+
34
+ - Updated dependencies [05f2bee]
35
+ - @kungal/ui-core@1.6.2
36
+
37
+ ## 1.6.1
38
+
39
+ ### Patch Changes
40
+
41
+ - 498a9c1: fix(vue): Accordion duplicate ids + Carousel dot indicators
42
+
43
+ Two issues found reviewing the 1.6.0 components:
44
+
45
+ - **KunAccordion**: header/panel ARIA ids were derived from the item `value`, so
46
+ two accordions reusing the same values (e.g. `a`/`b`) emitted duplicate ids —
47
+ invalid HTML and a broken `aria-controls` target. Ids are now generated with
48
+ Vue's SSR-stable `useId()`, so they're globally unique regardless of `value`.
49
+ (`name` stays as an optional readable prefix.)
50
+ - **KunCarousel**: with `slidesPerView > 1` the dots rendered one-per-slide, but
51
+ the last `slidesPerView − 1` of them could never become active. Dots now map to
52
+ reachable scroll positions (`maxIndex + 1`), so every dot works. The dots also
53
+ switched from an incorrect `role="tab"` (with no tabpanels) to plain buttons
54
+ with `aria-current`, and an internal computed no longer shadows the
55
+ `showArrows` prop.
56
+ - @kungal/ui-core@1.6.1
57
+
58
+ ## 1.6.0
59
+
60
+ ### Minor Changes
61
+
62
+ - 5d9ced9: feat(vue): five new components — Accordion, Carousel, Skeleton, Steps, Timeline
63
+
64
+ Adds the components the kungal apps were repeatedly hand-rolling on top of KunUI.
65
+ All are SSR-safe and accessible, and reuse the shared design tokens / contrast
66
+ helpers.
67
+
68
+ - **KunAccordion + KunAccordionItem** — collapsible sections. Single-open by
69
+ default or `multiple`; controlled via `v-model` (string / string[]) or
70
+ uncontrolled from `defaultValue`. `light` / `bordered` / `splitted` variants.
71
+ The reveal uses the CSS grid `0fr → 1fr` trick — animates real height with no
72
+ JS measurement and renders collapsed in SSR HTML (no hydration flash). Proper
73
+ `aria-expanded` / `aria-controls`, and the closed panel is `inert`.
74
+ - **KunCarousel + KunCarouselItem** — horizontal slider on native CSS
75
+ scroll-snap, so touch swipe + momentum work with zero JS and it renders
76
+ server-side. Prev/next arrows, dot indicators (read from scroll position) and
77
+ optional `autoplay` are progressive enhancements; autoplay pauses on
78
+ hover/focus and is off under reduced-motion. `slidesPerView` for thumbnail
79
+ strips.
80
+ - **KunSkeleton** — content loading placeholder (`text` / `rect` / `circle`),
81
+ `loaded` swaps in the real content via the default slot, pulse respects
82
+ reduced-motion.
83
+ - **KunSteps** — multi-step indicator (`items` + `current`), horizontal /
84
+ vertical, done / active / pending states, contrast-correct filled markers.
85
+ - **KunTimeline + KunTimelineItem** — vertical timeline with coloured dots or
86
+ icon medallions; the connecting line is pure CSS.
87
+
88
+ ### Patch Changes
89
+
90
+ - @kungal/ui-core@1.6.0
91
+
92
+ ## 1.5.0
93
+
94
+ ### Patch Changes
95
+
96
+ - 13005ea: fix(vue): legible foreground on solid/filled color variants (esp. dark mode)
97
+
98
+ Solid fills painted white text on `bg-{color}`, which has two problems verified
99
+ by contrast measurement:
100
+
101
+ 1. The dark color scale is inverted, so a plain `bg-{color}` renders **pale** in
102
+ dark mode — white text dropped to ~1.0–2.5:1 (the `solid` Info `info` callout
103
+ was essentially invisible, white on near-white).
104
+ 2. The light hues (secondary / success / warning / info) are light in **both**
105
+ modes, so white text fails WCAG everywhere (~2:1), not just in dark mode.
106
+
107
+ New single source of truth in `@kungal/ui-core` — `kunSolidClasses`,
108
+ `kunSolidBgClasses`, `kunSolidFgClasses` — pairs each fill with a `dark:bg-*`
109
+ pin (stays saturated in dark mode) and a contrast-correct foreground: the dark
110
+ hues (default / primary / danger) keep white, the light hues take dark text.
111
+ Every solid foreground now clears WCAG AA in both modes (≈4.1–10.3:1).
112
+
113
+ Applied to: Button / Chip (shared variant matrix), Info (`solid` / `shadow` — the
114
+ reported bug; its title no longer overrides the box foreground), Badge, Progress
115
+ (on-bar label), Tab (`solid` / `pills`), DatePicker (selected day), CheckBox
116
+ (checked fill + check/dash mark), Switch (on-track).
117
+
118
+ Visible change: `secondary` / `success` / `warning` / `info` solid components now
119
+ use dark text instead of (illegible) white.
120
+
121
+ - Updated dependencies [13005ea]
122
+ - @kungal/ui-core@1.5.0
123
+
124
+ ## 1.4.2
125
+
126
+ ### Patch Changes
127
+
128
+ - 6d70e87: fix(vue): keep `bordered` variants the same size as the others (Info, TagInput)
129
+
130
+ A `bordered` variant adds a real border, which enlarges the element unless the
131
+ other variants reserve the same width with a transparent border. Button / Chip
132
+ (via the shared variant matrix) and Tab already did this; Info and TagInput did
133
+ not, so their `bordered` variant was ~2–3px larger than `solid` / `light` /
134
+ `flat`.
135
+
136
+ - **Info**: every variant now carries the same `1.5px` border (transparent for
137
+ the non-bordered ones), so switching variants no longer changes the box size.
138
+ - **TagInput**: the wrapper always reserves a `1px` transparent border; `flat`
139
+ and `bordered` are now identical in size, and the error border is now visible
140
+ on the `flat` variant too (it previously had no border width to colour).
141
+
142
+ No visual change to the non-bordered variants beyond the size becoming
143
+ consistent — the reserved border is transparent.
144
+
145
+ - @kungal/ui-core@1.4.2
146
+
147
+ ## 1.4.1
148
+
149
+ ### Patch Changes
150
+
151
+ - 0752bc1: fix(vue): SSR-safe active highlight for KunTab
152
+
153
+ The Tab active indicator was measured on the client (`offsetLeft`/`offsetWidth`)
154
+ and so was absent from server-rendered HTML — on first paint (and the whole
155
+ pre-hydration window) the selected tab showed only a text-color change, with the
156
+ underline/pill missing. For the `solid` variant the active tab was effectively
157
+ invisible (white text on no background) until hydration.
158
+
159
+ The selected tab now carries a CSS-only active highlight that renders in SSR
160
+ (inline inset box-shadow for `underlined`; background tint for `solid` / `light`);
161
+ the JS-measured sliding indicator takes over after the client mounts, with no
162
+ hydration mismatch. The indicator is also re-measured on mount and via a
163
+ `ResizeObserver`, so web-font swaps and container resizes no longer leave it
164
+ stale. `pills` / `bordered` were already SSR-safe and are unchanged.
165
+
166
+ - @kungal/ui-core@1.4.1
167
+
168
+ ## 1.4.0
169
+
170
+ ### Minor Changes
171
+
172
+ - cf9196c: **KunContent: opt-in editorial prose typography + first-class code-copy & compact density.**
173
+
174
+ - **New opt-in stylesheet `@kungal/ui-vue/prose.css`** — a token-driven editorial type system for any `.kun-prose` container (comfortable measure, modular heading scale, generous CJK-friendly leading, refined lists/blockquote/code/table/links, auto light/dark). It is a _separate import on purpose_: KunContent's `style.css` still ships only behaviour, so downstreams that already own their own `.kun-prose` typography are unaffected — they simply don't import it.
175
+ - **Code-block copy button is now built in.** KunContent auto-injects a self-styled (token-aware, dark-mode-aware) copy button into each code block, with click-to-copy + instant icon feedback. Idempotent: a block that already carries a `.copy` button (e.g. one emitted by a Markdown pipeline) is left untouched, so it never doubles up — downstreams can drop their own copy implementations.
176
+ - **New `compact` prop** on KunContent (adds `.kun-prose-compact`) for tighter comment/reply streams — smaller base size, leading and spacing, full-width instead of the 40rem measure. Visual effect requires importing `@kungal/ui-vue/prose.css`.
177
+
178
+ Syntax highlighting remains a content-pipeline concern (not bundled); the prose styles theme plain code blocks neutrally and compose with pre-highlighted markup.
179
+
180
+ ### Patch Changes
181
+
182
+ - @kungal/ui-core@1.4.0
183
+
184
+ ## 1.3.0
185
+
186
+ ### Minor Changes
187
+
188
+ - 27e40d4: **Content spoilers**: the particle mask now follows the real text shape. Multi-line spoilers are masked **line-by-line**, and space-separated text is masked **word-by-word** (gaps at spaces and ragged line ends stay clear) instead of one solid block — the cover lines up with how the text actually flows. CJK / no-space text degrades naturally to per-line masking.
189
+
190
+ Word/line rectangles are measured once per layout via the Range API (never per frame), and the per-frame cost stays capped (the particle budget and tint fills are independent of text length), so animation never janks regardless of size. The markup contract is unchanged (`class="kun-spoiler kun-spoiler-hidden"`).
191
+
192
+ ### Patch Changes
193
+
194
+ - @kungal/ui-core@1.3.0
195
+
196
+ ## 1.2.0
197
+
198
+ ### Minor Changes
199
+
200
+ - 8368cfe: **Content spoilers**: reworked the click-to-reveal spoiler effect. The covered region now renders an animated dust/particle field (spawn → drift → fade → respawn) instead of a flat frosted block, and revealing dissolves the particles out as the text appears. The markup contract is unchanged (`class="kun-spoiler kun-spoiler-hidden"` in trusted HTML).
201
+
202
+ Under the hood it's now SSR-safe by construction (the cover is pure CSS present in the server-rendered HTML — no post-mount DOM injection, no hydration flash, and the secret stays hidden with JS disabled), the particle canvas is a pure client-side enhancement driven by one shared, fps-throttled rAF loop with off-screen spoilers paused via IntersectionObserver, and spoilers are now keyboard-accessible (`role="button"`, focusable, Enter/Space to reveal, `aria-expanded`). Respects `prefers-reduced-motion`. The cover is rectangular (no rounded corners) so it lines up with the browser's text-selection highlight.
203
+
204
+ ### Patch Changes
205
+
206
+ - @kungal/ui-core@1.2.0
207
+
208
+ ## 1.1.1
209
+
210
+ ### Patch Changes
211
+
212
+ - c6d7502: **Select / Autocomplete**: fix the page jumping to the top the first time the dropdown is opened while scrolled down. The teleported list is momentarily at `(0,0)` before floating-ui's first async measurement, so `Element.scrollIntoView()` (and a plain `focus()` on the search field) scrolled the whole window to the top. The active option now scrolls **within its own list container** only, and Select's search-field focus uses `{ preventScroll: true }`.
213
+ - @kungal/ui-core@1.1.1
214
+
215
+ ## 1.1.0
216
+
217
+ ### Minor Changes
218
+
219
+ - eaf375b: **Lightbox**: clicking the dark backdrop around the image now closes the viewer, matching the convention of every modern image viewer (and complementing the existing ESC-to-close). Clicks on the image and on the controls are unaffected, and a click that is the tail of a drag / pan / swipe no longer dismisses the viewer.
220
+
221
+ ### Patch Changes
222
+
223
+ - @kungal/ui-core@1.1.0
224
+
225
+ ## 1.0.0
226
+
227
+ ### Major Changes
228
+
229
+ - ac0bd4e: 1.0.0 — first stable release.
230
+
231
+ The component set (57 Vue components) and the design-token system are stable and
232
+ documented. Over the 0.14 → 0.22 line every cross-cutting surface was routed
233
+ through a single source of truth: borders (`--color-kun-border` / `border-kun`),
234
+ focus rings (`kunFocusRingClasses`), corner radius (`rounded-kun-*` /
235
+ `--kun-radius-scale`), elevation (`--shadow-kun-*`), motion (`--kun-dur-*` +
236
+ `duration-kun-*` + `ease-kun-*`), and sizing (`kunControlSize` /
237
+ `kunSelectionSize` / `kunChipSize`).
238
+
239
+ Also fixes a registration gap surfaced while completing the docs: `KunAutocomplete`,
240
+ `KunNumberInput`, and `KunPinInput` (added in 0.14.0) were never added to the Nuxt
241
+ layer's auto-import list, so Nuxt consumers hit "Failed to resolve component". They
242
+ now auto-import like every other component (plain-Vue `app.use(KunUI)` already
243
+ registered them). Their docs pages, prop tables, and `llms.txt` entries are added.
244
+
245
+ ### Patch Changes
246
+
247
+ - Updated dependencies [ac0bd4e]
248
+ - @kungal/ui-core@1.0.0
249
+
250
+ ## 0.22.4
251
+
252
+ ### Patch Changes
253
+
254
+ - 157c04f: fix(vue): single-line audit follow-ups (menu items, UserChip, Tooltip)
255
+
256
+ After a full sweep for which components carry a single-unit label vs. flowing
257
+ prose:
258
+
259
+ - **`KunDropdown` / `KunContextMenu`** menu-item labels now `truncate` (single
260
+ line + ellipsis when the menu is width-constrained) with `shrink-0` icons,
261
+ instead of wrapping to two lines.
262
+ - **`KunUserChip`** name and description now `truncate` (the text column gets
263
+ `min-w-0`) — a long name ellipsizes on one line rather than wrapping past the
264
+ avatar.
265
+ - **`KunTooltip`** dropped its unconditional `whitespace-nowrap` for `max-w-xs`:
266
+ short tips still sit on one line, but a long tip now wraps inside ~20rem
267
+ instead of being forced into one screen-wide line.
268
+
269
+ Prose components (Card / Modal / Alert / toast bodies, checkbox/radio/switch
270
+ labels, helper & error text) intentionally keep wrapping.
271
+
272
+ - @kungal/ui-core@0.22.4
273
+
274
+ ## 0.22.3
275
+
276
+ ### Patch Changes
277
+
278
+ - 0305c8d: fix(vue): keep button / chip / badge / tag labels on a single line
279
+
280
+ A label on these atomic components is one action/marker, not flowing prose, so it
281
+ shouldn't wrap to a second line (the modern standard — shadcn's button ships
282
+ `whitespace-nowrap`, Material's spec keeps the label single-line). Added
283
+ `whitespace-nowrap` to `KunButton`, `KunChip`, `KunBadge`, and the tags inside
284
+ `KunTagInput` (KunTab already had it). `KunButton` also gets `[&_svg]:shrink-0`
285
+ (plus `shrink-0` on its icon slots) so a long label never squishes the icons —
286
+ the label overflows on one line instead of wrapping.
287
+
288
+ - @kungal/ui-core@0.22.3
289
+
290
+ ## 0.22.2
291
+
292
+ ### Patch Changes
293
+
294
+ - Updated dependencies [957cb52]
295
+ - @kungal/ui-core@0.22.2
296
+
297
+ ## 0.22.1
298
+
299
+ ### Patch Changes
300
+
301
+ - Updated dependencies [be17775]
302
+ - @kungal/ui-core@0.22.1
303
+
304
+ ## 0.22.0
305
+
306
+ ### Minor Changes
307
+
308
+ - 2026df2: feat(vue): every text control's focus ring follows its `color` prop (default `default`)
309
+
310
+ The focus-ring color was inconsistent across the form family: some controls tied
311
+ it to their `color` prop (Input/NumberInput/CheckBox), others hardcoded a primary
312
+ ring (Textarea/Select/Autocomplete/DatePicker/Pagination), and even among the
313
+ first group the default differed (Input defaulted `color: 'default'` → grey ring;
314
+ NumberInput defaulted `color: 'primary'` → blue ring). So an Input and a Textarea
315
+ side by side focused in different colors.
316
+
317
+ Now uniform: every text control's focus ring routes through its `color` prop, and
318
+ they all default to **`'default'`** (a neutral grey ring) — `color="primary"` (etc.)
319
+ themes it. `color="success"`/`"danger"`/… give that ring; an invalid control still
320
+ overrides to a danger ring.
321
+
322
+ - **New `color?: KunUIColor` prop** on `KunTextarea`, `KunSelect`,
323
+ `KunAutocomplete`, `KunDatePicker` (default `'default'`).
324
+ - **`KunNumberInput` default `color` changed `'primary'` → `'default'`** so an
325
+ un-themed number input matches the rest (grey ring, was blue).
326
+ - `KunPagination`'s jump input uses the neutral ring.
327
+
328
+ Also: **`KunCard` footer no longer draws a top border** — it's just a section
329
+ spaced by the card's own gap, matching the (already borderless) header.
330
+
331
+ ### Patch Changes
332
+
333
+ - @kungal/ui-core@0.22.0
334
+
335
+ ## 0.21.0
336
+
337
+ ### Minor Changes
338
+
339
+ - 3e841f0: feat: align form labels / error text and unify the chip-tag size scale
340
+
341
+ The core size system was already consistent (form controls share
342
+ `kunControlSizeClasses`, checkbox/radio share `kunSelectionSizeClasses`). The
343
+ drift was in the peripheral bits:
344
+
345
+ - **Form labels** now identical everywhere: `KunTextarea` and `KunDatePicker`
346
+ labels gained the `text-default-700` tint, and `KunDatePicker` dropped its odd
347
+ `mb-2` for the standard `mb-1`.
348
+ - **Error messages** now identical: `KunTextarea` switched from `text-danger-600`
349
+ (and a `<div>`) to the standard `text-danger` `<p>`; `KunDatePicker` and
350
+ `KunRadioGroup` dropped `mt-2` for `mt-1`.
351
+ - **Chip / tag size**: new `kunChipSizeClasses` in `@kungal/ui-core` is the single
352
+ source for chip/tag pills. `KunChip` and the tags inside `KunTagInput` now share
353
+ it (and the pill `rounded-full` shape), so a tag looks identical to a standalone
354
+ `<KunChip>` of the same size instead of being a one-off smaller rounded-rect.
355
+
356
+ Tab keeps its intentionally-compact tab scale; Switch/Slider keep their
357
+ dimension-specific scales.
358
+
359
+ ### Patch Changes
360
+
361
+ - Updated dependencies [3e841f0]
362
+ - @kungal/ui-core@0.21.0
363
+
364
+ ## 0.20.0
365
+
366
+ ### Minor Changes
367
+
368
+ - 40e8abf: feat: unified elevation scale + misc token cleanups
369
+
370
+ **Elevation scale** — floating surfaces were assigned `shadow-md` / `shadow-lg` /
371
+ `shadow-2xl` ad hoc, so same-kind surfaces disagreed (Select & Autocomplete
372
+ option lists were `shadow-lg`, but Dropdown & ContextMenu menus were `shadow-2xl`;
373
+ Modal had no shadow at all). New three-tier scale in `@kungal/ui-tokens` —
374
+ `--shadow-kun-sm` / `-md` / `-lg`, generating `shadow-kun-sm|md|lg` utilities
375
+ (they compose with `ring-*` via `--tw-shadow`, so a ringed toast still gets its
376
+ elevation). Applied by tier:
377
+
378
+ - **sm** — tooltips, slider value bubble
379
+ - **md** — popovers, dropdowns, context menus, select/autocomplete/date lists, toasts
380
+ - **lg** — modals (now actually elevated), drawers
381
+
382
+ **Misc consistency cleanups:**
383
+
384
+ - Raw Tailwind radii routed through the token scale: `KunBrand` / `KunNull`
385
+ `rounded-2xl` → `rounded-kun-lg`; `KunLoading` `rounded-lg` → `rounded-kun-md`
386
+ (so `--kun-radius-scale` now affects them too). The dark `KunLightbox` viewer
387
+ chrome keeps its own radii intentionally.
388
+ - `KunNumberInput` stepper buttons: `disabled:opacity-40` → `disabled:opacity-50`
389
+ to match every other disabled control.
390
+
391
+ - 40e8abf: feat: route component transitions through the motion scale
392
+
393
+ Transitions hardcoded raw `duration-150/200/300` and raw `ease-in/out/in-out`
394
+ that didn't match the designed motion tokens (overlay enters were `200ms` but
395
+ `--kun-dur-base` is `250ms`; some controls used symmetric `ease-in-out` while the
396
+ rest used the asymmetric `ease-kun-*` curves). Now unified:
397
+
398
+ - New `duration-kun-fast | base | slow | exit` utilities bound to `--kun-dur-*`
399
+ (with literal fallbacks). Every component transition routes through them, so a
400
+ global motion retune via the tokens actually propagates.
401
+ - Mapped by role, preserving the asymmetric rhythm (enter decelerates, exit
402
+ accelerates): overlay **enter → base**, **leave → exit**, hover/selection/focus
403
+ **micro → fast**, skeleton/fade/large **→ slow**.
404
+ - Remaining raw `ease-in-out` / `ease-out` Tailwind classes (Avatar, Input,
405
+ Textarea, Progress) switched to `ease-kun-standard` / `ease-kun-out`; scoped-style
406
+ easings (Content, Ripple) now read `var(--ease-kun-*)`. The looping indeterminate
407
+ progress keyframe and the dark Lightbox viewer keep their own timing.
408
+
409
+ Net effect: a single, consistent motion feel across every control. No API changes.
410
+
411
+ ### Patch Changes
412
+
413
+ - @kungal/ui-core@0.20.0
414
+
415
+ ## 0.19.1
416
+
417
+ ### Patch Changes
418
+
419
+ - 3a67606: fix(vue): Card header/footer, Tab item radius, Message elevation
420
+
421
+ - **KunCard** — the header slot no longer draws a `border-b`. The footer dropped
422
+ its `bg-default-100` fill + double padding for a single hairline divider in the
423
+ unified `border-kun` token (`-mt-3` pulls it flush under the content), so it
424
+ matches the rest of the UI instead of looking like a grey block.
425
+ - **KunTab** — `solid` / `light` / `bordered` tab items were `rounded-kun-sm`
426
+ (6px), half the radius of every other control. Items (and their sliding
427
+ indicator) are now `rounded-kun-md` (12px, the default control radius) and the
428
+ list container is `rounded-kun-lg` (16px), so the items nest concentrically and
429
+ match the overall corner radius.
430
+ - **KunMessage** (toast) — added `shadow-lg` (and a `dark:ring-white/10` edge) so
431
+ toasts read as elevated/floating above the page instead of sitting flat with
432
+ only a faint hairline ring.
433
+ - @kungal/ui-core@0.19.1
434
+
435
+ ## 0.19.0
436
+
437
+ ### Minor Changes
438
+
439
+ - d8e7e76: feat: KunTab `align` prop + one unified focus ring across every control
440
+
441
+ **KunTab `align`** — new `align?: 'start' | 'center' | 'end'` (default `'center'`)
442
+ controls how each tab's content sits inside its box. Mainly for vertical /
443
+ full-width tabs, where the box is wider than its label.
444
+
445
+ **Unified focus ring** — focus indication was a mess: `:focus` vs `:focus-within`
446
+ vs `:focus-visible`, ring widths `1`/`2`/`4`, opacities `/25`/`/40`/`/50`/full,
447
+ some controls dropped their border to fake a ring (a jarring jump), and Button /
448
+ CheckBox had **no** focus ring at all. Everything now routes through one recipe:
449
+
450
+ - New `kunFocusRingClasses` (direct controls) and `kunFocusRingWithinClasses`
451
+ (composite wrappers) in `@kungal/ui-core`. One recipe: keyboard-only
452
+ (`focus-visible`; text fields still show it on click), a flush **2px** ring in
453
+ the control's semantic color at **/50**, no border-transparent jump.
454
+ - Migrated Input, Textarea, Select, Autocomplete, NumberInput, DatePicker,
455
+ PinInput, TagInput, Pagination, RadioGroup, **Button** (offset ring, added) and
456
+ **CheckBox** (added) onto it. Composite widgets (NumberInput / TagInput) ring
457
+ the wrapper via `focus-within` and the inner `<input>` has no ring of its own,
458
+ so there's exactly one indicator.
459
+ - Invalid controls turn the ring **danger** (same mechanism, swapped color).
460
+ - **Deprecated:** `kunRingClasses` (mixed `:focus`/`:focus-within`, off-opacity).
461
+ Use `kunFocusRingClasses` / `kunFocusRingWithinClasses`.
462
+
463
+ No prop/API removals — purely additive plus a visual refinement of focus states.
464
+
465
+ ### Patch Changes
466
+
467
+ - Updated dependencies [d8e7e76]
468
+ - @kungal/ui-core@0.19.0
469
+
470
+ ## 0.18.1
471
+
472
+ ### Patch Changes
473
+
474
+ - 1016e80: fix(vue): Tab underlined track line, FadeCard not animating, Pagination layout
475
+
476
+ - **KunTab** `variant="underlined"` no longer draws a static full-length track
477
+ border — only the sliding active indicator remains.
478
+ - **KunFadeCard** now actually animates. Its `<Transition>` previously wrapped an
479
+ always-present `<div>`, so a `v-if` on the _slotted_ element (the documented
480
+ `<KunFadeCard><Foo v-if="show"/></KunFadeCard>` usage) never triggered
481
+ enter/leave. The `v-if` now lives on the Transition's direct child, driven by
482
+ whether the slot has real content, so toggling collapses/expands (grid
483
+ `0fr↔1fr`) and fades as intended.
484
+ - **KunPagination** `justify-between` is now effective: the page block and the
485
+ jump-to-page block sat under conflicting `mx-auto` margins (auto margins beat
486
+ `justify-content` in flexbox), which spread them oddly. Removed, so the page
487
+ controls sit at the start and the jump control at the end.
488
+ - @kungal/ui-core@0.18.1
489
+
490
+ ## 0.18.0
491
+
492
+ ### Minor Changes
493
+
494
+ - 6fa75bb: feat(tokens,vue): unified neutral border token (`--color-kun-border` / `border-kun`)
495
+
496
+ Every structural hairline (inputs, textareas, selects, autocomplete, date picker,
497
+ cards, dividers, tabs, tooltips, popovers, dropdowns, context menus, drawers,
498
+ pagination, slider tooltip, radio cards, tag input) now resolves to ONE semantic
499
+ token instead of a scatter of `border-default-200` / `border-default/20` /
500
+ `dark:border-default-200` + a per-component `darkBorder` toggle.
501
+
502
+ - **New:** `--color-kun-border` (defaults to the `default-200` step, so it flips
503
+ light↔dark automatically) and a `border-kun` utility. Retheme every border at
504
+ once by overriding `--color-kun-border` (set it under `.kun-dark-mode` too for a
505
+ fixed non-flipping value). The global `*` border-color (opinionated base layer)
506
+ now points at this token as well, so a bare `border` matches `border-kun`.
507
+ - **Fixed:** `KunDivider` (and any control that used the translucent
508
+ `border-default/20` without a dark override) was ~half as bright as other
509
+ hairlines in dark mode (L13% vs L26%); it now matches everything else (L26%).
510
+ - **Consistency:** light mode is visually unchanged (the old `default/20`-over-white
511
+ already ≈ `default-200`); dark mode now collapses to a single neutral border value
512
+ across all components.
513
+ - Interactive-control borders intentionally stay one step stronger (checkbox/radio
514
+ boxes `default-300`, slider thumb) per common design-system practice — they are
515
+ not structural hairlines.
516
+ - **Deprecated (no-op):** the `darkBorder` prop on Input/Textarea/NumberInput/
517
+ Select/Autocomplete/DatePicker/Card. Safe to remove from call sites; kept for
518
+ backward compatibility. Note: an un-bordered `KunCard` that relied on
519
+ `darkBorder` to show a dark-only border should now use `bordered`.
520
+
521
+ ### Patch Changes
522
+
523
+ - @kungal/ui-core@0.18.0
524
+
525
+ ## 0.17.2
526
+
527
+ ### Patch Changes
528
+
529
+ - @kungal/ui-core@0.17.2
530
+
531
+ ## 0.17.1
532
+
533
+ ### Patch Changes
534
+
535
+ - 54f3498: 代码评审(CR)修复:针对 0.14–0.17 四批改动的真实项目缺陷。
536
+
537
+ - **KunCopy / useKunCopy** —— `useKunCopy` 此前是 fire-and-forget(返回 `void`),`KunCopy` 的 `await` 立即 resolve,导致**剪贴板写入失败时也会错误地显示「已复制」**(还和它自己弹出的失败 toast 自相矛盾)。改为 `useKunCopy` 返回 `Promise<boolean>`(并兜底 `navigator.clipboard` 不存在的情况);`KunCopy` 仅在真正成功时才切到 ✓ 状态。
538
+ - **KunMessageItem(toast)** —— `pauseTimer`/`resumeTimer` 改为幂等:`mouseenter` 与 `pointerdown` 会同时触发暂停,此前会对同一 `startTime` **重复扣减剩余时间**,使 toast 在用户悬停/触摸时提前消失(或进度条与实际计时不同步)。
539
+ - **KunNumberInput** —— 修复无 `min`/`max` 且初始为空时,「−」按钮被错误禁用(`null ?? -∞ > -∞` 为 false)的问题;空值现在可正常从 0 起步进。
540
+ - **KunImage** —— `fallbackSrc` 现在也响应「缓存命中即同步报错」路径(`status==='error'`),此前这种情况下回退图永远不会加载。
541
+ - **KunContextMenu** —— `immediate` watcher 在 SSR 且 `visible=true` 时不再访问 `document`(加 typeof 守卫),避免 `renderToString` 崩溃。
542
+ - **KunMessageProvider** —— toast 容器标记 `data-kun-overlay`,使其在 Modal/Drawer 打开(背景 inert)时仍可交互(关闭按钮/滑动可用)。
543
+ - **KunPinInput** —— `length` 减小时截断内部 refs 数组,避免保留已卸载 `<input>` 的引用。
544
+ - @kungal/ui-core@0.17.1
545
+
546
+ ## 0.17.0
547
+
548
+ ### Minor Changes
549
+
550
+ - 59479bc: 导航 / 展示 / 排版第四批升级:修零散 a11y/安全缺陷,补 Chip/Copy 能力。
551
+
552
+ 修正(a11y / 安全)
553
+
554
+ - **KunScrollShadow** —— `aria-label` 此前误用了 `className`(把 CSS 类当可访问名,读屏会念出 "mt-4 flex…");新增独立 `ariaLabel` prop(默认 'scrollable content')。
555
+ - **KunLink / KunButton** —— `target="_blank"` 现在自动补 `rel="noopener noreferrer"`(tabnabbing 防护)。
556
+ - **KunAvatarGroup** —— "+N" 溢出现在从 `users.length` 推导(不传 `total` 也能显示);按 `user.id` 作 key;加 `role="group"` + 计数 `aria-label`。
557
+ - **KunDivider** —— 竖向加 `aria-orientation="vertical"`;`withLabel` 标记为弃用(label 由默认插槽是否有内容决定)。
558
+ - **KunMarkdown** —— 装饰 SVG 加 `aria-hidden`。
559
+
560
+ 升级
561
+
562
+ - **KunChip** —— 新增 `closable`(× 触发 `close`,可移除标签)、`disabled`,以及 `start` / `end` 插槽(圆点/头像/图标)。
563
+ - **KunCopy** —— 复制后短暂反馈:图标切到 ✓、文案切到 `copiedText`(默认 '已复制')、`aria-live` 播报,~1.5s 复位。
564
+ - **KunImage** —— 新增 `fallbackSrc`(图裂时回退,`src` 变化时重置)。
565
+ - **KunAvatar** —— 头像 URL 裂图时回退到确定性 sticker。
566
+ - **KunPagination** —— 提供 `pageHref` 时,上一页/下一页也渲染为可爬 `<a>`(与数字页一致)。
567
+
568
+ Behavior(0.x minor)
569
+
570
+ - `KunScrollShadow` 的可访问名不再等于 `className`,改为 `ariaLabel`(默认 'scrollable content')。
571
+
572
+ ### Patch Changes
573
+
574
+ - @kungal/ui-core@0.17.0
575
+
576
+ ## 0.16.0
577
+
578
+ ### Minor Changes
579
+
580
+ - 8cc6532: 反馈 / 状态层第三批升级:补齐 a11y(aria-live/role)、确认框可定制、Toast 体验。
581
+
582
+ 修正(a11y / 正确性)
583
+
584
+ - **KunProgress** —— `variant="circle"` 现在带 `role="progressbar"` + `aria-valuenow/min/max`(此前圆环完全没有,读屏不可知);`indeterminate` 改为真正的不定动画(条形横扫 / 圆环旋转,此前只是静态满条);新增 `ariaLabel`。
585
+ - **KunLoading** —— 加载态加 `role="status"` + `aria-live="polite"` + `aria-busy`,装饰图 `aria-hidden`;新增轻量 `spinner` 变体(内联小尺寸,用打包的 spinner 图标)+ `size`。
586
+ - **KunMessage(toast)** —— error / warn 现在用 `role="alert"` + `aria-live="assertive"`(打断式),info / success 仍是 `status` / polite(此前一律 polite,错误可能被读屏忽略)。
587
+ - **AlertProvider** —— 用 `role="alertdialog"` + `aria-label`(取自 title);确认按钮改为**强调色**(主操作)、取消按钮**中性**(此前取消是红色,与惯例相反);`danger` 类型确认按钮变红。
588
+ - **useRipple** —— 涟漪 `key` 改用自增计数(此前 `Date.now()` 在同毫秒多次点击会 key 冲突)。
589
+
590
+ 升级
591
+
592
+ - **useKunAlert** —— 新增 `confirmText` / `cancelText` / `type`('info'|'warning'|'danger')/ `confirmColor`(可本地化文案 + 危险确认)。
593
+ - **KunModal** —— 新增 `role`('dialog' | 'alertdialog')。
594
+ - **KunMessage(toast)** —— 每条 toast 加悬停显示的关闭按钮(`duration:0` 常驻 toast 也能手动关);每个位置最多并存 5 条(超出丢弃最旧);支持滑动关闭(触摸横向拖拽)。
595
+ - **KunBadge** —— 无锚点 slot 时渲染为独立内联徽标;新增 `ariaLabel`(如 "5 条未读")。
596
+
597
+ Behavior(0.x minor)
598
+
599
+ - `AlertProvider` 的取消按钮不再是 danger 红色,改为中性;确认按钮改为主色/按 `type` 着色。
600
+
601
+ ### Patch Changes
602
+
603
+ - @kungal/ui-core@0.16.0
604
+
605
+ ## 0.15.0
606
+
607
+ ### Minor Changes
608
+
609
+ - e5f8c89: 浮层 / 弹出层第二批升级:对标 Radix / HeroUI / Reka,修掉 Popover 与 ContextMenu 的 a11y 缺陷,统一浮层基建。
610
+
611
+ 修正(a11y 缺陷)
612
+
613
+ - **KunPopover** —— 触发器不再被包裹层强加 `role="button"` + 假 `aria-label="popover-trigger"`(此前传 `<KunButton>` 会形成 button 套 button、真实可访问名被盖掉);现在是真正的对话框:打开时把焦点移入面板,关闭时归还给触发器,Esc 关闭。
614
+ - **KunContextMenu** —— 从「一堆按钮」升级为真正的 WAI-ARIA 菜单:`role="menu"`/`menuitem`、roving tabindex、方向键 / Home / End / Enter / Esc 键盘导航、打开聚焦首项、关闭归还焦点(与 KunDropdown 一致)。
615
+ - **KunModal / KunDrawer** —— 多个叠加时按 Esc 只关闭**栈顶**那一个(此前会一次性关掉所有)。
616
+
617
+ 升级
618
+
619
+ - **KunModal** —— 新增 `size`(sm/md/lg/xl/full)、`scrollBehavior`(inside/outside)、`placement`(center/top)。
620
+ - **KunModal / KunDrawer** —— 打开时给页面背景加 `inert`(比单靠 `aria-modal` 更强的隔离;辅助技术与 Tab 都无法进入背景)。
621
+ - **KunTooltip / KunPopover** —— 新增 `showArrow` 指向触发器的小箭头。
622
+ - **KunDropdown** —— 新增首字母 type-ahead(按字母跳到对应项)。
623
+
624
+ 内部重构(不破坏 API)
625
+
626
+ - 新增 `useKunFloating` —— 收敛 Popover / Tooltip / Dropdown / Select / Autocomplete 的 floating-ui 配置(offset/flip/shift + transform-origin + 可选 arrow),消除重复与漂移。
627
+ - 新增 `useKunBackgroundInert` —— 引用计数的背景 `inert` 管理器。
628
+ - `useKunOverlayZIndex` 新增 `isTopmost`(开启顺序栈,供 Esc/背景判定栈顶)。
629
+
630
+ Breaking(0.x minor)
631
+
632
+ - `KunPopover` 触发器包裹层不再是 `role="button"`,也不再注入 tabindex —— 请传入**可聚焦**的触发器(如 `<KunButton>`,常规用法不受影响);非交互触发器(纯图标/文本)需自行加 `tabindex`。
633
+ - `KunModal` 面板默认带 `max-w-md` 宽度上限(此前无上限);需要更宽的用 `size="lg|xl|full"`。
634
+
635
+ ### Patch Changes
636
+
637
+ - @kungal/ui-core@0.15.0
638
+
639
+ ## 0.14.0
640
+
641
+ ### Minor Changes
642
+
643
+ - cd404aa: 表单 / 输入控件第一批升级:对标 HeroUI / Mantine / Ant Design / PrimeVue / Naive,补齐 API 完备性、一致性与高级控件。
644
+
645
+ 新增组件
646
+
647
+ - **KunNumberInput** —— 数字步进输入:`min`/`max`/`step`/`precision` 钳制与四舍五入、−/+ 步进按钮(到边界自动禁用)、`ArrowUp/Down`·`PageUp/Down` 键盘、`role="spinbutton"` 无障碍、`name` 原生表单收集。
648
+ - **KunPinInput** —— OTP / 验证码分段输入:`length`、`type`(numeric/text)、`mask`、自动前进/退格回退、粘贴自动分发、方向键、`complete` 事件、`autocomplete="one-time-code"`。
649
+ - **KunAutocomplete** —— 组合框(combobox):文本输入 + 建议列表,客户端过滤或 `manualFilter` + `@search`(远程),`allowCustomValue`、`clearable`、键盘导航、`aria-autocomplete`。
650
+
651
+ 升级
652
+
653
+ - **KunSelect** —— 补齐键盘可达性(P0):方向键 / Enter / Space / Esc / Home / End / 首字母 type-ahead + `aria-activedescendant`,禁用项自动跳过;新增 `searchable`(列表内过滤)、`multiple`(可移除 chips)、`clearable`、`description`、`name`(隐藏域)、选项 `disabled`。
654
+ - **KunSlider** —— 默认 `min`/`max` 由 17–77 改为 **0–100**;修复 `reactive(props)` 拷贝导致改 prop 不更新的响应式缺陷;新增 `disabled`、`label`/`ariaLabel`、`error`/`description`、`color`、`marks`、值气泡 `showTooltip`、`showValue`、`formatValue`、`change` 事件。
655
+ - **KunCheckBox** —— 新增 `indeterminate`(三态,用于全选)+ `error`/`description`。
656
+ - **KunInput** —— 新增 `isClearable`、`revealPassword`(密码可见性切换)、`isInvalid` + `aria-invalid`/`aria-describedby`。
657
+ - **KunSwitch** —— 新增 `error`/`description`。
658
+
659
+ 统一
660
+
661
+ - 辅助文案统一为 `description`(对齐 HeroUI / React-Aria);`helperText`(Input/TagInput)与 `hint`(Textarea/FileInput/Upload)保留为 **已弃用别名**,仍可用,内部回退到 `description`。
662
+
663
+ Breaking(0.x minor)
664
+
665
+ - `KunSlider` 默认 `min`/`max` 改为 0–100(此前 17–77):依赖旧默认值的调用需显式传入。
666
+ - `KunSelect` 的 v-model 类型放宽为 `T | T[] | null`(支持 `multiple` 与清除);单选用法不受运行时影响,仅 TS 类型变宽。
667
+
668
+ 新增打包图标(构建期内联,运行时零请求):`lucide:minus`、`eye`、`eye-off`、`search`。
669
+
670
+ ### Patch Changes
671
+
672
+ - Updated dependencies [cd404aa]
673
+ - @kungal/ui-core@0.14.0
674
+
675
+ ## 0.13.0
676
+
677
+ ### Minor Changes
678
+
679
+ - 59dc29e: Accessibility + SSR-correctness sweep across the library.
680
+
681
+ - **SSR-stable ids (the big one).** `useKunUniqueId` deferred Vue's `useId()` to
682
+ `onMounted`, so the server HTML rendered empty ids — every `<label for>` /
683
+ `id` pairing was broken on the server and changed on hydration. It now calls
684
+ `useId()` synchronously (Vue guarantees it's identical server/client), so
685
+ KunInput / KunCheckBox / KunTextarea / etc. have correct, stable label
686
+ associations in the SSR HTML.
687
+ - **KunModal dialog semantics.** The panel was missing `role="dialog"` /
688
+ `aria-modal="true"` / an accessible name — now added, plus an `ariaLabel` prop.
689
+ (KunDrawer already had these.)
690
+ - **Accessible names on icon-only buttons.** KunModal & KunLoli close buttons and
691
+ KunPagination prev/next now have `aria-label` (the icon itself is `aria-hidden`,
692
+ so these announced as just "button" before).
693
+ - **KunPagination semantics.** Wrapped in `<nav aria-label>`; numbered pages get
694
+ `aria-label` + `aria-current="page"` on the active page.
695
+ - **KunSlider keyboard (WCAG 2.1.1).** The thumb now responds to Arrow keys
696
+ (±step), PageUp/PageDown (±10×), Home (min) and End (max) — it was drag-only.
697
+ - **KunMessage live region.** Toast containers are now `role="status"`
698
+ `aria-live="polite"`, so screen readers announce toasts.
699
+ - **KunTooltip keyboard/SR.** Now shows on focus (not just hover), links its text
700
+ via `aria-describedby`, and dismisses on Escape.
701
+ - **KunRating** stars gained `aria-label` (the `title` alone wasn't announced).
702
+ - **KunPopover** dialog gained an `ariaLabel` prop / accessible name.
703
+
704
+ All non-breaking. The id change improves SSR output; the new `ariaLabel` props on
705
+ KunModal/KunPopover default to a generic name when omitted.
706
+
707
+ ### Patch Changes
708
+
709
+ - @kungal/ui-core@0.13.0
710
+
711
+ ## 0.12.0
712
+
713
+ ### Minor Changes
714
+
715
+ - 6e5836e: Make the navigational components render real, crawlable `<a href>` links.
716
+
717
+ Google only follows `<a href>` — it doesn't click `<div @click>` / `<button>` /
718
+ programmatic navigation. Several KunUI components navigated via `config.navigate`
719
+ on a non-anchor element, so those links were invisible to crawlers. They now
720
+ render a real anchor (`config.linkComponent` → `<a>` / `NuxtLink`), keeping the
721
+ same navigation behavior (and working without JS):
722
+
723
+ - **KunBrand** — the home/logo link was a `<div @click>`; now a real `<a>` to `to`
724
+ (the canonical crawl entry point).
725
+ - **KunPagination** — new `pageHref?: (page) => string` prop. When provided, the
726
+ numbered page controls render `<a href>` per page, so paginated content is
727
+ crawlable. Without it, behaviour is unchanged (plain buttons).
728
+ - **KunAvatar / KunUserChip** — a profile-linking avatar was a `<div @click>`;
729
+ now a real `<a>` to the user profile when there's a user to link to. KunUserChip
730
+ wraps the **whole** chip (avatar + name) in one link so the name is anchor text,
731
+ and gained an `isNavigation` prop (default `true`); the inner avatar is no longer
732
+ a nested link.
733
+ - **KunDropdown / KunContextMenu** — menu items gained an optional `href`. An item
734
+ with `href` renders `<a role="menuitem" href>` (crawlable, for navigational
735
+ menus); action items without `href` stay `<button>`.
736
+
737
+ All changes are non-breaking: components without a navigation target (or
738
+ pagination without `pageHref`, menu items without `href`) render exactly as
739
+ before. Note KunBrand and a profile-linking KunAvatar/KunUserChip now render an
740
+ `<a>` instead of a `<div>` — restyle if you targeted the element by tag.
741
+
742
+ ### Patch Changes
743
+
744
+ - @kungal/ui-core@0.12.0
745
+
746
+ ## 0.11.0
747
+
748
+ ### Minor Changes
749
+
750
+ - 5403dca: SEO-first Tab panels + crawlable tab-as-route.
751
+
752
+ KunTab was a headless tab **bar** (it rendered `role="tab"` buttons and exposed
753
+ the active value, but no content). That left the SSR-SEO-critical decision —
754
+ how to render and hide each section — entirely to the consumer, and the obvious
755
+ `v-if` choice silently drops inactive panels from the indexable DOM. This adds a
756
+ first-class, SEO-optimal content layer.
757
+
758
+ **New `KunTabPanel` / `KunTabPanels`.**
759
+
760
+ ```vue
761
+ <KunTab v-model="active" :items="items" name="product" />
762
+ <KunTabPanels v-model="active" name="product">
763
+ <KunTabPanel value="overview">…</KunTabPanel>
764
+ <KunTabPanel value="specs">…</KunTabPanel>
765
+ </KunTabPanels>
766
+ ```
767
+
768
+ - **`mount` (default `"eager"`)** — `eager` server-renders **every** panel into the
769
+ HTML so search engines index all of it; inactive panels are hidden, not removed.
770
+ `"lazy"` renders on first activation then keeps (huge data, accepts the
771
+ trade-off for unopened panels); `"unmount"` keeps only the active panel in the
772
+ DOM (NOT crawlable — for heavy non-SEO widgets only). `forceMount` is a boolean
773
+ alias for `eager`, familiar from Radix/Reka/MUI.
774
+ - **Inactive panels hide with `hidden="until-found"`** (`hiddenStrategy`, default) —
775
+ they stay indexed _and_ become reachable by in-page search (Ctrl+F),
776
+ scroll-to-text fragments and deep links; the `beforematch` reveal flips the
777
+ active tab to match. `hiddenStrategy="display"` falls back to `display:none`.
778
+ SSR/first paint is flash-free (a `content-visibility` placeholder upgrades to
779
+ the real attribute on the client).
780
+ - Correct `role="tabpanel"` + `aria-labelledby`/`aria-controls` wiring (tab ↔
781
+ panel ids derive from the tab `value`, namespaced by an optional `name`).
782
+
783
+ **KunTab: `href` items now render a real `<a>` (crawlable tab-as-route).** Tabs
784
+ with `href` previously rendered a `<button>` that navigated programmatically —
785
+ invisible to crawlers. They now render `config.linkComponent` (`<a>` / `NuxtLink`)
786
+ with the href, so each tab is a discoverable URL and works without JS; with JS the
787
+ click is intercepted and routed through `config.navigate` (no double-nav). Tabs
788
+ also gained `id` / `aria-controls` (and KunTab a `name` prop) to pair with panels.
789
+
790
+ ### Patch Changes
791
+
792
+ - @kungal/ui-core@0.11.0
793
+
794
+ ## 0.10.0
795
+
796
+ ### Minor Changes
797
+
798
+ - 7f8495d: A unified motion system — smoother, more consistent animation across every
799
+ component.
800
+
801
+ **Motion tokens (@kungal/ui-tokens).** One easing set + duration scale so the
802
+ whole library shares a rhythm instead of each component inventing its own:
803
+ `--ease-kun-standard / -out / -in / -emphasized` (also exposed as Tailwind
804
+ `ease-kun-*` utilities) and `--kun-dur-fast / -base / -slow / -exit`. Curves are
805
+ asymmetric by design — decelerate on enter, accelerate on exit — and exits run
806
+ ~30% shorter than enters. The opinionated base layer now also honours
807
+ `prefers-reduced-motion: reduce` (WCAG 2.3.3).
808
+
809
+ **Killed the layout-thrashing animations** (these caused visible stutter):
810
+
811
+ - **KunTab** indicator no longer transitions `height` (it never changes between
812
+ same-row tabs); it slides via `transform` and only its `width` animates.
813
+ - **KunFadeCard** expands via the grid `0fr → 1fr` trick instead of `max-height`
814
+ — no more `max-h-96` clipping of tall content, no per-frame height recalc.
815
+ - **KunMessage** progress bar shrinks via `transform: scaleX` (compositor)
816
+ instead of animating `width`.
817
+
818
+ **Overlays retuned and made origin-aware.** KunModal now fades its backdrop
819
+ (opacity only) while the panel rises + scales independently; KunDrawer’s backdrop
820
+ and panel are timing-matched. KunDropdown / KunSelect / KunPopover / KunDatePicker
821
+ / KunContextMenu now **grow out of their trigger** — `transform-origin` follows
822
+ the floating-ui placement, so a menu that flips above its trigger correctly grows
823
+ from its bottom edge. Every overlay shares the `ease-kun-*` curves and timing.
824
+
825
+ **Micro-interactions.** KunSlider’s thumb gains a hover/focus ring halo (it had
826
+ no feedback before); KunSwitch gains a keyboard `focus-visible` ring and a
827
+ springier thumb settle; KunCheckBox’s check eases in with the emphasized curve.
828
+
829
+ No component API changed. KunFadeCard now wraps its slot in a grid container (a
830
+ DOM-structure change); if you targeted its immediate child with CSS, retarget the
831
+ inner content.
832
+
833
+ ### Patch Changes
834
+
835
+ - @kungal/ui-core@0.10.0
836
+
837
+ ## 0.9.0
838
+
839
+ ### Patch Changes
840
+
841
+ - 0a57065: Make the default corner radius rounder, HeroUI-style.
842
+
843
+ The `--radius-kun-*` scale grows so the default control radius lands at HeroUI's
844
+ 12px (it was 8px):
845
+
846
+ | bucket | before | after |
847
+ | ------ | ----------- | ----- |
848
+ | sm | 4px | 6px |
849
+ | md | 12 ←default | 12px |
850
+ | lg | 12px | 16px |
851
+
852
+ `md` (every component's default) is now **12px**, `lg` (floating panels — dropdown
853
+ / context-menu / toast) is **16px**, which keeps their concentric nesting exact
854
+ (panel 16 = item 12 + the 4px `p-1` inset). The `--kun-radius-scale` runtime knob
855
+ still multiplies on top, and `none` / `full` still don't scale.
856
+
857
+ One component needed a fix at the larger radius: **KunCheckBox**. Its small square
858
+ box would look circular at a 12px token radius (12px ≈ half a 16–20px box), so the
859
+ box now uses a proportional `35%` radius — a rounded square at every size, never a
860
+ circle (matching how HeroUI derives its checkbox radius). The radio-look variant
861
+ stays a full circle. No other component needed a size change; pill/circle controls
862
+ (chips, avatars, switch, slider) are unaffected.
863
+
864
+ - @kungal/ui-core@0.9.0
865
+
866
+ ## 0.8.0
867
+
868
+ ### Minor Changes
869
+
870
+ - 7624924: Extend the unified size system to the non-text controls.
871
+
872
+ The first sizing pass only covered text controls (button/input/select/…). This
873
+ brings the selection + display controls onto the same coherent system, grounded
874
+ in how HeroUI / PrimeVue / Naive UI / Mantine / Ant size them.
875
+
876
+ - **New shared selection scale (`kunSelectionSizeClasses`, @kungal/ui-core)** —
877
+ KunCheckBox and KunRadioGroup now use **identical** box sizes (every major
878
+ library does this), so a checkbox and a radio of the same size match. Box px by
879
+ size: 12 / 14 / 16 / 20 / 24 — ≈ 0.5× the text-control height and ≈ 1.2–1.4× the
880
+ label font, so the box sits optically level with its label.
881
+ - **KunCheckBox gains a `size` prop** (`xs`–`xl`, default `md`). It was hardcoded
882
+ at 20px while its sibling KunRadioGroup scaled 12→24 — now they share one scale
883
+ (md box is 16px). The check glyph and label scale with it.
884
+ - **KunSwitch gains a `size` prop.** Track/thumb scale on clean steps (track
885
+ 28×16 → 64×32, thumb = track height − 4); `md` is the original switch size.
886
+ - **KunSlider gains a `size` prop.** Track 4→12px, thumb 14→28px; `md` unchanged.
887
+ - **KunChip** moved onto its proper compact sub-scale (≈ 0.7× the button height at
888
+ the same keyword — a tag is text + tight padding, not a tap target); its `md`/
889
+ `lg`/`xl` vertical padding is slightly tighter so chips no longer read as tall
890
+ as buttons.
891
+
892
+ Components sized by their content/padding rather than a height (KunTooltip,
893
+ KunDropdown/KunContextMenu menus, KunPopover, KunInfo) intentionally keep no
894
+ `size` prop — no surveyed library gives them one.
895
+
896
+ ### Patch Changes
897
+
898
+ - Updated dependencies [7624924]
899
+ - @kungal/ui-core@0.8.0
900
+
901
+ ## 0.7.0
902
+
903
+ ### Minor Changes
904
+
905
+ - 29a39a7: Unify form-control sizing on one shared scale, and fix the `lg`/`xl` button
906
+ proportions.
907
+
908
+ - **New `kunControlSizeClasses` (@kungal/ui-core)** — a single source of truth for
909
+ the per-size font + padding of every text-like form control. Padding-driven,
910
+ `md` (~38px) as the anchor, `px:py` a clean 2:1, horizontal padding growing
911
+ faster than vertical so a bigger control gets wider, not flatter.
912
+ - **KunButton `lg`/`xl` fixed** — `lg` was `px-6 py-2` (3:1) and `xl` was
913
+ `px-8 py-2.5` (3.2:1, a wide flat bar). They're now `px-5 py-2.5` and
914
+ `px-6 py-3` (both 2:1), so large buttons look proportional. `md` is unchanged.
915
+ - **One scale across controls** — KunButton, KunInput, KunSelect, KunDatePicker,
916
+ KunTextarea and KunTagInput all consume the shared scale, so a button, input,
917
+ select and date-picker of the same size line up at the same height in a row
918
+ (md = 38px).
919
+ - **KunSelect / KunDatePicker / KunTextarea gain a `size` prop** (`xs`–`xl`,
920
+ default `md`). Previously they had no size and were locked one notch tighter
921
+ than buttons (`px-3` / `p-3`); their default horizontal padding is now `px-4`,
922
+ matching KunButton/KunInput `md`.
923
+
924
+ Pill/compact display components (KunChip, KunBadge, KunAvatar) are intentionally
925
+ not part of this form-control scale and keep their compact sizing.
926
+
927
+ ### Patch Changes
928
+
929
+ - Updated dependencies [29a39a7]
930
+ - @kungal/ui-core@0.7.0
931
+
932
+ ## 0.6.2
933
+
934
+ ### Patch Changes
935
+
936
+ - 7b521fc: KunCheckBox: add a gap between the box and its slotted content.
937
+
938
+ The box and its content sat as adjacent flex children with no gap, so the box's
939
+ right edge touched the start of slotted content (`<KunCheckBox>分类</KunCheckBox>`)
940
+ — measured gap was 0. Only the `label` _prop_ path was spaced, because that
941
+ `<label>` carried its own `ml-2`; slot/`v-html` content had nothing. The wrapper
942
+ now uses `gap-2` (matching KunRadioGroup) and the redundant `ml-2` is dropped from
943
+ the label, so the box→content gap is a uniform 8px whether you use the `label`
944
+ prop or the default slot.
945
+
946
+ - @kungal/ui-core@0.6.2
947
+
948
+ ## 0.6.1
949
+
950
+ ### Patch Changes
951
+
952
+ - dc437bb: Bundle the KunLoli mascots, fix Tab icon spacing, enlarge the Null/Loading
953
+ images, and align KunTagInput's tag color.
954
+
955
+ - **KunLoli**: the popup pulled its mascot from `/alert/{name}.webp` in the
956
+ consuming app's public dir, so it showed a broken image in any app that didn't
957
+ ship those four files. The four mascots are now bundled as base64 webp data
958
+ URIs (same zero-setup, no-network policy as the bundled icons and the
959
+ KunLoading / KunNull images), so `<KunLoli>` works out of the box.
960
+ - **KunTab**: tabs with both an icon and a label had no gap between them (the
961
+ size→gap map was defined but never applied), so the two were cramped together.
962
+ The gap (`gap-1` / `gap-1.5` / `gap-2` by size) is now applied.
963
+ - **KunNull / KunLoading**: the default mascot image is one size larger
964
+ (`w-60`→`w-72` and `w-72`→`w-80` respectively).
965
+ - **KunTagInput**: tags used a one-off color palette (`bg-primary/15
966
+ text-primary-700`) that read slightly off from the rest of the UI; they now use
967
+ the same `flat` variant every other KunUI chip uses, so a tag's color matches.
968
+ - @kungal/ui-core@0.6.1
969
+
970
+ ## 0.6.0
971
+
972
+ ### Minor Changes
973
+
974
+ - c15c5fc: Remove the `KunFavicon` component.
975
+
976
+ `KunFavicon` was just a static, hardcoded inline SVG of the KunUI lollipop mark
977
+ with no props — it carried no library value (an app that wants a logo ships its
978
+ own asset, e.g. via `KunBrand`'s `iconSrc`). It's dropped from the `@kungal/ui-vue`
979
+ exports and the `@kungal/ui-nuxt` auto-import list.
980
+
981
+ **Migration:** if you were rendering `<KunFavicon />`, inline your own logo SVG or
982
+ `<img>`/`KunImage` pointing at your favicon asset instead.
983
+
984
+ ### Patch Changes
985
+
986
+ - @kungal/ui-core@0.6.0
987
+
988
+ ## 0.5.2
989
+
990
+ ### Patch Changes
991
+
992
+ - 8b39e7c: Make every component's corner radius follow the unified Kun radius system.
993
+
994
+ Two classes of inconsistency were leaking through:
995
+
996
+ - **KunButton / KunCopy defaulted `rounded` to `'lg'`** (12px) while every other
997
+ component defers to the global `config.rounded` (default `md`, 8px) — so buttons
998
+ looked visibly rounder than inputs, cards and surfaces sitting next to them. And
999
+ because `'lg'` was a _prop default_ (never `undefined`), setting `config.rounded`
1000
+ globally couldn't pull buttons in line. Both now omit the default and resolve to
1001
+ `config.rounded` like the rest; pass `rounded` to override per-instance.
1002
+
1003
+ - **Several components hardcoded raw Tailwind radii** (`rounded-lg` / `rounded-md` /
1004
+ `rounded-xl` / `rounded`) instead of the `rounded-kun-*` tokens, so they neither
1005
+ shared the unified scale nor responded to the runtime `--kun-radius-scale` knob.
1006
+ Converted to tokens (preserving each surface's pixel size and concentric nesting):
1007
+ KunTab (container + items + indicators), KunDropdown (panel + items), KunContextMenu
1008
+ (panel), KunSelect (listbox + options), KunMessage (toast card), KunPagination
1009
+ (page-jump input), KunRadioGroup (option row), KunTagInput (tag chip) and
1010
+ KunCheckBox (the box). Pill/circle elements using `rounded-full` are unchanged by
1011
+ design; KunLightbox's dark floating toolbars and KunLoading's mascot/overlay keep
1012
+ their own styling.
1013
+
1014
+ Net effect: one global radius for all components, all of it now driven by
1015
+ `config.rounded` and scaled live by `--kun-radius-scale`.
1016
+
1017
+ - @kungal/ui-core@0.5.2
1018
+
1019
+ ## 0.5.1
1020
+
1021
+ ### Patch Changes
1022
+
1023
+ - @kungal/ui-core@0.5.1
1024
+
1025
+ ## 0.5.0
1026
+
1027
+ ### Minor Changes
1028
+
1029
+ - b669cf4: Button/input sizing polish, a beautified checkbox, and a uniform corner radius.
1030
+
1031
+ - **KunButton / KunInput sizes**: horizontal padding now grows with size while
1032
+ vertical padding stays tight (`py < px`), so larger sizes get _wider_, not
1033
+ fatter — matching modern libraries (shadcn `lg = px-8`, HeroUI fixed heights).
1034
+ `md` is unchanged; `lg`/`xl` are noticeably less bulky. Input vertical padding
1035
+ matches Button per size so the two line up in a form row.
1036
+ - **KunCheckBox**: the check is smaller (more breathing room in the box),
1037
+ stays centered, and scales in with a subtle pop. Cursor is now a pointer.
1038
+ - **Uniform corner radius**: every component now defers to the single global
1039
+ `config.rounded` (default `md`). Removed the per-component radius overrides on
1040
+ KunModal / KunDrawer / KunInfo / KunPopover / KunUpload (were `lg`) and
1041
+ KunRadioGroup, so all surfaces share one radius — set `config.rounded` once to
1042
+ restyle them together. (Pill/circle controls that use `rounded-full` are
1043
+ unaffected, by design.)
1044
+
1045
+ ### Patch Changes
1046
+
1047
+ - @kungal/ui-core@0.5.0
1048
+
1049
+ ## 0.4.1
1050
+
1051
+ ### Patch Changes
1052
+
1053
+ - 93b8446: KunTextarea: defer the first auto-grow height measurement to the next animation frame. Measuring `scrollHeight` synchronously in `onMounted` could read a too-tall height before the textarea was laid out (notably a chat input that first appears on mobile), which only corrected itself on the first keystroke. The deferred measure runs after layout, so an auto-grow textarea starts at its true single-row height.
1054
+ - @kungal/ui-core@0.4.1
1055
+
1056
+ ## 0.4.0
1057
+
1058
+ ### Minor Changes
1059
+
1060
+ - cb46d7b: `KunImage` / `KunImageNative` now default to `loading="lazy"`.
1061
+
1062
+ Previously `loading` defaulted to unset, so the browser loaded every image
1063
+ eagerly. A page with many images (card grids, lists, avatars) fired them all at
1064
+ once and saturated the connection, starving the above-the-fold images — they
1065
+ filled in slowly behind a long-lingering skeleton, making the page feel stuck on
1066
+ images. `KunImage` already reserves space (its aspect-ratio box + skeleton), so
1067
+ deferring off-screen images causes no layout shift and shortens the critical
1068
+ path. `KunImageNative` also gains a `loading` prop (it had none before).
1069
+
1070
+ **Opt your LCP / hero image back into eager loading:**
1071
+ `<KunImage loading="eager" fetchpriority="high" … />` — otherwise it's lazy like
1072
+ the rest, which can cost a little LCP for that one image.
1073
+
1074
+ ### Patch Changes
1075
+
1076
+ - @kungal/ui-core@0.4.0
1077
+
1078
+ ## 0.3.4
1079
+
1080
+ ### Patch Changes
1081
+
1082
+ - 3a50b6a: KunAvatar: render the avatar URL exactly as given — stop deriving size variants
1083
+ in the component.
1084
+
1085
+ KunAvatar used to turn `user.avatar` into a 100px thumbnail by string-replacing
1086
+ the extension (`.webp` → `-100.webp`, most recently host-aware `_100` / `-100`).
1087
+ That baked CDN-specific URL conventions into the UI library. KunAvatar now
1088
+ renders `user.avatar` as-is; `size` only controls the rendered dimensions.
1089
+ Empty/missing avatar still falls back to a deterministic sticker.
1090
+
1091
+ **Migration (consumers now pass the exact URL to show):** for small avatars pass
1092
+ the pre-sized thumbnail your CDN exposes (e.g. content-addressed
1093
+ `…/<hash>_100.webp`, legacy `…/avatar-100.webp`); for profile/`original` sizes
1094
+ pass the full image. Your backend already knows the image host, so resolving the
1095
+ URL belongs there — not in the UI.
1096
+
1097
+ - @kungal/ui-core@0.3.4
1098
+
1099
+ ## 0.3.3
1100
+
1101
+ ### Patch Changes
1102
+
1103
+ - 9e0bdc2: KunAvatar: pick the 100px-thumbnail variant separator by image family. Content-addressed image*service avatars (`…/aa/bb/<hash>.webp`) expose variants with an underscore (`<hash>_100.webp`), while legacy path-based avatars use a hyphen (`avatar-100.webp`). The previous hardcoded hyphen `-100` 404'd every new image_service avatar (blank top-bar/comment avatars after a user changed their picture). Now detects the two-level-hex hash path and uses `*`for those,`-` otherwise.
1104
+ - @kungal/ui-core@0.3.3
1105
+
1106
+ ## 0.3.2
1107
+
1108
+ ### Patch Changes
1109
+
1110
+ - 2bd491f: `KunModal`: the backdrop only dismisses when the press _started_ on the backdrop.
1111
+
1112
+ The overlay used a bare `@click`, so pressing inside the modal (e.g. selecting
1113
+ text in an input), dragging the cursor onto the backdrop, and releasing there
1114
+ fired a `click` on the backdrop and closed the modal — "I let go of the mouse
1115
+ and the dialog vanished". The overlay now tracks the pointer-down target and
1116
+ treats the click as a dismiss only when both the press and the release are on
1117
+ the backdrop itself. `isDismissable` behaviour is unchanged.
1118
+
1119
+ - @kungal/ui-core@0.3.2
1120
+
1121
+ ## 0.3.1
1122
+
1123
+ ### Patch Changes
1124
+
1125
+ - @kungal/ui-core@0.3.1
1126
+
1127
+ ## 0.3.0
1128
+
1129
+ ### Minor Changes
1130
+
1131
+ - 9b8cbae: Remove the `faded` variant.
1132
+
1133
+ `faded` (tinted fill + border) was visually almost indistinguishable from
1134
+ `ghost`, so it's been dropped from `KunUIVariant`. This affects every variant
1135
+ consumer — `KunButton`, `KunChip`, `KunDropdown` and `KunInfo`.
1136
+
1137
+ **Migration:** replace `variant="faded"` with `variant="flat"` (tinted fill, no
1138
+ border) or `variant="bordered"` (visible colored border); `ghost` stays for the
1139
+ outline look it overlapped with.
1140
+
1141
+ ### Patch Changes
1142
+
1143
+ - Updated dependencies [9b8cbae]
1144
+ - @kungal/ui-core@0.3.0
1145
+
1146
+ ## 0.2.5
1147
+
1148
+ ### Patch Changes
1149
+
1150
+ - f0bbd79: Fix `KunDropdown` yanking the page to the top when opened.
1151
+
1152
+ The menu is teleported to `<body>` and positioned by floating-ui's async
1153
+ `computePosition`. `open()` focuses the menu inside a `nextTick`, which fires
1154
+ before the position is committed — so the menu is still at its initial
1155
+ `top:0; left:0`, and focusing it there scrolled the document to the top (very
1156
+ visible on mobile: tapping a trigger low on the page yanked the viewport up).
1157
+ All three `focus()` calls now pass `{ preventScroll: true }`, so focus still
1158
+ lands on the menu/item (keyboard nav unchanged) without scrolling.
1159
+
1160
+ - @kungal/ui-core@0.2.5
1161
+
1162
+ ## 0.2.4
1163
+
1164
+ ### Patch Changes
1165
+
1166
+ - 0ec98f9: Fix invisible outline variants (`bordered` / `faded` / `ghost`) and the
1167
+ off-center checkbox check.
1168
+
1169
+ - **Variant table**: entries set `border-{color}` but never a border _width_ —
1170
+ which paints nothing in Tailwind v4, so `bordered` / `faded` / `ghost` showed
1171
+ no border on KunButton, KunChip and KunDropdown. Every variant now carries an
1172
+ explicit `border` width (transparent on `solid` / `light` / `flat` / `shadow`
1173
+ so box sizes stay uniform when switching variants), so the outline variants
1174
+ render again.
1175
+ - **KunCheckBox**: the checkmark was a full-size (1em) icon nudged down by its
1176
+ baseline offset, so it sat off-center and cramped the 20px box edge-to-edge.
1177
+ It's now an explicitly-sized 14px check centered with flexbox.
1178
+
1179
+ - Updated dependencies [0ec98f9]
1180
+ - @kungal/ui-core@0.2.4
1181
+
1182
+ ## 0.2.3
1183
+
1184
+ ### Patch Changes
1185
+
1186
+ - f0bc0fc: Fix stacked overlays: a newly-opened `KunModal` / `KunDrawer` could render
1187
+ _beneath_ an already-open one.
1188
+
1189
+ All overlays shared a single z-index (`z-kun-modal`), so when several were open
1190
+ the stacking fell back to DOM order — and because each overlay `Teleport`s to
1191
+ `<body>` at its fixed template position, that order followed _declaration_
1192
+ order, not _open_ order. Opening a second modal from inside the first (when the
1193
+ second is declared earlier in the template) buried the newer one.
1194
+
1195
+ Overlays now claim an incrementing z-index on open via the new
1196
+ `useKunOverlayZIndex` composable (anchored at the `--z-kun-modal` token so
1197
+ consumer overrides still apply; the counter resets when the last overlay
1198
+ closes), so the most-recently-opened overlay is always on top regardless of
1199
+ declaration/DOM order. `useKunOverlayZIndex` is exported for apps stacking their
1200
+ own overlays on the same layer. (`KunLightbox` uses a native `<dialog>` top
1201
+ layer and already stacked correctly.)
1202
+
1203
+ - @kungal/ui-core@0.2.3
1204
+
1205
+ ## 0.2.2
1206
+
1207
+ ### Patch Changes
1208
+
1209
+ - d32b6e5: Fix `Unknown file extension ".css"` crash under Nuxt SSR.
1210
+
1211
+ KunUpload imports `vue-advanced-cropper`'s stylesheets, and the library build
1212
+ externalized those `.css` subpaths — so bare `import 'vue-advanced-cropper/dist/
1213
+ style.css'` statements survived at the top of the published `dist/index.js`.
1214
+ Nuxt externalizes `@kungal/ui-vue` for SSR and handed those paths straight to
1215
+ Node, which can't load `.css` — crashing dev _and_ production SSR for any app
1216
+ that imported any Kun component (the cropper sits at the top of the barrel).
1217
+
1218
+ The build now bundles all imported dependency CSS into `@kungal/ui-vue`'s single
1219
+ `dist/style.css` (which consumers already import) and ships JS with no runtime
1220
+ CSS imports; the cropper's JS stays external. No consumer changes needed.
1221
+
1222
+ - @kungal/ui-core@0.2.2
1223
+
1224
+ ## 0.2.1
1225
+
1226
+ ### Patch Changes
1227
+
1228
+ - f48f420: Export `useBodyScrollLock`. The refcounted body scroll-lock composable that
1229
+ KunModal / KunDrawer / KunLightbox already use internally is now public, so apps
1230
+ can lock body scroll for their own overlays through the same shared counter
1231
+ (nested overlays won't unlock the body until the outermost one closes).
1232
+ - @kungal/ui-core@0.2.1
1233
+
1234
+ ## 0.2.0
1235
+
1236
+ ### Minor Changes
1237
+
1238
+ - e3cf45d: Bundle the default KunLoading / KunNull mascot images (base64 data URIs) — zero
1239
+ consumer setup, no network request, consistent with the bundled-icon policy.
1240
+
1241
+ - `KunLoading`: default `src` is now a bundled image (previously relied on a
1242
+ consumer-provided `/kun.webp` public asset).
1243
+ - `KunNull`: default image is now bundled (previously fetched a random sticker
1244
+ from the KunUI CDN via `getRandomSticker()`); added an optional `src` prop to
1245
+ override it.
1246
+ - Both images now render at their natural aspect ratio instead of being forced
1247
+ into a square.
1248
+
1249
+ - 35358f2: Settle on the `@kungal/ui-*` package namespace; the four packages are versioned and released together.
1250
+
1251
+ ### Patch Changes
1252
+
1253
+ - d5ffbb6: Fix KunIcon color inheritance and polish the loading/empty states:
1254
+
1255
+ - **KunIcon**: the inline SVG bodies paint with `currentColor`, but the base
1256
+ layer's `* { color }` rule was landing on the `v-html`'d inner nodes and
1257
+ pinning them to the foreground color — so `text-*` on (or above) `<KunIcon>`
1258
+ didn't actually color the icon. The inner nodes now inherit the icon's color.
1259
+ - **KunLoading / KunNull**: larger default image (`w-72` / `w-60`) shown at its
1260
+ natural aspect ratio instead of being squished into a square.
1261
+ - **KunNull**: the empty-state caption is now muted (`text-default-500`), and
1262
+ the default caption text changed to `莲说这里什么都没有`.
1263
+
1264
+ - Updated dependencies [35358f2]
1265
+ - @kungal/ui-core@0.2.0
1266
+
1267
+ ## 0.1.1
1268
+
1269
+ ### Patch Changes
1270
+
1271
+ - c532a02: Add npm `keywords` to every package for better discoverability on the npm registry.
1272
+ - Updated dependencies [c532a02]
1273
+ - @kungal/ui-core@0.1.1