chore: release packages - #136
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
✅ Deploy Preview for kinu-sh ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 15, 2026 20:34
f04a3bd to
784a875
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 16, 2026 17:55
784a875 to
2810478
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
kinu@0.3.0
Minor Changes
0277cb5: Theming: kinu's default tokens now live in a
@layer tokenscascade layer, andcontrol sizing moves behind density tokens.
Token layering. Every
--k-*default invariables.cssis declared inside@layer tokens. Unlayered rules beat layered ones regardless of specificity, sooverriding kinu no longer needs specificity tricks or
!important— a plain:root { --k-primary: … }in your own stylesheet wins on its own, as does a[data-theme="…"] { --k-* }block. Existing overrides keep working; theescalation some of them use is now unnecessary.
Density. Row and control sizing is token-driven (
--k-row-*,--k-control-*) rather than hard-coded, so buttons, inputs, selects, textareas,toggles, tabs and menu rows resize as a coordinated set. Pick a ramp with
<html data-kinu-density="sm|md|lg">.The default is adaptive, which changes sizing on touch and narrow viewports:
under
(pointer: coarse), (max-width: 640px)kinu applies thelgrampautomatically, so controls are taller than in previous releases (36px → 40px
baseline, 14px → 15px text, 16px → 18px icons). Setting
data-kinu-densitytoany value — including an empty one — opts out and restores fixed sizing.
Focus appearance. Two tokens now drive focus across every input-like
component:
--k-focus-ring(the:focus-visiblebox-shadow) and--k-focus-border(its border colour). Input, textarea, select, switch, radio,otp, toggle, color-picker and the input-group wrapper all honour them, so one
pair of values restyles the set. Components with deliberately bespoke focus
treatment — button, slider thumb, tab, chip, tree, listbox — keep their own
rules.
--k-focus-borderdefaults to the resting border colour, so the defaultfocus appearance is unchanged.
Bundled themes. Themes now ship as their own stylesheets under a
kinu/themes/*.csssubpath, so you can pull one in next to the base CSS:Then set
data-themeon the root element —<html data-theme="claw">— toactivate it. Importing a theme without setting the attribute costs you nothing
but the bytes; the stylesheet only declares
[data-theme="…"]rules.The first bundled theme is
claw, a monochromatic Claude Code-style designsystem, which doubles as the worked example for what these hooks can do.
541eae6: More theming hooks: a radius scale, elevation tokens, and tokens for the
handful of values that previously meant re-authoring an awkward selector.
Radius scale.
--k-radius-1through--k-radius-4express a four-step rampas offsets from the
--k-radiusanchor, tightest to loosest, with step 3 being--k-radiusitself. Components that hard-codedcalc(var(--k-radius) - 2px)now reference a step, so moving
--k-radiusshifts the whole set coherentlywhile any individual step stays re-pinnable (
--k-radius-1: 0) withoutdisturbing the others. Computed values are unchanged.
Elevation.
--k-shadow-1(resting),--k-shadow-2(floating) and--k-shadow-3(modal) replace per-component shadow literals, so three valuesretune every elevated surface at once.
This normalizes the scale, which changes default appearance. Dropdowns, menus
and comboboxes previously carried a heavier shadow than modal dialogs did.
Surfaces now stack in the order you would expect: cards below popovers, menus
and hover-cards, which sit below dialogs, sheets and drawers. In practice
dialogs and sheets read noticeably deeper than before and dropdowns lighter.
Setting the three tokens restores any previous look.
Surface tokens.
--k-font-mono(shared bykbdand prosecode),--k-tab-indicator-bg,--k-avatar-font-size,--k-scrollbar-size/--k-scrollbar-thumb/--k-scrollbar-thumb-hover, and--k-selection-bg.These cover the cases where restyling previously meant reproducing a
pseudo-element, some anchor-positioning machinery, or an internal sizing trick —
set a value instead of a selector. The segmented tab indicator can now be
recoloured without re-authoring its
::beforeand the@supportsfallback thatbacks it, and avatar initials take a plain
font-size: the em-multiplier theinitials are built on stays internal, so a px value can no longer be fed through
it and blow the glyph up.
Text selection inside kinu components is now tinted from
--k-selection-bg.Like the scrollbar styling, the rule is scoped to kinu elements and their
contents, so selection elsewhere on your page keeps the browser's colour. Set
--k-selection-bgtoHighlightto opt kinu's own components back out.Patch Changes
77563ce: Fix two defects in the generated type declarations that made valid usage fail to compile.
ItemandButtonpick their element from theirprops — an
<a>when given anhref, a<button>otherwise — so the factory computedOmit<Button | Anchor, …>.Omitdoesn't distribute over a union andkeyof (A | B)is only the keysAandBhave in common, so the resultkept just the shared props:
targetandrel(anchor) anddisabled(button) were silently missing, and the emittedtype disagreed with the hand-written
ItemProps/ButtonProps. The tag's props are now omitted per-member andintersected after, so every tag's props survive.
refwas uninhabitable. Each component'srefwas intersected with a second, bogusref?: HTMLElement, which novalue can satisfy — a correctly-typed ref was rejected along with everything else. A ref callback was rejected for a
second reason:
ref's callback type was a union of two signatures, and TypeScript won't contextually type a parameteragainst a union, so
ref={el => …}also raised an implicitanyunderstrict. Ref callbacks are now a singlebivariant signature, so
elis inferred and cleanup-returning callbacks still typecheck.ItemPropsandButtonPropsare now built from the sameSimpleComponentPropshelper the components themselves use, sothe documented type and the component's real signature can no longer drift apart. A type-level regression test
(
src/__tests__/prop-types.test-d.tsx) pins both defects down at build time.Adds
ItemElementandButtonElement(HTMLButtonElement | HTMLAnchorElement) so a ref to a polymorphic component canbe annotated without spelling out the union:
useRef<ItemElement>(null).a5b73fd: Fix ref forwarding, which only worked in the narrowest case.
refnow reaches the DOM element for every component that renders one, and follows Preact's own attach/detach semantics.Four separate defects are fixed:
refat all.AspectRatio,Avatar, and theContent/Trigger/Closeparts of
Dialog,Drawer,Sheet,Popover,DropdownMenuandContextMenu, plusCarouselPrevious/CarouselNext/CarouselContent, were plain function components. Preact assignedref.currentthe internal PreactComponentinstance,so refs appeared to work but never yielded a DOM node.
defaultPropsor an internal ref froze the first ref they saw. The proxy was bound once per instance,so a ref that arrived on a later render, or was swapped for another, was ignored forever.
cleanup protocol and suppresses the
nullcall — object refs kept pointing at removed DOM nodes and callback refs werenever called with
null.returned.
forwardRefno longer wraps: it tags a component sorefarrives as a normal prop, which is both smaller and one lessfunction call per render.
CarouselContentnow forwards the rest of its props to the underlying element as its type alwayspromised.
Dialog.Triggerand the other trigger components forwardrefto the child they decorate.