Skip to content

Releases: kungal/kun-ui

v2.17.0

Choose a tag to compare

Minor Changes

  • aae4747: feat(vue): KunPopover exposes right / left (and centered) placements

    KunPopoverPosition now covers all 12 floating-ui sides — the right-* / left-*
    placements (and the centered top / bottom / right / left) are now part of
    the public type, not just top-* / bottom-*.

    The implementation already passed position straight to floating-ui and mapped
    every side's transform-origin, so a side-anchored flyout just needed the type to
    allow it. With autoPosition (the default) a position="right-start" flyout is
    fully collision-aware: flip() / shift() keep it on-screen and size() caps
    its height to the available space and scrolls — so a tall menu near the bottom
    edge no longer clips. This makes a navigation rail's hover flyout a first-class
    use of <KunPopover position="right-start" trigger="hover" :group> instead of
    hand-rolled absolute left-full + max-h-[80vh] positioning.

Patch Changes

  • @kungal/ui-core@2.17.0

v2.16.0

Choose a tag to compare

Minor Changes

  • d23e061: feat(vue): KunTab auto-handles horizontal overflow (scroll + edge fade + chevrons)

    A horizontal tab strip that outgrows its container now scrolls inside the
    container instead of widening the page — automatically, with no scrollable
    flag and no manual overflow check. When the tabs overflow:

    • the overflowing edge fades to transparent via a CSS mask — background-independent,
      so it reads clearly on any surface (unlike a colored scroll shadow that blends in);
    • a chevron button floats on each scrollable side (opt out with :scroll-buttons="false"
      to keep just the fade);
    • the active tab auto-scrolls into view, so ← / → keyboard nav always keeps the
      selection visible.

    New prop: scrollButtons?: boolean (default true). The existing scrollable
    prop now only governs vertical tab columns; horizontal overflow is handled
    unconditionally.

Patch Changes

  • @kungal/ui-core@2.16.0

v2.15.1

Choose a tag to compare

Patch Changes

  • 4ba751a: fix(vue): KunTab vertical orientation now defaults to left-aligned content

    The align default is now orientation-aware. A vertical tab list reads as a
    nav column, where left-aligned labels are the convention, so vertical tabs now
    default to align="start". Horizontal tabs keep the classic centered look.
    An explicit align prop still overrides either orientation — pass
    align="center" to restore the previous centered vertical tabs.

    • @kungal/ui-core@2.15.1

v2.15.0

Choose a tag to compare

Minor Changes

  • 19e041c: feat(vue): KunTab #tab slot for custom tab content (badges, dots)

    KunTab is now generic over the item shape and exposes a #tab scoped slot
    ({ item, index, active }) so you can render custom per-tab content — e.g.
    compose a KunBadge for an unread count or an "unsaved" dot — instead of being
    limited to icon + label. Extra fields on the item (a count, a dirty flag, …)
    are typed inside the slot. The sliding indicator measures the button, so
    badge-widened tabs are tracked automatically. Defaults to icon + label
    (backward-compatible).

Patch Changes

  • @kungal/ui-core@2.15.0

v2.14.1

Choose a tag to compare

Patch Changes

  • 27790a5: feat(vue): KunPagination animates the active page (sliding pill + "highlight leads")

    The active page is now a single primary pill that slides between numbers (like
    KunTab's indicator) with a small elastic pop, instead of the highlight jumping.
    For mid-range pages — where the active number stays centered in the ellipsis
    window so the pill can't slide — the highlight leads: it first covers the
    adjacent number, then the number row scrolls (FLIP) to recenter and the pill
    rides back with it. Honors prefers-reduced-motion; falls back to a solid pill
    before hydration. No API change.

    • @kungal/ui-core@2.14.1

v2.14.0

Choose a tag to compare

Minor Changes

  • b4b1460: feat(vue): add KunCommandPalette (⌘K command palette / spotlight)

    The generic ⌘K palette SHELL — trigger + global shortcut, teleported dialog,
    autofocus, body scroll-lock, keyboard nav (↑↓ / Home / End / Enter / Esc),
    grouped results, safe match highlighting, and full a11y (dialog + combobox +
    listbox + aria-activedescendant) — with NO search logic baked in. You compute
    items (flat or grouped) from the query it exposes via v-model:query (your
    own scoring / index / async fetch) and it renders + navigates them; selecting
    emits @select. Generic over the item shape, with #trigger / #item /
    #empty / #no-result / #footer slots, a loading state, and a configurable
    shortcut. The docs site's ⌘K search is now a thin consumer of it.

Patch Changes

  • @kungal/ui-core@2.14.0

v2.13.1

Choose a tag to compare

Patch Changes

  • 978cf03: fix(vue): KunMessage no longer leaks toasts across SSR requests

    The toast store is module-scope, so on the server it's a single array shared by
    every SSR request and never cleared there (the dismiss timer is client-only). A
    server-side useKunMessage() — e.g. from a data-fetch error handler that runs
    during SSR — therefore piled up (deduped into a growing count), baked into
    every page's SSR HTML, and vanished on hydration (empty client store →
    hydration mismatch). Two guards, both making toasts the client-only ephemeral UI
    they are: useKunMessage() is a no-op on the server (the store is never mutated
    there), and KunMessageProvider renders nothing until mounted.

    • @kungal/ui-core@2.13.1

v2.13.0

Choose a tag to compare

Minor Changes

  • 6eadb74: feat(vue): KunPopover gains a fullWidth prop

    The trigger was wrapped in two hardcoded inline-block divs, so a consumer could
    never make the anchor span its container — external classes only reached the outer
    wrapper, not the inner triggerRef. <KunPopover full-width> now switches both
    wrappers to block w-full, so a full-width trigger (e.g. a fullWidth KunButton
    or a split button) fills the width. Default false (inline, content-width) —
    unchanged.

Patch Changes

  • @kungal/ui-core@2.13.0

v2.12.2

Choose a tag to compare

Patch Changes

  • 7a99394: fix(vue): KunDropdown / KunContextMenu item labels align left, not center

    Menu items are native <button>s, which default to text-align: center; the
    flex-1 label span inherited that, so short labels sat centered. Both item rows
    now carry text-left so the label starts at the left edge (icon → label), the
    expected menu-item layout.

    • @kungal/ui-core@2.12.2

v2.12.1

Choose a tag to compare

Patch Changes

  • f5c867b: fix(vue): KunMessage no longer jumps wider for a frame when dismissed

    The leaving toast went position: absolute; width: 100%, but the % resolved
    against the outer fixed container's padding box — 2rem wider than the in-flow
    content width — so the toast visibly widened and spilled out the right edge for a
    frame before fading. The TransitionGroup wrapper is now the containing block
    (position: relative), so width: 100% matches the in-flow width exactly.

  • f5c867b: fix(vue): KunMessage toasts use semantic-colored border + count badge

    Each toast's outline is now its own semantic colour (ring-{color}/50) instead of
    a uniform neutral grey ring, and the de-dup count badge uses a matching
    bg-{color}/10 tint instead of the neutral bg-black/10. Each type now reads as
    one cohesive coloured surface in both light and dark.

    • @kungal/ui-core@2.12.1