Repository navigation
v0.5.106
Upgrading
- Run
kit:update plan|applyforcore(re-pinnedsha256:a2b97a31…95c1→sha256:e4156a8f…2695):Kit/Action/actionPlacement.ts,Kit/Action/ActionMenuItems.vue,Kit/Workbench/Workbench.vue,Kit/Workbench/WorkbenchNavigator.vueandKit/Workbench/workbench.tstake the checkbox menu items and#navigator-itembelow. ActionMenuItems now importsDropdownMenuCheckboxItemfrom the host's shadcn-vuedropdown-menu(DataTable already did). A descriptor withoutcheckedand a Workbench without#navigator-itemrender as before. - Run
kit:update plan|applyforcore(re-pinnedsha256:e4156a8f…2695→sha256:63781198…377f):Kit/Form/SegmentedToggle.vueis new, andKit/index.ts,Kit/contract.tsandKit/Layout/PaneTabs.vuetake the changes below. PaneTabs looks different: its pressed pane is no longer a primary-filled button but a neutral raised segment in a muted track. Its semantics, props and events are unchanged. A host that styled around the old primary button, or asserted its classes, should check its phone tabs. - Run
kit:update plan|applyforcore(re-pinnedsha256:63781198…377f→sha256:f61ee0bf…fa41):Kit/Workbench/WorkbenchNavigator.vue,Kit/Workbench/Workbench.vueandKit/Workbench/workbench.tstake the thumbnails and filmstrip layout below. An item withoutthumbnailin the defaultlistlayout renders as before. A host that copiestypes/kit.d.tsre-copies it:WorkbenchItemhasthumbnail, andWorkbenchThumbnailis new. - Run
kit:update plan|applyforcore(re-pinnedsha256:f61ee0bf…fa41→sha256:d8054e8f…525e): this addsKit/Data/DateTime.vue,dateTime.tsanduseTimezone.ts. - Run
kit:update plan|applyforcore(re-pinnedsha256:d8054e8f…525e→sha256:9ea138b7…a9e7): this adds the pickers (Kit/Form/InputDate.vue,InputDateRange.vue,InputMonth.vue,InputYear.vue,InputTime.vue,InputTimeRange.vue,PeriodPicker.vueanddateInput.ts), andcss/kit.cssgains their phone-sheet rule.corenow declares@internationalized/date(^3.5.0, already installed with reka-ui) in its npm requirements. - Run
kit:update plan|applyforcore(re-pinnedsha256:9ea138b7…a9e7→sha256:0b44195c…21f1):Kit/Form/Slider.vueis new,Kit/Form/RadioCardGroup.vuegains theoptionslot, image tiles andcolumns, andKit/contract.tsandKit/index.tsexport them.RadioCardOptionnow needs alabelor animage(withalt); an option with a label is unchanged.
Added
- The adoption inventory reads Blade, Livewire and Filament apps (tey/standards 0.11.50 or later). Every template-tag signal reads Blade views as well as Vue (
"in": ["vue", "blade"]). Filament resources underapp/Filament/**count as hand-rolled through class references:TextInput,SelectandTextareaforform.inputs,FileUploadforform.files,TableandTextColumnfordata.table,DeleteActionforaction.confirmandNotificationforfeedback.toast, mirrored into thehas-forms,has-file-uploadsandhas-index-pagesfacts. A newhas-filament-destructive-actionsfact letsaction.confirmapply to a Filament app with no delete route. Blade views count forshell.workspace(the conventional app layout files),layout.page(<x-app-layout>,<x-layouts.app>),action.button(<button>,<x-button>and the Breeze button components),feedback.toast(toast, flash and action-message views) andappearance.theme(theme-toggle, dark-mode and appearance views).platform.timezonegains nothing: no signal kind expresses hand-rolled timezone handling in PHP or Blade without guessing. - Checkbox menu items (docs/workbench.md › Item menus). An action descriptor with
checked(true or false) renders in ActionMenuItems, and so in every kit menu built on it including the Workbench row menu, asrole="menuitemcheckbox"witharia-checkedand the host's check indicator (shadcn-vue's DropdownMenuCheckboxItem). Choosing it emits the action as today; the host flipschecked. Withoutchecked, or withnull, the row stays a plain menuitem. The PHPActiontakeschecked(nullable bool, default null), andtypes/kit.d.tsis regenerated. A row menu opened from the item focuses its first row, checkbox rows included. - Workbench
#navigator-itemslot (docs/workbench.md › Custom rows). The Workbench forwards WorkbenchNavigator'sitemslot as#navigator-item({ item, selected, index }, typed asWorkbenchNavigatorItemSlotProps) in every layout: columns, the lg drawer layout, phone tabs and the overlay navigator. A host customises row content without replacing the navigator. The kit keeps therole="option"row, its keys and the row menus outside the listbox; the slot holds content only. WorkbenchNavigator now declares itsitemslot withdefineSlots. The browser job checks a row menu with a checked and an unchecked item and a Workbench using#navigator-item, with axe clean on both. - SegmentedToggle, a neutral view switch (docs/segmented-toggle.md).
Kit/Form/SegmentedToggle.vuepicks one of a few views ("Slides | Outline", grid or list) withv-model,options({ value, label, icon?, disabled? }),labelandsize. Its selected segment is a borderedbg-backgroundsurface in abg-mutedtrack, never brand-filled. It's arole="radiogroup"ofrole="radio"buttons with one tab stop: the arrows move and select, Home and End jump, and disabled options are skipped. The selected border keeps 3:1 against the track and the segment in light and dark.tests/js/segmented-toggle.test.mjschecks the source and the ratios; the browser job drives the keys, compares the selected background with the primary colour and runs axe with colour contrast, light and dark. - Workbench navigator thumbnails and a filmstrip layout (backported from main). A navigator item takes an optional
thumbnail({ src, alt }, exported asWorkbenchThumbnail;altis required,''for a decorative image that repeats the label), rendered as a lazy, async-decoded<img>inside the item'srole="option"row in a fixed-aspect box, so the row doesn't shift when it loads.navigator-layout="filmstrip"on the Workbench (layouton WorkbenchNavigator) lists the items as a Slides-like editor's left rail: the item's number, a 16:9 thumbnail (an empty placeholder box without one) and the label;liststays the default. The listbox semantics, keys, Alt+↑/↓ reorder, drag, filter, F6, WorkbenchNavigator'sitemslot (the label part) and the row menus beside the listbox are unchanged. The PHPWorkbenchItemtakesthumbnail(a newWorkbenchThumbnaildata class, default null) andtypes/kit.d.tsis regenerated; the MCPWorkbenchReadToolstill gives exactly{ id, label, type, description }, leaving the thumbnail out.composer test:workbench-item-paritycovers the new key through the Inertia round trip, and the browser job checks a filmstrip: images inside the options with their alt, nothing focusable in the listbox, Alt+↓ reorder, filter and F6, axe clean with color-contrast, and each thumbnail box sized before its image loads. DateTime, dates and times for the viewer (backported from main; docs/date-time.md). It renders a<time>with the machine value and the full date in itstitle, in the formatsrelative,local,date,time,ymdanddatetime. A calendar date (YYYY-MM-DD) is never converted between zones, so it never shifts across midnight or DST. An instant (RFC 3339 with its offset) shows in the viewer's timezone, and one without an offset is shown as given, never guessed.livere-renders relative times on one shared minute ticker.formatDateTime(),fullDateTime()anduseTimezone()are exported too. It usesIntlonly, with no date library.- session-ui shares
kitTimezone, the viewer's zone (thetzcookie, then the person's saved zone, then the workspace's, then UTC), through KitShares, so it survives a flush. - Date and time pickers (backported from main; docs/date-pickers.md):
InputDate,InputDateRange,InputMonth,InputYear,InputTimeandInputTimeRange, on reka-ui. Each submits plain ISO strings (2026-11-01,2026-11,2026,09:30; a range asname[start]andname[end]). A date, month, year or time is a wall value, never converted between zones;kitTimezoneonly decides today. The calendars use the APG date picker keys and the month and year grids the APG grid keys; on phones they open as a bottom sheet, and in a locked LockedForm they stay shut. A half-filled or reversed range blocks the native submit.toInstant()andfromInstant()join a date and time into an RFC 3339 instant with the viewer zone's offset (DST gaps move forward, repeated hours take the earlier moment). Tey\Kit\Validation\IsoDateandIsoRange, the server rules for those values:IsoDate::date(),month(),year(),time()andinstant()(an offset required) with inclusive bounds, andIsoRange::dates()andtimes()for{start, end}.<RadioCardGroup>tiles (docs/radio-card.md). Theoptionslot ({ option, checked, disabled }) replaces a card's body while the native radio, its label and the focus ring stay the kit's. An option withimage: { src, alt }is an image tile: a lazy, async image in a squareobject-coverbox, so ~100 tiles load without layout shift, named by its label or its image'salt. A checked image or slot tile shows the primary ring and anaria-hiddencheck mark, so the state isn't colour alone.columns(2,3,4,6orauto, at least 7rem a tile) lays the cards in a grid. A disabled option stays a native disabled radio the arrow keys skip.<Slider>(docs/slider.md), a native range input:v-modelnumber,min,max,step,disabled,invalid,valueTextforaria-valuetext,inputemitted live andchangeon release, andshow-valuefor a visible<output>linked byfor. Caller attributes land on the input; in a Field it is described by the Field's description and error; in a locked LockedForm it is read-only.- The adoption inventory counts
Sliderunderform.inputs, and a raw<input type="range">in a Vue or Blade template as hand-rolled (it also marks the apphas-forms).
Changed
- PaneTabs' pressed pane is neutral. The Workbench's phone tabs (
Kit/Layout/PaneTabs.vue) took the primary button for the pressed pane, so it read as a second primary action. They now take SegmentedToggle's look: a bordered raised segment in a muted track. They stay a single-choice toggle group (role="group",aria-pressed).
What's Changed
- Read Blade, Livewire and Filament apps in the adoption inventory (0.5.x) by @jaspertey in #436
- Checkbox menu items and a #navigator-item slot for the Workbench (0.5.x) by @jaspertey in #389
- A neutral SegmentedToggle, and PaneTabs without a primary fill (0.5.x) by @jaspertey in #395
- Workbench navigator thumbnails and a filmstrip layout (0.5.x) by @jaspertey in #408
- [0.5.x] DateTime and the kitTimezone share (backport of #387) by @jaspertey in #388
- Pickers backport to 0.5.x: InputDate, InputDateRange, InputMonth, InputYear, InputTime, InputTimeRange by @jaspertey in #394
- Add RadioCardGroup option slot, image tiles and columns, and a Slider (0.5.x) by @jaspertey in #440
- Release v0.5.106 by @jaspertey in #487
Full Changelog: v0.5.105...v0.5.106