@krizaka/ui 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/countdown/core.ts","../src/native/avatar.tsx","../../tokens/dist/native.js","../src/native/theme.tsx","../src/native/badge.tsx","../src/native/button.tsx","../src/native/txt.tsx","../src/native/card.tsx","../src/native/chip.tsx","../src/native/countdown.tsx","../src/native/empty-state.tsx","../src/native/KrizakaMark.tsx","../src/marks/krizaka-geometry.ts","../src/native/mark-motion.ts","../src/native/OrazakaMark.tsx","../src/marks/orazaka-geometry.ts","../src/native/OrochiaMark.tsx","../src/marks/orochia-geometry.ts","../src/native/ProductMark.tsx","../src/native/progress.tsx","../src/native/segmented.tsx","../src/native/skeleton.tsx","../src/native/spinner.tsx","../src/native/toast.tsx"],"sourcesContent":["// The countdown's clock, shared by the web (`@krizaka/ui/countdown`) and native renders: no DOM import.\nimport { useSyncExternalStore } from \"react\";\n\n// One clock for every countdown on the page: it ticks each second while someone listens.\nconst listeners = new Set<() => void>();\nlet timer: ReturnType<typeof setInterval> | null = null;\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n timer ??= setInterval(() => listeners.forEach((l) => l()), 1000);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n\nconst nowSecond = () => Math.floor(Date.now() / 1000) * 1000;\n\n/** Milliseconds left until `target` (never negative), ticking every second. `skewMs` = server clock − this clock. */\nexport function useCountdown(target: Date | string | number, skewMs = 0): number {\n const now = useSyncExternalStore(subscribe, nowSecond, nowSecond);\n return Math.max(0, new Date(target).getTime() - (now + skewMs));\n}\n\n/** Splits a duration into days, hours, minutes and seconds. */\nexport function splitDuration(ms: number): { d: number; h: number; m: number; s: number } {\n const total = Math.max(0, Math.floor(ms / 1000));\n return { d: Math.floor(total / 86400), h: Math.floor((total % 86400) / 3600), m: Math.floor((total % 3600) / 60), s: total % 60 };\n}\n\n/** The short unit labels, passed translated (e.g. `{ d: \"d\", h: \"h\", m: \"m\", s: \"s\" }`). */\nexport type CountdownUnits = { d: string; h: string; m: string; s: string };\n\n/** The three segments shown: days, hours, minutes when there are days; else hours, minutes, seconds. */\nexport function countdownParts(ms: number, units: CountdownUnits): [number, string][] {\n const { d, h, m, s } = splitDuration(ms);\n return d > 0 ? [[d, units.d], [h, units.h], [m, units.m]] : [[h, units.h], [m, units.m], [s, units.s]];\n}\n","import * as React from \"react\";\nimport { Image, StyleSheet, Text, View, type ViewProps } from \"react-native\";\nimport { SvgUri } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nconst SIDE: Record<AvatarSize, number> = { xs: 20, sm: 32, md: 40, lg: 56, xl: 80 };\n\nexport type AvatarProps = Omit<ViewProps, \"children\"> & {\n /**\n * The image URI; absent, `null` or failing: the fallback. An SVG (`….svg`, `data:image/svg+xml,…` — generated\n * avatars) is drawn by react-native-svg, which React Native's `Image` cannot do; `svg` forces it for a URI without\n * the extension.\n */\n src?: string | null;\n /** Draw `src` as an SVG even when its URI does not say so (an avatar service that answers `image/svg+xml`). */\n svg?: boolean;\n /** The person's name: the image's accessible name and the source of the default initial. */\n alt?: string;\n /** Shown while there is no image or when it fails: default, the first letter of `alt`. */\n fallback?: React.ReactNode;\n /** A size of the scale, or points. */\n size?: AvatarSize | number;\n};\n\n/** A round picture; the initial (or `fallback`) when there is none or it fails to load. */\n/** `….svg` (query and fragment ignored) or an SVG data URI. */\nexport function isSvgUri(uri: string): boolean {\n return /^data:image\\/svg\\+xml[;,]/i.test(uri) || /\\.svg(?:[?#]|$)/i.test(uri);\n}\n\nexport function AvatarRoot({ src, svg, alt = \"\", fallback, size = \"md\", style, ...props }: AvatarProps) {\n const { theme } = useTheme();\n // The source that failed to load: a new `src` gets its chance.\n const [failedSrc, setFailedSrc] = React.useState<string | null>(null);\n const failed = Boolean(src) && failedSrc === src;\n const side = typeof size === \"number\" ? size : SIDE[size];\n const initial = alt.trim().charAt(0).toUpperCase();\n const content = fallback ?? initial;\n return (\n <View\n accessible={Boolean(alt)}\n role={alt ? \"img\" : undefined}\n aria-label={alt || undefined}\n {...props}\n style={[styles.root, { width: side, height: side, borderRadius: side / 2, backgroundColor: theme.surface3 }, style]}\n >\n {src && !failed && (svg || isSvgUri(src)) ? (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"none\">\n <SvgUri testID={props.testID ? `${props.testID}.svg` : undefined} uri={src} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid slice\" onError={() => setFailedSrc(src)} />\n </View>\n ) : src && !failed ? (\n <Image testID={props.testID ? `${props.testID}.image` : undefined} source={{ uri: src }} onError={() => setFailedSrc(src)} resizeMode=\"cover\" style={StyleSheet.absoluteFill} />\n ) : typeof content === \"string\" ? (\n <Text style={[styles.initial, { color: theme.textSecondary, fontSize: Math.max(9, Math.round(side * 0.4)) }]}>{content}</Text>\n ) : (\n content\n )}\n </View>\n );\n}\n\nexport type AvatarGroupProps = ViewProps & {\n /** How many avatars are shown; the rest becomes a `+n` avatar. */\n max?: number;\n /** The size of the avatars (and of the `+n` one). */\n size?: AvatarSize | number;\n};\n\n/** Overlapping avatars; past `max`, a `+n` avatar counts the rest. */\nexport function AvatarGroup({ max, size = \"md\", style, children, ...props }: AvatarGroupProps) {\n const { theme } = useTheme();\n const items = React.Children.toArray(children);\n const shown = max === undefined ? items : items.slice(0, max);\n const rest = items.length - shown.length;\n const side = typeof size === \"number\" ? size : SIDE[size];\n const ring = { borderWidth: 2, borderColor: theme.surface0, marginLeft: -side / 5 };\n return (\n <View {...props} style={[styles.group, { paddingLeft: side / 5 }, style]}>\n {shown.map((child, i) => (\n <View key={i} style={[ring, { borderRadius: side }]}>\n {React.isValidElement<AvatarProps>(child) ? React.cloneElement(child, { size }) : child}\n </View>\n ))}\n {rest > 0 ? (\n <View style={[ring, { borderRadius: side }]}>\n <AvatarRoot size={size} fallback={`+${rest}`} />\n </View>\n ) : null}\n </View>\n );\n}\n\n/** `Avatar` (an image with a fallback) and `Avatar.Group`. */\nexport const Avatar = Object.assign(AvatarRoot, { Group: AvatarGroup });\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\", alignItems: \"center\", justifyContent: \"center\" },\n initial: { fontWeight: \"700\" },\n group: { flexDirection: \"row\", alignItems: \"center\" },\n});\n","// @krizaka/tokens — GÉNÉRÉ depuis src/tokens/*.tokens.json par scripts/build.mjs : ne pas éditer.\n\n/** Colour roles per theme, resolved for React Native (`#rrggbb`, `rgba()` when translucent). */\nexport const themes = Object.freeze({ dark: Object.freeze({\n \"surface0\": \"#0c0c0e\",\n \"surface1\": \"#161618\",\n \"surface2\": \"#1f1f23\",\n \"surface3\": \"#2a2a2d\",\n \"media\": \"#1b1b1d\",\n \"borderSubtle\": \"rgba(255,255,255,0.06)\",\n \"borderDefault\": \"rgba(255,255,255,0.1)\",\n \"borderStrong\": \"rgba(255,255,255,0.16)\",\n \"textPrimary\": \"#f5f5f5\",\n \"textSecondary\": \"#a0a0a7\",\n \"textMuted\": \"#73737d\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\",\n \"success\": \"#10b77f\",\n \"successText\": \"#36d399\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\"\n}), light: Object.freeze({\n \"surface0\": \"#fafafa\",\n \"surface1\": \"#ffffff\",\n \"surface2\": \"#f1f1f3\",\n \"surface3\": \"#e4e4e7\",\n \"media\": \"#e9e9ec\",\n \"borderSubtle\": \"rgba(0,0,0,0.06)\",\n \"borderDefault\": \"rgba(0,0,0,0.1)\",\n \"borderStrong\": \"rgba(0,0,0,0.16)\",\n \"textPrimary\": \"#18181b\",\n \"textSecondary\": \"#64646d\",\n \"textMuted\": \"#808089\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\",\n \"success\": \"#10b77f\",\n \"successText\": \"#0a714e\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = Object.freeze({\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"full\": 9999\n});\n\n/** Font families: the first family of each web stack (React Native takes a single name). */\nexport const typography = Object.freeze({\n \"sans\": \"Inter\",\n \"display\": \"Inter\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/** Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`). */\nexport const motion = Object.freeze({ ease: Object.freeze([0.16,1,0.3,1]) });\n\n/** The brand themes as ThemeProvider overrides (`overrides={brands.orazaka}`): the accent family per theme. */\nexport const brands = Object.freeze({\n \"krizaka\": {\n \"dark\": {\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orazaka\": {\n \"dark\": {\n \"accent\": \"#f67e23\",\n \"accentHover\": \"#f79245\",\n \"accentSoft\": \"rgba(246,126,35,0.12)\",\n \"accentText\": \"#f78c3b\",\n \"accent2\": \"#f59e0b\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#f67e23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#28170b\",\n \"brandGradientVia\": \"#17130c\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#b45309\",\n \"accentHover\": \"#964608\",\n \"accentSoft\": \"rgba(180,83,9,0.08)\",\n \"accentText\": \"#9b4808\",\n \"accent2\": \"#a45904\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#b45309\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ffebd6\",\n \"brandGradientVia\": \"#fdf7ed\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orochia\": {\n \"dark\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(139,92,246,0.12)\",\n \"accentText\": \"#a78bfa\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#a78bfa\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#a78bfa\",\n \"brandGradientFrom\": \"#1a0e2a\",\n \"brandGradientVia\": \"#1c0d17\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(124,58,237,0.08)\",\n \"accentText\": \"#6d28d9\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#7c3aed\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#6d28d9\",\n \"brandGradientFrom\": \"#efe7fe\",\n \"brandGradientVia\": \"#fdedf5\",\n \"brandGradientTo\": \"#fafafa\"\n }\n }\n});\n","// The native theme: the @krizaka/tokens roles (dark, light), a product's overrides on top, the mode chosen by the app\n// or followed from the system. Same names as the web `./theme` (`mode`, `setMode`, `ThemeProvider`, `useTheme`).\nimport { motion as tokenMotion, radius as tokenRadius, themes as tokenThemes } from \"@krizaka/tokens/native\";\nimport * as React from \"react\";\nimport { AccessibilityInfo, useColorScheme } from \"react-native\";\n\n// The token values are inlined in dist/native.js (no dependency for the app); their types are spelled out here so the\n// declarations stand alone. theme.test.tsx checks that they match @krizaka/tokens/native both ways.\nexport type ThemeName = \"dark\" | \"light\";\n\n/** The colour roles of one theme (the @krizaka/tokens roles). */\nexport type Theme = {\n readonly surface0: string;\n readonly surface1: string;\n readonly surface2: string;\n readonly surface3: string;\n readonly media: string;\n readonly borderSubtle: string;\n readonly borderDefault: string;\n readonly borderStrong: string;\n readonly textPrimary: string;\n readonly textSecondary: string;\n readonly textMuted: string;\n readonly textOnMedia: string;\n readonly accent: string;\n readonly accentHover: string;\n readonly accentSoft: string;\n readonly accentText: string;\n readonly accent2: string;\n readonly onAccent: string;\n readonly ring: string;\n readonly brandGradientFrom: string;\n readonly brandGradientVia: string;\n readonly brandGradientTo: string;\n readonly success: string;\n readonly successText: string;\n readonly warning: string;\n readonly warningText: string;\n readonly danger: string;\n readonly dangerText: string;\n readonly info: string;\n readonly infoText: string;\n readonly scrim: string;\n readonly scrimStrong: string;\n readonly overlay: string;\n};\n\n/** Corner radii, in points. */\nexport type Radius = { readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly full: number };\n/** Motion: the cubic-bezier control points of the platform's ease (`Easing.bezier(...motion.ease)`). */\nexport type Motion = { readonly ease: readonly [number, number, number, number] };\n\nconst themes: Readonly<Record<ThemeName, Theme>> = tokenThemes;\nconst radius: Radius = tokenRadius;\nconst motion: Motion = tokenMotion;\n\nexport type Mode = \"dark\" | \"light\" | \"system\";\n\n/** A product's colour roles per theme (e.g. `nativeTheme` of a product design system): only the roles it changes. */\nexport type ThemeOverrides = { readonly dark?: Partial<Theme>; readonly light?: Partial<Theme> };\n\n/** Font families, when the app has loaded them (`expo-font`…). Absent: the system font. */\nexport type ThemeFonts = { readonly sans?: string; readonly display?: string; readonly mono?: string };\n\nexport type ThemeContextValue = {\n /** The chosen mode: dark, light or follow the system. */\n mode: Mode;\n setMode: (mode: Mode) => void;\n /** The resolved scheme: what `mode` gives on this device right now. */\n scheme: ThemeName;\n /** The colour roles of the resolved scheme, overrides applied. */\n theme: Theme;\n radius: Radius;\n motion: Motion;\n fonts: ThemeFonts;\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null);\n\nfunction resolve(mode: Mode, system: string | null | undefined): ThemeName {\n if (mode === \"system\") return system === \"light\" ? \"light\" : \"dark\";\n return mode;\n}\n\nexport type ThemeProviderProps = {\n children: React.ReactNode;\n /** Controlled mode (with `onModeChange`). */\n mode?: Mode;\n /** Uncontrolled: the mode before the user picks one. Default: follow the system. */\n defaultMode?: Mode;\n /** Every change of mode — the app persists it (no storage dependency here). */\n onModeChange?: (mode: Mode) => void;\n /** The product's roles over the platform's, per theme. */\n overrides?: ThemeOverrides;\n /** Font families the app has loaded (`expo-font`…); absent: the system font. */\n fonts?: ThemeFonts;\n};\n\n/** Once, at the root of the app. Without it, `useTheme()` follows the system with the platform's roles. */\nexport function ThemeProvider({ children, mode: controlled, defaultMode = \"system\", onModeChange, overrides, fonts }: ThemeProviderProps) {\n const system = useColorScheme();\n const [own, setOwn] = React.useState<Mode>(defaultMode);\n const mode = controlled ?? own;\n const setMode = React.useCallback(\n (next: Mode) => {\n if (controlled === undefined) setOwn(next);\n onModeChange?.(next);\n },\n [controlled, onModeChange],\n );\n const scheme = resolve(mode, system);\n const override = overrides?.[scheme];\n const theme = React.useMemo(() => (override ? { ...themes[scheme], ...override } : themes[scheme]), [scheme, override]);\n const value = React.useMemo<ThemeContextValue>(\n () => ({ mode, setMode, scheme, theme, radius, motion, fonts: fonts ?? {} }),\n [mode, setMode, scheme, theme, fonts],\n );\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nconst noop = () => undefined;\n\n/** The current theme: `{ mode, setMode, scheme, theme, radius, motion, fonts }`. */\nexport function useTheme(): ThemeContextValue {\n const context = React.useContext(ThemeContext);\n const system = useColorScheme();\n if (context) return context;\n const scheme = resolve(\"system\", system);\n return { mode: \"system\", setMode: noop, scheme, theme: themes[scheme], radius, motion, fonts: {} };\n}\n\n/** True while the system asks to reduce motion: every loop and transition of /native stops. */\nexport function useReducedMotion(): boolean {\n const [reduce, setReduce] = React.useState(false);\n React.useEffect(() => {\n let alive = true;\n void AccessibilityInfo.isReduceMotionEnabled().then((value) => {\n if (alive) setReduce(value);\n });\n const subscription = AccessibilityInfo.addEventListener(\"reduceMotionChanged\", setReduce);\n return () => {\n alive = false;\n subscription.remove();\n };\n }, []);\n return reduce;\n}\n\n/** A role at a lower opacity (`#rrggbb` → `rgba()`): the soft tints of the status tones. Other forms pass through. */\nexport function alpha(color: string, opacity: number): string {\n const hex = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (!hex) return color;\n const [r, g, b] = hex.slice(1).map((part) => parseInt(part, 16));\n return `rgba(${r},${g},${b},${opacity})`;\n}\n\n/** An id usable in an SVG `url(#…)` reference, unique per instance. */\nexport function useSvgId(prefix: string): string {\n return `${prefix}${React.useId().replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n}\n","import * as React from \"react\";\nimport { Animated, StyleSheet, Text, type ViewProps } from \"react-native\";\n\nimport { alpha, type Theme, useReducedMotion, useTheme } from \"./theme\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"scrim\";\n\ntype Look = { bg: string; fg: string; border: string; dot: string };\n\n// As on the web: the status tones are soft (a tint, a coloured dot); the text stays a text role.\nfunction look(tone: BadgeTone, t: Theme): Look {\n switch (tone) {\n case \"accent\":\n return { bg: t.accentSoft, fg: t.textPrimary, border: alpha(t.accent, 0.4), dot: t.accent };\n case \"success\":\n case \"warning\":\n case \"danger\":\n return { bg: alpha(t[tone], 0.15), fg: t.textPrimary, border: alpha(t[tone], 0.4), dot: t[tone] };\n case \"scrim\":\n return { bg: t.scrim, fg: t.textOnMedia, border: \"transparent\", dot: t.textOnMedia };\n default:\n return { bg: t.surface3, fg: t.textSecondary, border: \"transparent\", dot: t.textSecondary };\n }\n}\n\nexport type BadgeProps = ViewProps & {\n /** neutral (default) · accent · success · warning · danger · scrim (on a media). */\n tone?: BadgeTone;\n /** sm (default) · md. */\n size?: \"sm\" | \"md\";\n /** A small dot before the text, in the tone's colour. */\n dot?: boolean;\n /** The dot breathes (still when the system reduces motion). */\n pulse?: boolean;\n children?: React.ReactNode;\n};\n\n/** A short status in capitals: a tone, a size, an optional (pulsing) dot. */\nexport function Badge({ tone = \"neutral\", size = \"sm\", dot, pulse, style, children, ...props }: BadgeProps) {\n const { theme } = useTheme();\n const colors = look(tone, theme);\n const reduce = useReducedMotion();\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (!dot || !pulse || reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.35, duration: 800, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 800, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [dot, pulse, reduce, opacity]);\n return (\n <Animated.View\n {...props}\n style={[styles.root, size === \"md\" ? styles.md : styles.sm, { backgroundColor: colors.bg, borderColor: colors.border }, style]}\n >\n {dot ? <Animated.View aria-hidden style={[styles.dot, { backgroundColor: colors.dot, opacity }]} /> : null}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text style={[styles.text, { color: colors.fg, fontSize: size === \"md\" ? 11 : 10 }]}>{children}</Text>\n ) : (\n children\n )}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"center\", alignSelf: \"flex-start\", gap: 4, borderRadius: 9999, borderWidth: 1 },\n sm: { paddingHorizontal: 8, paddingVertical: 2 },\n md: { paddingHorizontal: 10, paddingVertical: 4 },\n dot: { width: 6, height: 6, borderRadius: 3 },\n text: { fontWeight: \"700\", textTransform: \"uppercase\", letterSpacing: 0.8 },\n});\n","import * as React from \"react\";\nimport { ActivityIndicator, Pressable, type PressableProps, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { alpha, type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ButtonVariant = \"primary\" | \"gradient\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ntype Look = { bg: string; fg: string; border: string; gradient?: readonly [string, string] };\n\n/** The same six looks as the web `buttonVariants`, from the theme's roles. */\nfunction look(variant: ButtonVariant, t: Theme): Look {\n switch (variant) {\n case \"primary\":\n return { bg: t.accent, fg: t.onAccent, border: t.accent };\n case \"gradient\":\n // The brand's signature: accent → accent-2, left to right; on-accent reads on both stops (tested in tokens).\n return { bg: t.accent, fg: t.onAccent, border: \"transparent\", gradient: [t.accent, t.accent2] };\n case \"outline\":\n return { bg: \"transparent\", fg: t.textPrimary, border: t.borderDefault };\n case \"ghost\":\n return { bg: \"transparent\", fg: t.textSecondary, border: \"transparent\" };\n case \"danger\":\n // As on the web: the border and the tint carry the danger, the label stays a text role (legible in light).\n return { bg: alpha(t.danger, 0.1), fg: t.textPrimary, border: alpha(t.danger, 0.5) };\n default:\n return { bg: t.surface2, fg: t.textPrimary, border: t.borderDefault };\n }\n}\n\nconst HEIGHT: Record<ButtonSize, number> = { sm: 32, md: 40, lg: 48 };\nconst PADDING: Record<ButtonSize, number> = { sm: 12, md: 16, lg: 24 };\n\ntype BaseProps = Omit<PressableProps, \"children\" | \"style\"> & {\n /** The look: `primary`, `gradient` (accent → accent-2), `secondary` (default), `outline`, `ghost`, `danger` — as on the web. */\n variant?: ButtonVariant;\n /** sm · md (default) · lg: 32, 40 or 48 points high. */\n size?: ButtonSize;\n /** `rounded` (default) or `pill`. */\n shape?: \"rounded\" | \"pill\";\n /** Disables, shows a spinner in place of the icon and says busy. */\n loading?: boolean;\n /** Styles merged last, over the button's frame. */\n style?: StyleProp<ViewStyle>;\n};\n\nexport type ButtonProps = BaseProps & {\n /** The visible text — passed translated. It is also the accessible name. */\n label: string;\n /** Before the label (an icon component from the app's icon set). */\n icon?: React.ReactNode;\n};\n\nfunction useButton({ variant = \"secondary\", size = \"md\", shape = \"rounded\", loading, disabled }: BaseProps) {\n const { theme, radius } = useTheme();\n const colors = look(variant, theme);\n const inactive = Boolean(disabled || loading);\n const frame = (pressed: boolean): ViewStyle => ({\n height: HEIGHT[size],\n borderRadius: shape === \"pill\" ? radius.full : radius.sm,\n backgroundColor: colors.bg,\n borderColor: colors.border,\n opacity: inactive ? 0.4 : pressed ? 0.85 : 1,\n transform: [{ scale: pressed ? 0.98 : 1 }],\n });\n return { colors, inactive, frame };\n}\n\n/** The gradient fill behind the content (react-native-svg: no native gradient in React Native). */\nfunction Fill({ colors, id }: { colors: Look; id: string }) {\n if (!colors.gradient) return null;\n return (\n <Svg aria-hidden pointerEvents=\"none\" style={StyleSheet.absoluteFill} width=\"100%\" height=\"100%\">\n <Defs>\n <LinearGradient id={id} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <Stop offset=\"0\" stopColor={colors.gradient[0]} />\n <Stop offset=\"1\" stopColor={colors.gradient[1]} />\n </LinearGradient>\n </Defs>\n <Rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </Svg>\n );\n}\n\n/** The action. `variant` × `size` × `shape`, `loading`, `icon`; the haptics, if any, belong to the app's `onPress`. */\nexport function Button({ label, icon, variant, size = \"md\", shape, loading = false, disabled, style, ...props }: ButtonProps) {\n const { colors, inactive, frame } = useButton({ variant, size, shape, loading, disabled });\n const gradientId = `kz-button-${React.useId().replace(/:/g, \"\")}`;\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={inactive}\n aria-busy={loading}\n {...props}\n disabled={inactive}\n style={({ pressed }) => [styles.base, { paddingHorizontal: PADDING[size] }, frame(pressed), style]}\n >\n <Fill colors={colors} id={gradientId} />\n <View style={styles.row}>\n {loading ? <ActivityIndicator aria-hidden size=\"small\" color={colors.fg} /> : icon}\n <Txt variant=\"label\" numberOfLines={1} style={{ color: colors.fg, fontSize: size === \"sm\" ? 12 : 14 }}>\n {label}\n </Txt>\n </View>\n </Pressable>\n );\n}\n\nexport type IconButtonProps = BaseProps & {\n /** The accessible name — required, passed translated. */\n label: string;\n /** The icon (from the app's icon set); the button shows nothing else. */\n icon: React.ReactNode;\n};\n\n/** A square button holding only an icon: `label` is required, it is its accessible name. */\nexport function IconButton({ label, icon, variant, size = \"md\", shape, loading = false, disabled, style, ...props }: IconButtonProps) {\n const { colors, inactive, frame } = useButton({ variant, size, shape, loading, disabled });\n const gradientId = `kz-button-${React.useId().replace(/:/g, \"\")}`;\n const side = HEIGHT[size];\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={inactive}\n aria-busy={loading}\n hitSlop={side < 44 ? (44 - side) / 2 : undefined}\n {...props}\n disabled={inactive}\n style={({ pressed }) => [styles.base, frame(pressed), { width: side }, style]}\n >\n <Fill colors={colors} id={gradientId} />\n {loading ? <ActivityIndicator aria-hidden size=\"small\" color={colors.fg} /> : icon}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n base: { alignItems: \"center\", justifyContent: \"center\", borderWidth: 1, overflow: \"hidden\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n});\n","import * as React from \"react\";\nimport { StyleSheet, Text, type TextProps } from \"react-native\";\n\nimport { type Theme, useTheme } from \"./theme\";\n\nexport type TxtVariant = \"display\" | \"title\" | \"body\" | \"caption\" | \"label\" | \"mono\";\nexport type TxtTone = \"text\" | \"secondary\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"onAccent\" | \"onMedia\";\n\nconst TONE: Record<TxtTone, keyof Theme> = {\n text: \"textPrimary\",\n secondary: \"textSecondary\",\n muted: \"textMuted\",\n accent: \"accentText\",\n success: \"successText\",\n warning: \"warningText\",\n danger: \"dangerText\",\n onAccent: \"onAccent\",\n onMedia: \"textOnMedia\",\n};\n\nexport type TxtProps = TextProps & {\n /** The type scale: display · title · body (default) · caption · label · mono (tabular figures). */\n variant?: TxtVariant;\n /** A text role of the theme (default `text`). */\n tone?: TxtTone;\n};\n\n/** Text in the platform's scale, coloured by a role of the current theme. `title` and `display` are headers for screen readers. */\nexport function Txt({ variant = \"body\", tone = \"text\", style, ...props }: TxtProps) {\n const { theme, fonts } = useTheme();\n const family = variant === \"display\" || variant === \"title\" ? fonts.display : variant === \"mono\" ? fonts.mono : fonts.sans;\n return (\n <Text\n role={variant === \"display\" || variant === \"title\" ? \"heading\" : undefined}\n {...props}\n style={[styles[variant], { color: theme[TONE[tone]] }, family ? { fontFamily: family } : null, style]}\n />\n );\n}\n\nexport const textStyles = StyleSheet.create({\n display: { fontSize: 30, lineHeight: 36, fontWeight: \"900\", letterSpacing: -0.5 },\n title: { fontSize: 18, lineHeight: 24, fontWeight: \"800\" },\n body: { fontSize: 15, lineHeight: 21 },\n caption: { fontSize: 12, lineHeight: 16 },\n label: { fontSize: 14, lineHeight: 18, fontWeight: \"700\" },\n mono: { fontSize: 14, lineHeight: 18, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n});\nconst styles = textStyles;\n","import * as React from \"react\";\nimport { Image, type ImageProps, Pressable, type PressableProps, type StyleProp, StyleSheet, View, type ViewProps, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt, type TxtProps } from \"./txt\";\n\nexport type CardRootProps = ViewProps & {\n /** `default` (the raised surface) or `elevated` (one step higher, with a shadow). */\n tone?: \"default\" | \"elevated\";\n /** The corner radius, from the theme: md · lg · xl (default). */\n radius?: \"md\" | \"lg\" | \"xl\";\n /**\n * Makes the whole card pressable: a button for screen readers, named by its content (an `aria-label`, if any, must\n * contain the visible title).\n */\n onPress?: PressableProps[\"onPress\"];\n};\n\n/** The frame: the theme's surface, a hairline border, rounded corners; `onPress` makes it a pressable card. */\nexport function CardRoot({ tone = \"default\", radius = \"xl\", onPress, style, ...props }: CardRootProps) {\n const { theme, radius: r } = useTheme();\n const frame: StyleProp<ViewStyle> = [\n styles.root,\n {\n backgroundColor: tone === \"elevated\" ? theme.surface2 : theme.surface1,\n borderColor: theme.borderDefault,\n borderRadius: r[radius],\n },\n tone === \"elevated\" ? [styles.shadow, { shadowColor: theme.scrimStrong }] : null,\n ];\n if (!onPress) return <View {...props} style={[frame, style]} />;\n return (\n <Pressable\n role=\"button\"\n onPress={onPress}\n {...props}\n style={({ pressed }) => [frame, { opacity: pressed ? 0.92 : 1, transform: [{ scale: pressed ? 0.99 : 1 }] }, style]}\n />\n );\n}\n\nconst ASPECT = { video: 16 / 9, square: 1, portrait: 3 / 4 } as const;\n\nexport type CardMediaProps = ViewProps & {\n /** video (default, 16:9) · square · portrait, or `auto` (the image's own). */\n aspect?: keyof typeof ASPECT | \"auto\";\n};\n\n/** The media area at the top of a card: a fixed ratio, the `media` role behind (what shows while an image loads). */\nexport function CardMedia({ aspect = \"video\", style, ...props }: CardMediaProps) {\n const { theme } = useTheme();\n return <View {...props} style={[styles.media, { backgroundColor: theme.media }, aspect === \"auto\" ? null : { aspectRatio: ASPECT[aspect] }, style]} />;\n}\n\nexport type CardImageProps = Omit<ImageProps, \"source\" | \"src\"> & {\n /** The image URI; absent or `null`: the `fallback` on the media colour. */\n src?: string | null;\n /** Shown when there is no image: an icon, an illustration (decorative). */\n fallback?: React.ReactNode;\n};\n\n/** The image of a media (it fills it), or its `fallback` when there is none. Decorative unless `alt` is given. */\nexport function CardImage({ src, fallback, alt, style, ...props }: CardImageProps) {\n const { theme } = useTheme();\n if (!src) {\n return (\n <View aria-hidden style={[StyleSheet.absoluteFill, styles.center, { backgroundColor: theme.accentSoft }]}>\n {fallback}\n </View>\n );\n }\n return <Image accessible={Boolean(alt)} alt={alt} aria-label={alt} resizeMode=\"cover\" {...props} source={{ uri: src }} style={[StyleSheet.absoluteFill, style]} />;\n}\n\nconst CORNER: Record<\"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\", ViewStyle> = {\n \"top-left\": { top: 10, left: 10 },\n \"top-right\": { top: 10, right: 10 },\n \"bottom-left\": { bottom: 10, left: 10 },\n \"bottom-right\": { bottom: 10, right: 10 },\n};\n\nexport type CardOverlayProps = ViewProps & {\n /** The corner of the media it sits in: top-left (default) · top-right · bottom-left · bottom-right. */\n corner?: keyof typeof CORNER;\n};\n\n/** What sits on the media (badges, a caption), in a corner. */\nexport function CardOverlay({ corner = \"top-left\", style, ...props }: CardOverlayProps) {\n return <View {...props} style={[styles.overlay, CORNER[corner], style]} />;\n}\n\nconst PADDING = { none: 0, sm: 12, md: 16, lg: 24 } as const;\n\nexport type CardBodyProps = ViewProps & {\n /** none · sm · md (default) · lg. */\n padding?: keyof typeof PADDING;\n};\n\nexport function CardBody({ padding = \"md\", style, ...props }: CardBodyProps) {\n return <View {...props} style={[styles.body, { padding: PADDING[padding] }, style]} />;\n}\n\n/** The card's name: one line, a header for screen readers. */\nexport function CardTitle({ numberOfLines = 1, ...props }: Omit<TxtProps, \"variant\">) {\n return <Txt variant=\"label\" role=\"heading\" numberOfLines={numberOfLines} {...props} />;\n}\n\nexport function CardDescription({ numberOfLines = 2, ...props }: Omit<TxtProps, \"variant\">) {\n return <Txt variant=\"caption\" tone=\"secondary\" numberOfLines={numberOfLines} {...props} />;\n}\n\nexport function CardFooter({ style, ...props }: ViewProps) {\n const { theme } = useTheme();\n return <View {...props} style={[styles.footer, { borderTopColor: theme.borderSubtle }, style]} />;\n}\n\n/** `Card.Root/Media/Image/Overlay/Body/Title/Description/Footer` — the web parts, on View, Image and Text. */\nexport const Card = {\n Root: CardRoot,\n Media: CardMedia,\n Image: CardImage,\n Overlay: CardOverlay,\n Body: CardBody,\n Title: CardTitle,\n Description: CardDescription,\n Footer: CardFooter,\n};\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\", borderWidth: StyleSheet.hairlineWidth },\n shadow: { shadowOpacity: 0.25, shadowRadius: 12, shadowOffset: { width: 0, height: 6 }, elevation: 4 },\n media: { position: \"relative\", overflow: \"hidden\", width: \"100%\" },\n center: { alignItems: \"center\", justifyContent: \"center\" },\n overlay: { position: \"absolute\", zIndex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n body: { gap: 12 },\n footer: { flexDirection: \"row\", alignItems: \"center\", gap: 8, borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 12, marginTop: \"auto\" },\n});\n","import * as React from \"react\";\nimport { Pressable, type PressableProps, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type ChipSize = \"sm\" | \"md\";\n\ntype GroupContext = {\n type: \"single\" | \"multiple\";\n isSelected: (value: string) => boolean;\n toggle: (value: string) => void;\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n disabled?: boolean;\n};\nconst ChipGroupContext = React.createContext<GroupContext | null>(null);\n\ntype CommonProps = Omit<PressableProps, \"children\" | \"style\" | \"onPress\"> & {\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n /** The text (passed translated) or a node (an icon and a text). */\n children: React.ReactNode;\n};\n\ntype ToggleChipProps = CommonProps & {\n /** Inside `Chip.Group`: the value this chip stands for (required there, ignored alone). */\n value?: string;\n /** Alone: pressed or not (`defaultSelected` uncontrolled), `onSelectedChange` on every press. */\n selected?: boolean;\n /** Uncontrolled: selected at first (alone, outside a group). */\n defaultSelected?: boolean;\n /** Alone: called with the new state when it is pressed. */\n onSelectedChange?: (selected: boolean) => void;\n removable?: false;\n};\n\ntype RemovableChipProps = CommonProps & {\n /** A static chip (a chosen tag, an applied filter) with a remove button. */\n removable: true;\n /** The accessible name of the remove button — passed translated, e.g. \"Remove #night\". */\n removeLabel: string;\n /** Called when its remove button is pressed. */\n onRemove: () => void;\n};\n\nexport type ChipProps = ToggleChipProps | RemovableChipProps;\n\nfunction Label({ children, color, size }: { children: React.ReactNode; color: string; size: ChipSize }) {\n if (typeof children !== \"string\" && typeof children !== \"number\") return <>{children}</>;\n return <Text style={[styles.label, { color, fontSize: size === \"sm\" ? 12 : 13 }]}>{children}</Text>;\n}\n\n/** A selectable pill (`selected` / `onSelectedChange`), an item of `Chip.Group` (`value`), or `removable`. */\nfunction ChipBase(props: ChipProps) {\n const group = React.useContext(ChipGroupContext);\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(props.removable ? false : (props.defaultSelected ?? false));\n const size = props.size ?? group?.size ?? \"md\";\n const frame = (on: boolean, pressed: boolean): ViewStyle => ({\n height: size === \"sm\" ? 28 : 36,\n borderRadius: radius.full,\n borderColor: on ? theme.accent : theme.borderDefault,\n backgroundColor: on ? theme.accentSoft : theme.surface1,\n opacity: pressed ? 0.85 : 1,\n });\n\n if (props.removable) {\n const { removable: _r, removeLabel, onRemove, disabled, size: _s, style, children, ...rest } = props;\n return (\n <View {...rest} style={[styles.base, frame(false, false), disabled ? styles.disabled : null, style]}>\n <Label color={theme.textSecondary} size={size}>\n {children}\n </Label>\n <Pressable role=\"button\" aria-label={removeLabel} disabled={disabled ?? undefined} hitSlop={10} onPress={onRemove} style={styles.remove}>\n <Text style={[styles.cross, { color: theme.textSecondary }]}>×</Text>\n </Pressable>\n </View>\n );\n }\n\n const { removable: _r, value, selected, defaultSelected: _d, onSelectedChange, disabled: ownDisabled, size: _s, style, children, ...rest } = props;\n if (group && value === undefined) throw new Error(\"Chip: a chip inside Chip.Group needs a `value`.\");\n const on = group ? group.isSelected(value as string) : (selected ?? own);\n const disabled = Boolean(ownDisabled || group?.disabled);\n const press = () => {\n if (group) return group.toggle(value as string);\n if (selected === undefined) setOwn(!on);\n onSelectedChange?.(!on);\n };\n const single = group?.type === \"single\";\n return (\n <Pressable\n role={single ? \"radio\" : \"checkbox\"}\n aria-checked={on}\n aria-disabled={disabled}\n {...rest}\n disabled={disabled}\n onPress={press}\n style={({ pressed }) => [styles.base, frame(on, pressed), disabled ? styles.disabled : null, style]}\n >\n <Label color={on ? theme.textPrimary : theme.textSecondary} size={size}>\n {children}\n </Label>\n </Pressable>\n );\n}\n\ntype GroupBase = {\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n disabled?: boolean;\n /** One horizontal scrolling row (a filter bar) instead of wrapping lines. */\n scrollable?: boolean;\n /** The accessible name of the group — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n children: React.ReactNode;\n};\n\nexport type ChipGroupProps =\n | (GroupBase & { type: \"single\"; value?: string; defaultValue?: string; onValueChange?: (value: string) => void })\n | (GroupBase & { type: \"multiple\"; value?: string[]; defaultValue?: string[]; onValueChange?: (value: string[]) => void });\n\n/** A set of chips: `single` (one value, a radio group; pressing the chosen chip keeps it) or `multiple` (toggles). */\nfunction ChipGroup(props: ChipGroupProps) {\n const { size, disabled, scrollable, \"aria-label\": label, style, children } = props;\n const initial = props.type === \"single\" ? (props.defaultValue ?? \"\") : (props.defaultValue ?? []);\n const [own, setOwn] = React.useState<string | string[]>(initial);\n const current = props.value ?? own;\n const context = React.useMemo<GroupContext>(() => {\n const list = Array.isArray(current) ? current : [current];\n return {\n type: props.type,\n size,\n disabled,\n isSelected: (v) => list.includes(v),\n toggle: (v) => {\n const next = props.type === \"single\" ? v : list.includes(v) ? list.filter((x) => x !== v) : [...list, v];\n if (props.value === undefined) setOwn(next);\n (props.onValueChange as ((value: string | string[]) => void) | undefined)?.(next);\n },\n };\n }, [current, props.type, props.value, props.onValueChange, size, disabled]);\n const a11y = { role: props.type === \"single\" ? (\"radiogroup\" as const) : (\"group\" as const), \"aria-label\": label };\n return (\n <ChipGroupContext.Provider value={context}>\n {scrollable ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} {...a11y} style={style} contentContainerStyle={styles.row}>\n {children}\n </ScrollView>\n ) : (\n <View {...a11y} style={[styles.row, styles.wrap, style]}>\n {children}\n </View>\n )}\n </ChipGroupContext.Provider>\n );\n}\n\n/** `Chip` and `Chip.Group`. */\nexport const Chip = Object.assign(ChipBase, { Group: ChipGroup });\n\nconst styles = StyleSheet.create({\n base: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6, paddingHorizontal: 14, borderWidth: 1, alignSelf: \"flex-start\" },\n label: { fontWeight: \"600\" },\n remove: { marginRight: -6, width: 24, height: 24, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 16, lineHeight: 18, fontWeight: \"700\" },\n disabled: { opacity: 0.4 },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n wrap: { flexWrap: \"wrap\" },\n});\n","import * as React from \"react\";\nimport { Animated, type StyleProp, StyleSheet, Text, type ViewStyle } from \"react-native\";\n\nimport { countdownParts, type CountdownUnits, useCountdown } from \"../countdown/core\";\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type { CountdownUnits };\n\nexport type CountdownProps = {\n /** The moment it counts down to: a Date, an ISO string or epoch milliseconds. */\n target: Date | string | number;\n /** Server clock − this clock, in milliseconds. */\n skewMs?: number;\n /** The short unit labels, passed translated. */\n units: CountdownUnits;\n /** Below this many milliseconds it turns urgent (the danger text role, the last segment breathes). Default 60 s. */\n urgentBelowMs?: number;\n /** sm · md (default) · lg. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Accessible name, e.g. \"Ends in\". */\n label: string;\n /** Also show `label` before the segments, in the secondary text role (default: only read by screen readers). */\n showLabel?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst FONT = { sm: 14, md: 20, lg: 32 } as const;\n\n/**\n * Time left until a moment, as segments (2d 04h 13m — days only when there are some) in tabular figures, on the same\n * clock as the web `Countdown` (one interval for every countdown on screen). Under `urgentBelowMs` it turns to the\n * danger text role (≥ 4.5:1 in both themes) and its last segment breathes (still when the system reduces motion).\n * `showLabel` writes `label` before the segments; it is the accessible name either way.\n */\nexport function Countdown({ target, skewMs = 0, units, urgentBelowMs = 60_000, size = \"md\", label, showLabel = false, style }: CountdownProps) {\n const { theme, fonts } = useTheme();\n const reduce = useReducedMotion();\n const ms = useCountdown(target, skewMs);\n const urgent = ms > 0 && ms < urgentBelowMs;\n const parts = countdownParts(ms, units);\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (!urgent || reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.4, duration: 500, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 500, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [urgent, reduce, opacity]);\n const color = urgent ? theme.dangerText : theme.textPrimary;\n const text = parts.map(([value, unit]) => `${String(value).padStart(2, \"0\")}${unit}`).join(\" \");\n return (\n <Animated.View\n accessible\n role=\"timer\"\n aria-label={`${label} ${text}`}\n style={[styles.root, style]}\n >\n {showLabel ? (\n <Text style={[styles.label, { color: theme.textSecondary, fontSize: Math.max(11, Math.round(FONT[size] * 0.6)) }]}>{label}</Text>\n ) : null}\n {parts.map(([value, unit], i) => (\n <Animated.View key={unit} style={[styles.segment, urgent && i === parts.length - 1 ? { opacity } : null]}>\n <Text style={[styles.value, { color, fontSize: FONT[size] }, fonts.display ? { fontFamily: fonts.display } : null]}>\n {String(value).padStart(2, \"0\")}\n </Text>\n <Text style={[styles.unit, { color: theme.textSecondary, fontSize: Math.round(FONT[size] / 2) }]}>{unit}</Text>\n </Animated.View>\n ))}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"baseline\", gap: 6 },\n segment: { flexDirection: \"row\", alignItems: \"baseline\" },\n value: { fontWeight: \"900\", fontVariant: [\"tabular-nums\"], letterSpacing: -0.3 },\n unit: { marginLeft: 2, fontWeight: \"700\", textTransform: \"uppercase\" },\n label: { fontWeight: \"600\", marginRight: 2 },\n});\n","import * as React from \"react\";\nimport { StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type EmptyStateProps = Omit<ViewProps, \"children\"> & {\n /** A decorative icon (hidden from screen readers). */\n icon?: React.ReactNode;\n /** What is empty, in a few words (\"No notifications yet\"). */\n title: string;\n /** Why, or what will fill it. */\n description?: string;\n /** What to do next: a Button. */\n action?: React.ReactNode;\n};\n\n/** What a list, a search or a screen says when it has nothing to show — every word is a prop. */\nexport function EmptyState({ icon, title, description, action, style, ...props }: EmptyStateProps) {\n const { theme } = useTheme();\n return (\n <View {...props} style={[styles.root, style]}>\n {icon ? (\n <View aria-hidden style={[styles.icon, { backgroundColor: theme.surface2 }]}>\n {icon}\n </View>\n ) : null}\n <Txt variant=\"label\" role=\"heading\" style={styles.center}>\n {title}\n </Txt>\n {description ? (\n <Txt tone=\"secondary\" style={styles.center}>\n {description}\n </Txt>\n ) : null}\n {action ? <View style={styles.action}>{action}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", justifyContent: \"center\", gap: 8, paddingVertical: 40, paddingHorizontal: 24 },\n icon: { width: 48, height: 48, borderRadius: 24, alignItems: \"center\", justifyContent: \"center\", marginBottom: 4 },\n center: { textAlign: \"center\", maxWidth: 360 },\n action: { marginTop: 8, flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"center\", gap: 8 },\n});\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, G as Group, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { KRIZAKA as G } from \"../marks/krizaka-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Krizaka mark for React Native — the geometry of the web mark (marks/krizaka-geometry.ts), drawn with\n * react-native-svg: the ink shield follows the theme's text roles, the node and the core are Krizaka blue. The orbit\n * turns and the core breathes on the native driver; still when the system reduces motion.\n */\nexport function KrizakaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"kzm\");\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const stroke = neutral ?? theme.textMuted;\n const blue = (\n <LinearGradient id={`${id}b`} gradientUnits=\"userSpaceOnUse\" x1={G.blue.x1 + G.offset} y1={G.blue.y1 + G.offset} x2={G.blue.x2 + G.offset} y2={G.blue.y2 + G.offset}>\n {G.blue.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n const dot = (c: { cx: number; cy: number; r: number; inner: number }) => (\n <>\n <Circle cx={c.cx} cy={c.cy} r={c.r} fill={`url(#${id}b)`} />\n <Circle cx={c.cx} cy={c.cy} r={c.inner} fill={G.highlight} />\n </>\n );\n return (\n <View style={{ width: size, height: size }} {...markA11y(title)}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id={`${id}g`} cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n <LinearGradient id={`${id}i`} gradientUnits=\"userSpaceOnUse\" x1={G.ink.x1 + G.offset} y1={G.ink.y1 + G.offset} x2={G.ink.x2 + G.offset} y2={G.ink.y2 + G.offset}>\n <Stop offset=\"0%\" stopColor={theme.textSecondary} />\n <Stop offset=\"100%\" stopColor={theme.textPrimary} />\n </LinearGradient>\n {blue}\n </Defs>\n {size >= 48 ? <Circle cx={200} cy={200} r={190} fill={`url(#${id}g)`} /> : null /* cropped: the halo would show its square */}\n <Circle cx={200} cy={200} r={G.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Path d={G.shield} stroke={`url(#${id}i)`} strokeWidth={G.stroke} strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n </Group>\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Circle cx={200} cy={200} r={G.orbit.r} stroke={stroke} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{blue}</Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n {dot(G.node)}\n {dot(G.core)}\n </Group>\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/**\n * The Krizaka mark's geometry — the one description drawn by the web mark (KrizakaLogo) and the native one\n * (KrizakaMark). Built on the Orochia mark's grammar (docs: packages/tokens/BRAND.md, \"Marks\"): a 360×360 artwork at\n * (20, 20) in a 400×400 view box, one bold stroke (22) drawn as an open figure, an end that breaks out as a node, a\n * core, a dashed orbit and a ring; below 48 px the view box crops to the emblem.\n *\n * Krizaka is the parent: the hexagonal shield is **ink** (the host's text roles), the node and the core carry the\n * Krizaka blue (the accent of @krizaka/tokens, krizaka brand: hsl(217 92% 53%) → its text tint hsl(217 92% 68%)).\n */\nexport const KRIZAKA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"86 82 228 228\",\n offset: 20,\n /** The shield: a pointy-top hexagon (r 92 around 180,180), open at its upper-right edge. */\n shield: \"M259.7,134 L259.7,226 L180,272 L100.3,226 L100.3,134 L180,88 L212,106.5\",\n stroke: 22,\n ink: { x1: 70, y1: 290, x2: 290, y2: 70 },\n blue: { x1: 180, y1: 180, x2: 300, y2: 60, stops: [[\"0%\", \"#196df5\"], [\"100%\", \"#629cf8\"]] },\n /** The vertex where the shield opens: a node (the serpent's head in Orochia's grammar). */\n node: { cx: 259.7, cy: 134, r: 19, inner: 6 },\n core: { cx: 180, cy: 180, r: 24, inner: 8 },\n highlight: \"#dbeafe\",\n glow: { color: \"#196df5\", opacity: 0.16 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n} as const;\n","import { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing } from \"react-native\";\n\nexport interface NativeMarkProps {\n /** Width and height in points. */\n size?: number;\n /** The orbit turns and the core breathes; always still when the system asks to reduce motion. */\n animated?: boolean;\n /** An accessible name (the mark becomes an image); without it the mark is decorative. */\n title?: string;\n /** The neutral strokes (orbit, ring). Default: the theme's muted text colour. */\n neutral?: string;\n}\n\n/** An image with a name, or hidden from assistive technology. */\nexport const markA11y = (title?: string) =>\n title\n ? { accessible: true, accessibilityRole: \"image\" as const, accessibilityLabel: title }\n : { accessibilityElementsHidden: true, importantForAccessibility: \"no-hide-descendants\" as const };\n\n/**\n * The motion shared by the native marks, on the native driver: a slow turn (30 s) and a breath (3.2 s). Nothing\n * starts when `animated` is false or the system reduces motion.\n */\nexport function useMarkMotion(size: number, animated: boolean, spinMs = 30_000) {\n const [spin] = useState(() => new Animated.Value(0));\n const [pulse] = useState(() => new Animated.Value(0));\n useEffect(() => {\n if (!animated) return;\n let loops: Animated.CompositeAnimation[] = [];\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (reduce || cancelled) return;\n loops = [\n Animated.loop(Animated.timing(spin, { toValue: 1, duration: spinMs, easing: Easing.linear, useNativeDriver: true })),\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n ]),\n ),\n ];\n loops.forEach((l) => l.start());\n });\n return () => {\n cancelled = true;\n loops.forEach((l) => l.stop());\n };\n }, [animated, spin, pulse, spinMs]);\n return {\n Animated,\n layer: { position: \"absolute\" as const, width: size, height: size },\n spinStyle: { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] }) }] },\n pulseStyle: { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) },\n };\n}\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { ORAZAKA as G } from \"../marks/orazaka-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Orazaka mark for React Native — the geometry of the web mark (marks/orazaka-geometry.ts): the three shards turn\n * slowly around the core, which breathes; still when the system reduces motion.\n */\nexport function OrazakaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"ozm\");\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const stroke = neutral ?? theme.textMuted;\n const amber = (\n <LinearGradient id={`${id}a`} gradientUnits=\"userSpaceOnUse\" x1={G.amber.x1} y1={G.amber.y1} x2={G.amber.x2} y2={G.amber.y2}>\n {G.amber.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n const fill = `url(#${id}a)`;\n return (\n <View style={{ width: size, height: size }} {...markA11y(title)}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id={`${id}g`} cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n {size >= 48 ? <Circle cx={G.center} cy={G.center} r={190} fill={`url(#${id}g)`} /> : null /* cropped: the halo would show its square */}\n <Circle cx={G.center} cy={G.center} r={G.orbit.r} stroke={stroke} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n <Circle cx={G.center} cy={G.center} r={G.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{amber}</Defs>\n {G.shards.map((d) => (\n <Path key={d} d={d} fill={fill} stroke={fill} strokeWidth={G.shardStroke} strokeLinejoin=\"round\" />\n ))}\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{amber}</Defs>\n <Circle cx={G.center} cy={G.center} r={G.core.r} fill={fill} />\n <Circle cx={G.center} cy={G.center} r={G.core.inner} fill={G.highlight} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/**\n * The Orazaka mark's geometry — drawn by the web mark (OrazakaLogo) and the native one (OrazakaMark). The same\n * grammar as Orochia and Krizaka (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold\n * emblem in the brand gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem keeps the original idea — three hexagonal shards orbiting a core — drawn as solid shards (the weight of\n * Orochia's body) in the logo's own orange: #b45309 → #f59e0b, the stops the Orazaka brand theme is built from.\n */\nexport const ORAZAKA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"76 76 248 248\",\n center: 200,\n /**\n * The three shards — a hexagon's cap (from the original 132-unit drawing), scaled ×1.9 around the centre and turned\n * 0°, 120°, 240° — in view-box coordinates, so that one gradient runs across all three.\n */\n shards: [\n \"M154.4,121.2 L200,94.7 L245.6,121.2 L245.6,154.4 L226.6,165.4 L226.6,132.2 L200,116.8 L173.4,132.2 L173.4,165.4 L154.4,154.4 Z\",\n \"M291.1,199.9 L291.2,252.6 L245.5,278.9 L216.7,262.3 L216.6,240.3 L245.4,257 L272.1,241.6 L272,210.9 L243.2,194.3 L262.3,183.3 Z\",\n \"M154.5,278.9 L108.8,252.6 L108.9,199.9 L137.7,183.3 L156.8,194.3 L128,210.9 L127.9,241.6 L154.6,257 L183.4,240.3 L183.3,262.3 Z\",\n ],\n shardStroke: 5.7,\n amber: { x1: 90, y1: 310, x2: 310, y2: 90, stops: [[\"0%\", \"#b45309\"], [\"100%\", \"#f59e0b\"]] },\n core: { r: 21, inner: 7.6 },\n highlight: \"#fffbeb\",\n glow: { color: \"#f59e0b\", opacity: 0.16 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n} as const;\n","import React, { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing, View } from \"react-native\";\nimport Svg, { Circle, Defs, Ellipse, G as Group, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { OROCHIA as G } from \"../marks/orochia-geometry\";\nimport { type NativeMarkProps } from \"./mark-motion\";\nimport { useTheme } from \"./theme\";\n\nconst CENTER = G.offset + 180;\n\n/**\n * The Orochia mark for React Native — the same geometry as the web mark (marks/orochia-geometry.ts), drawn with\n * react-native-svg. Three layers so that the motion runs on the native driver: the orbit turns, the eye and the flame\n * breathe, the serpent stays still.\n */\nexport function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }: NativeMarkProps) {\n const { theme } = useTheme();\n const neutral = neutralProp ?? theme.textMuted;\n const [spin] = useState(() => new Animated.Value(0));\n const [pulse] = useState(() => new Animated.Value(0));\n useEffect(() => {\n if (!animated) return;\n let loops: Animated.CompositeAnimation[] = [];\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (reduce || cancelled) return;\n loops = [\n Animated.loop(Animated.timing(spin, { toValue: 1, duration: 30_000, easing: Easing.linear, useNativeDriver: true })),\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n ]),\n ),\n ];\n loops.forEach((l) => l.start());\n });\n return () => {\n cancelled = true;\n loops.forEach((l) => l.stop());\n };\n }, [animated, spin, pulse]);\n\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const layer = { position: \"absolute\" as const, width: size, height: size };\n const a11y = title ? { accessible: true, accessibilityRole: \"image\" as const, accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: \"no-hide-descendants\" as const };\n const bodyGradient = (\n <LinearGradient id=\"body\" gradientUnits=\"userSpaceOnUse\" x1={G.body.x1 + G.offset} y1={G.body.y1 + G.offset} x2={G.body.x2 + G.offset} y2={G.body.y2 + G.offset}>\n {G.body.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n\n return (\n <View style={{ width: size, height: size }} {...a11y}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id=\"glow\" cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n <Circle cx={CENTER} cy={CENTER} r={170} fill=\"url(#glow)\" />\n <Circle cx={CENTER} cy={CENTER} r={G.ring.r} stroke={neutral} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] }) }] }]}>\n <Svg viewBox={viewBox} style={layer}>\n <Circle cx={CENTER} cy={CENTER} r={G.orbit.r} stroke={neutral} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n </Svg>\n </Animated.View>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{bodyGradient}</Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Path d={G.arc} stroke=\"url(#body)\" strokeWidth={22} strokeLinecap=\"round\" fill=\"none\" />\n <Path d={G.arc} stroke={G.scales.color} strokeOpacity={G.scales.opacity} strokeWidth={G.scales.width} strokeLinecap=\"round\" strokeDasharray={G.scales.dash} fill=\"none\" />\n <Path d={G.neck} stroke=\"url(#body)\" strokeWidth={14} strokeLinecap=\"round\" fill=\"none\" />\n <Path d={G.tail} stroke=\"url(#body)\" strokeWidth={6} strokeLinecap=\"round\" fill=\"none\" />\n <Ellipse cx={G.head.cx} cy={G.head.cy} rx={G.head.rx} ry={G.head.ry} rotation={G.head.rotate} origin={`${G.head.cx}, ${G.head.cy}`} fill=\"url(#body)\" />\n <Path d={G.tongue.d} stroke={G.tongue.color} strokeWidth={3} strokeLinecap=\"round\" fill=\"none\" />\n </Group>\n </Svg>\n <Animated.View style={[layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <LinearGradient id=\"flame\" x1=\"50%\" y1=\"100%\" x2=\"50%\" y2=\"0%\">\n {G.flameGradient.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n </Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Circle cx={G.eye.cx} cy={G.eye.cy} r={G.eye.r} fill={G.eye.color} />\n <Path d={G.flame.d} transform={`translate(${G.flame.translate[0]} ${G.flame.translate[1]}) scale(${G.flame.scale})`} fill=\"url(#flame)\" />\n </Group>\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/**\n * The Orochia mark's geometry — the one description of the serpent and its flame, drawn by the web mark (SVG in the\n * DOM, OrochiaLogo) and the native one (react-native-svg, @krizaka/ui/native). Coordinates are in the 360×360 artwork,\n * placed at (20, 20) in a 400×400 view box; below 48 px the view box crops to the serpent.\n */\nexport const OROCHIA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"86 82 228 228\",\n offset: 20,\n body: { x1: 70, y1: 290, x2: 290, y2: 70, stops: [[\"0%\", \"#7c3aed\"], [\"55%\", \"#d946ef\"], [\"100%\", \"#f472b6\"]] },\n flameGradient: { stops: [[\"0%\", \"#a855f7\"], [\"100%\", \"#f9a8d4\"]] },\n glow: { color: \"#d946ef\", opacity: 0.18 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n arc: \"M259.8,142.8 A88,88 0 1 1 142.8,100.2\",\n neck: \"M142.8,100.2 A88,88 0 0 1 187.7,92.3\",\n tail: \"M187.7,92.3 A88,88 0 0 1 221.3,102.3\",\n scales: { color: \"#fdf4ff\", opacity: 0.45, width: 3, dash: \"2 14\" },\n head: { cx: 253.9, cy: 130.1, rx: 13, ry: 20, rotate: -25 },\n tongue: { d: \"M245.4,112.0 L242.0,104.8 L235.0,101.5 M242.0,104.8 L244.0,97.3\", color: \"#f472b6\" },\n eye: { cx: 256.3, cy: 123.5, r: 4.5, color: \"#fdf4ff\" },\n flame: {\n translate: [127, 120] as const,\n scale: 4.4,\n d: \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n },\n} as const;\n","import React from \"react\";\n\nimport type { BrandId } from \"../marks/ProductLogo\";\nimport { KrizakaMark } from \"./KrizakaMark\";\nimport type { NativeMarkProps } from \"./mark-motion\";\nimport { OrazakaMark } from \"./OrazakaMark\";\nimport { OrochiaMark } from \"./OrochiaMark\";\n\n/** The mark of a Krizaka brand by id, for React Native — the counterpart of the web `ProductLogo`. */\nexport function ProductMark({ id, ...props }: NativeMarkProps & { id: BrandId }) {\n if (id === \"krizaka\") return <KrizakaMark {...props} />;\n if (id === \"orazaka\") return <OrazakaMark {...props} />;\n return <OrochiaMark {...props} />;\n}\n","import * as React from \"react\";\nimport { Animated, Easing, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { useReducedMotion, useSvgId, useTheme } from \"./theme\";\n\nconst AnimatedCircle = Animated.createAnimatedComponent(Circle);\n\nexport type ProgressProps = {\n /** `bar` (default) or `ring`. */\n variant?: \"bar\" | \"ring\";\n /** sm · md (default) · lg: the bar's thickness or the ring's diameter. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** How far, between 0 and `max`. `null` or absent: indeterminate (a wait of unknown length). */\n value?: number | null;\n /** The value of a full bar. Default 100. */\n max?: number;\n /** The accessible name — passed translated (\"Upload\", \"Raised towards the goal\"). */\n label: string;\n /** The value in words for screen readers (\"$420 of $1,000\") — default: the percentage. */\n valueText?: string;\n /** A ring's centre: an amount, a percentage, an icon. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst BAR = { sm: 4, md: 8, lg: 12 } as const;\nconst RING = { sm: 40, md: 80, lg: 144 } as const;\nconst STROKE = { sm: 12, md: 9, lg: 7 } as const; // in a 100-unit box, as on the web\n\n/**\n * A progress bar or ring in the accent gradient (`accent` → `accent2`): it moves to `value` / `max` when it changes,\n * indeterminate without a value. Still under reduced motion. A `progressbar` with its value for screen readers.\n */\nexport function Progress({ variant = \"bar\", size = \"md\", value, max = 100, label, valueText, children, style }: ProgressProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const id = useSvgId(\"kz-progress-\");\n const known = typeof value === \"number\" && Number.isFinite(value);\n const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;\n const percent = Math.round(ratio * 100);\n\n const [progress] = React.useState(() => new Animated.Value(ratio));\n const [spin] = React.useState(() => new Animated.Value(0));\n const [track, setTrack] = React.useState(0);\n React.useEffect(() => {\n if (reduce) {\n progress.setValue(ratio);\n return;\n }\n const animation = Animated.timing(progress, { toValue: ratio, duration: 700, easing: Easing.out(Easing.cubic), useNativeDriver: false });\n animation.start();\n return () => animation.stop();\n }, [ratio, reduce, progress]);\n React.useEffect(() => {\n if (known || reduce) return;\n const loop = Animated.loop(Animated.timing(spin, { toValue: 1, duration: 1200, easing: Easing.linear, useNativeDriver: true }));\n loop.start();\n return () => {\n loop.stop();\n spin.setValue(0);\n };\n }, [known, reduce, spin]);\n\n const a11y = {\n accessible: true,\n role: \"progressbar\" as const,\n \"aria-label\": label,\n \"aria-valuemin\": known ? 0 : undefined,\n \"aria-valuemax\": known ? max : undefined,\n \"aria-valuenow\": known ? Math.min(max, Math.max(0, value)) : undefined,\n \"aria-valuetext\": known ? (valueText ?? `${percent}%`) : valueText,\n };\n const gradient = (\n <Defs>\n <LinearGradient id={id} x1=\"0\" y1=\"0\" x2=\"1\" y2={variant === \"ring\" ? \"1\" : \"0\"}>\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n );\n\n if (variant === \"ring\") {\n const side = RING[size];\n const stroke = STROKE[size];\n const r = 50 - stroke / 2;\n const circumference = 2 * Math.PI * r;\n const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;\n const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] });\n return (\n <View {...a11y} style={[styles.ring, { width: side, height: side }, style]}>\n <Animated.View style={[StyleSheet.absoluteFill, { transform: [{ rotate: known ? \"-90deg\" : rotate }] }]}>\n <Svg width={side} height={side} viewBox=\"0 0 100 100\">\n {gradient}\n <Circle cx={50} cy={50} r={r} fill=\"none\" stroke={theme.borderDefault} strokeWidth={stroke} />\n <AnimatedCircle\n cx={50}\n cy={50}\n r={r}\n fill=\"none\"\n stroke={`url(#${id})`}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={offset}\n />\n </Svg>\n </Animated.View>\n {children}\n </View>\n );\n }\n\n const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [\"0%\", \"100%\"] }) : \"40%\";\n // Indeterminate: a 40 % segment crosses the track (measured, so the motion runs on the native driver in points).\n const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });\n return (\n <View\n {...a11y}\n onLayout={known ? undefined : (event) => setTrack(event.nativeEvent.layout.width)}\n style={[styles.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style]}\n >\n <Animated.View style={[styles.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }]}>\n <Svg width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\n {gradient}\n <Rect x={0} y={0} width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n ring: { alignItems: \"center\", justifyContent: \"center\" },\n bar: { width: \"100%\", overflow: \"hidden\", borderRadius: 9999 },\n fill: { height: \"100%\", overflow: \"hidden\", borderRadius: 9999 },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SegmentedOption<T extends string> = { value: T; label: string; disabled?: boolean };\n\nexport type SegmentedProps<T extends string> = {\n /** The views, in order; `label` passed translated. */\n options: readonly SegmentedOption<T>[];\n /** The selected view (controlled). */\n value: T;\n /** Called with the view pressed. */\n onValueChange: (value: T) => void;\n /** sm · md (default). */\n size?: \"sm\" | \"md\";\n /** The accessible name of the tab list — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Switches between views of one screen: equal segments on a track, the chosen one raised — the web\n * `Tabs variant=\"segmented\"`. A tab list for screen readers. To filter a list, use `Chip.Group`.\n */\nexport function Segmented<T extends string>({ options, value, onValueChange, size = \"md\", \"aria-label\": label, style }: SegmentedProps<T>) {\n const { theme, radius } = useTheme();\n return (\n <View\n role=\"tablist\"\n aria-label={label}\n style={[styles.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius.md, height: size === \"sm\" ? 32 : 40 }, style]}\n >\n {options.map((option) => {\n const selected = option.value === value;\n return (\n <Pressable\n key={option.value}\n role=\"tab\"\n aria-selected={selected}\n aria-disabled={option.disabled}\n disabled={option.disabled}\n onPress={() => {\n if (!selected) onValueChange(option.value);\n }}\n style={[\n styles.segment,\n { borderRadius: radius.sm },\n selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,\n option.disabled ? styles.disabled : null,\n ]}\n >\n <Text numberOfLines={1} style={[styles.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === \"sm\" ? 12 : 13 }]}>\n {option.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n label: { fontWeight: \"600\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { Animated, type DimensionValue, type StyleProp, type ViewStyle } from \"react-native\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type SkeletonProps = {\n /** `text` (a line), `circle` (an avatar), `rect` (a media, a card). */\n shape?: \"text\" | \"circle\" | \"rect\";\n /** Points or a percentage; default: the shape's. */\n width?: DimensionValue;\n /** Points or a percentage; default: the shape's. */\n height?: DimensionValue;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n /** The id the tests find it by. */\n testID?: string;\n};\n\nconst SHAPE = {\n text: { width: \"100%\", height: 12, radius: 4 },\n circle: { width: 40, height: 40, radius: 9999 },\n rect: { width: \"100%\", height: 96, radius: 12 },\n} as const;\n\n/** A pulsing placeholder the size of what is loading — hidden from screen readers; still when the system reduces motion. */\nexport function Skeleton({ shape = \"text\", width, height, style, testID }: SkeletonProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [reduce, opacity]);\n const s = SHAPE[shape];\n const side = shape === \"circle\" ? (width ?? height ?? s.width) : undefined;\n return (\n <Animated.View\n testID={testID}\n aria-hidden\n style={[\n { width: side ?? width ?? s.width, height: side ?? height ?? s.height, borderRadius: s.radius, backgroundColor: theme.surface3, opacity },\n style,\n ]}\n />\n );\n}\n","import * as React from \"react\";\nimport { ActivityIndicator, type ActivityIndicatorProps } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SpinnerProps = Omit<ActivityIndicatorProps, \"size\" | \"color\"> & {\n /** The accessible name of the wait, e.g. \"Loading\" — passed translated. */\n label: string;\n /** sm · md (default) · lg. */\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\n/** An indeterminate wait: the platform's activity indicator in the accent, named by `label`. */\nexport function Spinner({ label, size = \"md\", ...props }: SpinnerProps) {\n const { theme } = useTheme();\n return (\n <ActivityIndicator\n accessible\n role=\"progressbar\"\n aria-label={label}\n {...props}\n size={size === \"lg\" ? \"large\" : \"small\"}\n color={theme.accent}\n style={[size === \"sm\" ? { transform: [{ scale: 0.75 }] } : null, props.style]}\n />\n );\n}\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Pressable, StyleSheet, Text, View } from \"react-native\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ToastTone = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n\nexport type ToastOptions = {\n /** Replaces a toast with the same id (a notification shown once). */\n id?: string;\n description?: string;\n tone?: ToastTone;\n /** A decorative icon before the text. */\n icon?: React.ReactNode;\n /** Milliseconds on screen; `Infinity` keeps it until dismissed. Default: the Toaster's `duration`. */\n duration?: number;\n /** Pressing the toast (opening what it is about); it is then dismissed. */\n onPress?: () => void;\n /** A button inside the toast; it is then dismissed. */\n action?: { label: string; onPress: () => void };\n /** Called once the toast leaves, whatever the reason. */\n onDismiss?: () => void;\n};\n\nexport type ToastItem = ToastOptions & { id: string; title: string };\n\n// One queue for the app, outside React: `toast()` can be called from anywhere (a stream handler, a mutation).\nlet items: readonly ToastItem[] = [];\nconst listeners = new Set<() => void>();\nlet counter = 0;\nconst emit = () => listeners.forEach((listener) => listener());\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\nconst snapshot = () => items;\n\nfunction show(title: string, options: ToastOptions = {}): string {\n const id = options.id ?? `kz-toast-${++counter}`;\n const item: ToastItem = { ...options, id, title };\n items = items.some((t) => t.id === id) ? items.map((t) => (t.id === id ? item : t)) : [...items, item];\n emit();\n return id;\n}\n\nfunction dismiss(id?: string) {\n const gone = items.filter((t) => id === undefined || t.id === id);\n if (gone.length === 0) return;\n items = id === undefined ? [] : items.filter((t) => t.id !== id);\n emit();\n gone.forEach((t) => t.onDismiss?.());\n}\n\nconst tone = (name: ToastTone) => (title: string, options?: Omit<ToastOptions, \"tone\">) => show(title, { ...options, tone: name });\n\n/** `toast(title, options)`, `toast.success/warning/error/info(…)`, `toast.dismiss(id?)` — the web `toast`'s names. */\nexport const toast = Object.assign(show, {\n success: tone(\"success\"),\n warning: tone(\"warning\"),\n error: tone(\"error\"),\n info: tone(\"info\"),\n dismiss,\n});\n\nexport type ToasterProps = {\n /** The accessible name of each toast's close button — passed translated. */\n closeLabel: string;\n /** Where the toasts stack: `top` (default) or `bottom`. */\n position?: \"top\" | \"bottom\";\n /** Distance from the edge, e.g. the safe-area inset + a margin (no safe-area dependency here). */\n offset?: number;\n /** Default milliseconds on screen. */\n duration?: number;\n /** At most this many on screen; the oldest leave first. */\n max?: number;\n};\n\nfunction ToastView({ item, closeLabel, duration }: { item: ToastItem; closeLabel: string; duration: number }) {\n const { theme, radius } = useTheme();\n const reduce = useReducedMotion();\n const [enter] = React.useState(() => new Animated.Value(reduce ? 1 : 0));\n React.useEffect(() => {\n if (reduce) enter.setValue(1);\n else Animated.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();\n }, [enter, reduce]);\n React.useEffect(() => {\n AccessibilityInfo.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);\n }, [item.title, item.description]);\n const ms = item.duration ?? duration;\n React.useEffect(() => {\n if (!Number.isFinite(ms)) return;\n const timer = setTimeout(() => dismiss(item.id), ms);\n return () => clearTimeout(timer);\n }, [item.id, ms]);\n const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? \"default\"];\n // The text (with its icon) is the pressable part; the action and the close button sit beside it, never inside.\n const text = (\n <>\n {item.icon ? <View aria-hidden>{item.icon}</View> : null}\n <View style={styles.content}>\n <Txt variant=\"label\" numberOfLines={2}>\n {item.title}\n </Txt>\n {item.description ? (\n <Txt variant=\"caption\" tone=\"secondary\" numberOfLines={3}>\n {item.description}\n </Txt>\n ) : null}\n </View>\n </>\n );\n const body = (\n <>\n {item.onPress ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n item.onPress?.();\n dismiss(item.id);\n }}\n style={({ pressed }) => [styles.main, { opacity: pressed ? 0.8 : 1 }]}\n >\n {text}\n </Pressable>\n ) : (\n <View style={styles.main}>{text}</View>\n )}\n {item.action ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n item.action?.onPress();\n dismiss(item.id);\n }}\n style={[styles.action, { backgroundColor: theme.accent, borderRadius: radius.sm }]}\n >\n <Text style={[styles.actionLabel, { color: theme.onAccent }]}>{item.action.label}</Text>\n </Pressable>\n ) : null}\n <Pressable role=\"button\" aria-label={closeLabel} hitSlop={10} onPress={() => dismiss(item.id)} style={styles.close}>\n <Text style={[styles.cross, { color: theme.textSecondary }]}>×</Text>\n </Pressable>\n </>\n );\n const frame = [\n styles.toast,\n { backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius.lg, shadowColor: theme.scrimStrong },\n ];\n // A slide only, never a fade: the text is legible (and its contrast measurable) from the first frame.\n const motion = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };\n return (\n <Animated.View aria-live=\"polite\" style={motion}>\n <View style={frame}>{body}</View>\n </Animated.View>\n );\n}\n\n/** Mount once, at the root (inside `ThemeProvider`). Then call `toast()` from anywhere. */\nexport function Toaster({ closeLabel, position = \"top\", offset = 12, duration = 6000, max = 3 }: ToasterProps) {\n const all = React.useSyncExternalStore(subscribe, snapshot, snapshot);\n const shown = all.slice(-max);\n if (shown.length === 0) return null;\n return (\n <View pointerEvents=\"box-none\" style={[styles.stack, position === \"top\" ? { top: offset } : { bottom: offset }]}>\n {(position === \"top\" ? shown : [...shown].reverse()).map((item) => (\n <ToastView key={item.id} item={item} closeLabel={closeLabel} duration={duration} />\n ))}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n stack: { position: \"absolute\", left: 12, right: 12, gap: 8, zIndex: 100 },\n toast: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n padding: 12,\n borderWidth: StyleSheet.hairlineWidth,\n borderLeftWidth: 4,\n shadowOpacity: 0.3,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 8 },\n elevation: 8,\n },\n main: { flex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n content: { flex: 1, gap: 2 },\n action: { paddingHorizontal: 12, paddingVertical: 6 },\n actionLabel: { fontSize: 12, fontWeight: \"700\" },\n close: { width: 28, height: 28, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 18, lineHeight: 20, fontWeight: \"700\" },\n});\n"],"mappings":"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","names":["React","themes","radius","motion","jsx","items","React","StyleSheet","Text","jsx","jsxs","tone","styles","Text","StyleSheet","React","StyleSheet","View","StyleSheet","Text","jsx","tone","Text","styles","StyleSheet","jsx","jsxs","look","radius","StyleSheet","styles","View","Image","Pressable","StyleSheet","View","jsx","tone","radius","styles","View","Pressable","StyleSheet","Image","PADDING","React","Pressable","StyleSheet","Text","View","jsx","jsxs","Text","styles","radius","on","_r","disabled","_s","style","children","rest","View","Pressable","StyleSheet","React","Animated","StyleSheet","Text","jsx","jsxs","Animated","styles","Text","StyleSheet","StyleSheet","View","jsx","jsxs","View","styles","StyleSheet","View","Svg","Defs","LinearGradient","Stop","useEffect","useState","AccessibilityInfo","Animated","Fragment","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Path","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","Group","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Group","Path","jsx","React","Animated","Easing","StyleSheet","View","Svg","Circle","Defs","LinearGradient","Rect","Stop","jsx","jsxs","Animated","Circle","Easing","Defs","LinearGradient","Stop","View","styles","StyleSheet","Svg","Rect","Pressable","StyleSheet","Text","View","jsx","radius","View","styles","Pressable","Text","StyleSheet","React","Animated","jsx","Animated","ActivityIndicator","jsx","ActivityIndicator","React","AccessibilityInfo","Animated","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","listeners","subscribe","radius","Animated","AccessibilityInfo","timer","View","styles","Pressable","Text","motion","StyleSheet"]}
1
+ {"version":3,"sources":["../src/countdown/core.ts","../src/native/avatar.tsx","../../tokens/dist/native.js","../src/native/theme.tsx","../src/native/badge.tsx","../src/native/button.tsx","../src/native/txt.tsx","../src/native/card.tsx","../src/native/chip.tsx","../src/native/countdown.tsx","../src/native/empty-state.tsx","../src/native/KrizakaMark.tsx","../src/marks/krizaka-geometry.ts","../src/native/mark-motion.ts","../src/native/OrazakaMark.tsx","../src/marks/orazaka-geometry.ts","../src/native/OrochiaMark.tsx","../src/marks/orochia-geometry.ts","../src/native/ProductMark.tsx","../src/native/progress.tsx","../src/native/segmented.tsx","../src/native/skeleton.tsx","../src/native/spinner.tsx","../src/native/toast.tsx"],"sourcesContent":["// The countdown's clock, shared by the web (`@krizaka/ui/countdown`) and native renders: no DOM import.\nimport { useSyncExternalStore } from \"react\";\n\n// One clock for every countdown on the page: it ticks each second while someone listens.\nconst listeners = new Set<() => void>();\nlet timer: ReturnType<typeof setInterval> | null = null;\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n timer ??= setInterval(() => listeners.forEach((l) => l()), 1000);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n\nconst nowSecond = () => Math.floor(Date.now() / 1000) * 1000;\n\n/** Milliseconds left until `target` (never negative), ticking every second. `skewMs` = server clock − this clock. */\nexport function useCountdown(target: Date | string | number, skewMs = 0): number {\n const now = useSyncExternalStore(subscribe, nowSecond, nowSecond);\n return Math.max(0, new Date(target).getTime() - (now + skewMs));\n}\n\n/** Splits a duration into days, hours, minutes and seconds. */\nexport function splitDuration(ms: number): { d: number; h: number; m: number; s: number } {\n const total = Math.max(0, Math.floor(ms / 1000));\n return { d: Math.floor(total / 86400), h: Math.floor((total % 86400) / 3600), m: Math.floor((total % 3600) / 60), s: total % 60 };\n}\n\n/** The short unit labels, passed translated (e.g. `{ d: \"d\", h: \"h\", m: \"m\", s: \"s\" }`). */\nexport type CountdownUnits = { d: string; h: string; m: string; s: string };\n\n/** The three segments shown: days, hours, minutes when there are days; else hours, minutes, seconds. */\nexport function countdownParts(ms: number, units: CountdownUnits): [number, string][] {\n const { d, h, m, s } = splitDuration(ms);\n return d > 0 ? [[d, units.d], [h, units.h], [m, units.m]] : [[h, units.h], [m, units.m], [s, units.s]];\n}\n","import * as React from \"react\";\nimport { Image, StyleSheet, Text, View, type ViewProps } from \"react-native\";\nimport { SvgUri } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nconst SIDE: Record<AvatarSize, number> = { xs: 20, sm: 32, md: 40, lg: 56, xl: 80 };\n\nexport type AvatarProps = Omit<ViewProps, \"children\"> & {\n /**\n * The image URI; absent, `null` or failing: the fallback. An SVG (`….svg`, `data:image/svg+xml,…` — generated\n * avatars) is drawn by react-native-svg, which React Native's `Image` cannot do; `svg` forces it for a URI without\n * the extension.\n */\n src?: string | null;\n /** Draw `src` as an SVG even when its URI does not say so (an avatar service that answers `image/svg+xml`). */\n svg?: boolean;\n /** The person's name: the image's accessible name and the source of the default initial. */\n alt?: string;\n /** Shown while there is no image or when it fails: default, the first letter of `alt`. */\n fallback?: React.ReactNode;\n /** A size of the scale, or points. */\n size?: AvatarSize | number;\n};\n\n/** A round picture; the initial (or `fallback`) when there is none or it fails to load. */\n/** `….svg` (query and fragment ignored) or an SVG data URI. */\nexport function isSvgUri(uri: string): boolean {\n return /^data:image\\/svg\\+xml[;,]/i.test(uri) || /\\.svg(?:[?#]|$)/i.test(uri);\n}\n\nexport function AvatarRoot({ src, svg, alt = \"\", fallback, size = \"md\", style, ...props }: AvatarProps) {\n const { theme } = useTheme();\n // The source that failed to load: a new `src` gets its chance.\n const [failedSrc, setFailedSrc] = React.useState<string | null>(null);\n const failed = Boolean(src) && failedSrc === src;\n const side = typeof size === \"number\" ? size : SIDE[size];\n const initial = alt.trim().charAt(0).toUpperCase();\n const content = fallback ?? initial;\n return (\n <View\n accessible={Boolean(alt)}\n role={alt ? \"img\" : undefined}\n aria-label={alt || undefined}\n {...props}\n style={[styles.root, { width: side, height: side, borderRadius: side / 2, backgroundColor: theme.surface3 }, style]}\n >\n {src && !failed && (svg || isSvgUri(src)) ? (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"none\">\n <SvgUri testID={props.testID ? `${props.testID}.svg` : undefined} uri={src} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid slice\" onError={() => setFailedSrc(src)} />\n </View>\n ) : src && !failed ? (\n <Image testID={props.testID ? `${props.testID}.image` : undefined} source={{ uri: src }} onError={() => setFailedSrc(src)} resizeMode=\"cover\" style={StyleSheet.absoluteFill} />\n ) : typeof content === \"string\" ? (\n <Text style={[styles.initial, { color: theme.textSecondary, fontSize: Math.max(9, Math.round(side * 0.4)) }]}>{content}</Text>\n ) : (\n content\n )}\n </View>\n );\n}\n\nexport type AvatarGroupProps = ViewProps & {\n /** How many avatars are shown; the rest becomes a `+n` avatar. */\n max?: number;\n /** The size of the avatars (and of the `+n` one). */\n size?: AvatarSize | number;\n};\n\n/** Overlapping avatars; past `max`, a `+n` avatar counts the rest. */\nexport function AvatarGroup({ max, size = \"md\", style, children, ...props }: AvatarGroupProps) {\n const { theme } = useTheme();\n const items = React.Children.toArray(children);\n const shown = max === undefined ? items : items.slice(0, max);\n const rest = items.length - shown.length;\n const side = typeof size === \"number\" ? size : SIDE[size];\n const ring = { borderWidth: 2, borderColor: theme.surface0, marginLeft: -side / 5 };\n return (\n <View {...props} style={[styles.group, { paddingLeft: side / 5 }, style]}>\n {shown.map((child, i) => (\n <View key={i} style={[ring, { borderRadius: side }]}>\n {React.isValidElement<AvatarProps>(child) ? React.cloneElement(child, { size }) : child}\n </View>\n ))}\n {rest > 0 ? (\n <View style={[ring, { borderRadius: side }]}>\n <AvatarRoot size={size} fallback={`+${rest}`} />\n </View>\n ) : null}\n </View>\n );\n}\n\n/** `Avatar` (an image with a fallback) and `Avatar.Group`. */\nexport const Avatar = Object.assign(AvatarRoot, { Group: AvatarGroup });\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\", alignItems: \"center\", justifyContent: \"center\" },\n initial: { fontWeight: \"700\" },\n group: { flexDirection: \"row\", alignItems: \"center\" },\n});\n","// @krizaka/tokens — GÉNÉRÉ depuis src/tokens/*.tokens.json par scripts/build.mjs : ne pas éditer.\n\n/** Colour roles per theme, resolved for React Native (`#rrggbb`, `rgba()` when translucent). */\nexport const themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#0c0c0e\",\n \"surface1\": \"#161618\",\n \"surface2\": \"#1f1f23\",\n \"surface3\": \"#2a2a2d\",\n \"media\": \"#1b1b1d\",\n \"borderSubtle\": \"rgba(255,255,255,0.06)\",\n \"borderDefault\": \"rgba(255,255,255,0.1)\",\n \"borderStrong\": \"rgba(255,255,255,0.16)\",\n \"textPrimary\": \"#f5f5f5\",\n \"textSecondary\": \"#a0a0a7\",\n \"textMuted\": \"#73737d\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\",\n \"success\": \"#10b77f\",\n \"successText\": \"#36d399\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"surface0\": \"#fafafa\",\n \"surface1\": \"#ffffff\",\n \"surface2\": \"#f1f1f3\",\n \"surface3\": \"#e4e4e7\",\n \"media\": \"#e9e9ec\",\n \"borderSubtle\": \"rgba(0,0,0,0.06)\",\n \"borderDefault\": \"rgba(0,0,0,0.1)\",\n \"borderStrong\": \"rgba(0,0,0,0.16)\",\n \"textPrimary\": \"#18181b\",\n \"textSecondary\": \"#64646d\",\n \"textMuted\": \"#808089\",\n \"textOnMedia\": \"#ffffff\",\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\",\n \"success\": \"#10b77f\",\n \"successText\": \"#0a714e\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"scrim\": \"rgba(0,0,0,0.6)\",\n \"scrimStrong\": \"rgba(0,0,0,0.8)\",\n \"overlay\": \"rgba(0,0,0,0.7)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"full\": 9999\n});\n\n/** Font families: the first family of each web stack (React Native takes a single name). */\nexport const typography = /* @__PURE__ */ Object.freeze({\n \"sans\": \"Inter\",\n \"display\": \"Inter\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/** Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`). */\nexport const motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16,1,0.3,1]) });\n\n/** The brand themes as ThemeProvider overrides (`overrides={brands.orazaka}`): the accent family per theme. */\nexport const brands = /* @__PURE__ */ Object.freeze({\n \"krizaka\": {\n \"dark\": {\n \"accent\": \"#196df5\",\n \"accentHover\": \"#0e5bd8\",\n \"accentSoft\": \"rgba(25,109,245,0.1)\",\n \"accentText\": \"#629cf8\",\n \"accent2\": \"#196df5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#196df5\",\n \"info\": \"#196df5\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0e1525\",\n \"brandGradientVia\": \"#0e0f16\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#0a64f5\",\n \"accentHover\": \"#0d55c9\",\n \"accentSoft\": \"rgba(10,100,245,0.08)\",\n \"accentText\": \"#0954ce\",\n \"accent2\": \"#0a64f5\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#0a64f5\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#dcebfe\",\n \"brandGradientVia\": \"#f3f6fc\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orazaka\": {\n \"dark\": {\n \"accent\": \"#f67e23\",\n \"accentHover\": \"#f79245\",\n \"accentSoft\": \"rgba(246,126,35,0.12)\",\n \"accentText\": \"#f78c3b\",\n \"accent2\": \"#f59e0b\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#f67e23\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#28170b\",\n \"brandGradientVia\": \"#17130c\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#b45309\",\n \"accentHover\": \"#964608\",\n \"accentSoft\": \"rgba(180,83,9,0.08)\",\n \"accentText\": \"#9b4808\",\n \"accent2\": \"#a45904\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#b45309\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#ffebd6\",\n \"brandGradientVia\": \"#fdf7ed\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"orochia\": {\n \"dark\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(139,92,246,0.12)\",\n \"accentText\": \"#a78bfa\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#a78bfa\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#a78bfa\",\n \"brandGradientFrom\": \"#1a0e2a\",\n \"brandGradientVia\": \"#1c0d17\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#7c3aed\",\n \"accentHover\": \"#6d28d9\",\n \"accentSoft\": \"rgba(124,58,237,0.08)\",\n \"accentText\": \"#6d28d9\",\n \"accent2\": \"#db2777\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#7c3aed\",\n \"info\": \"#7c3aed\",\n \"infoText\": \"#6d28d9\",\n \"brandGradientFrom\": \"#efe7fe\",\n \"brandGradientVia\": \"#fdedf5\",\n \"brandGradientTo\": \"#fafafa\"\n }\n }\n});\n/** The marks' emblem gradients: [offset, #rrggbb] stops, the same in both themes. */\nexport const marks = /* @__PURE__ */ Object.freeze({\n \"krizaka\": [\n [\n \"0%\",\n \"#196df5\"\n ],\n [\n \"100%\",\n \"#629cf8\"\n ]\n ],\n \"orazaka\": [\n [\n \"0%\",\n \"#b45309\"\n ],\n [\n \"100%\",\n \"#dc6509\"\n ]\n ],\n \"orochia\": [\n [\n \"0%\",\n \"#7c3aed\"\n ],\n [\n \"55%\",\n \"#d946ef\"\n ],\n [\n \"100%\",\n \"#f472b6\"\n ]\n ]\n});\n","// The native theme: the @krizaka/tokens roles (dark, light), a product's overrides on top, the mode chosen by the app\n// or followed from the system. Same names as the web `./theme` (`mode`, `setMode`, `ThemeProvider`, `useTheme`).\nimport { motion as tokenMotion, radius as tokenRadius, themes as tokenThemes } from \"@krizaka/tokens/native\";\nimport * as React from \"react\";\nimport { AccessibilityInfo, useColorScheme } from \"react-native\";\n\n// The token values are inlined in dist/native.js (no dependency for the app); their types are spelled out here so the\n// declarations stand alone. theme.test.tsx checks that they match @krizaka/tokens/native both ways.\nexport type ThemeName = \"dark\" | \"light\";\n\n/** The colour roles of one theme (the @krizaka/tokens roles). */\nexport type Theme = {\n readonly surface0: string;\n readonly surface1: string;\n readonly surface2: string;\n readonly surface3: string;\n readonly media: string;\n readonly borderSubtle: string;\n readonly borderDefault: string;\n readonly borderStrong: string;\n readonly textPrimary: string;\n readonly textSecondary: string;\n readonly textMuted: string;\n readonly textOnMedia: string;\n readonly accent: string;\n readonly accentHover: string;\n readonly accentSoft: string;\n readonly accentText: string;\n readonly accent2: string;\n readonly onAccent: string;\n readonly ring: string;\n readonly brandGradientFrom: string;\n readonly brandGradientVia: string;\n readonly brandGradientTo: string;\n readonly success: string;\n readonly successText: string;\n readonly warning: string;\n readonly warningText: string;\n readonly danger: string;\n readonly dangerText: string;\n readonly info: string;\n readonly infoText: string;\n readonly scrim: string;\n readonly scrimStrong: string;\n readonly overlay: string;\n};\n\n/** Corner radii, in points. */\nexport type Radius = { readonly sm: number; readonly md: number; readonly lg: number; readonly xl: number; readonly full: number };\n/** Motion: the cubic-bezier control points of the platform's ease (`Easing.bezier(...motion.ease)`). */\nexport type Motion = { readonly ease: readonly [number, number, number, number] };\n\nconst themes: Readonly<Record<ThemeName, Theme>> = tokenThemes;\nconst radius: Radius = tokenRadius;\nconst motion: Motion = tokenMotion;\n\nexport type Mode = \"dark\" | \"light\" | \"system\";\n\n/** A product's colour roles per theme (e.g. `nativeTheme` of a product design system): only the roles it changes. */\nexport type ThemeOverrides = { readonly dark?: Partial<Theme>; readonly light?: Partial<Theme> };\n\n/** Font families, when the app has loaded them (`expo-font`…). Absent: the system font. */\nexport type ThemeFonts = { readonly sans?: string; readonly display?: string; readonly mono?: string };\n\nexport type ThemeContextValue = {\n /** The chosen mode: dark, light or follow the system. */\n mode: Mode;\n setMode: (mode: Mode) => void;\n /** The resolved scheme: what `mode` gives on this device right now. */\n scheme: ThemeName;\n /** The colour roles of the resolved scheme, overrides applied. */\n theme: Theme;\n radius: Radius;\n motion: Motion;\n fonts: ThemeFonts;\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null);\n\nfunction resolve(mode: Mode, system: string | null | undefined): ThemeName {\n if (mode === \"system\") return system === \"light\" ? \"light\" : \"dark\";\n return mode;\n}\n\nexport type ThemeProviderProps = {\n children: React.ReactNode;\n /** Controlled mode (with `onModeChange`). */\n mode?: Mode;\n /** Uncontrolled: the mode before the user picks one. Default: follow the system. */\n defaultMode?: Mode;\n /** Every change of mode — the app persists it (no storage dependency here). */\n onModeChange?: (mode: Mode) => void;\n /** The product's roles over the platform's, per theme. */\n overrides?: ThemeOverrides;\n /** Font families the app has loaded (`expo-font`…); absent: the system font. */\n fonts?: ThemeFonts;\n};\n\n/** Once, at the root of the app. Without it, `useTheme()` follows the system with the platform's roles. */\nexport function ThemeProvider({ children, mode: controlled, defaultMode = \"system\", onModeChange, overrides, fonts }: ThemeProviderProps) {\n const system = useColorScheme();\n const [own, setOwn] = React.useState<Mode>(defaultMode);\n const mode = controlled ?? own;\n const setMode = React.useCallback(\n (next: Mode) => {\n if (controlled === undefined) setOwn(next);\n onModeChange?.(next);\n },\n [controlled, onModeChange],\n );\n const scheme = resolve(mode, system);\n const override = overrides?.[scheme];\n const theme = React.useMemo(() => (override ? { ...themes[scheme], ...override } : themes[scheme]), [scheme, override]);\n const value = React.useMemo<ThemeContextValue>(\n () => ({ mode, setMode, scheme, theme, radius, motion, fonts: fonts ?? {} }),\n [mode, setMode, scheme, theme, fonts],\n );\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nconst noop = () => undefined;\n\n/** The current theme: `{ mode, setMode, scheme, theme, radius, motion, fonts }`. */\nexport function useTheme(): ThemeContextValue {\n const context = React.useContext(ThemeContext);\n const system = useColorScheme();\n if (context) return context;\n const scheme = resolve(\"system\", system);\n return { mode: \"system\", setMode: noop, scheme, theme: themes[scheme], radius, motion, fonts: {} };\n}\n\n/** True while the system asks to reduce motion: every loop and transition of /native stops. */\nexport function useReducedMotion(): boolean {\n const [reduce, setReduce] = React.useState(false);\n React.useEffect(() => {\n let alive = true;\n void AccessibilityInfo.isReduceMotionEnabled().then((value) => {\n if (alive) setReduce(value);\n });\n const subscription = AccessibilityInfo.addEventListener(\"reduceMotionChanged\", setReduce);\n return () => {\n alive = false;\n subscription.remove();\n };\n }, []);\n return reduce;\n}\n\n/** A role at a lower opacity (`#rrggbb` → `rgba()`): the soft tints of the status tones. Other forms pass through. */\nexport function alpha(color: string, opacity: number): string {\n const hex = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (!hex) return color;\n const [r, g, b] = hex.slice(1).map((part) => parseInt(part, 16));\n return `rgba(${r},${g},${b},${opacity})`;\n}\n\n/** An id usable in an SVG `url(#…)` reference, unique per instance. */\nexport function useSvgId(prefix: string): string {\n return `${prefix}${React.useId().replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n}\n","import * as React from \"react\";\nimport { Animated, StyleSheet, Text, type ViewProps } from \"react-native\";\n\nimport { alpha, type Theme, useReducedMotion, useTheme } from \"./theme\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"scrim\";\n\ntype Look = { bg: string; fg: string; border: string; dot: string };\n\n// As on the web: the status tones are soft (a tint, a coloured dot); the text stays a text role.\nfunction look(tone: BadgeTone, t: Theme): Look {\n switch (tone) {\n case \"accent\":\n return { bg: t.accentSoft, fg: t.textPrimary, border: alpha(t.accent, 0.4), dot: t.accent };\n case \"success\":\n case \"warning\":\n case \"danger\":\n return { bg: alpha(t[tone], 0.15), fg: t.textPrimary, border: alpha(t[tone], 0.4), dot: t[tone] };\n case \"scrim\":\n return { bg: t.scrim, fg: t.textOnMedia, border: \"transparent\", dot: t.textOnMedia };\n default:\n return { bg: t.surface3, fg: t.textSecondary, border: \"transparent\", dot: t.textSecondary };\n }\n}\n\nexport type BadgeProps = ViewProps & {\n /** neutral (default) · accent · success · warning · danger · scrim (on a media). */\n tone?: BadgeTone;\n /** sm (default) · md. */\n size?: \"sm\" | \"md\";\n /** A small dot before the text, in the tone's colour. */\n dot?: boolean;\n /** The dot breathes (still when the system reduces motion). */\n pulse?: boolean;\n children?: React.ReactNode;\n};\n\n/** A short status in capitals: a tone, a size, an optional (pulsing) dot. */\nexport function Badge({ tone = \"neutral\", size = \"sm\", dot, pulse, style, children, ...props }: BadgeProps) {\n const { theme } = useTheme();\n const colors = look(tone, theme);\n const reduce = useReducedMotion();\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (!dot || !pulse || reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.35, duration: 800, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 800, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [dot, pulse, reduce, opacity]);\n return (\n <Animated.View\n {...props}\n style={[styles.root, size === \"md\" ? styles.md : styles.sm, { backgroundColor: colors.bg, borderColor: colors.border }, style]}\n >\n {dot ? <Animated.View aria-hidden style={[styles.dot, { backgroundColor: colors.dot, opacity }]} /> : null}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text style={[styles.text, { color: colors.fg, fontSize: size === \"md\" ? 11 : 10 }]}>{children}</Text>\n ) : (\n children\n )}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"center\", alignSelf: \"flex-start\", gap: 4, borderRadius: 9999, borderWidth: 1 },\n sm: { paddingHorizontal: 8, paddingVertical: 2 },\n md: { paddingHorizontal: 10, paddingVertical: 4 },\n dot: { width: 6, height: 6, borderRadius: 3 },\n text: { fontWeight: \"700\", textTransform: \"uppercase\", letterSpacing: 0.8 },\n});\n","import * as React from \"react\";\nimport { ActivityIndicator, Pressable, type PressableProps, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { alpha, type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ButtonVariant = \"primary\" | \"gradient\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ntype Look = { bg: string; fg: string; border: string; gradient?: readonly [string, string] };\n\n/** The same six looks as the web `buttonVariants`, from the theme's roles. */\nfunction look(variant: ButtonVariant, t: Theme): Look {\n switch (variant) {\n case \"primary\":\n return { bg: t.accent, fg: t.onAccent, border: t.accent };\n case \"gradient\":\n // The brand's signature: accent → accent-2, left to right; on-accent reads on both stops (tested in tokens).\n return { bg: t.accent, fg: t.onAccent, border: \"transparent\", gradient: [t.accent, t.accent2] };\n case \"outline\":\n return { bg: \"transparent\", fg: t.textPrimary, border: t.borderDefault };\n case \"ghost\":\n return { bg: \"transparent\", fg: t.textSecondary, border: \"transparent\" };\n case \"danger\":\n // As on the web: the border and the tint carry the danger, the label stays a text role (legible in light).\n return { bg: alpha(t.danger, 0.1), fg: t.textPrimary, border: alpha(t.danger, 0.5) };\n default:\n return { bg: t.surface2, fg: t.textPrimary, border: t.borderDefault };\n }\n}\n\nconst HEIGHT: Record<ButtonSize, number> = { sm: 32, md: 40, lg: 48 };\nconst PADDING: Record<ButtonSize, number> = { sm: 12, md: 16, lg: 24 };\n\ntype BaseProps = Omit<PressableProps, \"children\" | \"style\"> & {\n /** The look: `primary`, `gradient` (accent → accent-2), `secondary` (default), `outline`, `ghost`, `danger` — as on the web. */\n variant?: ButtonVariant;\n /** sm · md (default) · lg: 32, 40 or 48 points high. */\n size?: ButtonSize;\n /** `rounded` (default) or `pill`. */\n shape?: \"rounded\" | \"pill\";\n /** Disables, shows a spinner in place of the icon and says busy. */\n loading?: boolean;\n /** Styles merged last, over the button's frame. */\n style?: StyleProp<ViewStyle>;\n};\n\nexport type ButtonProps = BaseProps & {\n /** The visible text — passed translated. It is also the accessible name. */\n label: string;\n /** Before the label (an icon component from the app's icon set). */\n icon?: React.ReactNode;\n};\n\nfunction useButton({ variant = \"secondary\", size = \"md\", shape = \"rounded\", loading, disabled }: BaseProps) {\n const { theme, radius } = useTheme();\n const colors = look(variant, theme);\n const inactive = Boolean(disabled || loading);\n const frame = (pressed: boolean): ViewStyle => ({\n height: HEIGHT[size],\n borderRadius: shape === \"pill\" ? radius.full : radius.sm,\n backgroundColor: colors.bg,\n borderColor: colors.border,\n opacity: inactive ? 0.4 : pressed ? 0.85 : 1,\n transform: [{ scale: pressed ? 0.98 : 1 }],\n });\n return { colors, inactive, frame };\n}\n\n/** The gradient fill behind the content (react-native-svg: no native gradient in React Native). */\nfunction Fill({ colors, id }: { colors: Look; id: string }) {\n if (!colors.gradient) return null;\n return (\n <Svg aria-hidden pointerEvents=\"none\" style={StyleSheet.absoluteFill} width=\"100%\" height=\"100%\">\n <Defs>\n <LinearGradient id={id} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <Stop offset=\"0\" stopColor={colors.gradient[0]} />\n <Stop offset=\"1\" stopColor={colors.gradient[1]} />\n </LinearGradient>\n </Defs>\n <Rect width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </Svg>\n );\n}\n\n/** The action. `variant` × `size` × `shape`, `loading`, `icon`; the haptics, if any, belong to the app's `onPress`. */\nexport function Button({ label, icon, variant, size = \"md\", shape, loading = false, disabled, style, ...props }: ButtonProps) {\n const { colors, inactive, frame } = useButton({ variant, size, shape, loading, disabled });\n const gradientId = `kz-button-${React.useId().replace(/:/g, \"\")}`;\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={inactive}\n aria-busy={loading}\n {...props}\n disabled={inactive}\n style={({ pressed }) => [styles.base, { paddingHorizontal: PADDING[size] }, frame(pressed), style]}\n >\n <Fill colors={colors} id={gradientId} />\n <View style={styles.row}>\n {loading ? <ActivityIndicator aria-hidden size=\"small\" color={colors.fg} /> : icon}\n <Txt variant=\"label\" numberOfLines={1} style={{ color: colors.fg, fontSize: size === \"sm\" ? 12 : 14 }}>\n {label}\n </Txt>\n </View>\n </Pressable>\n );\n}\n\nexport type IconButtonProps = BaseProps & {\n /** The accessible name — required, passed translated. */\n label: string;\n /** The icon (from the app's icon set); the button shows nothing else. */\n icon: React.ReactNode;\n};\n\n/** A square button holding only an icon: `label` is required, it is its accessible name. */\nexport function IconButton({ label, icon, variant, size = \"md\", shape, loading = false, disabled, style, ...props }: IconButtonProps) {\n const { colors, inactive, frame } = useButton({ variant, size, shape, loading, disabled });\n const gradientId = `kz-button-${React.useId().replace(/:/g, \"\")}`;\n const side = HEIGHT[size];\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={inactive}\n aria-busy={loading}\n hitSlop={side < 44 ? (44 - side) / 2 : undefined}\n {...props}\n disabled={inactive}\n style={({ pressed }) => [styles.base, frame(pressed), { width: side }, style]}\n >\n <Fill colors={colors} id={gradientId} />\n {loading ? <ActivityIndicator aria-hidden size=\"small\" color={colors.fg} /> : icon}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n base: { alignItems: \"center\", justifyContent: \"center\", borderWidth: 1, overflow: \"hidden\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n});\n","import * as React from \"react\";\nimport { StyleSheet, Text, type TextProps } from \"react-native\";\n\nimport { type Theme, useTheme } from \"./theme\";\n\nexport type TxtVariant = \"display\" | \"title\" | \"body\" | \"caption\" | \"label\" | \"mono\";\nexport type TxtTone = \"text\" | \"secondary\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"onAccent\" | \"onMedia\";\n\nconst TONE: Record<TxtTone, keyof Theme> = {\n text: \"textPrimary\",\n secondary: \"textSecondary\",\n muted: \"textMuted\",\n accent: \"accentText\",\n success: \"successText\",\n warning: \"warningText\",\n danger: \"dangerText\",\n onAccent: \"onAccent\",\n onMedia: \"textOnMedia\",\n};\n\nexport type TxtProps = TextProps & {\n /** The type scale: display · title · body (default) · caption · label · mono (tabular figures). */\n variant?: TxtVariant;\n /** A text role of the theme (default `text`). */\n tone?: TxtTone;\n};\n\n/** Text in the platform's scale, coloured by a role of the current theme. `title` and `display` are headers for screen readers. */\nexport function Txt({ variant = \"body\", tone = \"text\", style, ...props }: TxtProps) {\n const { theme, fonts } = useTheme();\n const family = variant === \"display\" || variant === \"title\" ? fonts.display : variant === \"mono\" ? fonts.mono : fonts.sans;\n return (\n <Text\n role={variant === \"display\" || variant === \"title\" ? \"heading\" : undefined}\n {...props}\n style={[styles[variant], { color: theme[TONE[tone]] }, family ? { fontFamily: family } : null, style]}\n />\n );\n}\n\nexport const textStyles = StyleSheet.create({\n display: { fontSize: 30, lineHeight: 36, fontWeight: \"900\", letterSpacing: -0.5 },\n title: { fontSize: 18, lineHeight: 24, fontWeight: \"800\" },\n body: { fontSize: 15, lineHeight: 21 },\n caption: { fontSize: 12, lineHeight: 16 },\n label: { fontSize: 14, lineHeight: 18, fontWeight: \"700\" },\n mono: { fontSize: 14, lineHeight: 18, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n});\nconst styles = textStyles;\n","import * as React from \"react\";\nimport { Image, type ImageProps, Pressable, type PressableProps, type StyleProp, StyleSheet, View, type ViewProps, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt, type TxtProps } from \"./txt\";\n\nexport type CardRootProps = ViewProps & {\n /** `default` (the raised surface) or `elevated` (one step higher, with a shadow). */\n tone?: \"default\" | \"elevated\";\n /** The corner radius, from the theme: md · lg · xl (default). */\n radius?: \"md\" | \"lg\" | \"xl\";\n /**\n * Makes the whole card pressable: a button for screen readers, named by its content (an `aria-label`, if any, must\n * contain the visible title).\n */\n onPress?: PressableProps[\"onPress\"];\n};\n\n/** The frame: the theme's surface, a hairline border, rounded corners; `onPress` makes it a pressable card. */\nexport function CardRoot({ tone = \"default\", radius = \"xl\", onPress, style, ...props }: CardRootProps) {\n const { theme, radius: r } = useTheme();\n const frame: StyleProp<ViewStyle> = [\n styles.root,\n {\n backgroundColor: tone === \"elevated\" ? theme.surface2 : theme.surface1,\n borderColor: theme.borderDefault,\n borderRadius: r[radius],\n },\n tone === \"elevated\" ? [styles.shadow, { shadowColor: theme.scrimStrong }] : null,\n ];\n if (!onPress) return <View {...props} style={[frame, style]} />;\n return (\n <Pressable\n role=\"button\"\n onPress={onPress}\n {...props}\n style={({ pressed }) => [frame, { opacity: pressed ? 0.92 : 1, transform: [{ scale: pressed ? 0.99 : 1 }] }, style]}\n />\n );\n}\n\nconst ASPECT = { video: 16 / 9, square: 1, portrait: 3 / 4 } as const;\n\nexport type CardMediaProps = ViewProps & {\n /** video (default, 16:9) · square · portrait, or `auto` (the image's own). */\n aspect?: keyof typeof ASPECT | \"auto\";\n};\n\n/** The media area at the top of a card: a fixed ratio, the `media` role behind (what shows while an image loads). */\nexport function CardMedia({ aspect = \"video\", style, ...props }: CardMediaProps) {\n const { theme } = useTheme();\n return <View {...props} style={[styles.media, { backgroundColor: theme.media }, aspect === \"auto\" ? null : { aspectRatio: ASPECT[aspect] }, style]} />;\n}\n\nexport type CardImageProps = Omit<ImageProps, \"source\" | \"src\"> & {\n /** The image URI; absent or `null`: the `fallback` on the media colour. */\n src?: string | null;\n /** Shown when there is no image: an icon, an illustration (decorative). */\n fallback?: React.ReactNode;\n};\n\n/** The image of a media (it fills it), or its `fallback` when there is none. Decorative unless `alt` is given. */\nexport function CardImage({ src, fallback, alt, style, ...props }: CardImageProps) {\n const { theme } = useTheme();\n if (!src) {\n return (\n <View aria-hidden style={[StyleSheet.absoluteFill, styles.center, { backgroundColor: theme.accentSoft }]}>\n {fallback}\n </View>\n );\n }\n return <Image accessible={Boolean(alt)} alt={alt} aria-label={alt} resizeMode=\"cover\" {...props} source={{ uri: src }} style={[StyleSheet.absoluteFill, style]} />;\n}\n\nconst CORNER: Record<\"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\", ViewStyle> = {\n \"top-left\": { top: 10, left: 10 },\n \"top-right\": { top: 10, right: 10 },\n \"bottom-left\": { bottom: 10, left: 10 },\n \"bottom-right\": { bottom: 10, right: 10 },\n};\n\nexport type CardOverlayProps = ViewProps & {\n /** The corner of the media it sits in: top-left (default) · top-right · bottom-left · bottom-right. */\n corner?: keyof typeof CORNER;\n};\n\n/** What sits on the media (badges, a caption), in a corner. */\nexport function CardOverlay({ corner = \"top-left\", style, ...props }: CardOverlayProps) {\n return <View {...props} style={[styles.overlay, CORNER[corner], style]} />;\n}\n\nconst PADDING = { none: 0, sm: 12, md: 16, lg: 24 } as const;\n\nexport type CardBodyProps = ViewProps & {\n /** none · sm · md (default) · lg. */\n padding?: keyof typeof PADDING;\n};\n\nexport function CardBody({ padding = \"md\", style, ...props }: CardBodyProps) {\n return <View {...props} style={[styles.body, { padding: PADDING[padding] }, style]} />;\n}\n\n/** The card's name: one line, a header for screen readers. */\nexport function CardTitle({ numberOfLines = 1, ...props }: Omit<TxtProps, \"variant\">) {\n return <Txt variant=\"label\" role=\"heading\" numberOfLines={numberOfLines} {...props} />;\n}\n\nexport function CardDescription({ numberOfLines = 2, ...props }: Omit<TxtProps, \"variant\">) {\n return <Txt variant=\"caption\" tone=\"secondary\" numberOfLines={numberOfLines} {...props} />;\n}\n\nexport function CardFooter({ style, ...props }: ViewProps) {\n const { theme } = useTheme();\n return <View {...props} style={[styles.footer, { borderTopColor: theme.borderSubtle }, style]} />;\n}\n\n/** `Card.Root/Media/Image/Overlay/Body/Title/Description/Footer` — the web parts, on View, Image and Text. */\nexport const Card = {\n Root: CardRoot,\n Media: CardMedia,\n Image: CardImage,\n Overlay: CardOverlay,\n Body: CardBody,\n Title: CardTitle,\n Description: CardDescription,\n Footer: CardFooter,\n};\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\", borderWidth: StyleSheet.hairlineWidth },\n shadow: { shadowOpacity: 0.25, shadowRadius: 12, shadowOffset: { width: 0, height: 6 }, elevation: 4 },\n media: { position: \"relative\", overflow: \"hidden\", width: \"100%\" },\n center: { alignItems: \"center\", justifyContent: \"center\" },\n overlay: { position: \"absolute\", zIndex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n body: { gap: 12 },\n footer: { flexDirection: \"row\", alignItems: \"center\", gap: 8, borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 12, marginTop: \"auto\" },\n});\n","import * as React from \"react\";\nimport { Pressable, type PressableProps, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type ChipSize = \"sm\" | \"md\";\n\ntype GroupContext = {\n type: \"single\" | \"multiple\";\n isSelected: (value: string) => boolean;\n toggle: (value: string) => void;\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n disabled?: boolean;\n};\nconst ChipGroupContext = React.createContext<GroupContext | null>(null);\n\ntype CommonProps = Omit<PressableProps, \"children\" | \"style\" | \"onPress\"> & {\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n /** The text (passed translated) or a node (an icon and a text). */\n children: React.ReactNode;\n};\n\ntype ToggleChipProps = CommonProps & {\n /** Inside `Chip.Group`: the value this chip stands for (required there, ignored alone). */\n value?: string;\n /** Alone: pressed or not (`defaultSelected` uncontrolled), `onSelectedChange` on every press. */\n selected?: boolean;\n /** Uncontrolled: selected at first (alone, outside a group). */\n defaultSelected?: boolean;\n /** Alone: called with the new state when it is pressed. */\n onSelectedChange?: (selected: boolean) => void;\n removable?: false;\n};\n\ntype RemovableChipProps = CommonProps & {\n /** A static chip (a chosen tag, an applied filter) with a remove button. */\n removable: true;\n /** The accessible name of the remove button — passed translated, e.g. \"Remove #night\". */\n removeLabel: string;\n /** Called when its remove button is pressed. */\n onRemove: () => void;\n};\n\nexport type ChipProps = ToggleChipProps | RemovableChipProps;\n\nfunction Label({ children, color, size }: { children: React.ReactNode; color: string; size: ChipSize }) {\n if (typeof children !== \"string\" && typeof children !== \"number\") return <>{children}</>;\n return <Text style={[styles.label, { color, fontSize: size === \"sm\" ? 12 : 13 }]}>{children}</Text>;\n}\n\n/** A selectable pill (`selected` / `onSelectedChange`), an item of `Chip.Group` (`value`), or `removable`. */\nfunction ChipBase(props: ChipProps) {\n const group = React.useContext(ChipGroupContext);\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(props.removable ? false : (props.defaultSelected ?? false));\n const size = props.size ?? group?.size ?? \"md\";\n const frame = (on: boolean, pressed: boolean): ViewStyle => ({\n height: size === \"sm\" ? 28 : 36,\n borderRadius: radius.full,\n borderColor: on ? theme.accent : theme.borderDefault,\n backgroundColor: on ? theme.accentSoft : theme.surface1,\n opacity: pressed ? 0.85 : 1,\n });\n\n if (props.removable) {\n const { removable: _r, removeLabel, onRemove, disabled, size: _s, style, children, ...rest } = props;\n return (\n <View {...rest} style={[styles.base, frame(false, false), disabled ? styles.disabled : null, style]}>\n <Label color={theme.textSecondary} size={size}>\n {children}\n </Label>\n <Pressable role=\"button\" aria-label={removeLabel} disabled={disabled ?? undefined} hitSlop={10} onPress={onRemove} style={styles.remove}>\n <Text style={[styles.cross, { color: theme.textSecondary }]}>×</Text>\n </Pressable>\n </View>\n );\n }\n\n const { removable: _r, value, selected, defaultSelected: _d, onSelectedChange, disabled: ownDisabled, size: _s, style, children, ...rest } = props;\n if (group && value === undefined) throw new Error(\"Chip: a chip inside Chip.Group needs a `value`.\");\n const on = group ? group.isSelected(value as string) : (selected ?? own);\n const disabled = Boolean(ownDisabled || group?.disabled);\n const press = () => {\n if (group) return group.toggle(value as string);\n if (selected === undefined) setOwn(!on);\n onSelectedChange?.(!on);\n };\n const single = group?.type === \"single\";\n return (\n <Pressable\n role={single ? \"radio\" : \"checkbox\"}\n aria-checked={on}\n aria-disabled={disabled}\n {...rest}\n disabled={disabled}\n onPress={press}\n style={({ pressed }) => [styles.base, frame(on, pressed), disabled ? styles.disabled : null, style]}\n >\n <Label color={on ? theme.textPrimary : theme.textSecondary} size={size}>\n {children}\n </Label>\n </Pressable>\n );\n}\n\ntype GroupBase = {\n /** sm · md (default); in a group, the group's size. */\n size?: ChipSize;\n disabled?: boolean;\n /** One horizontal scrolling row (a filter bar) instead of wrapping lines. */\n scrollable?: boolean;\n /** The accessible name of the group — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n children: React.ReactNode;\n};\n\nexport type ChipGroupProps =\n | (GroupBase & { type: \"single\"; value?: string; defaultValue?: string; onValueChange?: (value: string) => void })\n | (GroupBase & { type: \"multiple\"; value?: string[]; defaultValue?: string[]; onValueChange?: (value: string[]) => void });\n\n/** A set of chips: `single` (one value, a radio group; pressing the chosen chip keeps it) or `multiple` (toggles). */\nfunction ChipGroup(props: ChipGroupProps) {\n const { size, disabled, scrollable, \"aria-label\": label, style, children } = props;\n const initial = props.type === \"single\" ? (props.defaultValue ?? \"\") : (props.defaultValue ?? []);\n const [own, setOwn] = React.useState<string | string[]>(initial);\n const current = props.value ?? own;\n const context = React.useMemo<GroupContext>(() => {\n const list = Array.isArray(current) ? current : [current];\n return {\n type: props.type,\n size,\n disabled,\n isSelected: (v) => list.includes(v),\n toggle: (v) => {\n const next = props.type === \"single\" ? v : list.includes(v) ? list.filter((x) => x !== v) : [...list, v];\n if (props.value === undefined) setOwn(next);\n (props.onValueChange as ((value: string | string[]) => void) | undefined)?.(next);\n },\n };\n }, [current, props.type, props.value, props.onValueChange, size, disabled]);\n const a11y = { role: props.type === \"single\" ? (\"radiogroup\" as const) : (\"group\" as const), \"aria-label\": label };\n return (\n <ChipGroupContext.Provider value={context}>\n {scrollable ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} {...a11y} style={style} contentContainerStyle={styles.row}>\n {children}\n </ScrollView>\n ) : (\n <View {...a11y} style={[styles.row, styles.wrap, style]}>\n {children}\n </View>\n )}\n </ChipGroupContext.Provider>\n );\n}\n\n/** `Chip` and `Chip.Group`. */\nexport const Chip = Object.assign(ChipBase, { Group: ChipGroup });\n\nconst styles = StyleSheet.create({\n base: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 6, paddingHorizontal: 14, borderWidth: 1, alignSelf: \"flex-start\" },\n label: { fontWeight: \"600\" },\n remove: { marginRight: -6, width: 24, height: 24, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 16, lineHeight: 18, fontWeight: \"700\" },\n disabled: { opacity: 0.4 },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n wrap: { flexWrap: \"wrap\" },\n});\n","import * as React from \"react\";\nimport { Animated, type StyleProp, StyleSheet, Text, type ViewStyle } from \"react-native\";\n\nimport { countdownParts, type CountdownUnits, useCountdown } from \"../countdown/core\";\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type { CountdownUnits };\n\nexport type CountdownProps = {\n /** The moment it counts down to: a Date, an ISO string or epoch milliseconds. */\n target: Date | string | number;\n /** Server clock − this clock, in milliseconds. */\n skewMs?: number;\n /** The short unit labels, passed translated. */\n units: CountdownUnits;\n /** Below this many milliseconds it turns urgent (the danger text role, the last segment breathes). Default 60 s. */\n urgentBelowMs?: number;\n /** sm · md (default) · lg. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Accessible name, e.g. \"Ends in\". */\n label: string;\n /** Also show `label` before the segments, in the secondary text role (default: only read by screen readers). */\n showLabel?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst FONT = { sm: 14, md: 20, lg: 32 } as const;\n\n/**\n * Time left until a moment, as segments (2d 04h 13m — days only when there are some) in tabular figures, on the same\n * clock as the web `Countdown` (one interval for every countdown on screen). Under `urgentBelowMs` it turns to the\n * danger text role (≥ 4.5:1 in both themes) and its last segment breathes (still when the system reduces motion).\n * `showLabel` writes `label` before the segments; it is the accessible name either way.\n */\nexport function Countdown({ target, skewMs = 0, units, urgentBelowMs = 60_000, size = \"md\", label, showLabel = false, style }: CountdownProps) {\n const { theme, fonts } = useTheme();\n const reduce = useReducedMotion();\n const ms = useCountdown(target, skewMs);\n const urgent = ms > 0 && ms < urgentBelowMs;\n const parts = countdownParts(ms, units);\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (!urgent || reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.4, duration: 500, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 500, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [urgent, reduce, opacity]);\n const color = urgent ? theme.dangerText : theme.textPrimary;\n const text = parts.map(([value, unit]) => `${String(value).padStart(2, \"0\")}${unit}`).join(\" \");\n return (\n <Animated.View\n accessible\n role=\"timer\"\n aria-label={`${label} ${text}`}\n style={[styles.root, style]}\n >\n {showLabel ? (\n <Text style={[styles.label, { color: theme.textSecondary, fontSize: Math.max(11, Math.round(FONT[size] * 0.6)) }]}>{label}</Text>\n ) : null}\n {parts.map(([value, unit], i) => (\n <Animated.View key={unit} style={[styles.segment, urgent && i === parts.length - 1 ? { opacity } : null]}>\n <Text style={[styles.value, { color, fontSize: FONT[size] }, fonts.display ? { fontFamily: fonts.display } : null]}>\n {String(value).padStart(2, \"0\")}\n </Text>\n <Text style={[styles.unit, { color: theme.textSecondary, fontSize: Math.round(FONT[size] / 2) }]}>{unit}</Text>\n </Animated.View>\n ))}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"baseline\", gap: 6 },\n segment: { flexDirection: \"row\", alignItems: \"baseline\" },\n value: { fontWeight: \"900\", fontVariant: [\"tabular-nums\"], letterSpacing: -0.3 },\n unit: { marginLeft: 2, fontWeight: \"700\", textTransform: \"uppercase\" },\n label: { fontWeight: \"600\", marginRight: 2 },\n});\n","import * as React from \"react\";\nimport { StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type EmptyStateProps = Omit<ViewProps, \"children\"> & {\n /** A decorative icon (hidden from screen readers). */\n icon?: React.ReactNode;\n /** What is empty, in a few words (\"No notifications yet\"). */\n title: string;\n /** Why, or what will fill it. */\n description?: string;\n /** What to do next: a Button. */\n action?: React.ReactNode;\n};\n\n/** What a list, a search or a screen says when it has nothing to show — every word is a prop. */\nexport function EmptyState({ icon, title, description, action, style, ...props }: EmptyStateProps) {\n const { theme } = useTheme();\n return (\n <View {...props} style={[styles.root, style]}>\n {icon ? (\n <View aria-hidden style={[styles.icon, { backgroundColor: theme.surface2 }]}>\n {icon}\n </View>\n ) : null}\n <Txt variant=\"label\" role=\"heading\" style={styles.center}>\n {title}\n </Txt>\n {description ? (\n <Txt tone=\"secondary\" style={styles.center}>\n {description}\n </Txt>\n ) : null}\n {action ? <View style={styles.action}>{action}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", justifyContent: \"center\", gap: 8, paddingVertical: 40, paddingHorizontal: 24 },\n icon: { width: 48, height: 48, borderRadius: 24, alignItems: \"center\", justifyContent: \"center\", marginBottom: 4 },\n center: { textAlign: \"center\", maxWidth: 360 },\n action: { marginTop: 8, flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"center\", gap: 8 },\n});\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, G as Group, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { KRIZAKA as G } from \"../marks/krizaka-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Krizaka mark for React Native — the geometry of the web mark (marks/krizaka-geometry.ts), drawn with\n * react-native-svg: the ink shield follows the theme's text roles, the node and the core are Krizaka blue. The orbit\n * turns and the core breathes on the native driver; still when the system reduces motion.\n */\nexport function KrizakaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"kzm\");\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const stroke = neutral ?? theme.textMuted;\n const blue = (\n <LinearGradient id={`${id}b`} gradientUnits=\"userSpaceOnUse\" x1={G.blue.x1 + G.offset} y1={G.blue.y1 + G.offset} x2={G.blue.x2 + G.offset} y2={G.blue.y2 + G.offset}>\n {G.blue.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n const dot = (c: { cx: number; cy: number; r: number; inner: number }) => (\n <>\n <Circle cx={c.cx} cy={c.cy} r={c.r} fill={`url(#${id}b)`} />\n <Circle cx={c.cx} cy={c.cy} r={c.inner} fill={G.highlight} />\n </>\n );\n return (\n <View style={{ width: size, height: size }} {...markA11y(title)}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id={`${id}g`} cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n <LinearGradient id={`${id}i`} gradientUnits=\"userSpaceOnUse\" x1={G.ink.x1 + G.offset} y1={G.ink.y1 + G.offset} x2={G.ink.x2 + G.offset} y2={G.ink.y2 + G.offset}>\n <Stop offset=\"0%\" stopColor={theme.textSecondary} />\n <Stop offset=\"100%\" stopColor={theme.textPrimary} />\n </LinearGradient>\n {blue}\n </Defs>\n {size >= 48 ? <Circle cx={200} cy={200} r={190} fill={`url(#${id}g)`} /> : null /* cropped: the halo would show its square */}\n <Circle cx={200} cy={200} r={G.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Path d={G.shield} stroke={`url(#${id}i)`} strokeWidth={G.stroke} strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n </Group>\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Circle cx={200} cy={200} r={G.orbit.r} stroke={stroke} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{blue}</Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n {dot(G.node)}\n {dot(G.core)}\n </Group>\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","import { marks } from \"@krizaka/tokens/native\";\n\n/**\n * The Krizaka mark's geometry — the one description drawn by the web mark (KrizakaLogo) and the native one\n * (KrizakaMark). Built on the Orochia mark's grammar (docs: packages/tokens/BRAND.md, \"Marks\"): a 360×360 artwork at\n * (20, 20) in a 400×400 view box, one bold stroke (22) drawn as an open figure, an end that breaks out as a node, a\n * core, a dashed orbit and a ring; below 48 px the view box crops to the emblem.\n *\n * Krizaka is the parent: the hexagonal shield is **ink** (the host's text roles), the node and the core carry the\n * Krizaka blue (`marks.krizaka` of @krizaka/tokens: the brand's accent hsl(217 92% 53%) → its text tint hsl(217 92% 68%)).\n */\nexport const KRIZAKA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"86 82 228 228\",\n offset: 20,\n /** The shield: a pointy-top hexagon (r 92 around 180,180), open at its upper-right edge. */\n shield: \"M259.7,134 L259.7,226 L180,272 L100.3,226 L100.3,134 L180,88 L212,106.5\",\n stroke: 22,\n ink: { x1: 70, y1: 290, x2: 290, y2: 70 },\n blue: { x1: 180, y1: 180, x2: 300, y2: 60, stops: marks.krizaka },\n /** The vertex where the shield opens: a node (the serpent's head in Orochia's grammar). */\n node: { cx: 259.7, cy: 134, r: 19, inner: 6 },\n core: { cx: 180, cy: 180, r: 24, inner: 8 },\n highlight: \"#dbeafe\",\n glow: { color: \"#196df5\", opacity: 0.16 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n} as const;\n","import { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing } from \"react-native\";\n\nexport interface NativeMarkProps {\n /** Width and height in points. */\n size?: number;\n /** The orbit turns and the core breathes; always still when the system asks to reduce motion. */\n animated?: boolean;\n /** An accessible name (the mark becomes an image); without it the mark is decorative. */\n title?: string;\n /** The neutral strokes (orbit, ring). Default: the theme's muted text colour. */\n neutral?: string;\n}\n\n/** An image with a name, or hidden from assistive technology. */\nexport const markA11y = (title?: string) =>\n title\n ? { accessible: true, accessibilityRole: \"image\" as const, accessibilityLabel: title }\n : { accessibilityElementsHidden: true, importantForAccessibility: \"no-hide-descendants\" as const };\n\n/**\n * The motion shared by the native marks, on the native driver: a slow turn (30 s) and a breath (3.2 s). Nothing\n * starts when `animated` is false or the system reduces motion.\n */\nexport function useMarkMotion(size: number, animated: boolean, spinMs = 30_000) {\n const [spin] = useState(() => new Animated.Value(0));\n const [pulse] = useState(() => new Animated.Value(0));\n useEffect(() => {\n if (!animated) return;\n let loops: Animated.CompositeAnimation[] = [];\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (reduce || cancelled) return;\n loops = [\n Animated.loop(Animated.timing(spin, { toValue: 1, duration: spinMs, easing: Easing.linear, useNativeDriver: true })),\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n ]),\n ),\n ];\n loops.forEach((l) => l.start());\n });\n return () => {\n cancelled = true;\n loops.forEach((l) => l.stop());\n };\n }, [animated, spin, pulse, spinMs]);\n return {\n Animated,\n layer: { position: \"absolute\" as const, width: size, height: size },\n spinStyle: { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] }) }] },\n pulseStyle: { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) },\n };\n}\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { ORAZAKA as G } from \"../marks/orazaka-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Orazaka mark for React Native — the geometry of the web mark (marks/orazaka-geometry.ts): the three shards turn\n * slowly around the core, which breathes; still when the system reduces motion.\n */\nexport function OrazakaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"ozm\");\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const stroke = neutral ?? theme.textMuted;\n const gradient = (\n <LinearGradient id={`${id}a`} gradientUnits=\"userSpaceOnUse\" x1={G.gradient.x1} y1={G.gradient.y1} x2={G.gradient.x2} y2={G.gradient.y2}>\n {G.gradient.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n const fill = `url(#${id}a)`;\n return (\n <View style={{ width: size, height: size }} {...markA11y(title)}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id={`${id}g`} cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n {size >= 48 ? <Circle cx={G.center} cy={G.center} r={190} fill={`url(#${id}g)`} /> : null /* cropped: the halo would show its square */}\n <Circle cx={G.center} cy={G.center} r={G.orbit.r} stroke={stroke} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n <Circle cx={G.center} cy={G.center} r={G.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\n {G.shards.map((d) => (\n <Path key={d} d={d} fill={fill} stroke={fill} strokeWidth={G.shardStroke} strokeLinejoin=\"round\" />\n ))}\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\n <Circle cx={G.center} cy={G.center} r={G.core.r} fill={fill} />\n <Circle cx={G.center} cy={G.center} r={G.core.inner} fill={G.highlight} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","import { marks } from \"@krizaka/tokens/native\";\n\n/**\n * The Orazaka mark's geometry — drawn by the web mark (OrazakaLogo) and the native one (OrazakaMark). The same\n * grammar as Orochia and Krizaka (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold\n * emblem in the brand gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem keeps the original idea — three hexagonal shards orbiting a core — drawn as solid shards (the weight of\n * Orochia's body) in the Orazaka orange: the brand's mark gradient (`marks.orazaka` of @krizaka/tokens, the same source\n * as the accent), deep orange → orange on the accent's hue 26 — never the amber of --kz-warning (hue 38). Every stop\n * reads ≥ 3:1 on the page surfaces of both themes (tested in @krizaka/tokens), so one mark serves dark and light.\n */\n/** The bright end of the gradient: the halo and the core's glow. */\nconst orange = marks.orazaka[marks.orazaka.length - 1]![1];\n\nexport const ORAZAKA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"76 76 248 248\",\n center: 200,\n /**\n * The three shards — a hexagon's cap (from the original 132-unit drawing), scaled ×1.9 around the centre and turned\n * 0°, 120°, 240° — in view-box coordinates, so that one gradient runs across all three.\n */\n shards: [\n \"M154.4,121.2 L200,94.7 L245.6,121.2 L245.6,154.4 L226.6,165.4 L226.6,132.2 L200,116.8 L173.4,132.2 L173.4,165.4 L154.4,154.4 Z\",\n \"M291.1,199.9 L291.2,252.6 L245.5,278.9 L216.7,262.3 L216.6,240.3 L245.4,257 L272.1,241.6 L272,210.9 L243.2,194.3 L262.3,183.3 Z\",\n \"M154.5,278.9 L108.8,252.6 L108.9,199.9 L137.7,183.3 L156.8,194.3 L128,210.9 L127.9,241.6 L154.6,257 L183.4,240.3 L183.3,262.3 Z\",\n ],\n shardStroke: 5.7,\n gradient: { x1: 90, y1: 310, x2: 310, y2: 90, stops: marks.orazaka },\n core: { r: 21, inner: 7.6 },\n highlight: \"#fff7ed\",\n glow: { color: orange, opacity: 0.16 },\n /** The core's breathing shadow (web), in the mark's orange. */\n pulse: { color: orange, low: 0.3, high: 0.6 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n} as const;\n","import React, { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing, View } from \"react-native\";\nimport Svg, { Circle, Defs, Ellipse, G as Group, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { OROCHIA as G } from \"../marks/orochia-geometry\";\nimport { type NativeMarkProps } from \"./mark-motion\";\nimport { useTheme } from \"./theme\";\n\nconst CENTER = G.offset + 180;\n\n/**\n * The Orochia mark for React Native — the same geometry as the web mark (marks/orochia-geometry.ts), drawn with\n * react-native-svg. Three layers so that the motion runs on the native driver: the orbit turns, the eye and the flame\n * breathe, the serpent stays still.\n */\nexport function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }: NativeMarkProps) {\n const { theme } = useTheme();\n const neutral = neutralProp ?? theme.textMuted;\n const [spin] = useState(() => new Animated.Value(0));\n const [pulse] = useState(() => new Animated.Value(0));\n useEffect(() => {\n if (!animated) return;\n let loops: Animated.CompositeAnimation[] = [];\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (reduce || cancelled) return;\n loops = [\n Animated.loop(Animated.timing(spin, { toValue: 1, duration: 30_000, easing: Easing.linear, useNativeDriver: true })),\n Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0, duration: 1600, easing: Easing.inOut(Easing.ease), useNativeDriver: true }),\n ]),\n ),\n ];\n loops.forEach((l) => l.start());\n });\n return () => {\n cancelled = true;\n loops.forEach((l) => l.stop());\n };\n }, [animated, spin, pulse]);\n\n const viewBox = size < 48 ? G.croppedViewBox : G.viewBox;\n const layer = { position: \"absolute\" as const, width: size, height: size };\n const a11y = title ? { accessible: true, accessibilityRole: \"image\" as const, accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: \"no-hide-descendants\" as const };\n const bodyGradient = (\n <LinearGradient id=\"body\" gradientUnits=\"userSpaceOnUse\" x1={G.body.x1 + G.offset} y1={G.body.y1 + G.offset} x2={G.body.x2 + G.offset} y2={G.body.y2 + G.offset}>\n {G.body.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n );\n\n return (\n <View style={{ width: size, height: size }} {...a11y}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <RadialGradient id=\"glow\" cx=\"50%\" cy=\"50%\" r=\"50%\">\n <Stop offset=\"0%\" stopColor={G.glow.color} stopOpacity={G.glow.opacity} />\n <Stop offset=\"100%\" stopColor={G.glow.color} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n <Circle cx={CENTER} cy={CENTER} r={170} fill=\"url(#glow)\" />\n <Circle cx={CENTER} cy={CENTER} r={G.ring.r} stroke={neutral} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] }) }] }]}>\n <Svg viewBox={viewBox} style={layer}>\n <Circle cx={CENTER} cy={CENTER} r={G.orbit.r} stroke={neutral} strokeWidth={G.orbit.width} strokeDasharray={G.orbit.dash} opacity={0.6} fill=\"none\" />\n </Svg>\n </Animated.View>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{bodyGradient}</Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Path d={G.arc} stroke=\"url(#body)\" strokeWidth={22} strokeLinecap=\"round\" fill=\"none\" />\n <Path d={G.arc} stroke={G.scales.color} strokeOpacity={G.scales.opacity} strokeWidth={G.scales.width} strokeLinecap=\"round\" strokeDasharray={G.scales.dash} fill=\"none\" />\n <Path d={G.neck} stroke=\"url(#body)\" strokeWidth={14} strokeLinecap=\"round\" fill=\"none\" />\n <Path d={G.tail} stroke=\"url(#body)\" strokeWidth={6} strokeLinecap=\"round\" fill=\"none\" />\n <Ellipse cx={G.head.cx} cy={G.head.cy} rx={G.head.rx} ry={G.head.ry} rotation={G.head.rotate} origin={`${G.head.cx}, ${G.head.cy}`} fill=\"url(#body)\" />\n <Path d={G.tongue.d} stroke={G.tongue.color} strokeWidth={3} strokeLinecap=\"round\" fill=\"none\" />\n </Group>\n </Svg>\n <Animated.View style={[layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <LinearGradient id=\"flame\" x1=\"50%\" y1=\"100%\" x2=\"50%\" y2=\"0%\">\n {G.flameGradient.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n </Defs>\n <Group transform={`translate(${G.offset} ${G.offset})`}>\n <Circle cx={G.eye.cx} cy={G.eye.cy} r={G.eye.r} fill={G.eye.color} />\n <Path d={G.flame.d} transform={`translate(${G.flame.translate[0]} ${G.flame.translate[1]}) scale(${G.flame.scale})`} fill=\"url(#flame)\" />\n </Group>\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","import { marks } from \"@krizaka/tokens/native\";\n\n/**\n * The Orochia mark's geometry — the one description of the serpent and its flame, drawn by the web mark (SVG in the\n * DOM, OrochiaLogo) and the native one (react-native-svg, @krizaka/ui/native). Coordinates are in the 360×360 artwork,\n * placed at (20, 20) in a 400×400 view box; below 48 px the view box crops to the serpent. The body's gradient is the\n * brand's mark gradient (`marks.orochia` of @krizaka/tokens).\n */\nexport const OROCHIA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"86 82 228 228\",\n offset: 20,\n body: { x1: 70, y1: 290, x2: 290, y2: 70, stops: marks.orochia },\n flameGradient: { stops: [[\"0%\", \"#a855f7\"], [\"100%\", \"#f9a8d4\"]] },\n glow: { color: \"#d946ef\", opacity: 0.18 },\n orbit: { r: 160, dash: \"8 8\", width: 1.5 },\n ring: { r: 134, width: 1 },\n arc: \"M259.8,142.8 A88,88 0 1 1 142.8,100.2\",\n neck: \"M142.8,100.2 A88,88 0 0 1 187.7,92.3\",\n tail: \"M187.7,92.3 A88,88 0 0 1 221.3,102.3\",\n scales: { color: \"#fdf4ff\", opacity: 0.45, width: 3, dash: \"2 14\" },\n head: { cx: 253.9, cy: 130.1, rx: 13, ry: 20, rotate: -25 },\n tongue: { d: \"M245.4,112.0 L242.0,104.8 L235.0,101.5 M242.0,104.8 L244.0,97.3\", color: \"#f472b6\" },\n eye: { cx: 256.3, cy: 123.5, r: 4.5, color: \"#fdf4ff\" },\n flame: {\n translate: [127, 120] as const,\n scale: 4.4,\n d: \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n },\n} as const;\n","import React from \"react\";\n\nimport type { BrandId } from \"../marks/ProductLogo\";\nimport { KrizakaMark } from \"./KrizakaMark\";\nimport type { NativeMarkProps } from \"./mark-motion\";\nimport { OrazakaMark } from \"./OrazakaMark\";\nimport { OrochiaMark } from \"./OrochiaMark\";\n\n/** The mark of a Krizaka brand by id, for React Native — the counterpart of the web `ProductLogo`. */\nexport function ProductMark({ id, ...props }: NativeMarkProps & { id: BrandId }) {\n if (id === \"krizaka\") return <KrizakaMark {...props} />;\n if (id === \"orazaka\") return <OrazakaMark {...props} />;\n return <OrochiaMark {...props} />;\n}\n","import * as React from \"react\";\nimport { Animated, Easing, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { useReducedMotion, useSvgId, useTheme } from \"./theme\";\n\nconst AnimatedCircle = Animated.createAnimatedComponent(Circle);\n\nexport type ProgressProps = {\n /** `bar` (default) or `ring`. */\n variant?: \"bar\" | \"ring\";\n /** sm · md (default) · lg: the bar's thickness or the ring's diameter. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** How far, between 0 and `max`. `null` or absent: indeterminate (a wait of unknown length). */\n value?: number | null;\n /** The value of a full bar. Default 100. */\n max?: number;\n /** The accessible name — passed translated (\"Upload\", \"Raised towards the goal\"). */\n label: string;\n /** The value in words for screen readers (\"$420 of $1,000\") — default: the percentage. */\n valueText?: string;\n /** A ring's centre: an amount, a percentage, an icon. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst BAR = { sm: 4, md: 8, lg: 12 } as const;\nconst RING = { sm: 40, md: 80, lg: 144 } as const;\nconst STROKE = { sm: 12, md: 9, lg: 7 } as const; // in a 100-unit box, as on the web\n\n/**\n * A progress bar or ring in the accent gradient (`accent` → `accent2`): it moves to `value` / `max` when it changes,\n * indeterminate without a value. Still under reduced motion. A `progressbar` with its value for screen readers.\n */\nexport function Progress({ variant = \"bar\", size = \"md\", value, max = 100, label, valueText, children, style }: ProgressProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const id = useSvgId(\"kz-progress-\");\n const known = typeof value === \"number\" && Number.isFinite(value);\n const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;\n const percent = Math.round(ratio * 100);\n\n const [progress] = React.useState(() => new Animated.Value(ratio));\n const [spin] = React.useState(() => new Animated.Value(0));\n const [track, setTrack] = React.useState(0);\n React.useEffect(() => {\n if (reduce) {\n progress.setValue(ratio);\n return;\n }\n const animation = Animated.timing(progress, { toValue: ratio, duration: 700, easing: Easing.out(Easing.cubic), useNativeDriver: false });\n animation.start();\n return () => animation.stop();\n }, [ratio, reduce, progress]);\n React.useEffect(() => {\n if (known || reduce) return;\n const loop = Animated.loop(Animated.timing(spin, { toValue: 1, duration: 1200, easing: Easing.linear, useNativeDriver: true }));\n loop.start();\n return () => {\n loop.stop();\n spin.setValue(0);\n };\n }, [known, reduce, spin]);\n\n const a11y = {\n accessible: true,\n role: \"progressbar\" as const,\n \"aria-label\": label,\n \"aria-valuemin\": known ? 0 : undefined,\n \"aria-valuemax\": known ? max : undefined,\n \"aria-valuenow\": known ? Math.min(max, Math.max(0, value)) : undefined,\n \"aria-valuetext\": known ? (valueText ?? `${percent}%`) : valueText,\n };\n const gradient = (\n <Defs>\n <LinearGradient id={id} x1=\"0\" y1=\"0\" x2=\"1\" y2={variant === \"ring\" ? \"1\" : \"0\"}>\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n );\n\n if (variant === \"ring\") {\n const side = RING[size];\n const stroke = STROKE[size];\n const r = 50 - stroke / 2;\n const circumference = 2 * Math.PI * r;\n const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;\n const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] });\n return (\n <View {...a11y} style={[styles.ring, { width: side, height: side }, style]}>\n <Animated.View style={[StyleSheet.absoluteFill, { transform: [{ rotate: known ? \"-90deg\" : rotate }] }]}>\n <Svg width={side} height={side} viewBox=\"0 0 100 100\">\n {gradient}\n <Circle cx={50} cy={50} r={r} fill=\"none\" stroke={theme.borderDefault} strokeWidth={stroke} />\n <AnimatedCircle\n cx={50}\n cy={50}\n r={r}\n fill=\"none\"\n stroke={`url(#${id})`}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={offset}\n />\n </Svg>\n </Animated.View>\n {children}\n </View>\n );\n }\n\n const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [\"0%\", \"100%\"] }) : \"40%\";\n // Indeterminate: a 40 % segment crosses the track (measured, so the motion runs on the native driver in points).\n const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });\n return (\n <View\n {...a11y}\n onLayout={known ? undefined : (event) => setTrack(event.nativeEvent.layout.width)}\n style={[styles.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style]}\n >\n <Animated.View style={[styles.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }]}>\n <Svg width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\n {gradient}\n <Rect x={0} y={0} width=\"100%\" height=\"100%\" fill={`url(#${id})`} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n ring: { alignItems: \"center\", justifyContent: \"center\" },\n bar: { width: \"100%\", overflow: \"hidden\", borderRadius: 9999 },\n fill: { height: \"100%\", overflow: \"hidden\", borderRadius: 9999 },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SegmentedOption<T extends string> = { value: T; label: string; disabled?: boolean };\n\nexport type SegmentedProps<T extends string> = {\n /** The views, in order; `label` passed translated. */\n options: readonly SegmentedOption<T>[];\n /** The selected view (controlled). */\n value: T;\n /** Called with the view pressed. */\n onValueChange: (value: T) => void;\n /** sm · md (default). */\n size?: \"sm\" | \"md\";\n /** The accessible name of the tab list — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Switches between views of one screen: equal segments on a track, the chosen one raised — the web\n * `Tabs variant=\"segmented\"`. A tab list for screen readers. To filter a list, use `Chip.Group`.\n */\nexport function Segmented<T extends string>({ options, value, onValueChange, size = \"md\", \"aria-label\": label, style }: SegmentedProps<T>) {\n const { theme, radius } = useTheme();\n return (\n <View\n role=\"tablist\"\n aria-label={label}\n style={[styles.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius.md, height: size === \"sm\" ? 32 : 40 }, style]}\n >\n {options.map((option) => {\n const selected = option.value === value;\n return (\n <Pressable\n key={option.value}\n role=\"tab\"\n aria-selected={selected}\n aria-disabled={option.disabled}\n disabled={option.disabled}\n onPress={() => {\n if (!selected) onValueChange(option.value);\n }}\n style={[\n styles.segment,\n { borderRadius: radius.sm },\n selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,\n option.disabled ? styles.disabled : null,\n ]}\n >\n <Text numberOfLines={1} style={[styles.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === \"sm\" ? 12 : 13 }]}>\n {option.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n label: { fontWeight: \"600\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { Animated, type DimensionValue, type StyleProp, type ViewStyle } from \"react-native\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type SkeletonProps = {\n /** `text` (a line), `circle` (an avatar), `rect` (a media, a card). */\n shape?: \"text\" | \"circle\" | \"rect\";\n /** Points or a percentage; default: the shape's. */\n width?: DimensionValue;\n /** Points or a percentage; default: the shape's. */\n height?: DimensionValue;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n /** The id the tests find it by. */\n testID?: string;\n};\n\nconst SHAPE = {\n text: { width: \"100%\", height: 12, radius: 4 },\n circle: { width: 40, height: 40, radius: 9999 },\n rect: { width: \"100%\", height: 96, radius: 12 },\n} as const;\n\n/** A pulsing placeholder the size of what is loading — hidden from screen readers; still when the system reduces motion. */\nexport function Skeleton({ shape = \"text\", width, height, style, testID }: SkeletonProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [opacity] = React.useState(() => new Animated.Value(1));\n React.useEffect(() => {\n if (reduce) return;\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),\n Animated.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => {\n loop.stop();\n opacity.setValue(1);\n };\n }, [reduce, opacity]);\n const s = SHAPE[shape];\n const side = shape === \"circle\" ? (width ?? height ?? s.width) : undefined;\n return (\n <Animated.View\n testID={testID}\n aria-hidden\n style={[\n { width: side ?? width ?? s.width, height: side ?? height ?? s.height, borderRadius: s.radius, backgroundColor: theme.surface3, opacity },\n style,\n ]}\n />\n );\n}\n","import * as React from \"react\";\nimport { ActivityIndicator, type ActivityIndicatorProps } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SpinnerProps = Omit<ActivityIndicatorProps, \"size\" | \"color\"> & {\n /** The accessible name of the wait, e.g. \"Loading\" — passed translated. */\n label: string;\n /** sm · md (default) · lg. */\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\n/** An indeterminate wait: the platform's activity indicator in the accent, named by `label`. */\nexport function Spinner({ label, size = \"md\", ...props }: SpinnerProps) {\n const { theme } = useTheme();\n return (\n <ActivityIndicator\n accessible\n role=\"progressbar\"\n aria-label={label}\n {...props}\n size={size === \"lg\" ? \"large\" : \"small\"}\n color={theme.accent}\n style={[size === \"sm\" ? { transform: [{ scale: 0.75 }] } : null, props.style]}\n />\n );\n}\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Pressable, StyleSheet, Text, View } from \"react-native\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ToastTone = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n\nexport type ToastOptions = {\n /** Replaces a toast with the same id (a notification shown once). */\n id?: string;\n description?: string;\n tone?: ToastTone;\n /** A decorative icon before the text. */\n icon?: React.ReactNode;\n /** Milliseconds on screen; `Infinity` keeps it until dismissed. Default: the Toaster's `duration`. */\n duration?: number;\n /** Pressing the toast (opening what it is about); it is then dismissed. */\n onPress?: () => void;\n /** A button inside the toast; it is then dismissed. */\n action?: { label: string; onPress: () => void };\n /** Called once the toast leaves, whatever the reason. */\n onDismiss?: () => void;\n};\n\nexport type ToastItem = ToastOptions & { id: string; title: string };\n\n// One queue for the app, outside React: `toast()` can be called from anywhere (a stream handler, a mutation).\nlet items: readonly ToastItem[] = [];\nconst listeners = new Set<() => void>();\nlet counter = 0;\nconst emit = () => listeners.forEach((listener) => listener());\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\nconst snapshot = () => items;\n\nfunction show(title: string, options: ToastOptions = {}): string {\n const id = options.id ?? `kz-toast-${++counter}`;\n const item: ToastItem = { ...options, id, title };\n items = items.some((t) => t.id === id) ? items.map((t) => (t.id === id ? item : t)) : [...items, item];\n emit();\n return id;\n}\n\nfunction dismiss(id?: string) {\n const gone = items.filter((t) => id === undefined || t.id === id);\n if (gone.length === 0) return;\n items = id === undefined ? [] : items.filter((t) => t.id !== id);\n emit();\n gone.forEach((t) => t.onDismiss?.());\n}\n\nconst tone = (name: ToastTone) => (title: string, options?: Omit<ToastOptions, \"tone\">) => show(title, { ...options, tone: name });\n\n/** `toast(title, options)`, `toast.success/warning/error/info(…)`, `toast.dismiss(id?)` — the web `toast`'s names. */\nexport const toast = Object.assign(show, {\n success: tone(\"success\"),\n warning: tone(\"warning\"),\n error: tone(\"error\"),\n info: tone(\"info\"),\n dismiss,\n});\n\nexport type ToasterProps = {\n /** The accessible name of each toast's close button — passed translated. */\n closeLabel: string;\n /** Where the toasts stack: `top` (default) or `bottom`. */\n position?: \"top\" | \"bottom\";\n /** Distance from the edge, e.g. the safe-area inset + a margin (no safe-area dependency here). */\n offset?: number;\n /** Default milliseconds on screen. */\n duration?: number;\n /** At most this many on screen; the oldest leave first. */\n max?: number;\n};\n\nfunction ToastView({ item, closeLabel, duration }: { item: ToastItem; closeLabel: string; duration: number }) {\n const { theme, radius } = useTheme();\n const reduce = useReducedMotion();\n const [enter] = React.useState(() => new Animated.Value(reduce ? 1 : 0));\n React.useEffect(() => {\n if (reduce) enter.setValue(1);\n else Animated.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();\n }, [enter, reduce]);\n React.useEffect(() => {\n AccessibilityInfo.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);\n }, [item.title, item.description]);\n const ms = item.duration ?? duration;\n React.useEffect(() => {\n if (!Number.isFinite(ms)) return;\n const timer = setTimeout(() => dismiss(item.id), ms);\n return () => clearTimeout(timer);\n }, [item.id, ms]);\n const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? \"default\"];\n // The text (with its icon) is the pressable part; the action and the close button sit beside it, never inside.\n const text = (\n <>\n {item.icon ? <View aria-hidden>{item.icon}</View> : null}\n <View style={styles.content}>\n <Txt variant=\"label\" numberOfLines={2}>\n {item.title}\n </Txt>\n {item.description ? (\n <Txt variant=\"caption\" tone=\"secondary\" numberOfLines={3}>\n {item.description}\n </Txt>\n ) : null}\n </View>\n </>\n );\n const body = (\n <>\n {item.onPress ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n item.onPress?.();\n dismiss(item.id);\n }}\n style={({ pressed }) => [styles.main, { opacity: pressed ? 0.8 : 1 }]}\n >\n {text}\n </Pressable>\n ) : (\n <View style={styles.main}>{text}</View>\n )}\n {item.action ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n item.action?.onPress();\n dismiss(item.id);\n }}\n style={[styles.action, { backgroundColor: theme.accent, borderRadius: radius.sm }]}\n >\n <Text style={[styles.actionLabel, { color: theme.onAccent }]}>{item.action.label}</Text>\n </Pressable>\n ) : null}\n <Pressable role=\"button\" aria-label={closeLabel} hitSlop={10} onPress={() => dismiss(item.id)} style={styles.close}>\n <Text style={[styles.cross, { color: theme.textSecondary }]}>×</Text>\n </Pressable>\n </>\n );\n const frame = [\n styles.toast,\n { backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius.lg, shadowColor: theme.scrimStrong },\n ];\n // A slide only, never a fade: the text is legible (and its contrast measurable) from the first frame.\n const motion = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };\n return (\n <Animated.View aria-live=\"polite\" style={motion}>\n <View style={frame}>{body}</View>\n </Animated.View>\n );\n}\n\n/** Mount once, at the root (inside `ThemeProvider`). Then call `toast()` from anywhere. */\nexport function Toaster({ closeLabel, position = \"top\", offset = 12, duration = 6000, max = 3 }: ToasterProps) {\n const all = React.useSyncExternalStore(subscribe, snapshot, snapshot);\n const shown = all.slice(-max);\n if (shown.length === 0) return null;\n return (\n <View pointerEvents=\"box-none\" style={[styles.stack, position === \"top\" ? { top: offset } : { bottom: offset }]}>\n {(position === \"top\" ? shown : [...shown].reverse()).map((item) => (\n <ToastView key={item.id} item={item} closeLabel={closeLabel} duration={duration} />\n ))}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n stack: { position: \"absolute\", left: 12, right: 12, gap: 8, zIndex: 100 },\n toast: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n padding: 12,\n borderWidth: StyleSheet.hairlineWidth,\n borderLeftWidth: 4,\n shadowOpacity: 0.3,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 8 },\n elevation: 8,\n },\n main: { flex: 1, flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n content: { flex: 1, gap: 2 },\n action: { paddingHorizontal: 12, paddingVertical: 6 },\n actionLabel: { fontSize: 12, fontWeight: \"700\" },\n close: { width: 28, height: 28, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 18, lineHeight: 20, fontWeight: \"700\" },\n});\n"],"mappings":"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","names":["React","themes","radius","motion","jsx","items","React","StyleSheet","Text","jsx","jsxs","tone","styles","Text","StyleSheet","React","StyleSheet","View","StyleSheet","Text","jsx","tone","Text","styles","StyleSheet","jsx","jsxs","look","radius","StyleSheet","styles","View","Image","Pressable","StyleSheet","View","jsx","tone","radius","styles","View","Pressable","StyleSheet","Image","PADDING","React","Pressable","StyleSheet","Text","View","jsx","jsxs","Text","styles","radius","on","_r","disabled","_s","style","children","rest","View","Pressable","StyleSheet","React","Animated","StyleSheet","Text","jsx","jsxs","Animated","styles","Text","StyleSheet","StyleSheet","View","jsx","jsxs","View","styles","StyleSheet","View","Svg","Defs","LinearGradient","Stop","useEffect","useState","AccessibilityInfo","Animated","Fragment","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Path","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","Group","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Group","Path","jsx","React","Animated","Easing","StyleSheet","View","Svg","Circle","Defs","LinearGradient","Rect","Stop","jsx","jsxs","Animated","Circle","Easing","Defs","LinearGradient","Stop","View","styles","StyleSheet","Svg","Rect","Pressable","StyleSheet","Text","View","jsx","radius","View","styles","Pressable","Text","StyleSheet","React","Animated","jsx","Animated","ActivityIndicator","jsx","ActivityIndicator","React","AccessibilityInfo","Animated","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","listeners","subscribe","radius","Animated","AccessibilityInfo","timer","View","styles","Pressable","Text","motion","StyleSheet"]}