Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
252109b
feat(mobile-a11y): reflow tab shell + header at large font scale
iscekic Jul 23, 2026
6658e32
fix(mobile-a11y): use AA-contrast token for muted-soft text
iscekic Jul 23, 2026
c2de0c4
feat(mobile-a11y): expose Kilo Chat message content + actions to scre…
iscekic Jul 23, 2026
bcbf161
feat(mobile-a11y): reflow core/profile/auth layouts at max text
iscekic Jul 23, 2026
01268bb
feat(mobile-a11y): scale PR diff text with bounded font scale
iscekic Jul 23, 2026
ed0f5a3
feat(mobile-a11y): announce and focus blocking agent cards
iscekic Jul 23, 2026
2304cc9
feat(mobile-a11y): align Agent message bubble a11y with chat contract
iscekic Jul 23, 2026
d8de3dd
feat(mobile-a11y): non-color diff markers + 44pt selection
iscekic Jul 23, 2026
83c6de0
fix(mobile-a11y): safe-area scroll for blocking recovery screens
iscekic Jul 23, 2026
2f2868b
fix(mobile-a11y): keep Android login submit reachable above the IME
iscekic Jul 23, 2026
b4093f0
docs(mobile-a11y): document portrait orientation essential exception
iscekic Jul 23, 2026
07be190
feat(mobile-a11y): announce consequential toasts to screen readers
iscekic Jul 23, 2026
f7b5e02
fix(mobile-a11y): keep OTP actions reachable at max text with keyboard
iscekic Jul 23, 2026
924f148
fix(mobile-a11y): label permission Retry button for screen readers
iscekic Jul 23, 2026
a275f36
Merge remote-tracking branch 'origin/main' into feature/mobile-audit-…
iscekic Jul 27, 2026
94b06ab
fix(mobile-e2e): handle SpringBoard "Open in Kilo?" confirmation afte…
iscekic Jul 27, 2026
e10414f
docs(mobile): record e2e environment learnings for the W1-B main merge
iscekic Jul 27, 2026
948afd5
docs(mobile): record hermetic stub files-endpoint gap
iscekic Jul 27, 2026
7e0760b
Merge remote-tracking branch 'origin/main' into feature/mobile-audit-…
iscekic Jul 27, 2026
52755d1
Merge origin/main into feature/mobile-audit-w1-accessibility-foundation
iscekic Jul 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions apps/mobile/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ const config: ExpoConfig = {
owner: 'kilocode',
slug: 'kilo-app',
version: '1.0.3',
// Portrait-only is an accepted, documented product deviation from WCAG 1.3.4
// (Orientation). Landscape layouts and iPad split-view/multitasking are out
// of scope; `ios.requireFullScreen` below enforces that. This is not claimed
// as a WCAG "essential" exception, which requires functionality to
// fundamentally change with orientation.
orientation: 'portrait',
icon: './assets/images/logo.png',
scheme: 'kiloapp',
Expand Down
8 changes: 6 additions & 2 deletions apps/mobile/src/app/(app)/(tabs)/(1_kiloclaw)/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { useManualRefresh } from '@/lib/hooks/use-manual-refresh';
import { useThemeColors } from '@/lib/hooks/use-theme-colors';
import { useUnreadCounts } from '@/lib/hooks/use-unread-counts';
import { chatSandboxPath } from '@/lib/kilo-chat-routes';
import { getTabBarOverlayHeight } from '@/lib/tab-bar-layout';
import { getEffectiveTabBarHeight } from '@/lib/tab-bar-layout';

export default function KiloClawTab() {
const router = useRouter();
Expand All @@ -42,7 +42,11 @@ export default function KiloClawTab() {

const showInstanceSkeleton = entryDecision.kind === 'loading' || onboardingQuery.isPending;
const emptyStateContainerStyle = {
paddingBottom: getTabBarOverlayHeight(bottom, Platform.OS, fontScale),
paddingBottom: getEffectiveTabBarHeight({
bottomInset: bottom,
platform: Platform.OS,
fontScale,
}),
};

const [manualRefreshing, handleRefresh] = useManualRefresh(
Expand Down
21 changes: 15 additions & 6 deletions apps/mobile/src/app/(app)/(tabs)/_layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import { BlurBar } from '@/components/ui/blur-bar';
import { Text } from '@/components/ui/text';
import { useThemeColors } from '@/lib/hooks/use-theme-colors';
import {
getTabBarOverlayHeight,
getEffectiveTabBarHeight,
getTabBarIconSize,
shouldHideTabBar,
shouldShowTabLabel,
TAB_LABEL_WRAP_FONT_SCALE,
} from '@/lib/tab-bar-layout';

Expand Down Expand Up @@ -52,7 +54,13 @@ export default function TabsLayout() {
const { bottom } = useSafeAreaInsets();
const { fontScale } = useWindowDimensions();
const hideTabs = shouldHideTabBar(pathname);
const tabBarHeight = getTabBarOverlayHeight(bottom, Platform.OS, fontScale);
const showTabLabel = shouldShowTabLabel(fontScale);
const tabBarHeight = getEffectiveTabBarHeight({
bottomInset: bottom,
platform: Platform.OS,
fontScale,
});
const tabIconSize = getTabBarIconSize(fontScale);

return (
<Tabs
Expand All @@ -73,6 +81,7 @@ export default function TabsLayout() {
height: tabBarHeight,
position: 'absolute',
},
tabBarShowLabel: showTabLabel,
}}
>
<Tabs.Screen
Expand All @@ -82,7 +91,7 @@ export default function TabsLayout() {
tabBarAccessibilityLabel: 'Home, tab, 1 of 4',
tabBarLabel: ({ focused }) => <TabLabel label="Home" focused={focused} />,
tabBarIcon: ({ color, focused }) => (
<House size={22} color={color} strokeWidth={focused ? 2 : 1.5} />
<House size={tabIconSize} color={color} strokeWidth={focused ? 2 : 1.5} />
),
}}
listeners={{
Expand All @@ -103,7 +112,7 @@ export default function TabsLayout() {
/>
),
tabBarIcon: ({ color, focused }) => (
<MessageSquare size={22} color={color} strokeWidth={focused ? 2 : 1.5} />
<MessageSquare size={tabIconSize} color={color} strokeWidth={focused ? 2 : 1.5} />
),
}}
listeners={{
Expand All @@ -121,7 +130,7 @@ export default function TabsLayout() {
tabBarAccessibilityLabel: 'Agents, tab, 3 of 4',
tabBarLabel: ({ focused }) => <TabLabel label="Agents" focused={focused} />,
tabBarIcon: ({ color, focused }) => (
<Bot size={22} color={color} strokeWidth={focused ? 2 : 1.5} />
<Bot size={tabIconSize} color={color} strokeWidth={focused ? 2 : 1.5} />
),
}}
listeners={{
Expand All @@ -137,7 +146,7 @@ export default function TabsLayout() {
tabBarAccessibilityLabel: 'Profile, tab, 4 of 4',
tabBarLabel: ({ focused }) => <TabLabel label="Profile" focused={focused} />,
tabBarIcon: ({ color, focused }) => (
<UserRound size={22} color={color} strokeWidth={focused ? 2 : 1.5} />
<UserRound size={tabIconSize} color={color} strokeWidth={focused ? 2 : 1.5} />
),
}}
listeners={{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
type ActiveRequest = { requestId: string } | null | undefined;

type BlockingInteraction = 'question' | 'permission' | 'none';
export type BlockingInteraction = 'question' | 'permission' | 'none';

export function getBlockingInteraction(input: {
activeQuestion: ActiveRequest;
Expand Down
Loading