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