@krizaka/ui 2.1.0 → 2.2.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.
- package/README.md +6 -2
- package/dist/mascots.d.ts +40 -0
- package/dist/mascots.js +253 -0
- package/dist/mascots.js.map +1 -0
- package/dist/native.d.ts +40 -1
- package/dist/native.js +326 -128
- package/dist/native.js.map +1 -1
- package/package.json +14 -4
- package/registry/alert.json +1 -1
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/button.json +1 -1
- package/registry/card.json +1 -1
- package/registry/checkbox.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/command.json +1 -1
- package/registry/confirm-button.json +1 -1
- package/registry/countdown.json +1 -1
- package/registry/dialog.json +1 -1
- package/registry/dropdown-menu.json +1 -1
- package/registry/empty-state.json +1 -1
- package/registry/examples/mascots/empty-state.d.ts +4 -0
- package/registry/examples/mascots/empty-state.js +24 -0
- package/registry/examples/mascots/empty-state.tsx +18 -0
- package/registry/examples/mascots/flock.d.ts +4 -0
- package/registry/examples/mascots/flock.js +14 -0
- package/registry/examples/mascots/flock.tsx +15 -0
- package/registry/examples/mascots/long-task.d.ts +4 -0
- package/registry/examples/mascots/long-task.js +18 -0
- package/registry/examples/mascots/long-task.tsx +15 -0
- package/registry/examples/mascots/moods.d.ts +4 -0
- package/registry/examples/mascots/moods.js +14 -0
- package/registry/examples/mascots/moods.tsx +15 -0
- package/registry/examples/mascots/native/default.d.ts +4 -0
- package/registry/examples/mascots/native/default.dark.png +0 -0
- package/registry/examples/mascots/native/default.js +25 -0
- package/registry/examples/mascots/native/default.light.png +0 -0
- package/registry/examples/mascots/native/default.tsx +22 -0
- package/registry/examples/mascots/own-tone.d.ts +4 -0
- package/registry/examples/mascots/own-tone.js +11 -0
- package/registry/examples/mascots/own-tone.tsx +12 -0
- package/registry/field.json +1 -1
- package/registry/index.json +17 -1
- package/registry/kbd.json +1 -1
- package/registry/mascots.json +314 -0
- package/registry/page-header.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/progress.json +1 -1
- package/registry/radio-group.json +1 -1
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/skeleton.json +1 -1
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/stat.json +1 -1
- package/registry/switch.json +1 -1
- package/registry/tabs.json +1 -1
- package/registry/theme.json +1 -1
- package/registry/toast.json +1 -1
- package/registry/tooltip.json +1 -1
package/dist/native.js.map
CHANGED
|
@@ -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 = /* @__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"]}
|
|
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/mascots.tsx","../src/mascots/geometry.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, { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Defs, Ellipse, G, LinearGradient, Path, Rect, Stop } from \"react-native-svg\";\n\nimport { archEye, BIRDS, brow, lidEye, LIGHT, type MascotBird, type MascotMood, type MascotPalette, type MascotTone, MOOD_PARTS, OWN_PALETTES, PARCEL, SHADE, upperLid } from \"../mascots/geometry\";\nimport { markA11y } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\nexport interface MascotProps {\n /** Which bird of the flock: `falcon` (watch), `owl` (reading), `duck` (building), `flamingo` (answers), `pigeon` (delivery). */\n bird?: MascotBird;\n /** What the moment is: `welcome`, `thinking`, `success`, `empty` or `error`. */\n mood?: MascotMood;\n /** `brand` (default): the theme's accent. `own`: the bird's signature colours of the Krizaka story. */\n tone?: MascotTone;\n /** Width and height in points. */\n size?: number;\n /** A light idle bob; always still when the system asks to reduce motion. */\n animated?: boolean;\n /** An accessible name (the bird becomes an image); without it the mascot is decorative. */\n title?: string;\n /** The outer view's style. */\n style?: ViewStyle;\n}\n\n/** The idle bob, on the native driver; nothing starts when `animated` is false or the system reduces motion. */\nfunction useBob(animated: boolean) {\n const [y] = useState(() => new Animated.Value(0));\n useEffect(() => {\n if (!animated) return;\n let loop: Animated.CompositeAnimation | undefined;\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (reduce || cancelled) return;\n const step = (toValue: number) => Animated.timing(y, { toValue, duration: 1800, easing: Easing.inOut(Easing.ease), useNativeDriver: true });\n loop = Animated.loop(Animated.sequence([step(-2.5), step(0)]));\n loop.start();\n });\n return () => {\n cancelled = true;\n loop?.stop();\n };\n }, [animated, y]);\n return y;\n}\n\n/**\n * One of the five Krizaka birds in one mood, for React Native — the geometry of the web `Mascot`\n * (mascots/geometry.ts), in the theme's accent by default.\n */\nexport function Mascot({ bird = \"owl\", mood = \"welcome\", tone = \"brand\", size = 96, animated = true, title, style }: MascotProps) {\n const { theme } = useTheme();\n const id = useSvgId(\"kzb\");\n const bob = useBob(animated);\n const g = BIRDS[bird];\n const brand: MascotPalette = { from: theme.accent2, to: theme.accent, wing: theme.accent, detail: theme.accent2, beak: theme.warning, eye: theme.textPrimary };\n const p = tone === \"own\" ? OWN_PALETTES[bird] : brand;\n const outline = theme.borderStrong;\n const body = `url(#${id})`;\n const line = { stroke: outline, strokeWidth: 1.4, strokeLinejoin: \"round\" as const };\n const eyeR = g.eyes.white || g.eyes.pupil * 1.2;\n const look = mood === \"thinking\" ? 1.4 : 0;\n const rot = (deg: number, [x, y]: readonly [number, number]) => `rotate(${deg} ${x} ${y})`;\n const [wl, wr] = g.wings;\n return (\n <View style={[{ width: size, height: size }, style]} {...markA11y(title)}>\n <Animated.View style={{ transform: [{ translateY: bob }] }}>\n <Svg width={size} height={size} viewBox=\"0 0 120 120\">\n <Defs>\n <LinearGradient id={id} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <Stop offset=\"0%\" stopColor={p.from} />\n <Stop offset=\"100%\" stopColor={p.to} />\n </LinearGradient>\n </Defs>\n <Ellipse cx={g.shadow[0]} cy={g.shadow[1]} rx={g.shadow[2]} ry={g.shadow[3]} fill={SHADE} opacity={0.14} />\n {mood === \"empty\" && <Path d={MOOD_PARTS.tray} stroke={outline} strokeWidth={1.6} strokeDasharray=\"3 3\" fill=\"none\" />}\n {g.legs.map((d) => (\n <Path key={d} d={d} stroke={p.beak} strokeWidth={2.6} strokeLinecap=\"round\" fill=\"none\" />\n ))}\n {g.back?.map((d) => (d.endsWith(\"Z\") ? <Path key={d} d={d} fill={p.detail} {...line} /> : <Path key={d} d={d} stroke={outline} strokeWidth={1.4} fill=\"none\" />))}\n {g.parcel?.map((d, i) => <Path key={d} d={d} fill={PARCEL[i]} {...line} />)}\n <Path d={g.body} fill={body} {...line} />\n <Path d={g.belly} fill={LIGHT} opacity={0.28} />\n {[wl, wr].map((w, i) => {\n const turn = mood === \"success\" ? (i === 0 ? 28 : -28) : mood === \"welcome\" && i === 1 ? -20 : 0;\n return (\n <G key={i} transform={turn ? rot(turn, w.pivot) : undefined}>\n <Path d={w.d} fill={p.wing} {...line} />\n <Path d={w.d} fill={SHADE} opacity={0.16} />\n </G>\n );\n })}\n {g.neck && <Path d={g.neck.d} stroke={body} strokeWidth={g.neck.width} strokeLinecap=\"round\" fill=\"none\" />}\n {g.head.r > 0 && <Circle cx={g.head.cx} cy={g.head.cy} r={g.head.r} fill={body} {...line} />}\n {g.details.map((d) => (\n <Path key={d} d={d} fill={p.detail} {...line} />\n ))}\n {g.visor && <Rect x={g.visor.x} y={g.visor.y} width={g.visor.w} height={g.visor.h} rx={4} fill={theme.surface0} {...line} />}\n {g.eyes.at.map((at, i) =>\n mood === \"empty\" && g.eyes.white > 0 ? (\n <G key={i}>\n <Circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />\n <Circle cx={at[0]} cy={at[1] + g.eyes.pupil * 0.7} r={g.eyes.pupil} fill={SHADE} />\n <Path d={upperLid(at, g.eyes.white)} fill={p.detail} {...line} />\n </G>\n ) : mood === \"success\" || mood === \"empty\" ? (\n <Path key={i} d={mood === \"success\" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8)} stroke={g.visor ? p.eye : outline} strokeWidth={2.2} strokeLinecap=\"round\" fill=\"none\" />\n ) : (\n <G key={i}>\n {g.eyes.white > 0 && <Circle cx={at[0]} cy={at[1]} r={g.eyes.white} fill={LIGHT} {...line} />}\n <Circle cx={at[0] + look} cy={at[1] - look} r={g.eyes.pupil} fill={g.visor ? p.eye : SHADE} />\n </G>\n ),\n )}\n {g.glasses && g.eyes.at.map(([x, y]) => <Circle key={x} cx={x} cy={y} r={6.5} fill=\"none\" stroke={outline} strokeWidth={1.3} />)}\n {mood === \"error\" &&\n g.eyes.at.map((at, i) => <Path key={i} d={brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1)} stroke={outline} strokeWidth={2} strokeLinecap=\"round\" />)}\n <Path d={g.beak} fill={p.beak} {...line} />\n {mood === \"thinking\" && MOOD_PARTS.dots.map(([cx, cy, r], i) => <Circle key={cx} cx={cx} cy={cy} r={r} fill={theme.textSecondary} opacity={0.5 + i * 0.25} />)}\n {(mood === \"success\" || mood === \"error\") && (\n <Circle cx={MOOD_PARTS.badge.cx} cy={MOOD_PARTS.badge.cy} r={MOOD_PARTS.badge.r} fill={mood === \"success\" ? theme.success : theme.danger} />\n )}\n {mood === \"success\" && <Path d={MOOD_PARTS.check} stroke={theme.surface0} strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />}\n {mood === \"error\" && <Path d={MOOD_PARTS.bang.line} stroke={theme.surface0} strokeWidth={2.8} strokeLinecap=\"round\" />}\n {mood === \"error\" && <Circle cx={MOOD_PARTS.bang.dot[0]} cy={MOOD_PARTS.bang.dot[1]} r={1.6} fill={theme.surface0} />}\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/**\n * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one\n * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,\n * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), redrawn on one 120 × 120\n * grid so that any bird can wear any mood.\n *\n * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,\n * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives\n * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades\n * and highlights are black and white at a low opacity over the role, so they hold in both themes.\n */\n\nexport const MASCOT_BIRDS = [\"falcon\", \"owl\", \"duck\", \"flamingo\", \"pigeon\"] as const;\nexport type MascotBird = (typeof MASCOT_BIRDS)[number];\n\nexport const MASCOT_MOODS = [\"welcome\", \"thinking\", \"success\", \"empty\", \"error\"] as const;\nexport type MascotMood = (typeof MASCOT_MOODS)[number];\n\nexport type MascotTone = \"brand\" | \"own\";\n\ntype Point = readonly [number, number];\n\nexport interface BirdGeometry {\n /** The ground shadow: centre x, y and radii. */\n readonly shadow: readonly [number, number, number, number];\n /** Legs and feet, stroked in the beak colour. */\n readonly legs: readonly string[];\n /** Drawn behind the body (tail, parcel strings). */\n readonly back?: readonly string[];\n readonly body: string;\n readonly belly: string;\n /** Left then right wing, and the point each one turns around. */\n readonly wings: readonly [{ readonly d: string; readonly pivot: Point }, { readonly d: string; readonly pivot: Point }];\n /** A neck, stroked in the body colour with this width (the flamingo). */\n readonly neck?: { readonly d: string; readonly width: number };\n /** The head: a circle. */\n readonly head: { readonly cx: number; readonly cy: number; readonly r: number };\n /** Ear tufts, a crest, a visor's frame: filled with the detail colour. */\n readonly details: readonly string[];\n /** A band behind the eyes (the falcon's visor), in the page's surface. */\n readonly visor?: { readonly x: number; readonly y: number; readonly w: number; readonly h: number };\n /** Glasses (the duck): stroked rings around the eyes. */\n readonly glasses?: boolean;\n readonly beak: string;\n /** The eyes: centres, the radius of the white, the radius of the pupil (no white when `white` is 0). */\n readonly eyes: { readonly at: readonly Point[]; readonly white: number; readonly pupil: number };\n /** The parcel the pigeon carries: its three faces. */\n readonly parcel?: readonly [string, string, string];\n}\n\nconst mirror = (d: string) => d.replace(/(-?\\d+(?:\\.\\d+)?) (-?\\d+(?:\\.\\d+)?)/g, (_, x: string, y: string) => `${120 - Number(x)} ${y}`);\n\nconst falconWing = \"M29 58 C17 68 19 88 37 86 C31 76 31 66 29 58 Z\";\nconst pigeonWing = \"M36 58 C20 50 16 80 38 84 C34 74 34 66 36 58 Z\";\n\nexport const BIRDS: Readonly<Record<MascotBird, BirdGeometry>> = {\n falcon: {\n shadow: [60, 110, 26, 3.5],\n legs: [\"M51 94 L48 108 M44 108 L52 108\", \"M69 94 L72 108 M68 108 L76 108\"],\n body: \"M30 62 C30 42 90 42 90 62 C90 88 78 98 60 98 C42 98 30 88 30 62 Z\",\n belly: \"M41 66 C41 55 79 55 79 66 C79 82 71 90 60 90 C49 90 41 82 41 66 Z\",\n wings: [\n { d: falconWing, pivot: [29, 58] },\n { d: mirror(falconWing), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 38, r: 22 },\n details: [\"M46 20 L52 10 L56 19 Z\", \"M74 20 L68 10 L64 19 Z\"],\n visor: { x: 41, y: 29, w: 38, h: 13 },\n beak: \"M54 45 L66 45 L60 57 Z\",\n eyes: { at: [[50, 35.5], [70, 35.5]], white: 0, pupil: 3.2 },\n },\n owl: {\n shadow: [60, 110, 24, 3.5],\n legs: [\"M53 100 L51 107 M47 107 L55 107\", \"M67 100 L69 107 M65 107 L73 107\"],\n body: \"M28 52 C28 20 92 20 92 52 C92 86 82 102 60 102 C38 102 28 86 28 52 Z\",\n belly: \"M42 66 C42 52 78 52 78 66 C78 86 72 94 60 94 C48 94 42 86 42 66 Z\",\n wings: [\n { d: \"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\", pivot: [29, 58] },\n { d: mirror(\"M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z\"), pivot: [91, 58] },\n ],\n head: { cx: 60, cy: 42, r: 0 },\n details: [\"M31 20 L47 31 L31 41 Z\", \"M89 20 L73 31 L89 41 Z\"],\n beak: \"M55 50 L65 50 L60 59 Z\",\n eyes: { at: [[47, 41], [73, 41]], white: 10, pupil: 4 },\n },\n duck: {\n shadow: [60, 110, 30, 3.5],\n legs: [],\n back: [\"M88 80 C100 76 104 66 96 62 C98 70 94 74 88 74 Z\"],\n body: \"M26 80 C26 62 94 62 94 80 C94 100 82 106 60 106 C38 106 26 100 26 80 Z\",\n belly: \"M38 84 C38 72 82 72 82 84 C82 96 74 101 60 101 C46 101 38 96 38 84 Z\",\n wings: [\n { d: \"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\", pivot: [27, 74] },\n { d: mirror(\"M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z\"), pivot: [93, 74] },\n ],\n head: { cx: 60, cy: 42, r: 23 },\n details: [\"M57 20 C54 11 63 8 66 14 C62 13 60 16 61 20 Z\"],\n glasses: true,\n beak: \"M43 51 C43 46 55 45 60 45 C65 45 77 46 77 51 C77 56 66 60 60 60 C54 60 43 56 43 51 Z\",\n eyes: { at: [[51, 37], [69, 37]], white: 0, pupil: 2.6 },\n },\n flamingo: {\n shadow: [60, 110, 20, 3],\n legs: [\"M56 86 L55 97 L58 108 M53 108 L62 108\", \"M65 86 L66 108 M62 108 L71 108\"],\n body: \"M38 70 C38 54 88 54 88 70 C88 86 76 90 62 90 C48 90 38 86 38 70 Z\",\n belly: \"M46 72 C46 63 80 63 80 72 C80 82 72 85 63 85 C54 85 46 82 46 72 Z\",\n wings: [\n { d: \"M42 64 C30 68 32 84 47 84 C43 76 43 70 42 64 Z\", pivot: [42, 64] },\n { d: \"M84 64 C96 68 94 84 79 84 C83 76 83 70 84 64 Z\", pivot: [84, 64] },\n ],\n neck: { d: \"M58 60 C58 42 40 34 46 22\", width: 7 },\n head: { cx: 48, cy: 18, r: 11 },\n details: [],\n beak: \"M38 16 C28 18 29 28 24 33 C33 28 38 23 40 20 Z\",\n eyes: { at: [[46, 15]], white: 3.2, pupil: 1.8 },\n },\n pigeon: {\n shadow: [60, 112, 22, 3],\n legs: [\"M52 94 L51 99 M48 99 L54 99\", \"M68 94 L69 99 M66 99 L72 99\"],\n back: [\"M53 98 L52 103\", \"M67 98 L68 103\", \"M30 68 C16 72 14 62 28 56 C17 57 15 49 32 48 Z\"],\n body: \"M34 64 C34 44 86 44 86 64 C86 86 74 96 60 96 C46 96 34 86 34 64 Z\",\n belly: \"M43 68 C43 57 77 57 77 68 C77 82 70 88 60 88 C50 88 43 82 43 68 Z\",\n wings: [\n { d: pigeonWing, pivot: [36, 58] },\n { d: mirror(pigeonWing), pivot: [84, 58] },\n ],\n head: { cx: 60, cy: 36, r: 19 },\n details: [\"M54 18 C56 12 64 12 66 18 C63 16 57 16 54 18 Z\"],\n beak: \"M55 41 L65 41 L60 50 Z\",\n eyes: { at: [[52, 33], [68, 33]], white: 5, pupil: 2.4 },\n parcel: [\"M60 100 L71 105 L60 110 L49 105 Z\", \"M49 105 L60 110 L60 118 L49 113 Z\", \"M71 105 L60 110 L60 118 L71 113 Z\"],\n },\n};\n\n/** What a mood adds around the bird: a badge, a thought, an empty tray. */\nexport const MOOD_PARTS = {\n /** The badge of `success` and `error`, top right. */\n badge: { cx: 98, cy: 22, r: 11 },\n check: \"M92.5 22.5 L96.8 26.6 L103.6 18.4\",\n bang: { line: \"M98 15.5 L98 23.5\", dot: [98, 28] as Point },\n /** `thinking`: three dots rising to the right of the head. */\n dots: [\n [88, 26, 2.6],\n [96, 19, 3.2],\n [105, 11, 3.8],\n ] as const,\n /** `empty`: an open tray beside the bird. */\n tray: \"M90 96 L110 96 L107 108 L93 108 Z\",\n /** `success`: two sparkles. */\n sparkles: [\"M16 26 L18 31 L23 33 L18 35 L16 40 L14 35 L9 33 L14 31 Z\", \"M104 52 L105.2 55 L108 56 L105.2 57 L104 60 L102.8 57 L100 56 L102.8 55 Z\"],\n} as const;\n\n/** The happy eye of `success`: an arch. */\nexport const archEye = ([x, y]: Point, r: number) => `M${x - r} ${y + r * 0.45} Q${x} ${y - r * 1.15} ${x + r} ${y + r * 0.45}`;\n/** The lowered lid of `empty`: a line across the eye. */\nexport const lidEye = ([x, y]: Point, r: number) => `M${x - r} ${y + 0.4} L${x + r} ${y + 0.4}`;\n/** The heavy lid of `empty` over an eye with a white: its upper half. */\nexport const upperLid = ([x, y]: Point, r: number) => `M${x - r} ${y} A${r} ${r} 0 0 1 ${x + r} ${y} Z`;\n/** The worried brow of `error`, above one eye (`side` -1 left, 1 right). */\nexport const brow = ([x, y]: Point, r: number, side: number) =>\n `M${x - r * 1.1} ${y - r * 1.25 - (side < 0 ? 0 : r * 0.7)} L${x + r * 1.1} ${y - r * 1.5 - (side < 0 ? r * 0.7 : 0)}`;\n\nexport interface MascotPalette {\n /** Top and bottom of the body gradient. */\n readonly from: string;\n readonly to: string;\n /** Wings and details (tufts, crest). */\n readonly wing: string;\n readonly detail: string;\n /** Beak and feet. */\n readonly beak: string;\n /** The pupils (and the falcon's visor lights). */\n readonly eye: string;\n}\n\n/** The signature palettes of the Krizaka story (`tone=\"own\"`), from the first drawings of each bird. */\nexport const OWN_PALETTES: Readonly<Record<MascotBird, MascotPalette>> = {\n falcon: { from: \"#ff9f00\", to: \"#ff2a00\", wing: \"#d84315\", detail: \"#b4320d\", beak: \"#ffb300\", eye: \"#00c8d4\" },\n owl: { from: \"#a78bfa\", to: \"#6d28d9\", wing: \"#7c3aed\", detail: \"#5b21b6\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n duck: { from: \"#f43f5e\", to: \"#be123c\", wing: \"#db2777\", detail: \"#9f1239\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n flamingo: { from: \"#f9a8d4\", to: \"#db2777\", wing: \"#ec4899\", detail: \"#be185d\", beak: \"#fbbf24\", eye: \"#1f2937\" },\n pigeon: { from: \"#22d3ee\", to: \"#6366f1\", wing: \"#a855f7\", detail: \"#4338ca\", beak: \"#f59e0b\", eye: \"#1f2937\" },\n};\n\n/** Fixed light and shade, laid at a low opacity over a role (they read on both themes). */\nexport const LIGHT = \"#ffffff\";\nexport const SHADE = \"#000000\";\n/** The parcel's faces (pigeon). */\nexport const PARCEL = [\"#f59e0b\", \"#d97706\", \"#b45309\"] as const;\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","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","LinearGradient","Path","Rect","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","tone","look","View","Svg","Defs","LinearGradient","Stop","Path","Circle","Rect","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","Ellipse","Group","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Group","Path","Ellipse","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"]}
|