diff --git a/.github/renovate.json b/.github/renovate.json index 0a2dcae3..8e27ac6c 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -12,7 +12,9 @@ "labels": ["dependencies"], "osvVulnerabilityAlerts": true, "vulnerabilityAlerts": { - "addLabels": ["security"] + "description": "`enabled` is forced onto alert matches, so packages a rule sets `enabled: false` (the Expo-owned group) still get vulnerability PRs.", + "addLabels": ["security"], + "enabled": true }, "packageRules": [ { diff --git a/app/config/setup.shared.ts b/app/config/setup.shared.ts index b921c37b..1175929b 100644 --- a/app/config/setup.shared.ts +++ b/app/config/setup.shared.ts @@ -1,5 +1,4 @@ import { afterAll, afterEach, beforeEach, jest } from '@jest/globals'; -import { cleanup } from '@testing-library/react-native'; import type React from 'react'; import { server } from '@/test-utils/server'; @@ -30,11 +29,9 @@ beforeEach(() => server.listen({ onUnhandledRequest: 'error' })); afterEach(() => { server.resetHandlers(); server.close(); - cleanup(); jest.clearAllTimers(); }); afterAll(() => { - cleanup(); jest.clearAllTimers(); jest.useRealTimers(); server.close(); diff --git a/app/src/components/base/AppButton.tsx b/app/src/components/base/AppButton.tsx index 5b2e02b8..30c42e84 100644 --- a/app/src/components/base/AppButton.tsx +++ b/app/src/components/base/AppButton.tsx @@ -36,12 +36,17 @@ export function AppButton({ ...rest }: AppButtonProps) { const { colors } = useAppTheme(); - // Bare RN text nodes must live inside , and an interpolated label - // ("Select all ({count})") arrives as an array of them, not a single string. - // Wrap each primitive and leave element children alone. - const renderedChildren = Children.map(children, (child) => - typeof child === 'string' || typeof child === 'number' ? {child} : child, - ); + // Bare RN text nodes must live inside . An interpolated label + // ("Select all ({count})") arrives as an array of primitives; wrap the whole + // run in one so it stays a single node (no flex gaps, one a11y label). + const parts = Children.toArray(children); + const isPrimitive = (c: unknown) => typeof c === 'string' || typeof c === 'number'; + const renderedChildren = + parts.length > 0 && parts.every(isPrimitive) ? ( + {children} + ) : ( + Children.map(children, (child) => (isPrimitive(child) ? {child} : child)) + ); return (