0.7.0
MinorPatchSwipeActions works on Android, and takes its buttons as data. Breaking: SwipeActions.Actions and its Button children are gone — pass leading and/or trailing, each a list of {icon, label, onPress, destructive?, tint?}, and allowsFullSwipe on the row:
tsx <SwipeActions trailing={[ { destructive: true, icon: "trash", label: "Delete", onPress: remove }, ]} > <ListItem title="Order [#1024](https://github.com/hzblj/kara-ui/issues/1024)" /> </SwipeActions>
iOS renders SwiftUI's swipeActions, each action its icon on a button in its tint — round, with the label under it, on iOS 26. Android, where Compose has no swipe actions, gets kara's own SwipeActionsBox (@hzblj/kara-native/jetpack-compose): the row slides on an anchored drag, and filled icon buttons with their labels show in the strip it leaves. One row is open at a time on both, and a tap on an open row closes it.
Breaking: FlashList is gone, and @shopify/flash-list is no longer a peer dependency. kara's list for React Native content is RnFlatList (and RnSectionList): React Native's own virtualized lists, whose cells stay in normal flow, so rows that host native views keep them in place — a recycling list moves its cells, which an @expo/ui host does not survive. An app that wants FlashList for plain data rows installs and imports it itself.
Tooltip is controlled on Android too: visible shows Material's plain tooltip, centred above the anchor and kept inside the window, and onDismiss reports a touch outside it or the anchor scrolling away. It used to open only on a long press and hide itself, ignoring both props — and Material's own placement let it run off the edge of the screen. Nothing opens it on a long press any more; wire one to visible if you want it.
TooltipBox (@hzblj/kara-native/jetpack-compose) takes plain for that style, and hides when isPresented turns false.
ActionSheet on Android renders its rows in a host of its own — they were Compose views straight inside the sheet, which has none, and threw "must be rendered inside a Host". The rows are Material's bottom-sheet menu now: full width, with each action's icon before its label.
SearchBar on iOS centres its text beside the magnifier. The type scale's line height sat the text at the bottom of a taller line in a single-line UITextField.
Android layout fixes:
Screenkeeps its content clear of the status bar when nothing sits above it, as a SwiftUI host keeps to the safe area — it drew under it. Under a navigation bar nothing changes; the background still runs to the edges.Formis inset from its container on every side, with section titles and footers indented to the cards' content, like SwiftUI's grouped form — in aScreenits cards ran into the screen's edges.- A disabled or read-only
CheckboxorSwitchkeeps Material's 48dp touch target, so it lines up with the enabled ones instead of shifting toward the edge.
DatePicker on iOS sizes itself to its value. Its host took the width it was given and laid the compact field out against the far edge of it — past its container's, in a row. The calendar is in the accent now.
Alert and ActionSheet appear on iOS. Both hung their SwiftUI presentation on an EmptyView — @expo/ui uses one when there is no trigger, and SwiftUI never presents from it — so visible changed nothing. Each now has a trigger that takes no room, and ActionSheet passes its buttons through the dialog's Actions slot.
RnFlatList and RnSectionList keep rows that host native views on Android. React Native's Android default, removeClippedSubviews, detached a host measured at zero height before its first layout, and the row stayed empty; it is off unless you turn it on.
SegmentedControl draws its selected segment in the accent on both platforms. iOS renders kara's own UISegmentedControl (SegmentedControl in @hzblj/kara-native/swift-ui), whose pill, labels and track take colours — the system control tints only the pill, SwiftUI's segmented picker not even that. Android colours Material's segmented buttons, equal widths. onChange now fires for a new segment only on Android too.
NavigationBar and Sheet.Header on iOS 26 centre their title and glass items. UIKit's bar is 54 pt with its 44 pt row of items at the top, so centring the bar left the row 5 pt high; it is the row that is centred now.
sx costs less on every render. The style cache, the responsive flattening and the key behind useSxModifiers used to go through every key the surface has, about seventy for a Box, even when a component set two or three of them. Now they go through only the props that are set, and the theme's part of the cache key is worked out once per theme rather than on every render. Without a JIT, as on Hermes, an sx() view resolves its style 2.5–5× faster and a native atom 2–4.5× faster.