@krizaka/ui 3.4.0 → 3.6.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 +1 -0
- package/dist/app-shell.d.ts +24 -22
- package/dist/app-shell.js +9 -3
- package/dist/app-shell.js.map +1 -1
- package/dist/argument-card.js +3 -3
- package/dist/chat.d.ts +187 -0
- package/dist/chat.js +132 -0
- package/dist/chat.js.map +1 -0
- package/dist/chunk-3GODX3D6.js +25 -0
- package/dist/chunk-3GODX3D6.js.map +1 -0
- package/dist/chunk-ECSCA3CN.js +128 -0
- package/dist/chunk-ECSCA3CN.js.map +1 -0
- package/dist/chunk-F2GKFIYK.js +47 -0
- package/dist/chunk-F2GKFIYK.js.map +1 -0
- package/dist/{chunk-R6SDS7JM.js → chunk-ND3L5VHT.js} +25 -2
- package/dist/chunk-ND3L5VHT.js.map +1 -0
- package/dist/command.js +1 -1
- package/dist/data-table.js +20 -134
- package/dist/data-table.js.map +1 -1
- package/dist/dialog.js +7 -3
- package/dist/dialog.js.map +1 -1
- package/dist/loader.d.ts +21 -1
- package/dist/loader.js +7 -3
- package/dist/loader.js.map +1 -1
- package/dist/map.js +7 -1
- package/dist/map.js.map +1 -1
- package/dist/marketing-layout.d.ts +3 -9
- package/dist/marketing-layout.js +24 -7
- package/dist/marketing-layout.js.map +1 -1
- package/dist/match-dialog.d.ts +32 -0
- package/dist/match-dialog.js +168 -0
- package/dist/match-dialog.js.map +1 -0
- package/dist/native.d.ts +484 -106
- package/dist/native.js +1967 -1323
- package/dist/native.js.map +1 -1
- package/dist/page-hero.js +3 -3
- package/dist/photo-grid.d.ts +122 -0
- package/dist/photo-grid.js +94 -0
- package/dist/photo-grid.js.map +1 -0
- package/dist/skip-link.d.ts +15 -0
- package/dist/skip-link.js +10 -0
- package/dist/skip-link.js.map +1 -0
- package/dist/step-progress.d.ts +20 -0
- package/dist/step-progress.js +17 -0
- package/dist/step-progress.js.map +1 -0
- package/dist/swipe-deck.d.ts +183 -0
- package/dist/swipe-deck.js +144 -0
- package/dist/swipe-deck.js.map +1 -0
- package/dist/tag-selector.d.ts +26 -0
- package/dist/tag-selector.js +21 -0
- package/dist/tag-selector.js.map +1 -0
- package/dist/tree-view.d.ts +2 -0
- package/dist/tree-view.js.map +1 -1
- package/dist/verified-badge.d.ts +16 -0
- package/dist/verified-badge.js +23 -0
- package/dist/verified-badge.js.map +1 -0
- package/package.json +120 -8
- package/registry/achievement.json +2 -1
- package/registry/action-bar.json +2 -1
- package/registry/action-sheet.json +1 -0
- package/registry/activity-feed.json +2 -1
- package/registry/alert.json +2 -1
- package/registry/app-shell.json +27 -5
- package/registry/argument-card.json +2 -1
- package/registry/audio-player.json +2 -1
- package/registry/auth-layout.json +7 -2
- package/registry/avatar.json +2 -1
- package/registry/badge.json +2 -1
- package/registry/button.json +2 -1
- package/registry/card-grid.json +2 -1
- package/registry/card.json +2 -1
- package/registry/catalogue-page.json +5 -2
- package/registry/changelog-page.json +5 -2
- package/registry/chat.json +918 -0
- package/registry/checkbox.json +2 -1
- package/registry/chip-link.json +2 -1
- package/registry/chip.json +2 -1
- package/registry/choice-grid.json +2 -1
- package/registry/cn.json +1 -0
- package/registry/code-block.json +2 -1
- package/registry/combobox.json +2 -1
- package/registry/command.json +2 -1
- package/registry/component-page.json +5 -2
- package/registry/confirm-button.json +2 -1
- package/registry/contact-page.json +5 -2
- package/registry/continue-prompt.json +2 -1
- package/registry/countdown.json +2 -1
- package/registry/cta-panel.json +2 -1
- package/registry/dashboard-layout.json +5 -2
- package/registry/data-table.json +2 -1
- package/registry/date-picker.json +3 -2
- package/registry/decision-list.json +2 -1
- package/registry/description-list.json +2 -1
- package/registry/detail-layout.json +16 -2
- package/registry/dialog.json +10 -4
- package/registry/docs-article-page.json +16 -2
- package/registry/docs-hub-page.json +5 -2
- package/registry/docs-layout.json +2 -1
- package/registry/dropdown-menu.json +2 -1
- package/registry/empty-state.json +14 -2
- package/registry/error-page.json +5 -2
- package/registry/examples/chat/conversation.d.ts +4 -0
- package/registry/examples/chat/conversation.js +22 -0
- package/registry/examples/chat/conversation.tsx +21 -0
- package/registry/examples/chat/inbox.d.ts +4 -0
- package/registry/examples/chat/inbox.js +15 -0
- package/registry/examples/chat/inbox.tsx +12 -0
- package/registry/examples/chat/native/conversation.d.ts +4 -0
- package/registry/examples/chat/native/conversation.dark.png +0 -0
- package/registry/examples/chat/native/conversation.js +23 -0
- package/registry/examples/chat/native/conversation.light.png +0 -0
- package/registry/examples/chat/native/conversation.tsx +20 -0
- package/registry/examples/chat/native/inbox.d.ts +4 -0
- package/registry/examples/chat/native/inbox.dark.png +0 -0
- package/registry/examples/chat/native/inbox.js +16 -0
- package/registry/examples/chat/native/inbox.light.png +0 -0
- package/registry/examples/chat/native/inbox.tsx +13 -0
- package/registry/examples/detail-layout/checkout.d.ts +4 -0
- package/registry/examples/detail-layout/checkout.js +37 -0
- package/registry/examples/detail-layout/checkout.tsx +44 -0
- package/registry/examples/docs-article-page/faq.d.ts +4 -0
- package/registry/examples/docs-article-page/faq.js +31 -0
- package/registry/examples/docs-article-page/faq.tsx +40 -0
- package/registry/examples/empty-state/library.d.ts +4 -0
- package/registry/examples/empty-state/library.js +25 -0
- package/registry/examples/empty-state/library.tsx +20 -0
- package/registry/examples/loader/branded.d.ts +4 -0
- package/registry/examples/loader/branded.js +12 -0
- package/registry/examples/loader/branded.tsx +7 -0
- package/registry/examples/loader/native/branded.d.ts +4 -0
- package/registry/examples/loader/native/branded.dark.png +0 -0
- package/registry/examples/loader/native/branded.js +12 -0
- package/registry/examples/loader/native/branded.light.png +0 -0
- package/registry/examples/loader/native/branded.tsx +11 -0
- package/registry/examples/longform-page/case-study.d.ts +4 -0
- package/registry/examples/longform-page/case-study.js +41 -0
- package/registry/examples/longform-page/case-study.tsx +40 -0
- package/registry/examples/match-dialog/its-a-match.d.ts +4 -0
- package/registry/examples/match-dialog/its-a-match.js +29 -0
- package/registry/examples/match-dialog/its-a-match.tsx +25 -0
- package/registry/examples/match-dialog/native/its-a-match.d.ts +4 -0
- package/registry/examples/match-dialog/native/its-a-match.dark.png +0 -0
- package/registry/examples/match-dialog/native/its-a-match.js +28 -0
- package/registry/examples/match-dialog/native/its-a-match.light.png +0 -0
- package/registry/examples/match-dialog/native/its-a-match.tsx +22 -0
- package/registry/examples/photo-grid/native/profile-photos.d.ts +4 -0
- package/registry/examples/photo-grid/native/profile-photos.dark.png +0 -0
- package/registry/examples/photo-grid/native/profile-photos.js +27 -0
- package/registry/examples/photo-grid/native/profile-photos.light.png +0 -0
- package/registry/examples/photo-grid/native/profile-photos.tsx +24 -0
- package/registry/examples/photo-grid/profile-photos.d.ts +4 -0
- package/registry/examples/photo-grid/profile-photos.js +28 -0
- package/registry/examples/photo-grid/profile-photos.tsx +25 -0
- package/registry/examples/pull-to-refresh/native/branded.d.ts +4 -0
- package/registry/examples/pull-to-refresh/native/branded.dark.png +0 -0
- package/registry/examples/pull-to-refresh/native/branded.js +14 -0
- package/registry/examples/pull-to-refresh/native/branded.light.png +0 -0
- package/registry/examples/pull-to-refresh/native/branded.tsx +23 -0
- package/registry/examples/screen/native/app-shell.d.ts +4 -0
- package/registry/examples/screen/native/app-shell.dark.png +0 -0
- package/registry/examples/screen/native/app-shell.js +25 -0
- package/registry/examples/screen/native/app-shell.light.png +0 -0
- package/registry/examples/screen/native/app-shell.tsx +33 -0
- package/registry/examples/screen/native/auth.d.ts +4 -0
- package/registry/examples/screen/native/auth.dark.png +0 -0
- package/registry/examples/screen/native/auth.js +24 -0
- package/registry/examples/screen/native/auth.light.png +0 -0
- package/registry/examples/screen/native/auth.tsx +20 -0
- package/registry/examples/screen/native/chat.d.ts +4 -0
- package/registry/examples/screen/native/chat.dark.png +0 -0
- package/registry/examples/screen/native/chat.js +27 -0
- package/registry/examples/screen/native/chat.light.png +0 -0
- package/registry/examples/screen/native/chat.tsx +22 -0
- package/registry/examples/screen/native/feed.d.ts +4 -0
- package/registry/examples/screen/native/feed.dark.png +0 -0
- package/registry/examples/screen/native/feed.js +24 -0
- package/registry/examples/screen/native/feed.light.png +0 -0
- package/registry/examples/screen/native/feed.tsx +34 -0
- package/registry/examples/screen/native/map.d.ts +4 -0
- package/registry/examples/screen/native/map.dark.png +0 -0
- package/registry/examples/screen/native/map.js +26 -0
- package/registry/examples/screen/native/map.light.png +0 -0
- package/registry/examples/screen/native/map.tsx +31 -0
- package/registry/examples/screen/native/notifications.d.ts +4 -0
- package/registry/examples/screen/native/notifications.dark.png +0 -0
- package/registry/examples/screen/native/notifications.js +21 -0
- package/registry/examples/screen/native/notifications.light.png +0 -0
- package/registry/examples/screen/native/notifications.tsx +21 -0
- package/registry/examples/screen/native/profile.d.ts +4 -0
- package/registry/examples/screen/native/profile.dark.png +0 -0
- package/registry/examples/screen/native/profile.js +29 -0
- package/registry/examples/screen/native/profile.light.png +0 -0
- package/registry/examples/screen/native/profile.tsx +27 -0
- package/registry/examples/screen/native/settings.d.ts +4 -0
- package/registry/examples/screen/native/settings.dark.png +0 -0
- package/registry/examples/screen/native/settings.js +20 -0
- package/registry/examples/screen/native/settings.light.png +0 -0
- package/registry/examples/screen/native/settings.tsx +19 -0
- package/registry/examples/skip-link/default.d.ts +4 -0
- package/registry/examples/skip-link/default.js +19 -0
- package/registry/examples/skip-link/default.tsx +12 -0
- package/registry/examples/splash-handoff/native/default.d.ts +4 -0
- package/registry/examples/splash-handoff/native/default.dark.png +0 -0
- package/registry/examples/splash-handoff/native/default.js +12 -0
- package/registry/examples/splash-handoff/native/default.light.png +0 -0
- package/registry/examples/splash-handoff/native/default.tsx +11 -0
- package/registry/examples/split-view/nearby.d.ts +4 -0
- package/registry/examples/split-view/nearby.js +33 -0
- package/registry/examples/split-view/nearby.tsx +45 -0
- package/registry/examples/split-view/notifications.d.ts +4 -0
- package/registry/examples/split-view/notifications.js +33 -0
- package/registry/examples/split-view/notifications.tsx +31 -0
- package/registry/examples/status-page/maintenance.d.ts +4 -0
- package/registry/examples/status-page/maintenance.js +29 -0
- package/registry/examples/status-page/maintenance.tsx +24 -0
- package/registry/examples/step-progress/native/sign-up.d.ts +4 -0
- package/registry/examples/step-progress/native/sign-up.dark.png +0 -0
- package/registry/examples/step-progress/native/sign-up.js +12 -0
- package/registry/examples/step-progress/native/sign-up.light.png +0 -0
- package/registry/examples/step-progress/native/sign-up.tsx +11 -0
- package/registry/examples/step-progress/sign-up.d.ts +4 -0
- package/registry/examples/step-progress/sign-up.js +22 -0
- package/registry/examples/step-progress/sign-up.tsx +16 -0
- package/registry/examples/swipe-deck/discover.d.ts +4 -0
- package/registry/examples/swipe-deck/discover.js +41 -0
- package/registry/examples/swipe-deck/discover.tsx +37 -0
- package/registry/examples/swipe-deck/native/discover.d.ts +4 -0
- package/registry/examples/swipe-deck/native/discover.dark.png +0 -0
- package/registry/examples/swipe-deck/native/discover.js +39 -0
- package/registry/examples/swipe-deck/native/discover.light.png +0 -0
- package/registry/examples/swipe-deck/native/discover.tsx +35 -0
- package/registry/examples/tag-selector/interests.d.ts +4 -0
- package/registry/examples/tag-selector/interests.js +14 -0
- package/registry/examples/tag-selector/interests.tsx +12 -0
- package/registry/examples/tag-selector/native/interests.d.ts +4 -0
- package/registry/examples/tag-selector/native/interests.dark.png +0 -0
- package/registry/examples/tag-selector/native/interests.js +15 -0
- package/registry/examples/tag-selector/native/interests.light.png +0 -0
- package/registry/examples/tag-selector/native/interests.tsx +15 -0
- package/registry/examples/verified-badge/native/verified.d.ts +4 -0
- package/registry/examples/verified-badge/native/verified.dark.png +0 -0
- package/registry/examples/verified-badge/native/verified.js +18 -0
- package/registry/examples/verified-badge/native/verified.light.png +0 -0
- package/registry/examples/verified-badge/native/verified.tsx +15 -0
- package/registry/examples/verified-badge/verified.d.ts +4 -0
- package/registry/examples/verified-badge/verified.js +17 -0
- package/registry/examples/verified-badge/verified.tsx +13 -0
- package/registry/fab.json +1 -0
- package/registry/field.json +2 -1
- package/registry/file-upload.json +3 -2
- package/registry/filter-bar.json +2 -1
- package/registry/form.json +3 -2
- package/registry/gallery-page.json +5 -2
- package/registry/glow-card.json +2 -1
- package/registry/goal-gauge.json +2 -1
- package/registry/header.json +1 -0
- package/registry/how-it-works-page.json +5 -2
- package/registry/image-cropper.json +2 -1
- package/registry/image-viewer.json +1 -0
- package/registry/index.json +608 -19
- package/registry/iso.json +2 -1
- package/registry/kanban.json +2 -1
- package/registry/kbd.json +2 -1
- package/registry/landing-page.json +5 -2
- package/registry/landscape.json +2 -1
- package/registry/legal-page.json +5 -2
- package/registry/link-card.json +2 -1
- package/registry/list.json +2 -1
- package/registry/loader.json +47 -3
- package/registry/longform-page.json +16 -2
- package/registry/map.json +4 -3
- package/registry/marketing-layout.json +13 -4
- package/registry/marquee.json +2 -1
- package/registry/mascot-quote.json +2 -1
- package/registry/mascot-state.json +2 -1
- package/registry/mascots.json +2 -1
- package/registry/match-dialog.json +315 -0
- package/registry/media-capture.json +2 -1
- package/registry/media-picker.json +1 -0
- package/registry/meter.json +2 -1
- package/registry/nav-bar.json +2 -1
- package/registry/number-ticker.json +2 -1
- package/registry/onboarding.json +1 -0
- package/registry/otp-input.json +1 -0
- package/registry/page-header.json +2 -1
- package/registry/page-hero.json +2 -1
- package/registry/page.json +2 -1
- package/registry/pagination.json +2 -1
- package/registry/permission-prompt.json +1 -0
- package/registry/photo-grid.json +303 -0
- package/registry/pointer-light.json +2 -1
- package/registry/popover.json +2 -1
- package/registry/pricing-page.json +5 -2
- package/registry/product-page.json +5 -2
- package/registry/profile-card.json +2 -1
- package/registry/progress.json +2 -1
- package/registry/promise-card.json +2 -1
- package/registry/pull-to-refresh.json +68 -4
- package/registry/radio-group.json +2 -1
- package/registry/screen.json +233 -0
- package/registry/scroll-stage.json +2 -1
- package/registry/search-field.json +2 -1
- package/registry/section-backdrop.json +2 -1
- package/registry/segmented.json +1 -0
- package/registry/separator.json +2 -1
- package/registry/settings-layout.json +5 -2
- package/registry/skeleton.json +2 -1
- package/registry/skip-link.json +122 -0
- package/registry/slider.json +2 -1
- package/registry/slot.json +2 -1
- package/registry/spinner.json +2 -1
- package/registry/splash-handoff.json +138 -0
- package/registry/split-view.json +27 -2
- package/registry/stage-banner.json +2 -1
- package/registry/stat.json +2 -1
- package/registry/status-page.json +18 -2
- package/registry/step-progress.json +256 -0
- package/registry/stepper.json +2 -1
- package/registry/swipe-deck.json +513 -0
- package/registry/swipeable-row.json +1 -0
- package/registry/switch.json +2 -1
- package/registry/tab-bar.json +1 -0
- package/registry/tabs.json +2 -1
- package/registry/tag-input.json +2 -1
- package/registry/tag-selector.json +277 -0
- package/registry/terminal-replay.json +2 -1
- package/registry/theme.json +2 -1
- package/registry/toast.json +2 -1
- package/registry/toc.json +2 -1
- package/registry/tooltip.json +2 -1
- package/registry/tree-view.json +10 -4
- package/registry/txt.json +1 -0
- package/registry/verified-badge.json +203 -0
- package/registry/video-player.json +2 -1
- package/registry/video-trimmer.json +2 -1
- package/registry/virtual.json +2 -1
- package/dist/chunk-R6SDS7JM.js.map +0 -1
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/countdown/core.ts","../src/date-picker/parts.ts","../src/native/action-sheet.tsx","../src/native/overlay.tsx","../../tokens/dist/native.js","../src/native/theme.tsx","../src/native/txt.tsx","../src/native/activity-feed.tsx","../src/activity-feed/group.ts","../src/native/avatar.tsx","../src/native/badge.tsx","../src/native/button.tsx","../src/native/card.tsx","../src/native/checkbox.tsx","../src/native/chip.tsx","../src/native/combobox.tsx","../src/native/dialog.tsx","../src/native/countdown.tsx","../src/native/date-picker.tsx","../src/native/date-time.tsx","../src/native/wheel.tsx","../src/native/description-list.tsx","../src/native/empty-state.tsx","../src/native/fab.tsx","../src/native/field.tsx","../src/native/goal-gauge.tsx","../src/native/story-motion.ts","../src/native/header.tsx","../src/native/image-viewer.tsx","../src/native/KrizakaMark.tsx","../src/marks/krizaka-geometry.ts","../src/native/mark-motion.ts","../src/native/loader.tsx","../src/native/mascot-state.tsx","../src/native/mascots.tsx","../src/mascots/geometry.ts","../src/native/meter.tsx","../src/native/number-ticker.tsx","../src/native/onboarding.tsx","../src/native/OrazakaMark.tsx","../src/marks/orazaka-geometry.ts","../src/native/OrochiaMark.tsx","../src/marks/orochia-geometry.ts","../src/native/otp-input.tsx","../src/native/pagination.tsx","../src/native/permission-prompt.tsx","../src/native/phoenix.tsx","../src/mascots/phoenix-geometry.ts","../src/native/YazakiaMark.tsx","../src/marks/yazakia-geometry.ts","../src/native/YororisMark.tsx","../src/marks/yororis-geometry.ts","../src/native/ProductMark.tsx","../src/native/profile-card.tsx","../src/native/progress.tsx","../src/native/pull-to-refresh.tsx","../src/native/radio-group.tsx","../src/native/search-field.tsx","../src/native/segmented.tsx","../src/native/skeleton.tsx","../src/native/slider.tsx","../src/native/spinner.tsx","../src/native/stepper.tsx","../src/native/swipeable-row.tsx","../src/native/switch.tsx","../src/native/tab-bar.tsx","../src/native/tabs.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","// Platform-neutral: a date typed as day, month and year (the native `DateField`, the form's `DateField entry=\"parts\"`).\n// Values are ISO calendar dates, `YYYY-MM-DD`, compared as strings.\n\n/** A part of a typed date. */\nexport type DatePart = \"day\" | \"month\" | \"year\";\n\n/** The digits of each part. */\nexport const DATE_PART_LENGTH: Readonly<Record<DatePart, number>> = { day: 2, month: 2, year: 4 };\n\n/** The order of day, month and year in a locale (`en-US` → month, day, year; `fr` → day, month, year). */\nexport function datePartsOrder(locale: string): DatePart[] {\n try {\n const parts = new Intl.DateTimeFormat(locale, { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" }).formatToParts(new Date(2001, 10, 22));\n const order = parts.map((p) => p.type).filter((t): t is DatePart => t === \"day\" || t === \"month\" || t === \"year\");\n if (order.length === 3) return order;\n } catch {\n // An engine without Intl's parts: day, month, year.\n }\n return [\"day\", \"month\", \"year\"];\n}\n\n/** The ISO-ordered value of what was typed: `\"\"` when nothing is, `YYYY-MM-DD` otherwise (not necessarily a real date). */\nexport function composeDate(parts: Readonly<Record<DatePart, string>>): string {\n if (!parts.day && !parts.month && !parts.year) return \"\";\n const pad = (v: string) => (v.length === 1 ? `0${v}` : v);\n return `${parts.year}-${pad(parts.month)}-${pad(parts.day)}`;\n}\n\n/** The parts of a value (`\"\"` → three empty parts). */\nexport function splitDate(value: string | null | undefined): Record<DatePart, string> {\n const m = /^(\\d*)-(\\d*)-(\\d*)$/.exec(value ?? \"\");\n return m ? { year: m[1]!, month: m[2]!, day: m[3]! } : { day: \"\", month: \"\", year: \"\" };\n}\n\n/** True for a real calendar date written `YYYY-MM-DD` (not `2001-02-30`). */\nexport function isRealDate(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n const date = new Date(`${value}T00:00:00Z`);\n return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;\n}\n\n/** The latest date of birth of someone `age` years old today (`YYYY-MM-DD`): an age gate's `max`, `value <= latestBirthDate(18)`. */\nexport function latestBirthDate(age: number, today = new Date()): string {\n return new Date(Date.UTC(today.getFullYear() - age, today.getMonth(), today.getDate())).toISOString().slice(0, 10);\n}\n\n// ─── Shared by the pickers, web and native (no DOM, no React) ───────────────────────────────────────────────────────\n\n/** The days of a month (`month` 1–12). */\nexport function daysInMonth(year: number, month: number): number {\n return new Date(Date.UTC(year, month, 0)).getUTCDate();\n}\n\n/** `2026-10-11` → `{ year: 2026, month: 10, day: 11 }` (no check: pair it with `isRealDate`). */\nexport function isoParts(iso: string): { year: number; month: number; day: number } {\n const [year = 0, month = 0, day = 0] = iso.split(\"-\").map(Number);\n return { year, month, day };\n}\n\n/** `{ 2026, 10, 11 }` → `2026-10-11`, the day kept inside the month (`2026-02-31` → `2026-02-28`). */\nexport function isoOf(year: number, month: number, day: number): string {\n const d = Math.min(Math.max(day, 1), daysInMonth(year, month));\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\n\n/** The ISO date of today on this device (or of the `Date` given). */\nexport function todayIso(now = new Date()): string {\n return isoOf(now.getFullYear(), now.getMonth() + 1, now.getDate());\n}\n\n/** The age in whole years on `today` of someone born on `birth` (both ISO). */\nexport function ageOn(birth: string, today: string = todayIso()): number {\n const b = isoParts(birth);\n const t = isoParts(today);\n return t.year - b.year - (t.month < b.month || (t.month === b.month && t.day < b.day) ? 1 : 0);\n}\n\n/** The month names of a locale, January first (`long` · `short` · `narrow`). */\nexport function monthNames(locale: string, style: \"long\" | \"short\" | \"narrow\" = \"long\"): string[] {\n const format = new Intl.DateTimeFormat(locale, { month: style, timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, i) => format.format(new Date(Date.UTC(2001, i, 1))));\n}\n\n/** The years from `from` to `to`, both included, in that order (descending when `from > to`). */\nexport function yearRange(from: number, to: number): number[] {\n const step = from <= to ? 1 : -1;\n return Array.from({ length: Math.abs(to - from) + 1 }, (_, i) => from + i * step);\n}\n\n/** A time of day, `HH:mm` on 24 hours (`\"09:30\"`, `\"18:00\"`): the value of every time picker. */\nexport type TimeValue = string;\n\n/** `\"9:5\"` / `\"09:05\"` → minutes since midnight; `null` when it is not a time. */\nexport function timeToMinutes(value: string | null | undefined): number | null {\n const m = /^(\\d{1,2}):(\\d{1,2})$/.exec(value ?? \"\");\n if (!m) return null;\n const h = Number(m[1]);\n const min = Number(m[2]);\n return h < 24 && min < 60 ? h * 60 + min : null;\n}\n\n/** Minutes since midnight → `HH:mm`. */\nexport function minutesToTime(minutes: number): TimeValue {\n const m = ((Math.round(minutes) % 1440) + 1440) % 1440;\n return `${String(Math.floor(m / 60)).padStart(2, \"0\")}:${String(m % 60).padStart(2, \"0\")}`;\n}\n\n/** The slots of a day from `start` to `end` (excluded) every `step` minutes: `timeSlots(\"09:00\", \"12:00\", 30)`. */\nexport function timeSlots(start: TimeValue, end: TimeValue, step = 30): TimeValue[] {\n const a = timeToMinutes(start);\n const b = timeToMinutes(end);\n if (a === null || b === null || step <= 0) return [];\n const slots: TimeValue[] = [];\n for (let m = a; m < b; m += step) slots.push(minutesToTime(m));\n return slots;\n}\n\n/** True when the locale writes the time on 12 hours with a day period (`en-US` → true, `fr-CA` → false). */\nexport function uses12Hours(locale: string): boolean {\n try {\n const options = new Intl.DateTimeFormat(locale, { hour: \"numeric\" }).resolvedOptions() as Intl.ResolvedDateTimeFormatOptions & { hourCycle?: string };\n return options.hourCycle ? options.hourCycle === \"h12\" || options.hourCycle === \"h11\" : Boolean(options.hour12);\n } catch {\n return false;\n }\n}\n\n/** The day periods of a locale, morning first (`[\"AM\", \"PM\"]`, `[\"a.m.\", \"p.m.\"]`). */\nexport function dayPeriods(locale: string): [string, string] {\n const format = new Intl.DateTimeFormat(locale, { hour: \"numeric\", hour12: true, timeZone: \"UTC\" });\n const period = (h: number) => format.formatToParts(new Date(Date.UTC(2001, 0, 1, h))).find((p) => p.type === \"dayPeriod\")?.value ?? (h < 12 ? \"AM\" : \"PM\");\n return [period(9), period(15)];\n}\n\n/** A time written the locale's way (`\"18:30\"` → `\"6:30 PM\"` in en-US, `\"18 h 30\"` in fr-CA). */\nexport function formatTime(locale: string, value: TimeValue): string {\n const minutes = timeToMinutes(value);\n if (minutes === null) return \"\";\n return new Intl.DateTimeFormat(locale, { hour: \"numeric\", minute: \"2-digit\", timeZone: \"UTC\" }).format(new Date(Date.UTC(2001, 0, 1, 0, minutes)));\n}\n\n/** A local `Date` at midnight for an ISO date (for formatting). */\nexport const toLocalDate = (iso: string) => {\n const { year, month, day } = isoParts(iso);\n return new Date(year, month - 1, day);\n};\n/** The ISO date of a local `Date`. */\nexport const toIsoDate = (date: Date): string => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n/** The ISO date `days` later (or earlier). */\nexport const addDays = (iso: string, days: number) => {\n const date = toLocalDate(iso);\n date.setDate(date.getDate() + days);\n return toIsoDate(date);\n};\n/** The ISO date `months` later (or earlier), the day kept inside the shorter months (`01-31` + 1 → `02-28`). */\nexport const addMonths = (iso: string, months: number) => {\n const { year, month, day } = isoParts(iso);\n const first = new Date(year, month - 1 + months, 1);\n return isoOf(first.getFullYear(), first.getMonth() + 1, day);\n};\n\n/** The first day of the week for a locale (0 = Sunday … 6 = Saturday), from `Intl.Locale` week info; Monday otherwise. */\nexport function weekStartOf(locale: string): number {\n try {\n const info = new Intl.Locale(locale) as Intl.Locale & { getWeekInfo?: () => { firstDay: number }; weekInfo?: { firstDay: number } };\n const firstDay = info.getWeekInfo?.().firstDay ?? info.weekInfo?.firstDay;\n return firstDay ? firstDay % 7 : 1;\n } catch {\n return 1;\n }\n}\n\n/** The weeks of a month's grid (six at most), each seven ISO dates from the locale's first day of the week. */\nexport function monthGrid(month: string, weekStartsOn: number): string[][] {\n const first = `${month.slice(0, 7)}-01`;\n const lead = (toLocalDate(first).getDay() - weekStartsOn + 7) % 7;\n const start = addDays(first, -lead);\n const days = Array.from({ length: 42 }, (_, i) => addDays(start, i));\n return Array.from({ length: 6 }, (_, w) => days.slice(w * 7, w * 7 + 7)).filter((week, w) => w < 5 || week[0]!.slice(0, 7) === first.slice(0, 7));\n}\n","import * as React from \"react\";\nimport { Modal, Pressable, StyleSheet, View } from \"react-native\";\n\nimport { type Controlled, modalName, useOpen } from \"./overlay\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ActionSheetAction = {\n /** The action's words — passed translated. */\n label: string;\n /** What it does; the sheet closes first. */\n onPress: () => void;\n /** A destructive action wears the danger text. */\n destructive?: boolean;\n /** A decorative icon before the words. */\n icon?: React.ReactNode;\n /** Cannot be chosen now. */\n disabled?: boolean;\n};\n\nexport type ActionSheetProps = Controlled & {\n /** What the choices are about (“Your video”) — the accessible name. */\n title: string;\n /** One line under the title. */\n description?: string;\n /** The choices, in order. */\n actions: readonly ActionSheetAction[];\n /** The cancel button's words (“Cancel”) — passed translated. */\n cancelLabel: string;\n};\n\n/** A short list of actions from the bottom edge — share, edit, delete — and a cancel button apart, as the platforms do. */\nexport function ActionSheet({ title, description, actions, cancelLabel, ...controlled }: ActionSheetProps) {\n const [open, setOpen] = useOpen(controlled);\n const { theme, radius, insets, haptic } = useTheme();\n const reduce = useReducedMotion();\n // The material: what floats over the screen is glass, its top edge catching the light.\n const card = { backgroundColor: theme.glassBg, borderColor: theme.glassBorder, borderTopColor: theme.edgeLight, borderRadius: radius.xl };\n return (\n <Modal {...modalName(title)} visible={open} transparent animationType={reduce ? \"none\" : \"slide\"} onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable aria-hidden accessible={false} style={[StyleSheet.absoluteFill, { backgroundColor: theme.scrim }]} onPress={() => setOpen(false)} />\n <View style={[styles.bottom, styles.actionWrap, { paddingBottom: 8 + insets.bottom }]} pointerEvents=\"box-none\">\n <View role=\"menu\" aria-label={title} style={[styles.actionCard, card]}>\n <View style={styles.actionHead}>\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.centred}>\n {title}\n </Txt>\n {description ? (\n <Txt variant=\"caption\" tone=\"muted\" style={styles.centred}>\n {description}\n </Txt>\n ) : null}\n </View>\n {actions.map((action, i) => (\n <Pressable\n key={i}\n role=\"menuitem\"\n aria-disabled={action.disabled}\n disabled={action.disabled}\n onPress={() => {\n haptic(\"selection\");\n setOpen(false);\n action.onPress();\n }}\n style={({ pressed }) => [styles.action, { borderTopColor: theme.borderSubtle, backgroundColor: pressed ? theme.surface2 : \"transparent\", opacity: action.disabled ? 0.4 : 1 }]}\n >\n {action.icon ? <View aria-hidden>{action.icon}</View> : null}\n <Txt variant=\"label\" tone={action.destructive ? \"danger\" : \"text\"}>\n {action.label}\n </Txt>\n </Pressable>\n ))}\n </View>\n <Pressable role=\"button\" onPress={() => setOpen(false)} style={({ pressed }) => [styles.cancel, card, { backgroundColor: pressed ? theme.surface2 : theme.surface1 }]}>\n <Txt variant=\"label\">{cancelLabel}</Txt>\n </Pressable>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n bottom: { flex: 1, justifyContent: \"flex-end\" },\n actionWrap: { paddingHorizontal: 8, gap: 8 },\n actionCard: { borderWidth: StyleSheet.hairlineWidth, overflow: \"hidden\" },\n actionHead: { paddingVertical: 12, paddingHorizontal: 16, gap: 2 },\n centred: { textAlign: \"center\" },\n action: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 10, minHeight: 52, paddingHorizontal: 16, borderTopWidth: StyleSheet.hairlineWidth },\n cancel: { minHeight: 52, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n});\n","// Shared by the overlays of /native (ActionSheet, ImageViewer): controlled-or-not opening, and the name react-native-web\n// gives its Modal. Not an entry of its own.\nimport * as React from \"react\";\n\n/**\n * The name of a `Modal`: react-native-web draws it as the page's `dialog` and forwards the props it does not know, so the\n * dialog is named there; React Native ignores it (the content carries the name and `accessibilityViewIsModal`).\n */\nexport const modalName = (label: string) => ({ \"aria-label\": label }) as object;\n\nexport type Controlled = {\n /** Open (controlled). */\n open?: boolean;\n /** Open at first, uncontrolled. */\n defaultOpen?: boolean;\n /** Called when it opens or closes (the back button, the scrim, an action). */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport function useOpen({ open, defaultOpen = false, onOpenChange }: Controlled): [boolean, (next: boolean) => void] {\n const [own, setOwn] = React.useState(defaultOpen);\n const value = open ?? own;\n const set = React.useCallback(\n (next: boolean) => {\n if (open === undefined) setOwn(next);\n onOpenChange?.(next);\n },\n [open, onOpenChange],\n );\n return [value, set];\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 \"successSoft\": \"rgba(16,183,127,0.14)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"warningSoft\": \"rgba(245,159,10,0.14)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"dangerSoft\": \"rgba(239,67,67,0.14)\",\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 \"surfaceSheen\": \"rgba(255,255,255,0.045)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.07)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(4,4,7,0.5)\",\n \"glassBg\": \"rgba(29,29,32,0.88)\",\n \"glassBorder\": \"rgba(255,255,255,0.1)\"\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 \"successSoft\": \"rgba(16,183,127,0.1)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"warningSoft\": \"rgba(245,159,10,0.12)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"dangerSoft\": \"rgba(239,67,67,0.1)\",\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 \"surfaceSheen\": \"rgba(255,255,255,0.7)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.9)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(48,52,80,0.08)\",\n \"glassBg\": \"rgba(255,255,255,0.88)\",\n \"glassBorder\": \"rgba(0,0,0,0.08)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"xs\": 6,\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"2xl\": 28,\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 \"text\": \"Inter\",\n \"display\": \"Plus Jakarta Sans\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/**\n * Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`), the short spring of what answers the hand\n * (`motion.spring`) and the micro-interaction durations in ms (`motion.duration.fast`) — 0 when the system reduces motion.\n */\nexport const motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16,1,0.3,1]), spring: /* @__PURE__ */ Object.freeze([0.34,1.36,0.64,1]), duration: /* @__PURE__ */ Object.freeze({\"instant\":90,\"fast\":150,\"base\":200}) });\n\n/**\n * The type scale in dp: fontSize, lineHeight and letterSpacing absolute (React Native has no em), fontWeight as a string,\n * and the role whose family sets it — with @krizaka/fonts: `{ ...typeScale.bodyMd, fontFamily: fontFamily(role, weight) }`.\n */\nexport const typeScale = /* @__PURE__ */ Object.freeze({\n \"display2xl\": {\n \"role\": \"display\",\n \"fontSize\": 72,\n \"lineHeight\": 73,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -2.52\n },\n \"displayXl\": {\n \"role\": \"display\",\n \"fontSize\": 56,\n \"lineHeight\": 59,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -1.68\n },\n \"displayLg\": {\n \"role\": \"display\",\n \"fontSize\": 44,\n \"lineHeight\": 48,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -1.1\n },\n \"displayMd\": {\n \"role\": \"display\",\n \"fontSize\": 34,\n \"lineHeight\": 39,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.68\n },\n \"displaySm\": {\n \"role\": \"display\",\n \"fontSize\": 26,\n \"lineHeight\": 31,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.39\n },\n \"titleLg\": {\n \"role\": \"display\",\n \"fontSize\": 20,\n \"lineHeight\": 27,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.2\n },\n \"titleMd\": {\n \"role\": \"text\",\n \"fontSize\": 17,\n \"lineHeight\": 24,\n \"fontWeight\": \"600\",\n \"letterSpacing\": -0.2\n },\n \"bodyLg\": {\n \"role\": \"text\",\n \"fontSize\": 18,\n \"lineHeight\": 29,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.25\n },\n \"bodyMd\": {\n \"role\": \"text\",\n \"fontSize\": 16,\n \"lineHeight\": 26,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.18\n },\n \"bodySm\": {\n \"role\": \"text\",\n \"fontSize\": 14,\n \"lineHeight\": 21,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.08\n },\n \"caption\": {\n \"role\": \"text\",\n \"fontSize\": 12,\n \"lineHeight\": 17,\n \"fontWeight\": \"500\",\n \"letterSpacing\": 0\n },\n \"overline\": {\n \"role\": \"mono\",\n \"fontSize\": 11,\n \"lineHeight\": 14,\n \"fontWeight\": \"600\",\n \"letterSpacing\": 1.32\n },\n \"monoMd\": {\n \"role\": \"mono\",\n \"fontSize\": 14,\n \"lineHeight\": 22,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n },\n \"monoSm\": {\n \"role\": \"mono\",\n \"fontSize\": 12,\n \"lineHeight\": 18,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n }\n});\n\n/**\n * The shadows per theme as React Native `boxShadow` strings (RN ≥ 0.76): `raised` (a button, a card), `floating`\n * (a menu, a popover), `overlay` (a sheet, a toast) — ink-tinted, several layers, as on the web.\n */\nexport const shadows = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.06)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.15), 0 2px 4px 0 rgba(0,0,0,0.08)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.18), 0 4px 8px 0 rgba(0,0,0,0.08)\",\n \"raised\": \"0 1px 2px 0 rgba(4,4,7,0.45), 0 2px 6px -2px rgba(4,4,7,0.3)\",\n \"floating\": \"0 2px 4px 0 rgba(4,4,7,0.35), 0 12px 24px -6px rgba(4,4,7,0.45), 0 24px 48px -12px rgba(4,4,7,0.35)\",\n \"overlay\": \"0 4px 8px 0 rgba(4,4,7,0.4), 0 24px 48px -12px rgba(4,4,7,0.5), 0 48px 96px -24px rgba(4,4,7,0.45)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.06), 0 1px 2px 0 rgba(0,0,0,0.04)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.08), 0 2px 4px 0 rgba(0,0,0,0.04)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.1), 0 4px 8px 0 rgba(0,0,0,0.05)\",\n \"raised\": \"0 1px 2px 0 rgba(48,52,80,0.08), 0 2px 6px -2px rgba(48,52,80,0.08)\",\n \"floating\": \"0 2px 4px 0 rgba(48,52,80,0.06), 0 12px 24px -6px rgba(48,52,80,0.1), 0 24px 48px -12px rgba(48,52,80,0.1)\",\n \"overlay\": \"0 4px 8px 0 rgba(48,52,80,0.08), 0 24px 48px -12px rgba(48,52,80,0.14), 0 48px 96px -24px rgba(48,52,80,0.14)\"\n}) });\n\n/** The griffe (BRAND.md §6.1): the size of the 45° cut corner of a control, in dp. */\nexport const cut = /* @__PURE__ */ Object.freeze({\n \"size\": 10\n});\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 \"yazakia\": {\n \"dark\": {\n \"accent\": \"#24dbc9\",\n \"accentHover\": \"#47e1d2\",\n \"accentSoft\": \"rgba(36,219,201,0.12)\",\n \"accentText\": \"#3ee0cf\",\n \"accent2\": \"#22c378\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#24dbc9\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0a241e\",\n \"brandGradientVia\": \"#0c1818\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#097169\",\n \"accentHover\": \"#085e57\",\n \"accentSoft\": \"rgba(9,113,105,0.08)\",\n \"accentText\": \"#096d64\",\n \"accent2\": \"#107546\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#097169\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e1faf1\",\n \"brandGradientVia\": \"#e9fbfa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yororis\": {\n \"dark\": {\n \"accent\": \"#98b587\",\n \"accentHover\": \"#adc69f\",\n \"accentSoft\": \"rgba(152,181,135,0.12)\",\n \"accentText\": \"#a7c497\",\n \"accent2\": \"#c3a579\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#98b587\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#1c1812\",\n \"brandGradientVia\": \"#11140f\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#456237\",\n \"accentHover\": \"#39532d\",\n \"accentSoft\": \"rgba(69,98,55,0.08)\",\n \"accentText\": \"#415b33\",\n \"accent2\": \"#745834\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#456237\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#f5efe5\",\n \"brandGradientVia\": \"#f1f6ee\",\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 \"yazakia\": [\n [\n \"0%\",\n \"#079d61\"\n ],\n [\n \"100%\",\n \"#089b96\"\n ]\n ],\n \"yororis\": [\n [\n \"0%\",\n \"#a4773d\"\n ],\n [\n \"100%\",\n \"#5d894d\"\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 /** Status tints (a badge, an alert): the primary text reads ≥ 4.5:1 on them. */\n readonly successSoft: string;\n readonly warningSoft: string;\n readonly dangerSoft: string;\n /** The material (BRAND.md §6): the top of a raised surface catches the light… */\n readonly surfaceSheen: string;\n /** …the bottom of a fill is shaded a little… */\n readonly fillShade: string;\n /** …and a 1-pt edge of light runs along the top of what is raised (`edgeOnFill` on an accent fill)… */\n readonly edgeLight: string;\n readonly edgeOnFill: string;\n /** …what you fill (a field, a track) is a well. */\n readonly edgeWell: string;\n /** Frosted glass: what floats over the screen (a toast, a sheet). */\n readonly glassBg: string;\n readonly glassBorder: string;\n};\n\n/** Corner radii, in points. */\nexport type Radius = {\n readonly xs: number;\n readonly sm: number;\n readonly md: number;\n readonly lg: number;\n readonly xl: number;\n readonly \"2xl\": number;\n readonly full: number;\n};\n/**\n * Motion: the cubic-bezier control points of the platform's ease (`Easing.bezier(...motion.ease)`), the short spring of\n * what answers the hand, and the micro-interaction durations in ms — `useTheme()` gives 0 ms when the system reduces motion.\n */\nexport type Motion = {\n readonly ease: readonly [number, number, number, number];\n readonly spring: readonly [number, number, number, number];\n readonly duration: { readonly instant: number; readonly fast: number; readonly base: number };\n};\n\nconst themes: Readonly<Record<ThemeName, Theme>> = tokenThemes;\nconst radius: Radius = tokenRadius;\nconst motion: Motion = tokenMotion;\nconst stillMotion: Motion = { ...motion, duration: { instant: 0, fast: 0, base: 0 } };\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\n/**\n * A touch the hand feels: `selection` (a wheel's value, a slider's step, a radio picked), `impact` (a tactile button\n * pressed in), `success` / `warning` (an outcome).\n */\nexport type HapticKind = \"selection\" | \"impact\" | \"success\" | \"warning\";\n\n/** The screen's safe-area insets, in points (`useSafeAreaInsets()` of react-native-safe-area-context). */\nexport type Insets = { readonly top: number; readonly right: number; readonly bottom: number; readonly left: number };\n\nconst NO_INSETS: Insets = { top: 0, right: 0, bottom: 0, left: 0 };\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 /** Plays a haptic (the app's `haptics`, through expo-haptics or another module); nothing without one. */\n haptic: (kind: HapticKind) => void;\n /** The safe-area insets the app passed (zero by default): the tab bar, the header and the FAB keep clear of them. */\n insets: Insets;\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null);\nconst noop = () => undefined;\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 * Plays the haptics of the controls (a wheel's tick, a slider's step, a tactile button). The platform has no module:\n * the app passes one — `(kind) => kind === \"selection\" ? Haptics.selectionAsync() : Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)`\n * with expo-haptics. Absent: no haptics.\n */\n haptics?: (kind: HapticKind) => void;\n /** The safe-area insets (`useSafeAreaInsets()` of react-native-safe-area-context): bars and floating buttons keep clear of them. */\n insets?: Insets;\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, haptics, insets }: 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 reduce = useReducedMotion();\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: reduce ? stillMotion : motion, fonts: fonts ?? {}, haptic: haptics ?? noop, insets: insets ?? NO_INSETS }),\n [mode, setMode, scheme, theme, fonts, reduce, haptics, insets],\n );\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\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: {}, haptic: noop, insets: NO_INSETS };\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 { 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 { AccessibilityInfo, SectionList, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { type ActivityEvent, type ActivityTone, groupActivity, timeAgo } from \"../activity-feed/group\";\nimport { type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type { ActivityEvent, ActivityTone } from \"../activity-feed/group\";\n\nexport type ActivityFeedLabels = {\n /** The heading of today's events. */\n today: string;\n /** The heading of yesterday's. */\n yesterday: string;\n /** A folded run: `(n) => \"×\" + n`. */\n times: (count: number) => string;\n /** Announced when new events arrive in a live feed. */\n newEvents: (count: number) => string;\n};\n\nconst LABELS: ActivityFeedLabels = { today: \"Today\", yesterday: \"Yesterday\", times: (n) => `×${n}`, newEvents: (n) => (n === 1 ? \"1 new event\" : `${n} new events`) };\n\nexport type ActivityFeedProps<T extends ActivityEvent> = {\n /** The events, in any order. */\n events: readonly T[];\n /** The feed's accessible name. */\n \"aria-label\"?: string;\n /** The locale of the dates and the “… ago”. Default `en-US`. */\n locale?: string;\n /** Now, for the “… ago” and the headings. Default: now, refreshed every minute. */\n now?: Date;\n /** Fold the runs of the same actor and kind. Default true. */\n fold?: boolean;\n /** Announce new events (a stream). */\n live?: boolean;\n /** Before an event's text: its actor's `Avatar`. */\n leading?: (event: T) => React.ReactNode;\n /** Shown when there is no event (an `EmptyState`). */\n empty?: React.ReactNode;\n /** The words, passed translated. */\n labels?: Partial<ActivityFeedLabels>;\n /** Styles of the list. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst tone = (t: Theme, name: ActivityTone | undefined) => ({ neutral: t.borderStrong, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger, info: t.info })[name ?? \"neutral\"];\n\n/** What happened, newest first — the web `ActivityFeed`: by day under sticky headings, runs folded, “2 min ago”, new events announced. */\nexport function ActivityFeed<T extends ActivityEvent>({ events, \"aria-label\": label, locale = \"en-US\", now: given, fold = true, live, leading, empty, labels: words, style }: ActivityFeedProps<T>) {\n const { theme } = useTheme();\n const labels = { ...LABELS, ...words };\n const [tick, setTick] = React.useState(() => given ?? new Date());\n React.useEffect(() => {\n if (given) return;\n const timer = setInterval(() => setTick(new Date()), 60_000);\n return () => clearInterval(timer);\n }, [given]);\n const now = given ?? tick;\n const seen = React.useRef(events.length);\n React.useEffect(() => {\n const added = events.length - seen.current;\n seen.current = events.length;\n if (live && added > 0) AccessibilityInfo.announceForAccessibility(labels.newEvents(added));\n }, [events.length, live]); // eslint-disable-line react-hooks/exhaustive-deps -- announce on a new count only\n const sections = groupActivity(events, { now, locale, today: labels.today, yesterday: labels.yesterday, fold }).map((g) => ({ title: g.label, data: g.events }));\n return (\n <SectionList\n aria-label={label}\n style={style}\n sections={sections}\n keyExtractor={(item) => item.event.id}\n stickySectionHeadersEnabled\n ListEmptyComponent={empty ? <>{empty}</> : null}\n renderSectionHeader={({ section }) => (\n <View style={[styles.heading, { backgroundColor: theme.surface0 }]}>\n <Txt variant=\"caption\" tone=\"secondary\" role=\"heading\" style={styles.headingText}>\n {section.title}\n </Txt>\n </View>\n )}\n renderItem={({ item: { event, count } }) => (\n <View style={styles.row} accessible>\n {leading ? leading(event) : <View aria-hidden style={[styles.marker, { backgroundColor: tone(theme, event.tone) }]} />}\n <View style={styles.body}>\n <Txt>\n {event.title}\n {count > 1 ? <Txt variant=\"caption\" tone=\"secondary\">{` ${labels.times(count)}`}</Txt> : null}\n </Txt>\n {event.description ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {event.description}\n </Txt>\n ) : null}\n </View>\n <Txt variant=\"caption\" tone=\"secondary\">\n {timeAgo(event.at, { now, locale })}\n </Txt>\n </View>\n )}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n heading: { paddingVertical: 6 },\n headingText: { fontWeight: \"700\", textTransform: \"uppercase\", letterSpacing: 0.6 },\n row: { flexDirection: \"row\", alignItems: \"flex-start\", gap: 12, paddingVertical: 10 },\n marker: { width: 10, height: 10, borderRadius: 5, marginTop: 5 },\n body: { flex: 1, gap: 2 },\n});\n","// Shared by the web and React Native ActivityFeed: the events grouped by day (“Today”, “Yesterday”, a date), the same\n// events of one actor in a row folded into one (“Mina tipped 3 times”), and how long ago each happened — Intl only.\n\nexport type ActivityTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport type ActivityEvent = {\n /** A stable id. */\n id: string;\n /** When it happened: an ISO date-time, an epoch in ms or a `Date`. */\n at: string | number | Date;\n /** What happened, in a sentence — passed translated (“Mina tipped your video $5”). */\n title: string;\n /** A detail under it. */\n description?: string;\n /** Who did it (folds a run of the same `kind` by the same actor). */\n actor?: string;\n /** The kind of event (`tip`, `bid`, `job.done`): with `actor`, what folds. */\n kind?: string;\n /** The tone of its marker: success for a payout, danger for a failure. */\n tone?: ActivityTone;\n};\n\nexport type ActivityGroup<T extends ActivityEvent> = {\n /** The day's heading (“Today”, “Yesterday”, “Monday, Oct 6”). */\n label: string;\n /** Its events, newest first; a folded run is its newest event with `count` > 1. */\n events: { event: T; count: number }[];\n};\n\nconst dayKey = (date: Date) => `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\n\n/** Groups events (any order) by day, newest first, folding runs of the same actor and kind when `fold` is set. */\nexport function groupActivity<T extends ActivityEvent>(\n events: readonly T[],\n { now = new Date(), locale = \"en-US\", today = \"Today\", yesterday = \"Yesterday\", fold = true }: { now?: Date; locale?: string; today?: string; yesterday?: string; fold?: boolean } = {},\n): ActivityGroup<T>[] {\n const sorted = [...events].sort((a, b) => new Date(b.at).getTime() - new Date(a.at).getTime());\n const day = new Intl.DateTimeFormat(locale, { weekday: \"long\", month: \"short\", day: \"numeric\" });\n const todayKey = dayKey(now);\n const yesterdayKey = dayKey(new Date(now.getTime() - 86_400_000));\n const groups: ActivityGroup<T>[] = [];\n let current: ActivityGroup<T> | null = null;\n let currentKey = \"\";\n for (const event of sorted) {\n const date = new Date(event.at);\n const key = dayKey(date);\n if (!current || key !== currentKey) {\n currentKey = key;\n current = { label: key === todayKey ? today : key === yesterdayKey ? yesterday : day.format(date), events: [] };\n groups.push(current);\n }\n const last = current.events[current.events.length - 1];\n if (fold && last && event.actor && event.kind && last.event.actor === event.actor && last.event.kind === event.kind) last.count += 1;\n else current.events.push({ event, count: 1 });\n }\n return groups;\n}\n\nconst UNITS: [Intl.RelativeTimeFormatUnit, number][] = [\n [\"second\", 60],\n [\"minute\", 60],\n [\"hour\", 24],\n [\"day\", 7],\n [\"week\", 4.35],\n [\"month\", 12],\n [\"year\", Number.POSITIVE_INFINITY],\n];\n\n/** “2 minutes ago”, “yesterday”: how long ago, in the largest unit that reads well (`style` short: “2 min. ago”). */\nexport function timeAgo(at: string | number | Date, { now = new Date(), locale = \"en-US\", style = \"short\" }: { now?: Date; locale?: string; style?: \"long\" | \"short\" | \"narrow\" } = {}): string {\n let value = (new Date(at).getTime() - now.getTime()) / 1000;\n let unit: Intl.RelativeTimeFormatUnit = \"second\";\n for (const [name, size] of UNITS) {\n unit = name;\n if (Math.abs(value) < size - 0.5) break;\n value /= size;\n }\n return new Intl.RelativeTimeFormat(locale, { numeric: \"auto\", style }).format(Math.round(value) + 0, unit);\n}\n","import * as React from \"react\";\nimport { Image, StyleSheet, Text, View, type ViewProps } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Stop, SvgUri } from \"react-native-svg\";\n\nimport { useSvgId, 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 /** A dot at the bottom right: `online` (success), `away` (warning), `busy` (danger), `offline` (hollow). */\n presence?: \"online\" | \"away\" | \"busy\" | \"offline\";\n /** The words of the presence for screen readers (“online”) — passed translated; read after the name. */\n presenceLabel?: string;\n /** A ring around it: `story` (an unseen story, in the accent gradient), `seen` (a story already watched), `live` (danger). */\n ring?: \"story\" | \"seen\" | \"live\";\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\", presence, presenceLabel, ring, style, ...props }: AvatarProps) {\n const { theme } = useTheme();\n const gradient = useSvgId(\"kz-ring-\");\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 const picture = (\n <View\n accessible={Boolean(alt) && !presence && !ring}\n role={alt && !presence && !ring ? \"img\" : undefined}\n aria-label={alt && !presence && !ring ? alt : undefined}\n {...(presence || ring ? {} : props)}\n style={[styles.root, { width: side, height: side, borderRadius: side / 2, backgroundColor: theme.surface3 }, presence || ring ? null : 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 if (!presence && !ring) return picture;\n const gap = ring ? Math.max(2.5, Math.round(side * 0.07)) : 0;\n const outer = side + gap * 4;\n const dot = Math.max(8, Math.round(side * 0.28));\n const dotColor = presence === \"online\" ? theme.success : presence === \"away\" ? theme.warning : presence === \"busy\" ? theme.danger : theme.surface0;\n const name = [alt, presence ? presenceLabel : null].filter(Boolean).join(\", \");\n return (\n <View accessible={Boolean(name)} role={name ? \"img\" : undefined} aria-label={name || undefined} {...props} style={[{ width: outer, height: outer, alignItems: \"center\", justifyContent: \"center\" }, style]}>\n {ring ? (\n <Svg width={outer} height={outer} style={StyleSheet.absoluteFill} aria-hidden>\n <Defs>\n <LinearGradient id={gradient} x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n <Circle\n cx={outer / 2}\n cy={outer / 2}\n r={outer / 2 - gap / 2 - 0.5}\n fill=\"none\"\n strokeWidth={gap}\n stroke={ring === \"story\" ? `url(#${gradient})` : ring === \"live\" ? theme.danger : theme.borderStrong}\n />\n </Svg>\n ) : null}\n {picture}\n {presence ? (\n <View\n aria-hidden\n style={[\n styles.dot,\n { width: dot, height: dot, borderRadius: dot / 2, right: gap * 2, bottom: gap * 2, backgroundColor: dotColor, borderColor: presence === \"offline\" ? theme.textMuted : theme.surface0 },\n ]}\n />\n ) : null}\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 dot: { position: \"absolute\", borderWidth: 2 },\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 { 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 StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type CheckboxProps = {\n /** The words next to the box: text (pressable with it), or a `Txt` with links inside (terms, privacy) — then the box alone is pressed and `label` names it. */\n children?: React.ReactNode;\n /** The accessible name when `children` is not plain text (a sentence with links), passed translated. */\n label?: string;\n /** Ticked (controlled). */\n checked?: boolean;\n /** Ticked at first, uncontrolled. */\n defaultChecked?: boolean;\n /** Called with the new state when the row is pressed. */\n onCheckedChange?: (checked: boolean) => void;\n /** An error under the row (a box that must be ticked): read with it and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last, on the row. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A checkbox for React Native: a 44-pt row — the box and its words, pressed as one — with an error under it. The web\n * `Checkbox` with `children`.\n */\nexport function Checkbox({ children, label, checked, defaultChecked = false, onCheckedChange, error, disabled, style }: CheckboxProps) {\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(defaultChecked);\n const on = checked ?? own;\n const toggle = () => {\n if (checked === undefined) setOwn(!on);\n onCheckedChange?.(!on);\n };\n const box = (\n <View\n style={[\n styles.box,\n { borderRadius: radius.xs + 2, borderColor: error ? theme.danger : on ? theme.accent : theme.borderStrong, backgroundColor: on ? theme.accent : theme.surface1 },\n ]}\n >\n {on ? (\n <Svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.onAccent} strokeWidth={3} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n ) : null}\n </View>\n );\n const plain = children === undefined || typeof children === \"string\";\n const a11y = {\n role: \"checkbox\" as const,\n \"aria-checked\": on,\n \"aria-disabled\": disabled || undefined,\n \"aria-label\": label ?? (typeof children === \"string\" ? children : undefined),\n accessibilityHint: error,\n disabled,\n onPress: toggle,\n };\n return (\n <View style={[styles.root, style]}>\n {plain ? (\n <Pressable {...a11y} hitSlop={4} style={[styles.row, disabled ? styles.disabled : null]}>\n {box}\n {children !== undefined ? (\n <View style={styles.text}>\n <Text style={[styles.label, { color: theme.textPrimary }]}>{children}</Text>\n </View>\n ) : null}\n </Pressable>\n ) : (\n // Words with links: the box alone is the control (a 44-pt target, named by `label`), the links stay links.\n <View style={[styles.row, disabled ? styles.disabled : null]}>\n <Pressable {...a11y} hitSlop={11} style={styles.target}>\n {box}\n </Pressable>\n <View style={styles.text}>{children}</View>\n </View>\n )}\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.error, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 2, alignSelf: \"stretch\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 12, minHeight: 44 },\n target: { minHeight: 44, justifyContent: \"center\" },\n box: { width: 22, height: 22, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n text: { flex: 1 },\n label: { fontSize: 15, lineHeight: 21 },\n error: { fontSize: 12, lineHeight: 16, paddingLeft: 34 },\n disabled: { opacity: 0.4 },\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 { Pressable, ScrollView, type StyleProp, StyleSheet, Text, TextInput, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { Sheet } from \"./dialog\";\nimport { useTheme } from \"./theme\";\n\n/** An option: the value stored and its words (passed translated), a line under them. */\nexport type SelectOption = { value: string; label: string; description?: string; disabled?: boolean };\n\nfunction Chevron({ color }: { color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"m6 9 6 6 6-6\" />\n </Svg>\n );\n}\n\nfunction Tick({ color }: { color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n );\n}\n\ntype FieldShared = {\n /** The visible label, passed translated (the field's name). */\n label: string;\n /** Shown while nothing is chosen (\"Choose a category\"), passed translated. */\n placeholder?: string;\n /** A help text under the field. */\n hint?: string;\n /** An error under the field: a danger edge, read and announced. Replaces the hint. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Called when the sheet closes (the field is left). */\n onBlur?: () => void;\n /** Styles merged last, on the field. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The field that opens the sheet: a well with the label above, the value (or the placeholder), a chevron. */\nfunction Trigger({ shared, text, onPress, open }: { shared: FieldShared; text: string | null; onPress: () => void; open: boolean }) {\n const { theme, radius } = useTheme();\n const { label, placeholder, hint, error, disabled } = shared;\n const caption = error ?? hint;\n return (\n <View style={[styles.field, shared.style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <Pressable\n role=\"button\"\n aria-label={`${label}, ${text ?? placeholder ?? \"\"}`.replace(/, $/, \"\")}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled || undefined}\n accessibilityHint={caption}\n disabled={disabled}\n onPress={onPress}\n style={[styles.trigger, { borderRadius: radius.md, backgroundColor: theme.surface2, borderColor: error ? theme.danger : open ? theme.accent : theme.borderDefault }, disabled ? styles.disabled : null]}\n >\n <Text numberOfLines={1} style={[styles.triggerText, { color: text ? theme.textPrimary : theme.textSecondary }]}>\n {text ?? placeholder ?? \"\"}\n </Text>\n <Chevron color={theme.textSecondary} />\n </Pressable>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\n/** The options as rows of the sheet: radios (one) or checkboxes (several), each 48 pt. */\nfunction Options({ options, isChosen, onPick, multiple }: { options: readonly SelectOption[]; isChosen: (v: string) => boolean; onPick: (o: SelectOption) => void; multiple?: boolean }) {\n const { theme, radius, haptic } = useTheme();\n return (\n <ScrollView role={multiple ? \"list\" : \"radiogroup\"} keyboardShouldPersistTaps=\"handled\" style={styles.options}>\n {options.map((o) => {\n const chosen = isChosen(o.value);\n return (\n <Pressable\n key={o.value}\n role={multiple ? \"checkbox\" : \"radio\"}\n aria-checked={chosen}\n aria-label={o.description ? `${o.label}, ${o.description}` : o.label}\n aria-disabled={o.disabled || undefined}\n disabled={o.disabled}\n onPress={() => {\n haptic(\"selection\");\n onPick(o);\n }}\n style={({ pressed }) => [styles.option, { borderRadius: radius.md, backgroundColor: chosen ? theme.accentSoft : pressed ? theme.surface3 : \"transparent\" }, o.disabled ? styles.disabled : null]}\n >\n <View style={styles.optionText}>\n <Text style={[styles.optionLabel, { color: theme.textPrimary, fontWeight: chosen ? \"700\" : \"500\" }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </View>\n {chosen ? <Tick color={theme.accentText} /> : null}\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nexport type SelectProps = FieldShared & {\n /** The choices. */\n options: readonly SelectOption[];\n /** The chosen value (controlled); `null` or `\"\"` for none. */\n value?: string | null;\n /** The chosen value at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the value picked. */\n onValueChange?: (value: string) => void;\n /** The sheet's title. Default: the label. */\n sheetTitle?: string;\n};\n\n/** One choice among many — the web `<select>`: a field that opens a sheet of options; picking one closes it. */\nexport function Select({ options, value: valueProp, defaultValue = null, onValueChange, sheetTitle, ...shared }: SelectProps) {\n const [own, setOwn] = React.useState<string | null>(defaultValue);\n const value = valueProp !== undefined ? valueProp : own;\n const [open, setOpen] = React.useState(false);\n const close = () => {\n setOpen(false);\n shared.onBlur?.();\n };\n return (\n <>\n <Trigger shared={shared} text={options.find((o) => o.value === value)?.label ?? null} open={open} onPress={() => setOpen(true)} />\n <Sheet open={open} onOpenChange={(o) => (o ? setOpen(true) : close())} title={sheetTitle ?? shared.label}>\n <Options\n options={options}\n isChosen={(v) => v === value}\n onPick={(o) => {\n if (valueProp === undefined) setOwn(o.value);\n onValueChange?.(o.value);\n close();\n }}\n />\n </Sheet>\n </>\n );\n}\n\nexport type ComboboxLabels = {\n /** The search box's name and placeholder (\"Search\"). */\n search: string;\n /** While a search runs (\"Searching…\"). */\n loading: string;\n /** When nothing matches (\"No results\"). */\n empty: string;\n /** The button that closes a multiple choice (\"Done\"). */\n done: string;\n};\n\nexport const comboboxLabels: ComboboxLabels = { search: \"Search\", loading: \"Searching…\", empty: \"No results\", done: \"Done\" };\n\nexport type ComboboxProps = FieldShared & {\n /** The options, filtered by what is typed. */\n options?: readonly SelectOption[];\n /** Fetches the options for a query (debounced 250 ms, aborted by a newer one). */\n onSearch?: (query: string, signal: AbortSignal) => Promise<readonly SelectOption[]>;\n /** Several values (`string[]`, checkboxes, a Done button); one by default. */\n multiple?: boolean;\n /** The chosen value(s) (controlled): a string, or strings with `multiple`. */\n value?: string | readonly string[] | null;\n /** Called with the value — or the values — chosen. */\n onValueChange?: (value: string | string[]) => void;\n /** The words, passed translated; English by default. */\n labels?: Partial<ComboboxLabels>;\n};\n\n/** A choice among many, searched: a field that opens a sheet with a search box and the matching options. */\nexport function Combobox({ options = [], onSearch, multiple, value, onValueChange, labels: given, ...shared }: ComboboxProps) {\n const labels = { ...comboboxLabels, ...given };\n const { theme, radius } = useTheme();\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const [found, setFound] = React.useState<readonly SelectOption[] | null>(null);\n const [loading, setLoading] = React.useState(false);\n const [seen, setSeen] = React.useState<Record<string, SelectOption>>({});\n const chosen: string[] = value == null ? [] : typeof value === \"string\" ? (value ? [value] : []) : [...value];\n React.useEffect(() => {\n if (!onSearch || !open) return;\n const controller = new AbortController();\n const timer = setTimeout(() => {\n setLoading(true);\n onSearch(query, controller.signal)\n .then((result) => {\n if (!controller.signal.aborted) setFound(result);\n })\n .catch(() => undefined)\n .finally(() => {\n if (!controller.signal.aborted) setLoading(false);\n });\n }, 250);\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [query, onSearch, open]);\n const q = query.trim().toLowerCase();\n const list = onSearch ? (found ?? []) : options.filter((o) => !q || o.label.toLowerCase().includes(q));\n const labelOf = (v: string) => options.find((o) => o.value === v)?.label ?? seen[v]?.label ?? v;\n const close = () => {\n setOpen(false);\n setQuery(\"\");\n shared.onBlur?.();\n };\n return (\n <>\n <Trigger shared={shared} text={chosen.length ? chosen.map(labelOf).join(\", \") : null} open={open} onPress={() => setOpen(true)} />\n <Sheet open={open} onOpenChange={(o) => (o ? setOpen(true) : close())} title={shared.label}>\n <TextInput\n aria-label={labels.search}\n placeholder={labels.search}\n placeholderTextColor={theme.textMuted}\n value={query}\n onChangeText={setQuery}\n autoFocus\n autoCorrect={false}\n returnKeyType=\"search\"\n style={[styles.search, { borderRadius: radius.md, backgroundColor: theme.surface2, borderColor: theme.borderDefault, color: theme.textPrimary }]}\n />\n {loading ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{labels.loading}</Text> : null}\n {!loading && list.length === 0 ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{labels.empty}</Text> : null}\n <Options\n options={list}\n multiple={multiple}\n isChosen={(v) => chosen.includes(v)}\n onPick={(o) => {\n setSeen((known) => ({ ...known, [o.value]: o }));\n if (multiple) onValueChange?.(chosen.includes(o.value) ? chosen.filter((v) => v !== o.value) : [...chosen, o.value]);\n else {\n onValueChange?.(o.value);\n close();\n }\n }}\n />\n {multiple ? (\n <Pressable role=\"button\" onPress={close} style={[styles.done, { borderRadius: radius.md, backgroundColor: theme.accent }]}>\n <Text style={[styles.doneText, { color: theme.onAccent }]}>{labels.done}</Text>\n </Pressable>\n ) : null}\n </Sheet>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n field: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n trigger: { minHeight: 48, flexDirection: \"row\", alignItems: \"center\", gap: 8, paddingHorizontal: 14, borderWidth: 1 },\n triggerText: { flex: 1, fontSize: 16 },\n caption: { fontSize: 12, lineHeight: 16 },\n options: { flexGrow: 0 },\n option: { minHeight: 48, flexDirection: \"row\", alignItems: \"center\", gap: 12, paddingHorizontal: 12, paddingVertical: 8 },\n optionText: { flex: 1, gap: 2 },\n optionLabel: { fontSize: 16 },\n search: { height: 44, paddingHorizontal: 12, borderWidth: 1, fontSize: 16 },\n done: { height: 48, alignItems: \"center\", justifyContent: \"center\" },\n doneText: { fontSize: 15, fontWeight: \"700\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { Animated, Modal, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SheetProps = {\n /** Open (controlled). */\n open: boolean;\n /** Called to close it: the scrim pressed, the back button, a choice made. */\n onOpenChange: (open: boolean) => void;\n /** The title at the top of the sheet (its accessible name), passed translated. */\n title?: string;\n /** The name of the close action read by screen readers (\"Close\"), passed translated. */\n closeLabel?: string;\n /** The content: a list, details, a form. */\n children: React.ReactNode;\n /** Styles merged last, on the sheet. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A bottom sheet: it rises over a dimmed screen, its grip on top, the scrim closes it. The web `Dialog` on a phone —\n * a choice (`Select`, `Combobox`), the details of a pin on a map, a short form. React Native's `Modal`: focus stays\n * inside, the back button closes it. Rises with the theme's ease; still under reduced motion.\n */\nexport function Sheet({ open, onOpenChange, title, closeLabel = \"Close\", children, style }: SheetProps) {\n const { theme, radius, motion } = useTheme();\n const [rise] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (open) Animated.timing(rise, { toValue: 1, duration: motion.duration.base * 1.6, useNativeDriver: true }).start();\n else rise.setValue(0);\n }, [open, rise, motion.duration.base]);\n return (\n <Modal transparent visible={open} animationType=\"none\" onRequestClose={() => onOpenChange(false)} statusBarTranslucent>\n <View style={styles.backdrop}>\n <Animated.View style={[StyleSheet.absoluteFill, { opacity: rise }]}>\n <Pressable role=\"button\" aria-label={closeLabel} onPress={() => onOpenChange(false)} style={[StyleSheet.absoluteFill, { backgroundColor: theme.scrim }]} />\n </Animated.View>\n <Animated.View\n role=\"dialog\"\n aria-label={title}\n style={[\n styles.sheet,\n {\n backgroundColor: theme.surface1,\n borderColor: theme.borderDefault,\n borderTopLeftRadius: radius[\"2xl\"],\n borderTopRightRadius: radius[\"2xl\"],\n shadowColor: theme.scrimStrong,\n transform: [{ translateY: rise.interpolate({ inputRange: [0, 1], outputRange: [48, 0] }) }],\n opacity: rise.interpolate({ inputRange: [0, 1], outputRange: [0.6, 1] }),\n },\n style,\n ]}\n >\n <View aria-hidden style={[styles.grip, { backgroundColor: theme.borderStrong }]} />\n {title ? (\n <Text role=\"heading\" style={[styles.title, { color: theme.textPrimary }]}>\n {title}\n </Text>\n ) : null}\n {children}\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: { flex: 1, justifyContent: \"flex-end\" },\n sheet: { maxHeight: \"85%\", paddingHorizontal: 16, paddingTop: 8, paddingBottom: 28, gap: 12, borderWidth: StyleSheet.hairlineWidth, shadowOpacity: 0.3, shadowRadius: 16, shadowOffset: { width: 0, height: -4 }, elevation: 12 },\n grip: { alignSelf: \"center\", width: 40, height: 5, borderRadius: 3, marginBottom: 4 },\n title: { fontSize: 17, fontWeight: \"700\" },\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 { Platform, type StyleProp, StyleSheet, Text, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\n\nimport { composeDate, DATE_PART_LENGTH, type DatePart, datePartsOrder, splitDate as split } from \"../date-picker/parts\";\nimport { useTheme } from \"./theme\";\n\ntype Part = DatePart;\nconst LENGTH = DATE_PART_LENGTH;\n\nexport type DateFieldLabels = {\n /** The name of the day's box. */\n day: string;\n /** The name of the month's box. */\n month: string;\n /** The name of the year's box. */\n year: string;\n};\n\nexport const dateFieldLabels: DateFieldLabels = { day: \"Day\", month: \"Month\", year: \"Year\" };\n\nexport type DateFieldProps = {\n /** The visible label of the date, passed translated (the group's accessible name). */\n label: string;\n /** A help text under the boxes (\"For example, 27 3 1990\"). */\n hint?: string;\n /** An error under the boxes: a danger border and caption, read with them and announced. Replaces the hint. */\n error?: string;\n /** The date, `YYYY-MM-DD` (controlled); `\"\"` for none. What is typed comes back in the same order, real date or not: the schema decides. */\n value?: string;\n /** The date at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the date typed so far (`\"\"` when the boxes are empty). */\n onValueChange?: (value: string) => void;\n /** Called when focus leaves the last box. */\n onBlur?: () => void;\n /** The locale that orders the boxes (day · month · year, or month · day · year). Default `en-US`. */\n locale?: string;\n /** The names of the boxes, passed translated; English by default. */\n labels?: Partial<DateFieldLabels>;\n /** `bday` for a date of birth: the system offers to fill it. */\n autoComplete?: \"bday\" | \"off\";\n /** Not available. */\n disabled?: boolean;\n /** The first box (in the locale's order), to focus the field from the one before it. */\n inputRef?: React.Ref<TextInput>;\n /** Called by the last box's return key (`returnKeyType`): move to the next field, or send the form. */\n onSubmitEditing?: () => void;\n /** The last box's return key. Default `done`. */\n returnKeyType?: \"next\" | \"done\" | \"go\" | \"send\";\n /** Styles merged last, on the field. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A date typed as day, month and year — a memorable date (a birth date, an expiry) that a calendar would make slow to\n * reach: numeric keypads, the boxes in the locale's order, the next box focused once one is full. No native module.\n */\nexport function DateField({ label, hint, error, value, defaultValue, onValueChange, onBlur, locale = \"en-US\", labels: given, autoComplete, disabled, inputRef, onSubmitEditing, returnKeyType = \"done\", style }: DateFieldProps) {\n const { theme, radius } = useTheme();\n const labels = { ...dateFieldLabels, ...given };\n const order = React.useMemo(() => datePartsOrder(locale), [locale]);\n const [parts, setParts] = React.useState(() => split(value ?? defaultValue));\n const [focused, setFocused] = React.useState<Part | null>(null);\n const refs = { day: React.useRef<TextInput>(null), month: React.useRef<TextInput>(null), year: React.useRef<TextInput>(null) };\n // A value set from outside (a reset, a suggestion) replaces what is in the boxes.\n if (value !== undefined && value !== composeDate(parts) && composeDate(split(value)) === value) setParts(split(value));\n const caption = error ?? hint;\n\n const change = (part: Part, text: string) => {\n const digits = text.replace(/\\D/g, \"\").slice(0, LENGTH[part]);\n const next = { ...parts, [part]: digits };\n setParts(next);\n onValueChange?.(composeDate(next));\n const following = order[order.indexOf(part) + 1];\n if (digits.length === LENGTH[part] && following) refs[following].current?.focus();\n };\n\n return (\n <View role=\"group\" aria-label={label} style={[styles.root, disabled ? styles.disabled : null, style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <View style={styles.row}>\n {order.map((part, i) => (\n <View key={part} style={part === \"year\" ? styles.yearBox : styles.box}>\n <Text style={[styles.part, { color: theme.textSecondary }]}>{labels[part]}</Text>\n <TextInput\n ref={(node) => {\n refs[part].current = node;\n if (i === 0 && inputRef) {\n if (typeof inputRef === \"function\") inputRef(node);\n else (inputRef as React.RefObject<TextInput | null>).current = node;\n }\n }}\n aria-label={`${label}, ${labels[part]}`}\n accessibilityHint={caption}\n value={parts[part]}\n editable={!disabled}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n maxLength={LENGTH[part]}\n autoComplete={autoComplete === \"bday\" ? ((Platform.OS === \"web\" ? `bday-${part}` : `birthdate-${part}`) as TextInputProps[\"autoComplete\"]) : \"off\"}\n returnKeyType={i === order.length - 1 ? returnKeyType : \"next\"}\n submitBehavior={i === order.length - 1 && returnKeyType !== \"next\" ? \"blurAndSubmit\" : \"submit\"}\n onSubmitEditing={() => {\n const following = order[i + 1];\n if (following) refs[following].current?.focus();\n else onSubmitEditing?.();\n }}\n onChangeText={(text) => change(part, text)}\n onFocus={() => setFocused(part)}\n onBlur={() => {\n setFocused(null);\n if (i === order.length - 1) onBlur?.();\n }}\n style={[\n styles.input,\n { color: theme.textPrimary, backgroundColor: theme.surface2, borderRadius: radius.md, borderColor: error ? theme.danger : focused === part ? theme.accent : theme.borderDefault },\n ]}\n />\n </View>\n ))}\n </View>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n row: { flexDirection: \"row\", gap: 10 },\n box: { width: 64, gap: 4 },\n yearBox: { width: 88, gap: 4 },\n part: { fontSize: 11, lineHeight: 14 },\n input: { height: 44, borderWidth: 1, paddingHorizontal: 10, fontSize: 16, fontVariant: [\"tabular-nums\"], textAlign: \"center\" },\n caption: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.5 },\n});\n","// React Native: the dates and times of the web's `@krizaka/ui/date-picker`, with the same ISO values (`YYYY-MM-DD`,\n// `YYYY-MM`, `HH:mm`) and the same helpers (`../date-picker/parts`): `Calendar`, `MonthPicker`, `DayStrip`,\n// `TimePicker` (wheels or slots) and `DateWheel`. Words come from Intl for the `locale` given; the hand feels each\n// choice (`selection` haptic, when the app passes `haptics` to the ThemeProvider).\nimport * as React from \"react\";\nimport { Pressable, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport {\n addDays,\n addMonths,\n datePartsOrder,\n dayPeriods,\n daysInMonth,\n formatTime,\n isoOf,\n isoParts,\n monthGrid,\n monthNames,\n timeToMinutes,\n type TimeValue,\n todayIso,\n toLocalDate,\n uses12Hours,\n weekStartOf,\n yearRange,\n} from \"../date-picker/parts\";\nimport { useTheme } from \"./theme\";\nimport { Wheel, WheelDivider, type WheelOption, WheelPicker } from \"./wheel\";\n\nconst longDate = (locale: string, iso: string) => new Intl.DateTimeFormat(locale, { dateStyle: \"long\" }).format(toLocalDate(iso));\nconst useOwn = <T,>(value: T | undefined, initial: T) => {\n const [own, setOwn] = React.useState(initial);\n return [value !== undefined ? value : own, (next: T) => value === undefined && setOwn(next)] as const;\n};\n\nfunction Chevron({ direction, color }: { direction: \"left\" | \"right\"; color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d={direction === \"left\" ? \"m15 18-6-6 6-6\" : \"m9 18 6-6-6-6\"} />\n </Svg>\n );\n}\n\nfunction NavButton({ label, direction, disabled, onPress }: { label: string; direction: \"left\" | \"right\"; disabled?: boolean; onPress: () => void }) {\n const { theme, radius } = useTheme();\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [styles.nav, { borderRadius: radius.md, backgroundColor: pressed ? theme.surface3 : theme.surface2, borderColor: theme.borderSubtle }, disabled ? styles.disabled : null]}\n >\n <Chevron direction={direction} color={theme.textSecondary} />\n </Pressable>\n );\n}\n\n/** The node of the marks (a small diamond): today. */\nfunction Node({ color, style }: { color: string; style?: StyleProp<ViewStyle> }) {\n return <View aria-hidden style={[styles.node, { backgroundColor: color }, style]} />;\n}\n\nexport type CalendarLabels = {\n /** The previous-month button (\"Previous month\"). */\n previousMonth: string;\n /** The next-month button (\"Next month\"). */\n nextMonth: string;\n};\n\nexport const calendarLabels: CalendarLabels = { previousMonth: \"Previous month\", nextMonth: \"Next month\" };\n\nexport type CalendarProps = {\n /** The BCP 47 locale of the names: always explicit. */\n locale: string;\n /** The chosen date (one-date mode). */\n value?: string | null;\n /** The chosen range (range mode): its ends lit, the days between one band. */\n range?: { start: string; end: string | null } | null;\n /** Called with the day pressed. */\n onSelect?: (date: string) => void;\n /** The month shown at first (any day of it). Default: the value's, or today's. */\n defaultMonth?: string;\n /** The earliest date that can be picked. */\n min?: string;\n /** The latest date that can be picked. */\n max?: string;\n /** Refuses some dates. */\n isDateDisabled?: (date: string) => boolean;\n /** The first day of the week, 0 = Sunday. Default: the locale's. */\n weekStartsOn?: number;\n /** Today (marked by the node). Default: the device's date. */\n today?: string;\n /** The words, passed translated; English by default. */\n labels?: Partial<CalendarLabels>;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A month to pick a day or the ends of a period — the web `Calendar`: 44-pt days, today's node, the range as a band. */\nexport function Calendar({ locale, value, range, onSelect, defaultMonth, min, max, isDateDisabled, weekStartsOn, today: todayProp, labels: given, style }: CalendarProps) {\n const labels = { ...calendarLabels, ...given };\n const { theme, radius, haptic } = useTheme();\n const today = todayProp ?? todayIso();\n const [month, setMonth] = React.useState(`${(defaultMonth ?? value ?? range?.start ?? today).slice(0, 7)}-01`);\n const start = weekStartsOn ?? weekStartOf(locale);\n const weeks = monthGrid(month, start);\n const weekday = new Intl.DateTimeFormat(locale, { weekday: \"narrow\" });\n const title = new Intl.DateTimeFormat(locale, { month: \"long\", year: \"numeric\" }).format(toLocalDate(month));\n const [lo, hi] = range?.end ? (range.start <= range.end ? [range.start, range.end] : [range.end, range.start]) : [null, null];\n const off = (iso: string) => Boolean((min && iso < min) || (max && iso > max) || isDateDisabled?.(iso));\n return (\n <View style={[styles.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.xl }, style]}>\n <View style={styles.header}>\n <NavButton label={labels.previousMonth} direction=\"left\" disabled={Boolean(min && addDays(month, -1) < min)} onPress={() => setMonth(addMonths(month, -1))} />\n <Text role=\"heading\" aria-live=\"polite\" style={[styles.title, { color: theme.textPrimary }]}>\n {title}\n </Text>\n <NavButton label={labels.nextMonth} direction=\"right\" disabled={Boolean(max && addMonths(month, 1) > max)} onPress={() => setMonth(addMonths(month, 1))} />\n </View>\n <View style={styles.week} aria-hidden>\n {weeks[0]!.map((iso) => (\n <Text key={iso} style={[styles.weekday, { color: theme.textSecondary }]}>\n {weekday.format(toLocalDate(iso))}\n </Text>\n ))}\n </View>\n <View role=\"radiogroup\" aria-label={title}>\n {weeks.map((week) => (\n <View key={week[0]} style={styles.week}>\n {week.map((iso) => {\n const outside = iso.slice(0, 7) !== month.slice(0, 7);\n const selected = iso === value || Boolean(range && (iso === range.start || iso === range.end));\n const disabled = off(iso);\n const band = lo && hi && lo !== hi && iso >= lo && iso <= hi;\n return (\n <View\n key={iso}\n style={[\n styles.cell,\n band ? { backgroundColor: theme.accentSoft } : null,\n band && iso === lo ? { borderTopLeftRadius: radius.lg, borderBottomLeftRadius: radius.lg } : null,\n band && iso === hi ? { borderTopRightRadius: radius.lg, borderBottomRightRadius: radius.lg } : null,\n ]}\n >\n <Pressable\n role=\"radio\"\n aria-label={longDate(locale, iso)}\n aria-checked={selected}\n aria-disabled={disabled || undefined}\n aria-current={iso === today ? \"date\" : undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n onSelect?.(iso);\n }}\n style={({ pressed }) => [\n styles.day,\n { borderRadius: radius.lg },\n selected ? { backgroundColor: theme.accent } : pressed ? { backgroundColor: theme.surface3 } : null,\n ]}\n >\n <Text\n style={[\n styles.dayText,\n {\n color: selected ? theme.onAccent : disabled ? theme.textMuted : iso === today ? theme.accentText : outside ? theme.textSecondary : theme.textPrimary,\n fontWeight: selected || iso === today ? \"700\" : \"400\",\n textDecorationLine: disabled ? \"line-through\" : \"none\",\n },\n ]}\n >\n {Number(iso.slice(8))}\n </Text>\n {iso === today ? <Node color={selected ? theme.onAccent : theme.accent} style={styles.todayNode} /> : null}\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nexport type MonthPickerProps = {\n /** The BCP 47 locale of the month names: always explicit. */\n locale: string;\n /** The chosen month, `YYYY-MM` (controlled); `null` for none. */\n value?: string | null;\n /** Called with the month pressed. */\n onValueChange?: (value: string) => void;\n /** The earliest month, `YYYY-MM`. */\n min?: string;\n /** The latest month, `YYYY-MM`. */\n max?: string;\n /** The words of the year buttons, passed translated. */\n labels?: { previousYear?: string; nextYear?: string };\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A month of a year: the twelve months in a grid, the year above them — the web `MonthPicker`. */\nexport function MonthPicker({ locale, value, onValueChange, min, max, labels, style }: MonthPickerProps) {\n const { theme, radius, haptic } = useTheme();\n const [year, setYear] = React.useState(Number((value ?? todayIso()).slice(0, 4)));\n const names = monthNames(locale, \"short\").map((n) => n.replace(/\\.$/, \"\"));\n const long = monthNames(locale, \"long\");\n return (\n <View style={[styles.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.xl }, style]}>\n <View style={styles.header}>\n <NavButton label={labels?.previousYear ?? \"Previous year\"} direction=\"left\" disabled={Boolean(min && year - 1 < Number(min.slice(0, 4)))} onPress={() => setYear(year - 1)} />\n <Text role=\"heading\" aria-live=\"polite\" style={[styles.title, { color: theme.textPrimary }]}>\n {year}\n </Text>\n <NavButton label={labels?.nextYear ?? \"Next year\"} direction=\"right\" disabled={Boolean(max && year + 1 > Number(max.slice(0, 4)))} onPress={() => setYear(year + 1)} />\n </View>\n <View role=\"radiogroup\" aria-label={String(year)} style={styles.months}>\n {names.map((name, i) => {\n const id = `${year}-${String(i + 1).padStart(2, \"0\")}`;\n const selected = id === value;\n const disabled = Boolean((min && id < min) || (max && id > max));\n return (\n <Pressable\n key={id}\n role=\"radio\"\n aria-checked={selected}\n aria-label={`${long[i]} ${year}`}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n onValueChange?.(id);\n }}\n style={({ pressed }) => [styles.month, { borderRadius: radius.lg, backgroundColor: selected ? theme.accent : pressed ? theme.surface3 : \"transparent\" }, disabled ? styles.disabled : null]}\n >\n <Text style={[styles.monthText, { color: selected ? theme.onAccent : theme.textPrimary, fontWeight: selected ? \"700\" : \"500\" }]}>{name}</Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\nexport type DayStripProps = {\n /** The group's accessible name (\"Delivery day\"), passed translated. */\n label: string;\n /** The BCP 47 locale: always explicit. */\n locale: string;\n /** The chosen day, ISO (controlled); `null` for none. */\n value?: string | null;\n /** The chosen day at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the day pressed. */\n onValueChange?: (value: string) => void;\n /** The first day. Default: today. */\n start?: string;\n /** How many days. Default 14. */\n days?: number;\n /** Refuses some days (closed, full). */\n isDateDisabled?: (date: string) => boolean;\n /** Marks the days that have something: a dot, and `markedLabel` in their name. */\n isDateMarked?: (date: string) => boolean;\n /** Added to the name of a marked day (\"has events\"), passed translated. */\n markedLabel?: string;\n /** Today (the node). Default: the device's date. */\n today?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The days ahead in a row that scrolls sideways — the web `DayStrip`: a radio group of 56×72-pt days. */\nexport function DayStrip({ label, locale, value: valueProp, defaultValue = null, onValueChange, start, days = 14, isDateDisabled, isDateMarked, markedLabel = \"has events\", today: todayProp, style }: DayStripProps) {\n const { theme, radius, haptic } = useTheme();\n const today = todayProp ?? todayIso();\n const first = start ?? today;\n const [value, setValue] = useOwn(valueProp, defaultValue);\n const weekday = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n const list = Array.from({ length: days }, (_, i) => addDays(first, i));\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} role=\"radiogroup\" aria-label={label} contentContainerStyle={styles.strip} style={style}>\n {list.map((iso) => {\n const selected = iso === value;\n const disabled = Boolean(isDateDisabled?.(iso));\n const marked = Boolean(isDateMarked?.(iso));\n const name = longDate(locale, iso);\n return (\n <Pressable\n key={iso}\n role=\"radio\"\n aria-checked={selected}\n aria-label={marked ? `${name}, ${markedLabel}` : name}\n aria-disabled={disabled || undefined}\n aria-current={iso === today ? \"date\" : undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n setValue(iso);\n onValueChange?.(iso);\n }}\n style={({ pressed }) => [\n styles.stripDay,\n {\n borderRadius: radius.xl,\n backgroundColor: selected ? theme.accent : disabled ? \"transparent\" : theme.surface2,\n borderColor: selected ? theme.accent : theme.borderDefault,\n borderStyle: disabled ? \"dashed\" : \"solid\",\n transform: [{ scale: pressed ? 0.95 : 1 }],\n },\n ]}\n >\n {iso === today ? <Node color={selected ? theme.onAccent : theme.accent} style={styles.stripNode} /> : null}\n <Text style={[styles.stripWeekday, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textSecondary }]}>{weekday.format(toLocalDate(iso)).replace(/\\.$/, \"\").toUpperCase()}</Text>\n <Text style={[styles.stripNumber, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textPrimary }]}>{Number(iso.slice(8))}</Text>\n <View style={[styles.dot, marked ? { backgroundColor: selected ? theme.onAccent : theme.textSecondary } : null]} />\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nexport type TimePickerLabels = {\n /** The hours' wheel (\"Hours\"). */\n hours: string;\n /** The minutes' wheel (\"Minutes\"). */\n minutes: string;\n /** The day period's wheel (\"AM/PM\"). */\n period: string;\n};\n\nexport type TimePickerProps = {\n /** The accessible name (\"Pick-up time\"), passed translated. */\n label: string;\n /** The BCP 47 locale: how times are written, 12 or 24 hours. */\n locale: string;\n /** The time, `HH:mm` on 24 hours (controlled); `null` for none. */\n value?: TimeValue | null;\n /** The time at first, uncontrolled. */\n defaultValue?: TimeValue | null;\n /** Called with the time chosen. */\n onValueChange?: (value: TimeValue) => void;\n /** `wheel` (default: hours, minutes and the period as wheels) or `slots` (the free times as buttons). */\n variant?: \"wheel\" | \"slots\";\n /** Wheels: the minutes' step. Default 5. */\n minuteStep?: number;\n /** Wheels: forces 12 or 24 hours. Default: the locale's. */\n hour12?: boolean;\n /** Wheels: the names of the wheels, passed translated. */\n labels?: Partial<TimePickerLabels>;\n /** Slots: the times offered, `HH:mm` (`timeSlots(\"09:00\", \"17:00\", 30)`). */\n slots?: readonly TimeValue[];\n /** Slots: refuses some (taken). */\n isTimeDisabled?: (time: TimeValue) => boolean;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A time of day: wheels to set one, or slots to book one — the web `TimePicker`. */\nexport function TimePicker({ label, locale, value: valueProp, defaultValue = null, onValueChange, variant = \"wheel\", minuteStep = 5, hour12, labels: given, slots = [], isTimeDisabled, disabled, style }: TimePickerProps) {\n const { theme, radius, haptic } = useTheme();\n const [value, setOwn] = useOwn(valueProp, defaultValue);\n const set = (next: TimeValue) => {\n setOwn(next);\n onValueChange?.(next);\n };\n if (variant === \"slots\")\n return (\n <View role=\"radiogroup\" aria-label={label} style={[styles.slots, style]}>\n {slots.map((t) => {\n const selected = t === value;\n const off = disabled || Boolean(isTimeDisabled?.(t));\n return (\n <Pressable\n key={t}\n role=\"radio\"\n aria-checked={selected}\n aria-label={formatTime(locale, t)}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => {\n haptic(\"selection\");\n set(t);\n }}\n style={({ pressed }) => [\n styles.slot,\n {\n borderRadius: radius.lg,\n backgroundColor: selected ? theme.accent : off ? \"transparent\" : theme.surface2,\n borderColor: selected ? theme.accent : theme.borderDefault,\n borderStyle: off ? \"dashed\" : \"solid\",\n transform: [{ scale: pressed ? 0.97 : 1 }],\n },\n ]}\n >\n <Text style={[styles.slotText, { color: selected ? theme.onAccent : off ? theme.textMuted : theme.textPrimary, textDecorationLine: off ? \"line-through\" : \"none\" }]}>{formatTime(locale, t)}</Text>\n </Pressable>\n );\n })}\n </View>\n );\n const labels = { hours: \"Hours\", minutes: \"Minutes\", period: \"AM/PM\", ...given };\n const twelve = hour12 ?? uses12Hours(locale);\n const total = timeToMinutes(value) ?? 9 * 60;\n const h24 = Math.floor(total / 60);\n const minute = total % 60;\n const pm = h24 >= 12;\n const two = (n: number) => String(n).padStart(2, \"0\");\n const put = (h: number, m: number) => set(`${two(h)}:${two(m)}`);\n const hours: WheelOption[] = twelve ? [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((h) => ({ value: String(h), label: String(h) })) : Array.from({ length: 24 }, (_, h) => ({ value: String(h), label: two(h) }));\n const minutes: WheelOption[] = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => ({ value: String(i * minuteStep), label: two(i * minuteStep) }));\n const [am, pmLabel] = dayPeriods(locale);\n return (\n <WheelPicker label={value ? `${label}, ${formatTime(locale, value)}` : label} style={style}>\n <Wheel label={labels.hours} options={hours} disabled={disabled} value={twelve ? String(h24 % 12 === 0 ? 12 : h24 % 12) : String(h24)} onValueChange={(v) => put(twelve ? (Number(v) % 12) + (pm ? 12 : 0) : Number(v), minute)} />\n <WheelDivider>:</WheelDivider>\n <Wheel label={labels.minutes} options={minutes} disabled={disabled} value={String(Math.min(60 - minuteStep, Math.round(minute / minuteStep) * minuteStep))} onValueChange={(v) => put(h24, Number(v))} />\n {twelve ? (\n <Wheel\n label={labels.period}\n options={[\n { value: \"am\", label: am },\n { value: \"pm\", label: pmLabel },\n ]}\n disabled={disabled}\n value={pm ? \"pm\" : \"am\"}\n onValueChange={(v) => put((h24 % 12) + (v === \"pm\" ? 12 : 0), minute)}\n />\n ) : null}\n </WheelPicker>\n );\n}\n\nexport type DateWheelProps = {\n /** The visible label, passed translated (the group's name). */\n label: string;\n /** The BCP 47 locale: the order of the wheels, the month names. */\n locale: string;\n /** The date, `YYYY-MM-DD` (controlled); `\"\"` or `null` for none. */\n value?: string | null;\n /** The date at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the date under the band: always a real date within `min` / `max`. */\n onValueChange?: (value: string) => void;\n /** The earliest date (ISO). Default: 120 years ago. */\n min?: string;\n /** The latest date (ISO): `latestBirthDate(18)` for an age gate. Default: today. */\n max?: string;\n /** Where the wheels rest while there is no value. Default: `max`. */\n defaultView?: string;\n /** A help text under the wheels. */\n hint?: string;\n /** An error under the wheels: a danger edge, read and announced. Replaces the hint. */\n error?: string;\n /** The names of the wheels (`day`, `month`, `year`), passed translated. */\n labels?: Partial<Record<\"day\" | \"month\" | \"year\", string>>;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Day, month and year as three wheels in the locale's order, bounded by `min` and `max` — the web `DateWheel`. */\nexport function DateWheel({ label, locale, value: valueProp, defaultValue = null, onValueChange, min, max, defaultView, hint, error, labels: given, disabled, style }: DateWheelProps) {\n const { theme } = useTheme();\n const names = { day: \"Day\", month: \"Month\", year: \"Year\", ...given };\n const [value, setOwn] = useOwn(valueProp, defaultValue);\n const today = todayIso();\n const hi = max ?? today;\n const lo = min ?? isoOf(Number(today.slice(0, 4)) - 120, 1, 1);\n const { year, month, day } = isoParts(value || defaultView || hi);\n const months = monthNames(locale, \"long\");\n const set = (y: number, m: number, d: number) => {\n let next = isoOf(y, m, d);\n if (next > hi) next = hi;\n if (next < lo) next = lo;\n setOwn(next);\n onValueChange?.(next);\n };\n const last = daysInMonth(year, month);\n const columns = {\n day: <Wheel key=\"day\" label={names.day} disabled={disabled} options={Array.from({ length: last }, (_, i) => ({ value: String(i + 1), label: String(i + 1), disabled: isoOf(year, month, i + 1) > hi || isoOf(year, month, i + 1) < lo }))} value={String(Math.min(day, last))} onValueChange={(v) => set(year, month, Number(v))} style={styles.dayWheel} />,\n month: <Wheel key=\"month\" label={names.month} disabled={disabled} options={months.map((n, i) => ({ value: String(i + 1), label: n, disabled: isoOf(year, i + 1, 1) > hi || isoOf(year, i + 1, daysInMonth(year, i + 1)) < lo }))} value={String(month)} onValueChange={(v) => set(year, Number(v), day)} style={styles.monthWheel} />,\n year: <Wheel key=\"year\" label={names.year} disabled={disabled} options={yearRange(Number(hi.slice(0, 4)), Number(lo.slice(0, 4))).map((y) => ({ value: String(y), label: String(y) }))} value={String(year)} onValueChange={(v) => set(Number(v), month, day)} style={styles.yearWheel} />,\n };\n const caption = error ?? hint;\n return (\n <View style={[styles.field, style]}>\n <Text aria-hidden style={[styles.fieldLabel, { color: theme.textSecondary }]}>\n {label}\n </Text>\n <WheelPicker label={label} invalid={Boolean(error)} unset={!value}>\n {datePartsOrder(locale).map((part) => columns[part])}\n </WheelPicker>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n calendar: { padding: 12, gap: 4, borderWidth: StyleSheet.hairlineWidth, alignSelf: \"flex-start\" },\n header: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6, gap: 8 },\n title: { fontSize: 15, fontWeight: \"700\", textTransform: \"capitalize\" },\n nav: { width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n week: { flexDirection: \"row\" },\n weekday: { width: 44, textAlign: \"center\", fontSize: 11, fontWeight: \"700\", paddingBottom: 4 },\n cell: { width: 44, height: 44, marginVertical: 1 },\n day: { flex: 1, alignItems: \"center\", justifyContent: \"center\" },\n dayText: { fontSize: 15, fontVariant: [\"tabular-nums\"] },\n node: { width: 5, height: 5, borderRadius: 1, transform: [{ rotate: \"45deg\" }] },\n todayNode: { position: \"absolute\", bottom: 5 },\n months: { flexDirection: \"row\", flexWrap: \"wrap\", width: 264, gap: 6 },\n month: { width: 84, height: 44, alignItems: \"center\", justifyContent: \"center\" },\n monthText: { fontSize: 14, textTransform: \"capitalize\" },\n strip: { gap: 8, paddingVertical: 4 },\n stripDay: { width: 56, height: 72, alignItems: \"center\", justifyContent: \"center\", gap: 2, borderWidth: 1 },\n stripNode: { position: \"absolute\", top: 6 },\n stripWeekday: { fontSize: 11, fontWeight: \"700\", letterSpacing: 0.5 },\n stripNumber: { fontSize: 19, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n dot: { width: 6, height: 6, borderRadius: 3 },\n slots: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 8, alignSelf: \"stretch\" },\n slot: { minWidth: 88, height: 44, paddingHorizontal: 12, alignItems: \"center\", justifyContent: \"center\", borderWidth: 1 },\n slotText: { fontSize: 15, fontWeight: \"600\", fontVariant: [\"tabular-nums\"] },\n field: { gap: 6, alignSelf: \"stretch\" },\n fieldLabel: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n caption: { fontSize: 12, lineHeight: 16 },\n dayWheel: { minWidth: 56 },\n monthWheel: { minWidth: 128 },\n yearWheel: { minWidth: 76 },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { type NativeScrollEvent, type NativeSyntheticEvent, Pressable, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\n/** A value of a wheel: what is stored, and its words (passed translated or formatted for the locale). */\nexport type WheelOption = { value: string; label: string; disabled?: boolean };\n\nconst ITEM = 44;\nconst FrameContext = React.createContext({ visible: 5, unset: false });\n\nexport type WheelPickerProps = {\n /** The group's accessible name (\"Departure time\"), passed translated. */\n label: string;\n /** The wheels (`Wheel`), and dividers (`WheelDivider`) between them. */\n children: React.ReactNode;\n /** How many values are visible: 3, 5 (default) or 7. */\n visible?: 3 | 5 | 7;\n /** Marks the group invalid (a danger edge). */\n invalid?: boolean;\n /** Nothing is chosen yet: the values under the band stay quiet (secondary) until a wheel is turned. */\n unset?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The frame of one or several wheels: a raised surface, the lit band across them — the web `WheelPicker`. */\nexport function WheelPicker({ label, children, visible = 5, invalid, unset = false, style }: WheelPickerProps) {\n const { theme, radius } = useTheme();\n return (\n <FrameContext.Provider value={React.useMemo(() => ({ visible, unset }), [visible, unset])}>\n <View\n role=\"group\"\n aria-label={label}\n style={[styles.root, { height: ITEM * visible, borderRadius: radius.xl, backgroundColor: theme.surface1, borderColor: invalid ? theme.danger : theme.borderDefault }, style]}\n >\n <View pointerEvents=\"none\" style={[styles.band, { top: (ITEM * (visible - 1)) / 2, height: ITEM, borderRadius: radius.lg, backgroundColor: theme.surface3, borderColor: theme.borderSubtle }]} />\n {children}\n </View>\n </FrameContext.Provider>\n );\n}\n\n/** A divider between two wheels (`:` between the hours and the minutes). */\nexport function WheelDivider({ children }: { children: string }) {\n const { theme } = useTheme();\n return (\n <Text aria-hidden style={[styles.divider, { color: theme.textSecondary }]}>\n {children}\n </Text>\n );\n}\n\nexport type WheelProps = {\n /** The column's accessible name (\"Hour\", \"Month\"), passed translated. */\n label: string;\n /** The values, in order. */\n options: readonly WheelOption[];\n /** The chosen value (controlled). */\n value?: string | null;\n /** The chosen value at first, uncontrolled. Default: the first one. */\n defaultValue?: string;\n /** Called with the value that comes to rest under the band. */\n onValueChange?: (value: string) => void;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last, on the column (a width). */\n style?: StyleProp<ViewStyle>;\n};\n\nconst nearestEnabled = (options: readonly WheelOption[], index: number) => {\n for (let d = 0; d < options.length; d++) {\n if (options[index + d] && !options[index + d]!.disabled) return index + d;\n if (options[index - d] && !options[index - d]!.disabled) return index - d;\n }\n return index;\n};\n\n/**\n * One column of a `WheelPicker`: values that snap under the band, a tick of the hand (`selection` haptic) at each one\n * passed. For VoiceOver and TalkBack it is an adjustable control: swipe up or down to change it, its value read as words.\n */\nexport function Wheel({ label, options, value: valueProp, defaultValue, onValueChange, disabled, style }: WheelProps) {\n const { theme, haptic } = useTheme();\n const { visible, unset } = React.useContext(FrameContext);\n const [own, setOwn] = React.useState(defaultValue ?? options[0]?.value ?? \"\");\n const value = valueProp ?? own;\n const index = Math.max(0, options.findIndex((o) => o.value === value));\n const scroller = React.useRef<ScrollView>(null);\n const passing = React.useRef(index);\n const [shown, setShown] = React.useState(index);\n // The band follows the value set from outside (an accessibility action, a reset): adjusted while rendering.\n const [seen, setSeen] = React.useState(index);\n if (seen !== index) {\n setSeen(index);\n setShown(index);\n }\n\n const commit = (i: number) => {\n const target = nearestEnabled(options, Math.min(options.length - 1, Math.max(0, i)));\n const option = options[target];\n if (!option) return;\n if (target !== i) scroller.current?.scrollTo({ y: target * ITEM, animated: true });\n if (valueProp === undefined) setOwn(option.value);\n if (option.value !== value) onValueChange?.(option.value);\n };\n\n // The list follows the value set from outside (an accessibility action, a reset).\n React.useEffect(() => {\n passing.current = index;\n scroller.current?.scrollTo({ y: index * ITEM, animated: false });\n }, [index]);\n\n const onScroll = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const i = Math.round(e.nativeEvent.contentOffset.y / ITEM);\n if (i !== passing.current && i >= 0 && i < options.length) {\n passing.current = i;\n setShown(i);\n haptic(\"selection\");\n }\n };\n const settle = (e: NativeSyntheticEvent<NativeScrollEvent>) => commit(Math.round(e.nativeEvent.contentOffset.y / ITEM));\n const step = (by: number) => {\n let i = index + by;\n while (options[i]?.disabled) i += by;\n if (options[i]) commit(i);\n };\n const pad = ((visible - 1) / 2) * ITEM;\n return (\n <View\n accessible\n role=\"spinbutton\"\n aria-label={label}\n aria-valuetext={options[index]?.label}\n aria-valuenow={index}\n aria-valuemin={0}\n aria-valuemax={Math.max(0, options.length - 1)}\n aria-disabled={disabled || undefined}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }]}\n onAccessibilityAction={(e) => step(e.nativeEvent.actionName === \"increment\" ? 1 : -1)}\n style={[styles.column, disabled ? styles.disabled : null, style]}\n >\n <ScrollView\n ref={scroller}\n aria-hidden\n importantForAccessibility=\"no-hide-descendants\"\n scrollEnabled={!disabled}\n showsVerticalScrollIndicator={false}\n snapToInterval={ITEM}\n decelerationRate=\"fast\"\n contentOffset={{ x: 0, y: index * ITEM }}\n contentContainerStyle={{ paddingVertical: pad }}\n scrollEventThrottle={16}\n onScroll={onScroll}\n onMomentumScrollEnd={settle}\n onScrollEndDrag={(e) => {\n // Without momentum (a slow release), the drag's end is the rest.\n if (Math.abs(e.nativeEvent.velocity?.y ?? 0) < 0.05) settle(e);\n }}\n >\n {options.map((o, i) => {\n const distance = Math.abs(i - shown);\n return (\n <Pressable key={o.value} focusable={false} tabIndex={-1} disabled={disabled || o.disabled} onPress={() => commit(i)} style={[styles.item, { height: ITEM }]}>\n <Text\n numberOfLines={1}\n style={[\n styles.itemText,\n {\n color: o.disabled ? theme.textMuted : i === shown && !unset ? theme.textPrimary : theme.textSecondary,\n fontWeight: i === shown && !unset ? \"600\" : \"400\",\n opacity: distance === 0 ? 1 : distance === 1 ? 0.7 : 0.4,\n transform: [{ scale: distance === 0 ? 1 : 0.92 }],\n textDecorationLine: o.disabled ? \"line-through\" : \"none\",\n },\n ]}\n >\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"stretch\", borderWidth: StyleSheet.hairlineWidth, paddingHorizontal: 6, gap: 4, overflow: \"hidden\", alignSelf: \"flex-start\" },\n band: { position: \"absolute\", left: 6, right: 6, borderWidth: StyleSheet.hairlineWidth },\n column: { minWidth: 56, flexGrow: 1 },\n item: { alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8 },\n itemText: { fontSize: 18, fontVariant: [\"tabular-nums\"] },\n divider: { alignSelf: \"center\", fontSize: 18, fontWeight: \"600\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type DescriptionItem = {\n /** The term (“Status”, “Credits”) — passed translated. */\n term: string;\n /** The value: text, a `Badge`. */\n details: React.ReactNode;\n /** A line under the value (a date, a unit). */\n hint?: string;\n /** A stable key, when the terms are not unique. */\n id?: string;\n};\n\nexport type DescriptionListProps = {\n /** The pairs, in reading order. */\n items: readonly DescriptionItem[];\n /** stacked (default) · inline (term left, value right: a receipt) · grid (cards, two per row). */\n layout?: \"stacked\" | \"inline\" | \"grid\";\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Term and value pairs — the web `DescriptionList`: a job's details, a payout's breakdown; each pair read as one. */\nexport function DescriptionList({ items, layout = \"stacked\", style }: DescriptionListProps) {\n const { theme, radius } = useTheme();\n return (\n <View role=\"list\" style={[layout === \"grid\" ? styles.grid : layout === \"inline\" ? null : styles.stacked, style]}>\n {items.map((item, i) => {\n const value =\n typeof item.details === \"string\" || typeof item.details === \"number\" ? (\n <Txt variant={layout === \"grid\" ? \"title\" : \"body\"} style={layout === \"inline\" ? styles.right : null}>\n {item.details}\n </Txt>\n ) : (\n item.details\n );\n return (\n <View\n key={item.id ?? item.term}\n role=\"listitem\"\n accessible\n style={[\n layout === \"inline\" ? [styles.inline, i > 0 ? { borderTopWidth: StyleSheet.hairlineWidth, borderTopColor: theme.borderSubtle } : null] : null,\n layout === \"grid\" ? [styles.card, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.lg }] : null,\n ]}\n >\n <Txt variant=\"caption\" tone=\"secondary\" style={layout === \"grid\" ? styles.upper : null}>\n {item.term}\n </Txt>\n <View style={layout === \"inline\" ? styles.valueInline : styles.value}>\n {value}\n {item.hint ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={layout === \"inline\" ? styles.right : null}>\n {item.hint}\n </Txt>\n ) : null}\n </View>\n </View>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n stacked: { gap: 14 },\n inline: { flexDirection: \"row\", alignItems: \"baseline\", justifyContent: \"space-between\", gap: 16, paddingVertical: 10 },\n grid: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10 },\n card: { flexBasis: \"47%\", flexGrow: 1, padding: 12, gap: 4, borderWidth: StyleSheet.hairlineWidth },\n upper: { textTransform: \"uppercase\", letterSpacing: 0.6, fontWeight: \"700\" },\n value: { gap: 2, marginTop: 2 },\n valueInline: { flexShrink: 1, alignItems: \"flex-end\", gap: 2 },\n right: { textAlign: \"right\" },\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 * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type FabProps = {\n /** The action in words (“New challenge”) — passed translated: the accessible name, and shown when `extended`. */\n label: string;\n /** The icon (decorative). */\n icon: React.ReactNode;\n /** What it does. */\n onPress: () => void;\n /** Shows the words beside the icon (collapse it while the list scrolls down). */\n extended?: boolean;\n /** Which corner. Default `end` (bottom right in left-to-right). */\n placement?: \"end\" | \"center\" | \"start\";\n /** Extra distance from the bottom, above a tab bar (its height). Default 0. */\n offset?: number;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * The screen's main action, floating above the content in the accent — one per screen (create, compose, record). It\n * keeps clear of the safe area and the tab bar (`offset`), shows its words when `extended`, a light tap confirms.\n */\nexport function Fab({ label, icon, onPress, extended, placement = \"end\", offset = 0, style }: FabProps) {\n const { theme, insets, haptic } = useTheme();\n const position: ViewStyle =\n placement === \"center\" ? { alignSelf: \"center\" } : placement === \"start\" ? { left: 16 + insets.left } : { right: 16 + insets.right };\n return (\n <View pointerEvents=\"box-none\" style={[styles.layer, placement === \"center\" ? styles.centre : null]}>\n <Pressable\n role=\"button\"\n aria-label={label}\n onPress={() => {\n haptic(\"impact\");\n onPress();\n }}\n style={({ pressed }) => [\n styles.fab,\n extended ? styles.extended : null,\n position,\n { bottom: 16 + insets.bottom + offset, backgroundColor: pressed ? theme.accentHover : theme.accent, borderTopColor: theme.edgeOnFill, shadowColor: theme.scrimStrong },\n style,\n ]}\n >\n <View aria-hidden>{icon}</View>\n {extended ? (\n <Txt variant=\"label\" tone=\"onAccent\" aria-hidden numberOfLines={1} style={styles.label}>\n {label}\n </Txt>\n ) : null}\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n layer: { position: \"absolute\", top: 0, right: 0, bottom: 0, left: 0 },\n centre: { alignItems: \"center\" },\n fab: { borderTopWidth: 1, borderColor: \"transparent\", position: \"absolute\", minWidth: 56, height: 56, borderRadius: 28, alignItems: \"center\", justifyContent: \"center\", flexDirection: \"row\", gap: 8, shadowOpacity: 0.3, shadowRadius: 12, shadowOffset: { width: 0, height: 6 }, elevation: 6 },\n extended: { paddingHorizontal: 20 },\n label: { flexShrink: 0 },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, Text, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type TextFieldProps = Omit<TextInputProps, \"value\" | \"defaultValue\" | \"onChangeText\" | \"style\" | \"editable\"> & {\n /** The visible label above the input, passed translated (also its accessible name). */\n label: string;\n /** A help text under the input (\"At least 8 characters\"), read with it. */\n hint?: string;\n /** An error under the input: a danger border and caption, read with it and announced. Replaces the hint. */\n error?: string;\n /** The text (controlled). */\n value?: string;\n /** The text at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the text. */\n onValueChange?: (text: string) => void;\n /** Not available: dimmed, not focusable. */\n disabled?: boolean;\n /** Something at the end of the input: a spinner while a value is checked, a check once it is, a show-password button. */\n end?: React.ReactNode;\n /** The input itself, to focus it (`ref.current?.focus()`) or move to the next field. */\n inputRef?: React.Ref<TextInput>;\n /** Styles merged last, on the field (label, input, caption). */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A text field for React Native: its label, the input (every `TextInput` prop: `secureTextEntry`, `keyboardType`,\n * `autoComplete`, `returnKeyType`…), a hint or an error under it — the web `Field` + `Input`. `multiline` makes it a\n * text area.\n */\nexport function TextField({ label, hint, error, value, defaultValue, onValueChange, disabled, end, inputRef, style, multiline, onFocus, onBlur, ...props }: TextFieldProps) {\n const { theme, radius } = useTheme();\n const [focused, setFocused] = React.useState(false);\n const caption = error ?? hint;\n const border = error ? theme.danger : focused ? theme.accent : theme.borderDefault;\n return (\n <View style={[styles.root, disabled ? styles.disabled : null, style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <View style={[styles.frame, multiline ? styles.multiline : null, { borderRadius: radius.md, borderColor: border, backgroundColor: theme.surface2 }]}>\n <TextInput\n ref={inputRef}\n aria-label={label}\n aria-disabled={disabled || undefined}\n accessibilityHint={caption}\n value={value}\n defaultValue={defaultValue}\n editable={!disabled}\n multiline={multiline}\n textAlignVertical={multiline ? \"top\" : \"center\"}\n placeholderTextColor={theme.textMuted}\n onChangeText={onValueChange}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={[styles.input, multiline ? styles.inputMultiline : null, { color: theme.textPrimary }]}\n {...props}\n />\n {end ? <View style={styles.end}>{end}</View> : null}\n </View>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n frame: { flexDirection: \"row\", alignItems: \"center\", minHeight: 44, paddingHorizontal: 12, borderWidth: 1 },\n multiline: { alignItems: \"flex-start\", minHeight: 96, paddingVertical: 10 },\n input: { flex: 1, minHeight: 42, fontSize: 15, paddingVertical: 0 },\n inputMultiline: { minHeight: 76 },\n end: { marginLeft: 8 },\n caption: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.5 },\n});\n","import * as React from \"react\";\nimport { Animated, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useEntrance } from \"./story-motion\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type GoalGaugeProps = Omit<ViewProps, \"children\"> & {\n /** What the gauge counts (“Backers”) — passed translated; the meter's accessible name. */\n label: string;\n /** The number of steps of the goal (2–24). */\n segments: number;\n /** The steps reached (lit), from 0 to `segments` (default `segments`). */\n value?: number;\n /** The value in words (“6 of 10”); default `value / segments`. */\n valueText?: string;\n /** `fill` (default) lights the reached steps one by one on mount; `drain` empties the spent ones. */\n mode?: \"fill\" | \"drain\";\n /** Shows the label and the value above the segments (default true). */\n showLabel?: boolean;\n /** `default`: rounded segments. `arcade`: a skewed frame, the label centred. */\n variant?: \"default\" | \"arcade\";\n /** The steps light (or drain) once on mount; still when the system reduces motion. */\n animated?: boolean;\n};\n\nfunction Cell({ lit, animate, order, animated, arcade }: { lit: boolean; animate: boolean; order: number; animated: boolean; arcade: boolean }) {\n const { theme } = useTheme();\n const t = useEntrance(animated && animate, 300 + order * 100, 350);\n const spentOpacity = arcade ? 0.14 : 1;\n const opacity = !animate ? 1 : lit ? t.interpolate({ inputRange: [0, 1], outputRange: [0.25, 1] }) : t.interpolate({ inputRange: [0, 1], outputRange: [1, arcade ? 0.14 : 1] });\n const color = lit || arcade ? theme.accent : theme.surface3;\n return (\n <Animated.View\n style={[styles.cell, arcade ? styles.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]}\n />\n );\n}\n\n/** A goal in steps for React Native: `role=\"meter\"`, the reached steps lit, the value in words beside the label. */\nexport function GoalGauge({ label, segments, value, valueText, mode = \"fill\", showLabel = true, variant = \"default\", animated = true, style, ...props }: GoalGaugeProps) {\n const { theme } = useTheme();\n const total = Math.max(1, Math.round(segments));\n const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));\n const words = valueText ?? `${lit} / ${total}`;\n const arcade = variant === \"arcade\";\n return (\n <View\n accessible\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={lit}\n aria-valuetext={words}\n {...props}\n style={[styles.root, style]}\n >\n {showLabel ? (\n <View aria-hidden style={[styles.head, arcade ? styles.headArcade : null]}>\n <Txt variant={arcade ? \"mono\" : \"caption\"} tone=\"secondary\">\n {arcade ? label.toUpperCase() : label}\n </Txt>\n {arcade ? null : <Txt variant=\"caption\">{words}</Txt>}\n </View>\n ) : null}\n <View aria-hidden style={[styles.cells, arcade ? [styles.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null]}>\n {Array.from({ length: total }, (_, i) => {\n const on = i < lit;\n const animate = mode === \"fill\" ? on : !on;\n return <Cell key={i} lit={on} animate={animate} order={mode === \"fill\" ? i : i - lit} animated={animated} arcade={arcade} />;\n })}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignSelf: \"stretch\", gap: 8 },\n head: { flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 },\n headArcade: { justifyContent: \"center\" },\n cells: { flexDirection: \"row\", gap: 4 },\n cellsArcade: { padding: 3, borderWidth: 1, borderRadius: 4, transform: [{ skewX: \"-14deg\" }] },\n cell: { flex: 1, height: 8, borderRadius: 4 },\n cellArcade: { height: 10, borderRadius: 1 },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing } from \"react-native\";\n\n/** 0 → 1 on the native driver after `delay`, once; already 1 when `animated` is false or the system reduces motion. */\nexport function useEntrance(animated: boolean, delay = 0, duration = 700) {\n const [value] = React.useState(() => new Animated.Value(animated ? 0 : 1));\n React.useEffect(() => {\n if (!animated) return;\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n if (reduce) value.setValue(1);\n else Animated.timing(value, { toValue: 1, duration, delay, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n });\n return () => {\n cancelled = true;\n };\n }, [animated, delay, duration, value]);\n return value;\n}\n","import * as React from \"react\";\nimport { Animated, type NativeScrollEvent, type NativeSyntheticEvent, Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type HeaderProps = {\n /** The screen's title — a heading, shown large under the bar until the content scrolls under it. */\n title: string;\n /** A line under the large title (a count, a date). */\n subtitle?: string;\n /** The scroll position of the screen's list (`useCollapsingHeader().scrollY`): the large title folds into the bar. Absent: always large. */\n scrollY?: Animated.Value;\n /** `large` (default: the top of a section) or `inline` (a detail screen: the title in the bar only). */\n size?: \"large\" | \"inline\";\n /** The back button's words (“Back”) — passed translated; with `onBack` it shows. */\n backLabel?: string;\n /** Called by the back button. */\n onBack?: () => void;\n /** Buttons at the right of the bar (`IconButton`s). */\n actions?: React.ReactNode;\n /** Under the title: a `SearchField`, `Tabs`. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst BAR = 44;\nconst LARGE = 52;\n\n/**\n * A screen's header: the bar (back, title, actions) under the status bar's safe area, and a large title that folds into\n * the bar as the content scrolls — the iOS idiom, readable on Android. Feed it the list's scroll with\n * `useCollapsingHeader()`. The title is the screen's heading for screen readers either way.\n */\nexport function Header({ title, subtitle, scrollY, size = \"large\", backLabel, onBack, actions, children, style }: HeaderProps) {\n const { theme, insets } = useTheme();\n const reduce = useReducedMotion();\n const large = size === \"large\";\n const fixed = React.useMemo(() => new Animated.Value(large ? 0 : 1), [large]);\n const progress = scrollY && large ? scrollY.interpolate({ inputRange: [0, LARGE], outputRange: [0, 1], extrapolate: \"clamp\" }) : fixed;\n const smallOpacity = progress.interpolate({ inputRange: [0.6, 1], outputRange: [0, 1], extrapolate: \"clamp\" });\n const largeOpacity = progress.interpolate({ inputRange: [0, 0.7], outputRange: [1, 0], extrapolate: \"clamp\" });\n const largeShift = reduce ? 0 : progress.interpolate({ inputRange: [0, 1], outputRange: [0, -10] });\n const largeHeight = progress.interpolate({ inputRange: [0, 1], outputRange: [LARGE + (subtitle ? 18 : 0), 0] });\n return (\n <View style={[{ paddingTop: insets.top, backgroundColor: theme.surface0 }, style]}>\n <View style={styles.bar}>\n <View style={styles.side}>\n {onBack && backLabel ? (\n <Pressable role=\"button\" aria-label={backLabel} onPress={onBack} hitSlop={8} style={styles.back}>\n <Svg width={22} height={22} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d=\"M15 5l-7 7 7 7\" stroke={theme.accentText} strokeWidth={2.4} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n <Txt variant=\"label\" tone=\"accent\" numberOfLines={1}>\n {backLabel}\n </Txt>\n </Pressable>\n ) : null}\n </View>\n <Animated.View style={[styles.middle, { opacity: smallOpacity }]} aria-hidden={large}>\n <Txt variant=\"label\" numberOfLines={1} role={large ? undefined : \"heading\"}>\n {title}\n </Txt>\n </Animated.View>\n <View style={[styles.side, styles.right]}>{actions}</View>\n </View>\n {large ? (\n <Animated.View style={{ height: largeHeight, overflow: \"hidden\" }}>\n <Animated.View style={[styles.large, { opacity: largeOpacity, transform: [{ translateY: largeShift }] }]}>\n <Txt variant=\"display\" numberOfLines={1} role=\"heading\" style={styles.largeTitle}>\n {title}\n </Txt>\n {subtitle ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {subtitle}\n </Txt>\n ) : null}\n </Animated.View>\n </Animated.View>\n ) : null}\n {children ? <View style={styles.children}>{children}</View> : null}\n <Animated.View aria-hidden style={[styles.rule, { backgroundColor: theme.borderSubtle, opacity: smallOpacity }]} />\n </View>\n );\n}\n\n/** The scroll position a `Header` folds with: `<ScrollView onScroll={onScroll} scrollEventThrottle={16}>` and `<Header scrollY={scrollY}>`. */\nexport function useCollapsingHeader(): { scrollY: Animated.Value; onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void } {\n const [scrollY] = React.useState(() => new Animated.Value(0));\n const onScroll = React.useMemo(() => Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }], { useNativeDriver: false }), [scrollY]);\n return { scrollY, onScroll };\n}\n\nconst styles = StyleSheet.create({\n bar: { height: BAR, flexDirection: \"row\", alignItems: \"center\", paddingHorizontal: 8 },\n side: { flex: 1, flexDirection: \"row\", alignItems: \"center\" },\n right: { justifyContent: \"flex-end\", gap: 4 },\n middle: { flex: 2, alignItems: \"center\" },\n back: { flexDirection: \"row\", alignItems: \"center\", gap: 2, minHeight: 44, paddingRight: 8 },\n large: { paddingHorizontal: 16, paddingBottom: 6 },\n largeTitle: { fontSize: 32, lineHeight: 40 },\n children: { paddingHorizontal: 16, paddingBottom: 8 },\n rule: { height: StyleSheet.hairlineWidth },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Image, Modal, PanResponder, Pressable, StyleSheet, useWindowDimensions,View } from \"react-native\";\n\nimport { modalName } from \"./overlay\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ViewerImage = {\n /** The image's URI. */\n uri: string;\n /** What it shows — passed translated; its accessible name. */\n alt: string;\n /** A caption under it. */\n caption?: string;\n};\n\nexport type ImageViewerProps = {\n /** The images, in order. */\n images: readonly ViewerImage[];\n /** The image open (its index); `null` closes the viewer. */\n index: number | null;\n /** Called when the person moves to another image or closes the viewer (`null`). */\n onIndexChange: (index: number | null) => void;\n /** The close button's words (“Close”) — passed translated. */\n closeLabel: string;\n /** The position for screen readers and the counter: `(n, total) => \"2 of 5\"`. */\n positionLabel?: (position: number, total: number) => string;\n};\n\nconst MAX_SCALE = 4;\n\n/**\n * Images full screen, on black: pinch to zoom (to 4×), double tap to zoom in and out, drag a zoomed image, swipe left\n * and right between images, swipe down to close. Screen readers get the image's words, its position, and the close\n * button; their swipes move between images (accessibility actions).\n */\nexport function ImageViewer({ images, index, onIndexChange, closeLabel, positionLabel = (n, total) => `${n} / ${total}` }: ImageViewerProps) {\n const { theme, insets, haptic } = useTheme();\n const reduce = useReducedMotion();\n const { width, height } = useWindowDimensions();\n const open = index !== null && images[index] !== undefined;\n const [scale] = React.useState(() => new Animated.Value(1));\n const [pan] = React.useState(() => new Animated.ValueXY({ x: 0, y: 0 }));\n const [dismiss] = React.useState(() => new Animated.Value(0));\n const state = React.useRef({ scale: 1, x: 0, y: 0, pinch: 0, base: 1, lastTap: 0 });\n const reset = React.useCallback(() => {\n state.current = { ...state.current, scale: 1, x: 0, y: 0 };\n scale.setValue(1);\n pan.setValue({ x: 0, y: 0 });\n dismiss.setValue(0);\n }, [scale, pan, dismiss]);\n React.useEffect(() => {\n reset();\n if (open) AccessibilityInfo.announceForAccessibility(`${images[index]!.alt}, ${positionLabel(index + 1, images.length)}`);\n }, [index]); // eslint-disable-line react-hooks/exhaustive-deps -- once per image\n const go = (to: number) => {\n if (to < 0 || to >= images.length) return;\n haptic(\"selection\");\n onIndexChange(to);\n };\n const animateTo = (value: Animated.Value, to: number) => (reduce ? value.setValue(to) : Animated.spring(value, { toValue: to, useNativeDriver: true, damping: 20 }).start());\n const distance = (touches: readonly { pageX: number; pageY: number }[]) => Math.hypot(touches[0]!.pageX - touches[1]!.pageX, touches[0]!.pageY - touches[1]!.pageY);\n // PanResponder's handlers run on gestures, never during render: the compiler's ref and purity checks misread them.\n /* eslint-disable react-hooks/refs, react-hooks/purity */\n const responder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 4 || Math.abs(g.dy) > 4,\n onPanResponderGrant: (e) => {\n const now = Date.now();\n const s = state.current;\n if (e.nativeEvent.touches.length === 1 && now - s.lastTap < 280) {\n const next = s.scale > 1 ? 1 : 2.5;\n s.scale = next;\n s.x = 0;\n s.y = 0;\n animateTo(scale, next);\n pan.setValue({ x: 0, y: 0 });\n }\n s.lastTap = now;\n s.pinch = 0;\n },\n onPanResponderMove: (e, g) => {\n const s = state.current;\n const touches = e.nativeEvent.touches;\n if (touches.length === 2) {\n const d = distance(touches);\n if (!s.pinch) {\n s.pinch = d;\n s.base = s.scale;\n }\n s.scale = Math.min(MAX_SCALE, Math.max(1, s.base * (d / s.pinch)));\n scale.setValue(s.scale);\n return;\n }\n if (s.scale > 1) pan.setValue({ x: s.x + g.dx, y: s.y + g.dy });\n else if (Math.abs(g.dy) > Math.abs(g.dx)) dismiss.setValue(Math.max(0, g.dy));\n else pan.setValue({ x: g.dx, y: 0 });\n },\n onPanResponderRelease: (_, g) => {\n const s = state.current;\n if (s.pinch) {\n s.pinch = 0;\n if (s.scale <= 1.02) reset();\n return;\n }\n if (s.scale > 1) {\n s.x += g.dx;\n s.y += g.dy;\n return;\n }\n if (g.dy > 120 || g.vy > 1.2) return onIndexChange(null);\n if (g.dx < -width / 4 || g.vx < -0.8) go((index ?? 0) + 1);\n else if (g.dx > width / 4 || g.vx > 0.8) go((index ?? 0) - 1);\n animateTo(dismiss, 0);\n Animated.spring(pan, { toValue: { x: 0, y: 0 }, useNativeDriver: true }).start();\n },\n }),\n [index, width, images.length], // eslint-disable-line react-hooks/exhaustive-deps -- the gesture reads refs\n );\n /* eslint-enable react-hooks/refs, react-hooks/purity */\n if (!open) return null;\n const image = images[index]!;\n const backdrop = dismiss.interpolate({ inputRange: [0, height / 2], outputRange: [1, 0.3], extrapolate: \"clamp\" });\n return (\n <Modal {...modalName(image.alt)} visible transparent animationType={reduce ? \"none\" : \"fade\"} onRequestClose={() => onIndexChange(null)} statusBarTranslucent>\n <Animated.View style={[StyleSheet.absoluteFill, { backgroundColor: theme.media, opacity: backdrop }]} />\n <View\n style={StyleSheet.absoluteFill}\n accessible\n role=\"img\"\n aria-label={`${image.alt}, ${positionLabel(index + 1, images.length)}`}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }, { name: \"escape\" }]}\n onAccessibilityAction={(e) => {\n const name = e.nativeEvent.actionName;\n if (name === \"increment\") go(index + 1);\n if (name === \"decrement\") go(index - 1);\n if (name === \"escape\") onIndexChange(null);\n }}\n {...responder.panHandlers}\n >\n <Animated.View style={{ width, height, transform: [{ translateX: pan.x }, { translateY: Animated.add(pan.y, dismiss) }, { scale }] }}>\n <Image source={{ uri: image.uri }} resizeMode=\"contain\" style={{ width, height }} accessibilityIgnoresInvertColors />\n </Animated.View>\n </View>\n <View pointerEvents=\"box-none\" style={[styles.top, { paddingTop: insets.top + 8 }]}>\n <View aria-hidden style={[styles.counter, { backgroundColor: theme.scrimStrong }]}>\n <Txt variant=\"label\" tone=\"onMedia\">\n {positionLabel(index + 1, images.length)}\n </Txt>\n </View>\n <Pressable role=\"button\" aria-label={closeLabel} hitSlop={12} onPress={() => onIndexChange(null)} style={[styles.close, { backgroundColor: theme.scrimStrong }]}>\n <Txt tone=\"onMedia\" style={styles.cross} aria-hidden>\n ×\n </Txt>\n </Pressable>\n </View>\n {image.caption ? (\n <View pointerEvents=\"none\" style={[styles.caption, { paddingBottom: insets.bottom + 16, backgroundColor: theme.scrimStrong }]}>\n <Txt tone=\"onMedia\">{image.caption}</Txt>\n </View>\n ) : null}\n </Modal>\n );\n}\n\n/** Preloads the neighbours of the image open, so a swipe shows the next one at once. */\nexport function prefetchNeighbours(images: readonly ViewerImage[], index: number | null) {\n if (index === null) return;\n for (const i of [index - 1, index + 1]) if (images[i]) void Image.prefetch(images[i]!.uri).catch(() => undefined);\n}\n\nconst styles = StyleSheet.create({\n top: { position: \"absolute\", top: 0, left: 0, right: 0, flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", paddingHorizontal: 16 },\n counter: { paddingHorizontal: 10, paddingVertical: 4, borderRadius: 999 },\n close: { width: 40, height: 40, borderRadius: 20, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 24, lineHeight: 26 },\n caption: { position: \"absolute\", left: 0, right: 0, bottom: 0, paddingTop: 12, paddingHorizontal: 16 },\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 * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { alpha, useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\n/** The hexagon of the marks, pointy top, radius 9 around (12, 12): the web glyph's geometry. */\nconst HEX = \"M12 3 19.79 7.5 19.79 16.5 12 21 4.21 16.5 4.21 7.5Z\";\nconst PERIMETER = 54;\n\nexport type LoaderGlyphProps = {\n /** loading · success · error. */\n state?: \"loading\" | \"success\" | \"error\";\n /** Between 0 and 1: the trace grows to it. Absent: indeterminate (the trace turns). */\n value?: number | null;\n /** The side, in points. Default 20. */\n size?: number;\n /** The stroke colour. Default: the accent (success and error: their tones). */\n color?: string;\n};\n\n/** The Krizaka loader glyph (decorative): a hexagon traced by a segment of light around a node; done, a check or a cross. */\nexport function LoaderGlyph({ state = \"loading\", value, size = 20, color }: LoaderGlyphProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [spin] = React.useState(() => new Animated.Value(0));\n const known = typeof value === \"number\" && Number.isFinite(value);\n React.useEffect(() => {\n if (state !== \"loading\" || known || reduce) return;\n const loop = Animated.loop(Animated.timing(spin, { toValue: 1, duration: 1400, easing: Easing.linear, useNativeDriver: true }));\n loop.start();\n return () => loop.stop();\n }, [state, known, reduce, spin]);\n const stroke = color ?? (state === \"success\" ? theme.success : state === \"error\" ? theme.danger : theme.accent);\n const fill = state !== \"loading\" ? 1 : known ? Math.min(1, Math.max(0, value)) : 0.3;\n const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] });\n return (\n <Animated.View aria-hidden style={{ width: size, height: size, transform: state === \"loading\" && !known ? [{ rotate }] : [] }}>\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path d={HEX} stroke={stroke} strokeOpacity={0.22} strokeWidth={2.2} strokeLinejoin=\"round\" />\n <Path d={HEX} stroke={stroke} strokeWidth={2.2} strokeLinejoin=\"round\" strokeLinecap=\"round\" strokeDasharray={`${fill * PERIMETER} ${PERIMETER}`} />\n {state === \"loading\" ? <Circle cx={12} cy={12} r={2.6} fill={stroke} /> : null}\n {state === \"success\" ? <Path d=\"M8.3 12.3l2.6 2.6 4.9-5.3\" stroke={stroke} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" /> : null}\n {state === \"error\" ? <Path d=\"M9.4 9.4l5.2 5.2M14.6 9.4l-5.2 5.2\" stroke={stroke} strokeWidth={2.2} strokeLinecap=\"round\" /> : null}\n </Svg>\n </Animated.View>\n );\n}\n\n/** `active` once it has lasted `delay` ms, then held at least `minDuration` ms: a wait never flashes nor blinks. */\nexport function useDelayedWait(active: boolean, delay = 250, minDuration = 600): boolean {\n const [shown, setShown] = React.useState(false);\n const since = React.useRef(0);\n React.useEffect(() => {\n if (active && !shown) {\n const timer = setTimeout(() => {\n since.current = Date.now();\n setShown(true);\n }, delay);\n return () => clearTimeout(timer);\n }\n if (!active && shown) {\n const timer = setTimeout(() => setShown(false), Math.max(0, minDuration - (Date.now() - since.current)));\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [active, shown, delay, minDuration]);\n return shown;\n}\n\nexport type LoaderProps = {\n /** What is loading, in words (“Loading your jobs”) — passed translated; shown and announced. */\n label: string;\n /** loading (default) · success · error: the ending shows for `endDuration` ms, then the loader goes. */\n status?: \"loading\" | \"success\" | \"error\";\n /** The words of a success — passed translated. Default: the label. */\n successLabel?: string;\n /** The words of a failure — passed translated. */\n errorLabel?: string;\n /** Between 0 and 1: a determinate wait, the percentage shows. */\n value?: number | null;\n /** The time left, in words (“About 20 s left”). */\n eta?: string;\n /** Milliseconds before anything shows. Default 250. */\n delay?: number;\n /** Once shown, the least milliseconds it stays. Default 600. */\n minDuration?: number;\n /** Milliseconds the ending stays. Default 1600; `0` never shows it. */\n endDuration?: number;\n /** inline (default) · block (a region's centre) · overlay (over its parent, frosted) · page (the whole screen). */\n variant?: \"inline\" | \"block\" | \"overlay\" | \"page\";\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst GLYPH = { inline: 20, block: 36, overlay: 36, page: 56 } as const;\n\n/** A wait from start to end — the web `Loader`: delayed, never blinking, announced when it shows and when it ends. */\nexport function Loader({ label, status = \"loading\", successLabel, errorLabel, value, eta, delay = 250, minDuration = 600, endDuration = 1600, variant = \"inline\", style }: LoaderProps) {\n const { theme, radius } = useTheme();\n const waiting = useDelayedWait(status === \"loading\", delay, minDuration);\n const [ending, setEnding] = React.useState<\"success\" | \"error\" | null>(null);\n const seen = React.useRef(false);\n React.useEffect(() => {\n if (waiting) {\n seen.current = true;\n return;\n }\n if (!seen.current || status === \"loading\") return;\n seen.current = false;\n if (endDuration <= 0) return;\n const show = setTimeout(() => setEnding(status), 0);\n const hide = Number.isFinite(endDuration) ? setTimeout(() => setEnding(null), endDuration) : undefined;\n return () => {\n clearTimeout(show);\n clearTimeout(hide);\n };\n }, [waiting, status, endDuration]);\n const phase = waiting ? \"loading\" : ending;\n const words = phase === \"success\" ? (successLabel ?? label) : phase === \"error\" ? (errorLabel ?? label) : label;\n React.useEffect(() => {\n if (phase) AccessibilityInfo.announceForAccessibility(words);\n }, [phase, words]);\n if (!phase) return null;\n const known = phase === \"loading\" && typeof value === \"number\" && Number.isFinite(value);\n const detail = phase === \"loading\" ? [known ? `${Math.round(Math.min(1, Math.max(0, value)) * 100)} %` : null, eta].filter(Boolean).join(\" · \") : \"\";\n const stacked = variant !== \"inline\";\n const box = (\n <View style={[stacked ? styles.stacked : styles.inline, variant === \"overlay\" ? { backgroundColor: alpha(theme.surface1, 0.92), borderColor: theme.borderDefault, borderRadius: radius.lg, ...styles.card } : null]}>\n <LoaderGlyph state={phase} value={known ? value : null} size={GLYPH[variant]} />\n <View style={stacked ? styles.center : styles.text}>\n <Txt variant={variant === \"page\" ? \"title\" : \"label\"} style={stacked ? styles.centered : null}>\n {words}\n </Txt>\n {detail ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={stacked ? styles.centered : null}>\n {detail}\n </Txt>\n ) : null}\n </View>\n </View>\n );\n const a11y = { accessible: true, role: \"progressbar\" as const, \"aria-label\": words, \"aria-busy\": phase === \"loading\", accessibilityLiveRegion: \"polite\" as const };\n if (variant === \"overlay\" || variant === \"page\")\n return (\n <View {...a11y} style={[StyleSheet.absoluteFill, styles.cover, variant === \"page\" ? { backgroundColor: alpha(theme.surface0, 0.86) } : null, style]}>\n {box}\n </View>\n );\n return (\n <View {...a11y} style={[variant === \"block\" ? styles.block : null, style]}>\n {box}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n inline: { flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n stacked: { alignItems: \"center\", gap: 10 },\n card: { paddingHorizontal: 24, paddingVertical: 20, borderWidth: StyleSheet.hairlineWidth },\n text: { flexShrink: 1, gap: 2 },\n center: { alignItems: \"center\", gap: 2 },\n centered: { textAlign: \"center\" },\n block: { paddingVertical: 40, alignItems: \"center\" },\n cover: { alignItems: \"center\", justifyContent: \"center\", zIndex: 10 },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport type { MascotBird, MascotMood, MascotTone } from \"../mascots/geometry\";\nimport { Mascot } from \"./mascots\";\nimport { Txt } from \"./txt\";\n\nconst SIZE = { sm: 64, md: 96, lg: 128 } as const;\n\nexport type MascotStateProps = Omit<ViewProps, \"children\"> & {\n /** The bird whose job the moment is about: `owl` (documents), `falcon` (security), `duck` (code), `flamingo` (answers, payments), `pigeon` (delivery), `lovebird` (introductions), `crane` (listening). */\n bird?: MascotBird;\n /** The moment: `empty` (default), `thinking`, `success`, `error`, `welcome`. */\n mood?: MascotMood;\n /** What happened, in a few words. */\n title: string;\n /** Why, or what comes next. */\n description?: string;\n /** What to do next: a Button. */\n action?: React.ReactNode;\n /** The bird's size: `sm` 64, `md` 96 (default), `lg` 128 points. */\n size?: keyof typeof SIZE;\n /** `stacked` (default): the bird above centred words. `inline`: the bird beside the words. */\n layout?: \"stacked\" | \"inline\";\n /** `brand` (default): the theme's accent. `own`: the bird's colours of the Krizaka story. */\n tone?: MascotTone;\n /** The bird's bob and a short fade-in; still when the system reduces motion. */\n animated?: boolean;\n};\n\n/** A fade-in on the native driver, skipped when `animated` is false or the system reduces motion. */\nfunction useArrival(animated: boolean) {\n const [value] = React.useState(() => new Animated.Value(animated ? 0 : 1));\n React.useEffect(() => {\n if (!animated) return;\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n if (reduce) value.setValue(1);\n else Animated.timing(value, { toValue: 1, duration: 420, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n });\n return () => {\n cancelled = true;\n };\n }, [animated, value]);\n return value;\n}\n\n/**\n * A moment told by a bird of the flock — an empty list, a long wait, a success, an error, a welcome — for React Native.\n * Announced: `alert` for an error, a polite live region otherwise (`busy` while thinking).\n */\nexport function MascotState({ bird = \"owl\", mood = \"empty\", title, description, action, size = \"md\", layout = \"stacked\", tone, animated = true, style, ...props }: MascotStateProps) {\n const opacity = useArrival(animated);\n const inline = layout === \"inline\";\n return (\n <Animated.View\n role={mood === \"error\" ? \"alert\" : \"status\"}\n accessibilityLiveRegion={mood === \"error\" ? \"assertive\" : \"polite\"}\n aria-busy={mood === \"thinking\" ? true : undefined}\n {...props}\n style={[inline ? styles.inline : styles.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style]}\n >\n <Mascot bird={bird} mood={mood} tone={tone} size={SIZE[size]} animated={animated} />\n <View style={inline ? styles.wordsInline : styles.words}>\n <Txt variant=\"label\" role=\"heading\" style={inline ? null : styles.center}>\n {title}\n </Txt>\n {description ? (\n <Txt tone=\"secondary\" style={inline ? null : styles.center}>\n {description}\n </Txt>\n ) : null}\n {action ? <View style={[styles.action, inline ? null : styles.actionCentred]}>{action}</View> : null}\n </View>\n </Animated.View>\n );\n}\n\ntype PresetProps = Omit<MascotStateProps, \"mood\">;\n\n/** It failed: what went wrong and what to do. */\nexport const ErrorState = (props: PresetProps) => <MascotState mood=\"error\" {...props} />;\n/** It is done: a payment, a verification, a delivery. */\nexport const SuccessState = (props: PresetProps) => <MascotState mood=\"success\" {...props} />;\n/** A long task runs: what runs, beside the bird. */\nexport const LoadingState = (props: PresetProps) => <MascotState mood=\"thinking\" {...props} />;\n/** A first screen, an onboarding step. */\nexport const WelcomeState = (props: PresetProps) => <MascotState mood=\"welcome\" {...props} />;\n\nconst styles = StyleSheet.create({\n stacked: { alignItems: \"center\", justifyContent: \"center\", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },\n inline: { flexDirection: \"row\", alignItems: \"center\", gap: 16 },\n words: { alignItems: \"center\", gap: 6 },\n wordsInline: { flex: 1, gap: 4 },\n center: { textAlign: \"center\", maxWidth: 360 },\n action: { marginTop: 8, flexDirection: \"row\", flexWrap: \"wrap\", gap: 8 },\n actionCentred: { justifyContent: \"center\" },\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), `lovebird` (introductions), `crane` (listening). */\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 seven 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), the lovebird that\n * introduces (2026-10, with Yazakia: \"l'inséparable présente\") and the crane that listens (2026-10, with Yororis:\n * \"la grue écoute\"), redrawn on one 120 × 120 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\", \"lovebird\", \"crane\"] 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 * The lovebird — the inseparable that introduces two people. A plump little parrot: a short tail, a round head\n * with its coloured face (the detail colour), the white eye-rings of the species and a short hooked beak.\n */\n lovebird: {\n shadow: [60, 110, 23, 3.5],\n legs: [\"M53 96 L52 106 M48 106 L56 106\", \"M67 96 L68 106 M64 106 L72 106\"],\n back: [\"M74 90 C82 98 88 104 95 103 C91 98 86 91 82 84 Z\"],\n body: \"M32 66 C32 46 88 46 88 66 C88 90 76 100 60 100 C44 100 32 90 32 66 Z\",\n belly: \"M42 70 C42 59 78 59 78 70 C78 85 70 92 60 92 C50 92 42 85 42 70 Z\",\n wings: [\n { d: \"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\", pivot: [33, 60] },\n { d: mirror(\"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\"), pivot: [87, 60] },\n ],\n head: { cx: 60, cy: 38, r: 21 },\n details: [\"M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z\"],\n beak: \"M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z\",\n eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 },\n },\n /**\n * The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still\n * on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,\n * straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.\n */\n crane: {\n shadow: [62, 110, 20, 3],\n legs: [\"M56 87 L55 108 M51 108 L59 108\", \"M67 87 L68 108 M64 108 L73 108\"],\n body: \"M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z\",\n belly: \"M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z\",\n wings: [\n { d: \"M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z\", pivot: [44, 62] },\n { d: \"M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z\", pivot: [82, 62] },\n ],\n neck: { d: \"M52 62 C48 47 52 37 48 26\", width: 6 },\n head: { cx: 47, cy: 21, r: 8.5 },\n details: [\"M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z\"],\n beak: \"M40.5 18.5 L19 22.5 L40.5 25.5 Z\",\n eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 },\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 lovebird: { from: \"#6ee7b7\", to: \"#059669\", wing: \"#047857\", detail: \"#fb7185\", beak: \"#f97316\", eye: \"#1f2937\" },\n // The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.\n crane: { from: \"#ebe3d6\", to: \"#9c8f80\", wing: \"#7d7266\", detail: \"#dc2626\", beak: \"#44403c\", 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 * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle } from \"react-native-svg\";\n\nimport { type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type MeterPart = {\n /** Its name (“To the creator”) — passed translated. */\n label: string;\n /** Its value, in the meter's unit. */\n value: number;\n /** Its value in words (“€9.00”); default: its percentage. */\n valueText?: string;\n};\n\nexport type MeterProps = {\n /** The accessible name (“Storage”, “Credits”) — passed translated; shown with `showLabel`. */\n label: string;\n /** The value, between `min` and `max` (ignored with `parts`). */\n value?: number;\n /** The start of the range. Default 0. */\n min?: number;\n /** The end of the range. Default 100. */\n max?: number;\n /** The value in words (“42 GB of 50 GB”); default: the percentage. */\n valueText?: string;\n /** The shares where the tone changes: below `low` good, up to `high` warning, past it the other end. */\n thresholds?: { readonly low: number; readonly high: number };\n /** Which end is good: `low` (default: a quota) or `high` (a score). */\n optimum?: \"low\" | \"high\";\n /** Split into parts that add up to `max`: a stacked bar or ring, with its legend. */\n parts?: readonly MeterPart[];\n /** bar (default) · ring. */\n variant?: \"bar\" | \"ring\";\n /** sm · md (default) · lg: the bar's thickness, the ring's diameter. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Shows the label and the value above the bar. */\n showLabel?: boolean;\n /** A ring's centre: the value, a word. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst THICK = { sm: 6, md: 8, lg: 12 } as const;\nconst RING = { sm: 56, md: 96, lg: 144 } as const;\n// The parts must stay apart in every brand (accent, accent-2 and info can be one hue): the accent, then the status tones.\nconst partColor = (t: Theme, i: number) => [t.accent, t.warning, t.success, t.textSecondary, t.danger][i % 5]!;\n\n/** A measure within a range — a quota, a balance, a share — toned by thresholds or split into parts: the web `Meter`. */\nexport function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, optimum = \"low\", parts, variant = \"bar\", size = \"md\", showLabel, children, style }: MeterProps) {\n const { theme } = useTheme();\n const span = max - min || 1;\n const ratio = Math.min(1, Math.max(0, (value - min) / span));\n const level = !thresholds ? \"ok\" : ratio >= thresholds.high ? (optimum === \"low\" ? \"danger\" : \"success\") : ratio >= thresholds.low ? \"warning\" : optimum === \"low\" ? \"success\" : \"danger\";\n const tone = { ok: theme.accent, success: theme.success, warning: theme.warning, danger: theme.danger }[level];\n const words = valueText ?? `${Math.round(ratio * 100)} %`;\n const shares = (parts ?? []).map((p, i) => ({ ...p, color: partColor(theme, i), ratio: Math.min(1, Math.max(0, p.value / span)), words: p.valueText ?? `${Math.round((p.value / span) * 100)} %` }));\n const a11y = parts\n ? { role: \"group\" as const, \"aria-label\": `${label}: ${shares.map((p) => `${p.label} ${p.words}`).join(\", \")}` }\n : { role: \"meter\" as const, \"aria-label\": label, \"aria-valuemin\": min, \"aria-valuemax\": max, \"aria-valuenow\": Math.min(max, Math.max(min, value)), \"aria-valuetext\": words };\n const legend = parts ? (\n <View style={styles.legend} aria-hidden>\n {shares.map((p, i) => (\n <View key={i} style={styles.legendItem}>\n <View style={[styles.swatch, { backgroundColor: p.color }]} />\n <Txt variant=\"caption\">{p.label}</Txt>\n <Txt variant=\"caption\" tone=\"secondary\">\n {p.words}\n </Txt>\n </View>\n ))}\n </View>\n ) : null;\n\n if (variant === \"ring\") {\n const side = RING[size];\n const r = 44;\n const c = 2 * Math.PI * r;\n let offset = 0;\n const arcs = parts\n ? shares.map((p) => {\n const arc = { color: p.color, len: p.ratio, start: offset };\n offset += p.ratio;\n return arc;\n })\n : [{ color: tone, len: ratio, start: 0 }];\n return (\n <View accessible {...a11y} style={[styles.ringRoot, style]}>\n <View style={{ width: side, height: side }}>\n <Svg width={side} height={side} viewBox=\"0 0 100 100\" style={{ transform: [{ rotate: \"-90deg\" }] }}>\n <Circle cx={50} cy={50} r={r} fill=\"none\" stroke={theme.borderDefault} strokeWidth={9} />\n {arcs.map((a, i) => (\n <Circle key={i} cx={50} cy={50} r={r} fill=\"none\" stroke={a.color} strokeWidth={9} strokeDasharray={`${Math.max(0, a.len * c - (parts ? 2 : 0))} ${c}`} strokeDashoffset={-a.start * c} strokeLinecap={parts ? \"butt\" : \"round\"} />\n ))}\n </Svg>\n {children !== undefined ? <View style={[StyleSheet.absoluteFill, styles.center]}>{children}</View> : null}\n </View>\n {legend}\n </View>\n );\n }\n return (\n <View accessible {...a11y} style={[styles.root, style]}>\n {showLabel ? (\n <View style={styles.header} aria-hidden>\n <Txt variant=\"caption\" numberOfLines={1} style={styles.caption}>\n {label}\n </Txt>\n {!parts ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {words}\n </Txt>\n ) : null}\n </View>\n ) : null}\n <View style={[styles.track, { height: THICK[size], backgroundColor: theme.surface3 }]}>\n {parts ? shares.map((p, i) => <View key={i} style={{ width: `${p.ratio * 100}%`, backgroundColor: p.color }} />) : <View style={[styles.fill, { width: `${ratio * 100}%`, backgroundColor: tone }]} />}\n </View>\n {legend}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { width: \"100%\", gap: 6 },\n header: { flexDirection: \"row\", alignItems: \"baseline\", gap: 8 },\n caption: { flex: 1, fontWeight: \"600\" },\n track: { flexDirection: \"row\", gap: 2, borderRadius: 999, overflow: \"hidden\", width: \"100%\" },\n fill: { height: \"100%\", borderRadius: 999 },\n legend: { flexDirection: \"row\", flexWrap: \"wrap\", columnGap: 14, rowGap: 4, marginTop: 4 },\n legendItem: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n swatch: { width: 8, height: 8, borderRadius: 4 },\n ringRoot: { alignItems: \"center\", gap: 8 },\n center: { alignItems: \"center\", justifyContent: \"center\" },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, type StyleProp, Text, type TextStyle } from \"react-native\";\n\nimport { useReducedMotion } from \"./theme\";\nimport { Txt, type TxtTone, type TxtVariant } from \"./txt\";\n\nexport type NumberTickerProps = {\n /** The value to show. */\n value: number;\n /** The locale of the digits and separators (`\"fr\"`: 1 204,5) — the app's locale. */\n locale?: string;\n /** How to write it (`{ style: \"currency\", currency: \"EUR\" }`): Intl.NumberFormat options. */\n format?: Intl.NumberFormatOptions;\n /** `mount` (default): climbs from zero once, when shown. `change`: rolls from the previous value on every change. */\n trigger?: \"mount\" | \"change\";\n /** Milliseconds of the roll. Default 1100. */\n duration?: number;\n /** Announce each new value (`trigger=\"change\"`): a live total the person should hear. */\n announce?: boolean;\n /** The type scale. Default `display`. */\n variant?: TxtVariant;\n /** The text role. Default `text`. */\n tone?: TxtTone;\n /** Styles merged last. */\n style?: StyleProp<TextStyle>;\n};\n\n/**\n * A figure that climbs to its value — the web `NumberTicker`: tabular digits (no jitter), the final value for screen\n * readers from the first frame, still under reduced motion.\n */\nexport function NumberTicker({ value, locale, format, trigger = \"mount\", duration = 1100, announce, variant = \"display\", tone = \"text\", style }: NumberTickerProps) {\n const reduce = useReducedMotion();\n const writer = React.useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);\n const [shown, setShown] = React.useState(() => (reduce ? value : trigger === \"mount\" ? 0 : value));\n const [anim] = React.useState(() => new Animated.Value(trigger === \"mount\" ? 0 : value));\n const first = React.useRef(true);\n React.useEffect(() => {\n const isFirst = first.current;\n first.current = false;\n if (reduce || (!isFirst && trigger === \"mount\") || (isFirst && trigger === \"change\")) {\n anim.setValue(value);\n setShown(value);\n if (!isFirst && announce) AccessibilityInfo.announceForAccessibility(writer.format(value));\n return;\n }\n const id = anim.addListener(({ value: v }) => setShown(v));\n const run = Animated.timing(anim, { toValue: value, duration, easing: Easing.out(Easing.cubic), useNativeDriver: false });\n run.start(({ finished }) => {\n if (finished) setShown(value);\n });\n if (!isFirst && announce) AccessibilityInfo.announceForAccessibility(writer.format(value));\n return () => {\n run.stop();\n anim.removeListener(id);\n };\n }, [value, reduce, trigger, duration, announce, anim, writer]);\n const digits = Number.isInteger(value) ? Math.round(shown) : shown;\n return (\n <Txt variant={variant} tone={tone} aria-label={writer.format(value)} style={[{ fontVariant: [\"tabular-nums\"] }, style]}>\n <Text aria-hidden>{writer.format(digits)}</Text>\n </Txt>\n );\n}\n","import * as React from \"react\";\nimport { type NativeScrollEvent, type NativeSyntheticEvent, ScrollView, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { Button } from \"./button\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type OnboardingSlide = {\n /** The picture: a `Mascot`, an illustration, a product mark (decorative). */\n visual?: React.ReactNode;\n /** The promise, in a few words — passed translated. */\n title: string;\n /** One or two sentences. */\n description: string;\n};\n\nexport type OnboardingProps = {\n /** The slides, three or four. */\n slides: readonly OnboardingSlide[];\n /** The words of the buttons — passed translated. */\n labels: {\n /** To the next slide (“Next”). */\n next: string;\n /** On the last slide (“Get started”). */\n done: string;\n /** Skips to the end (“Skip”). */\n skip: string;\n /** The position, for screen readers: `(n, total) => \"Step 2 of 3\"`. */\n position: (n: number, total: number) => string;\n };\n /** Called by “Get started” and “Skip”: remember it and leave. */\n onDone: () => void;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A first launch in a few slides: swipe or tap Next, Skip at any time, dots that say where you are, the safe areas\n * kept. Each slide is announced with its position; the buttons do everything a swipe does.\n */\nexport function Onboarding({ slides, labels, onDone, style }: OnboardingProps) {\n const { theme, insets, haptic } = useTheme();\n const [width, setWidth] = React.useState(0);\n const [page, setPage] = React.useState(0);\n const scroller = React.useRef<ScrollView>(null);\n const last = page === slides.length - 1;\n const go = (to: number) => {\n scroller.current?.scrollTo({ x: to * width, animated: true });\n setPage(to);\n haptic(\"selection\");\n };\n const onScroll = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (width > 0) setPage(Math.round(e.nativeEvent.contentOffset.x / width));\n };\n return (\n <View style={[styles.root, { backgroundColor: theme.surface0, paddingTop: insets.top + 8, paddingBottom: insets.bottom + 16 }, style]} onLayout={(e) => setWidth(e.nativeEvent.layout.width)}>\n <View style={styles.top}>\n {!last ? <Button label={labels.skip} variant=\"ghost\" size=\"sm\" onPress={onDone} /> : <View style={styles.spacer} />}\n </View>\n <ScrollView ref={scroller} tabIndex={0} horizontal pagingEnabled showsHorizontalScrollIndicator={false} onMomentumScrollEnd={onScroll} style={styles.flex}>\n {slides.map((slide, i) => (\n <View key={i} style={[styles.slide, { width: width || undefined }]} accessible aria-label={`${labels.position(i + 1, slides.length)}. ${slide.title}. ${slide.description}`} aria-hidden={i !== page}>\n {slide.visual ? <View style={styles.visual}>{slide.visual}</View> : null}\n <Txt variant=\"display\" style={styles.centred}>\n {slide.title}\n </Txt>\n <Txt tone=\"secondary\" style={[styles.centred, styles.description]}>\n {slide.description}\n </Txt>\n </View>\n ))}\n </ScrollView>\n <View style={styles.dots} aria-hidden>\n {slides.map((_, i) => (\n <View key={i} style={[styles.dot, { width: i === page ? 22 : 8, backgroundColor: i === page ? theme.accent : theme.borderStrong }]} />\n ))}\n </View>\n <View style={styles.bottom}>\n <Button label={last ? labels.done : labels.next} variant={last ? \"gradient\" : \"primary\"} size=\"lg\" onPress={() => (last ? onDone() : go(page + 1))} />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n top: { flexDirection: \"row\", justifyContent: \"flex-end\", paddingHorizontal: 16, minHeight: 32 },\n spacer: { height: 32 },\n flex: { flex: 1 },\n slide: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 32, gap: 12 },\n visual: { marginBottom: 12 },\n centred: { textAlign: \"center\" },\n description: { maxWidth: 340 },\n dots: { flexDirection: \"row\", justifyContent: \"center\", gap: 6, marginVertical: 16 },\n dot: { height: 8, borderRadius: 4 },\n bottom: { paddingHorizontal: 24 },\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 * as React from \"react\";\nimport { Platform, Pressable, type StyleProp, StyleSheet, TextInput, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type OtpInputProps = {\n /** The accessible name (“Verification code”) — passed translated. */\n label: string;\n /** How many characters. Default 6. */\n length?: number;\n /** The code (controlled). */\n value?: string;\n /** Called on every change with the code typed so far. */\n onValueChange?: (code: string) => void;\n /** Called once all the characters are there (check it here); a tick confirms. */\n onComplete?: (code: string) => void;\n /** `numeric` (default) or `text` (letters and digits). */\n mode?: \"numeric\" | \"text\";\n /** The code was refused: the boxes turn to danger, and an error tick. */\n invalid?: boolean;\n /** Cannot be typed in (checking). */\n disabled?: boolean;\n /** Focus it when shown. */\n autoFocus?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A one-time code in boxes — one real input underneath, so the keyboard's suggestion of the code from a message\n * (iOS `oneTimeCode`, Android `sms-otp`) and pasting fill every box at once; the caret shows in the next empty box.\n */\nexport function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode = \"numeric\", invalid, disabled, autoFocus, style }: OtpInputProps) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState(\"\");\n const code = value ?? own;\n const [focused, setFocused] = React.useState(false);\n const input = React.useRef<TextInput>(null);\n React.useEffect(() => {\n if (invalid) haptic(\"warning\");\n }, [invalid, haptic]);\n const change = (raw: string) => {\n const next = (mode === \"numeric\" ? raw.replace(/\\D/g, \"\") : raw.replace(/\\s/g, \"\").toUpperCase()).slice(0, length);\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n if (next.length === length && code.length !== length) {\n haptic(\"success\");\n onComplete?.(next);\n }\n };\n return (\n <Pressable onPress={() => input.current?.focus()} disabled={disabled} accessible={false} style={[styles.root, style]}>\n <View style={styles.boxes} aria-hidden>\n {Array.from({ length }, (_, i) => {\n const active = focused && i === Math.min(code.length, length - 1);\n return (\n <View\n key={i}\n style={[\n styles.box,\n {\n borderRadius: radius.md,\n backgroundColor: theme.surface2,\n borderColor: invalid ? theme.danger : active ? theme.ring : theme.borderDefault,\n borderWidth: invalid || active ? 2 : 1,\n },\n ]}\n >\n <Txt variant=\"title\">{code[i] ?? \"\"}</Txt>\n </View>\n );\n })}\n </View>\n <TextInput\n ref={input}\n aria-label={label}\n aria-invalid={invalid || undefined}\n value={code}\n onChangeText={change}\n maxLength={length}\n editable={!disabled}\n autoFocus={autoFocus}\n keyboardType={mode === \"numeric\" ? \"number-pad\" : \"default\"}\n textContentType=\"oneTimeCode\"\n autoComplete={Platform.OS === \"android\" && mode === \"numeric\" ? \"sms-otp\" : \"one-time-code\"}\n autoCapitalize=\"characters\"\n autoCorrect={false}\n caretHidden\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={styles.hidden}\n />\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignSelf: \"flex-start\" },\n boxes: { flexDirection: \"row\", gap: 8 },\n box: { width: 46, height: 56, alignItems: \"center\", justifyContent: \"center\" },\n hidden: { position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, opacity: 0.011, color: \"transparent\" },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type PaginationLabels = {\n /** The previous-page button (\"Previous page\"). */\n previous: string;\n /** The next-page button (\"Next page\"). */\n next: string;\n /** Where the list stands: `(page, count) => \"Page 3 of 12\"`. */\n compact: (page: number, pageCount: number) => string;\n};\n\nexport type PaginationProps = {\n /** Pages mode: the current page, from 1. */\n page?: number;\n /** Pages mode: how many pages. Without it, the pagination is in cursor mode. */\n pageCount?: number;\n /** Pages mode: called with the page asked for. */\n onPageChange?: (page: number) => void;\n /** Cursor mode: whether there is a previous page. */\n hasPrevious?: boolean;\n /** Cursor mode: whether there is a next page. */\n hasNext?: boolean;\n /** Cursor mode: called by the previous button. */\n onPrevious?: () => void;\n /** Cursor mode: called by the next button. */\n onNext?: () => void;\n /** A text between the buttons in cursor mode (\"41–60\"), or instead of \"Page 3 of 12\". */\n status?: string;\n /** Disables both buttons (a page is loading). */\n disabled?: boolean;\n /** The words, passed translated. */\n labels: PaginationLabels;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nfunction Chevron({ direction, color }: { direction: \"left\" | \"right\"; color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d={direction === \"left\" ? \"m15 6-6 6 6 6\" : \"m9 6 6 6-6 6\"} />\n </Svg>\n );\n}\n\n/**\n * Previous / next with where the list stands (\"Page 3 of 12\"), or the two buttons of a cursor — the web\n * `Pagination` folded, the form a phone's thumb reaches. On a feed, prefer loading more at the end of the list.\n */\nexport function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }: PaginationProps) {\n const { theme, radius } = useTheme();\n const paged = pageCount !== undefined;\n const count = Math.max(1, pageCount ?? 1);\n const current = Math.min(Math.max(1, page), count);\n const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));\n const canNext = !disabled && (paged ? current < count : Boolean(hasNext));\n const button = (direction: \"left\" | \"right\", enabled: boolean, onPress: (() => void) | undefined, label: string) => (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={!enabled}\n disabled={!enabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { borderRadius: radius.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? (pressed ? 0.8 : 1) : 0.4 },\n ]}\n >\n <Chevron direction={direction} color={theme.textPrimary} />\n </Pressable>\n );\n const text = status ?? (paged ? labels.compact(current, count) : null);\n return (\n <View role=\"navigation\" style={[styles.row, style]}>\n {button(\"left\", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous)}\n {text ? (\n <Text aria-live=\"polite\" style={[styles.status, { color: theme.textSecondary }]}>\n {text}\n </Text>\n ) : null}\n {button(\"right\", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n row: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12 },\n button: { width: 44, height: 44, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n status: { fontSize: 13, fontWeight: \"600\", fontVariant: [\"tabular-nums\"] },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { Button } from \"./button\";\nimport { Mascot, type MascotProps } from \"./mascots\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type PermissionStatus = \"undetermined\" | \"granted\" | \"denied\" | \"blocked\";\n\nexport type PermissionPromptProps = {\n /** Where the permission stands (from expo-camera, expo-notifications…): `blocked` = denied and the system will not ask again. */\n status: PermissionStatus;\n /** What it is for, in a few words (“Film your challenge”) — passed translated. */\n title: string;\n /** Why the app needs it, said plainly, before the system asks. */\n description: string;\n /** The button that asks (“Allow the camera”). */\n allowLabel: string;\n /** Asks the system (`requestPermission()` of the module). */\n onAllow: () => void;\n /** The button when the system will not ask again (“Open settings”) — with `onOpenSettings`. */\n settingsLabel?: string;\n /** Opens the app's settings (`Linking.openSettings()`). */\n onOpenSettings?: () => void;\n /** The words when it is blocked (“The camera is off for Orochia. Turn it on in the settings.”). */\n blockedDescription?: string;\n /** A secondary way out (“Not now”), with `onDismiss`. */\n dismissLabel?: string;\n /** Called by the way out. */\n onDismiss?: () => void;\n /** The bird above (decorative): the falcon watches (camera), the pigeon delivers (notifications). Default falcon. */\n mascot?: MascotProps[\"bird\"];\n /** Rendered once granted: the camera, the screen. Absent: nothing. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Before the system's permission dialog, the app says why: a bird, what it is for, the button that asks — and, once the\n * system will not ask again, the way to the settings. Once granted, its children (the camera, the feature) show.\n */\nexport function PermissionPrompt({\n status,\n title,\n description,\n allowLabel,\n onAllow,\n settingsLabel,\n onOpenSettings,\n blockedDescription,\n dismissLabel,\n onDismiss,\n mascot = \"falcon\",\n children,\n style,\n}: PermissionPromptProps) {\n const { theme, radius } = useTheme();\n if (status === \"granted\") return <>{children ?? null}</>;\n const blocked = status === \"blocked\" || (status === \"denied\" && Boolean(onOpenSettings));\n return (\n <View style={[styles.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius.xl }, style]}>\n <Mascot bird={mascot} mood={blocked ? \"error\" : \"welcome\"} size={104} />\n <Txt variant=\"title\" style={styles.centred}>\n {title}\n </Txt>\n <Txt tone=\"secondary\" style={styles.centred}>\n {blocked && blockedDescription ? blockedDescription : description}\n </Txt>\n <View style={styles.actions}>\n {blocked && settingsLabel && onOpenSettings ? (\n <Button label={settingsLabel} variant=\"primary\" onPress={onOpenSettings} />\n ) : (\n <Button label={allowLabel} variant=\"primary\" onPress={onAllow} />\n )}\n {dismissLabel && onDismiss ? <Button label={dismissLabel} variant=\"ghost\" onPress={onDismiss} /> : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", gap: 10, padding: 24, borderWidth: StyleSheet.hairlineWidth },\n centred: { textAlign: \"center\", maxWidth: 340 },\n actions: { marginTop: 8, gap: 8, alignSelf: \"stretch\" },\n});\n","import React, { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { PHOENIX, PHOENIX_PALETTES,type PhoenixPalette } from \"../mascots/phoenix-geometry\";\nimport { markA11y } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\nexport interface PhoenixProps {\n /** `own` (default): the violet wing and the gold wing of the Krizaka story. `brand`: the theme's accent and accent-2. */\n tone?: \"own\" | \"brand\";\n /** Width and height in points. */\n size?: number;\n /** A slow float; always still when the system asks to reduce motion. */\n animated?: boolean;\n /** An accessible name (the phoenix becomes an image); without it, it is decorative. */\n title?: string;\n /** The outer view's style. */\n style?: ViewStyle;\n}\n\nfunction useFloat(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: 2500, easing: Easing.inOut(Easing.ease), useNativeDriver: true });\n loop = Animated.loop(Animated.sequence([step(-6), step(0)]));\n loop.start();\n });\n return () => {\n cancelled = true;\n loop?.stop();\n };\n }, [animated, y]);\n return y;\n}\n\n/** The phoenix of the Krizaka story — the comeback — for React Native: the web `Phoenix`'s geometry. */\nexport function Phoenix({ tone = \"own\", size = 120, animated = true, title, style }: PhoenixProps) {\n const { theme } = useTheme();\n const id = useSvgId(\"kzp\");\n const y = useFloat(animated);\n const p: PhoenixPalette =\n tone === \"brand\"\n ? { left: [theme.accent2, theme.accent], right: [theme.accent, theme.accent2], core: [\"#ffffff\", theme.accent], body: theme.surface3, edge: theme.borderStrong, crest: theme.accent }\n : PHOENIX_PALETTES.own;\n return (\n <View style={[{ width: size, height: size }, style]} {...markA11y(title)}>\n <Animated.View style={{ transform: [{ translateY: y }] }}>\n <Svg width={size} height={size} viewBox=\"0 0 120 120\">\n <Defs>\n <LinearGradient id={`${id}l`} x1=\"1\" y1=\"0\" x2=\"0\" y2=\"1\">\n <Stop offset=\"0%\" stopColor={p.left[0]} />\n <Stop offset=\"100%\" stopColor={p.left[1]} />\n </LinearGradient>\n <LinearGradient id={`${id}r`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <Stop offset=\"0%\" stopColor={p.right[0]} />\n <Stop offset=\"100%\" stopColor={p.right[1]} />\n </LinearGradient>\n <RadialGradient id={`${id}c`}>\n <Stop offset=\"0%\" stopColor={p.core[0]} />\n <Stop offset=\"100%\" stopColor={p.core[1]} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n <Path d={PHOENIX.wingL} fill={`url(#${id}l)`} />\n <Path d={PHOENIX.wingR} fill={`url(#${id}r)`} />\n <Path d={PHOENIX.tailL} fill={`url(#${id}l)`} opacity={0.7} />\n <Path d={PHOENIX.tailR} fill={`url(#${id}r)`} opacity={0.7} />\n <Path d={PHOENIX.body} fill={p.body} stroke={p.edge} strokeOpacity={0.5} />\n <Circle cx={60} cy={58} r={12} fill={`url(#${id}c)`} />\n <Circle cx={60} cy={58} r={3.5} fill=\"#ffffff\" />\n <Path d={PHOENIX.crest} stroke={p.crest} strokeWidth={2} strokeLinecap=\"round\" />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/** The phoenix's geometry (120 × 120), drawn by the web `Phoenix` and the native one. */\nexport const PHOENIX = {\n wingL: \"M56 62 C40 40 22 36 8 40 C22 46 30 56 34 70 C40 64 48 62 56 62 Z\",\n wingR: \"M64 62 C80 40 98 36 112 40 C98 46 90 56 86 70 C80 64 72 62 64 62 Z\",\n tailL: \"M52 66 C46 82 40 94 30 104 C44 98 52 90 58 78 Z\",\n tailR: \"M68 66 C74 82 80 94 90 104 C76 98 68 90 62 78 Z\",\n body: \"M60 34 L68 60 L60 82 L52 60 Z\",\n crest: \"M60 34 L56 24 M60 34 L64 24\",\n} as const;\n\nexport interface PhoenixPalette {\n /** The left wing's gradient (top → bottom). */\n readonly left: readonly [string, string];\n /** The right wing's gradient. */\n readonly right: readonly [string, string];\n /** The core's glow: centre, edge. */\n readonly core: readonly [string, string];\n /** The body and its edge. */\n readonly body: string;\n readonly edge: string;\n /** The crest. */\n readonly crest: string;\n}\n\n/** The phoenix of the Krizaka story: a violet wing, a gold wing (the brand layer's own colours, like the marks). */\nexport const PHOENIX_PALETTES: { readonly own: PhoenixPalette } = {\n own: {\n left: [\"#c084fc\", \"#7c3aed\"],\n right: [\"#fde68a\", \"#f59e0b\"],\n core: [\"#fff7ed\", \"#fb923c\"],\n body: \"#1f1530\",\n edge: \"#e9d5ff\",\n crest: \"#fbbf24\",\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 { YAZAKIA as G } from \"../marks/yazakia-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Yazakia mark for React Native — the geometry of the web mark (marks/yazakia-geometry.ts): two voices, two\n * speech bubbles that overlap; the orbit and the pair turn slowly around them, the lens where they overlap breathes;\n * still when the system reduces motion.\n */\nexport function YazakiaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"yzm\");\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 {gradient}\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.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n {G.voices.map((v, i) => (\n <React.Fragment key={v.body}>\n <Path d={v.body} fill={fill} />\n <Path d={v.tail} fill={fill} />\n {i === 0 ? <Path d={`${v.body} ${v.tail}`} fill={G.shade.color} opacity={G.shade.opacity} /> : null}\n </React.Fragment>\n ))}\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\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 {G.pair.at.map(([cx, cy]) => (\n <Circle key={cx} cx={cx} cy={cy} r={G.pair.r} fill={fill} />\n ))}\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n {gradient}\n <LinearGradient id={`${id}l`} gradientUnits=\"userSpaceOnUse\" x1={0} y1={G.lens.y1} x2={0} y2={G.lens.y2}>\n <Stop offset=\"0%\" stopColor={G.highlight.color} stopOpacity={G.highlight.from} />\n <Stop offset=\"100%\" stopColor={G.highlight.color} stopOpacity={G.highlight.to} />\n </LinearGradient>\n </Defs>\n <Path d={G.lens.d} fill={fill} />\n <Path d={G.lens.d} fill={`url(#${id}l)`} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","import { marks } from \"@krizaka/tokens/native\";\n\n/**\n * The Yazakia mark's geometry — drawn by the web mark (YazakiaLogo) and the native one (YazakiaMark). The family's\n * grammar (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold emblem in the brand\n * gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem is **two voices**: two solid speech bubbles, mirrored, that overlap. Where they overlap — what the two\n * people share once they have talked — is the bright core, a lens lit from above that breathes. The left voice sits a\n * shade deeper than the right, so the pair reads as two, with depth, at 16 px as at 128 px. A thin gap (the page shows\n * through) separates each bubble from the lens: the paths are cut here, no mask, so web and native draw the same thing.\n * Two nodes, the pair, ride the dashed orbit. The gradient is the brand's mark gradient (`marks.yazakia` of\n * @krizaka/tokens): emerald → turquoise, mid-tones that read ≥ 3:1 on the page surfaces of both themes (tested in\n * @krizaka/tokens), so one mark serves dark and light.\n */\n/** The bright end of the gradient (turquoise): the halo and the core's glow. */\nconst turquoise = marks.yazakia[marks.yazakia.length - 1]![1];\n\n/*\n * How the paths are drawn (literal, so the native bundle carries no geometry code): each bubble is a circle of radius 80\n * centred at y 184, 36 on either side of x = 200 (164 and 236); they overlap in the lens (x = 200, y 112.6 → 255.4).\n * Each bubble is cut by the other's circle grown by the gap (r 87): the cut runs from (191.9, 109) to (191.9, 259) on\n * the left, mirrored on the right. Each tail is a curved point from the bubble's lower outer side, down and out to\n * (88, 294) — mirrored (312, 294).\n */\nexport const YAZAKIA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"80 80 240 240\",\n center: 200,\n /** The two voices, left then right: each a bubble (cut around the lens) and its tail. */\n voices: [\n { body: \"M191.9 109 A80 80 0 1 0 191.9 259 A87 87 0 0 1 191.9 109 Z\", tail: \"M98 230 Q104 268 88 294 Q122 288 144 262 L130 200 Z\" },\n { body: \"M208.1 109 A80 80 0 1 1 208.1 259 A87 87 0 0 0 208.1 109 Z\", tail: \"M302 230 Q296 268 312 294 Q278 288 256 262 L270 200 Z\" },\n ] as const,\n /** The left voice, a shade deeper: the depth between the two. */\n shade: { color: \"#000\", opacity: 0.22 },\n /** Where the bubbles overlap: the core, lit from above. */\n lens: { d: \"M200 112.6 A80 80 0 0 1 200 255.4 A80 80 0 0 1 200 112.6 Z\", y1: 112.6, y2: 255.4 },\n gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yazakia },\n /** The light on the lens: bright at the top, fading down. */\n highlight: { color: \"#f0fdfa\", from: 0.75, to: 0.2 },\n /** The pair: two nodes on the orbit, opposite each other, that turn with it. */\n pair: { r: 8, at: [[40, 200], [360, 200]] as const },\n glow: { color: turquoise, opacity: 0.16 },\n /** The core's breathing shadow (web), in the mark's turquoise. */\n pulse: { color: turquoise, 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 from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { YORORIS as G } from \"../marks/yororis-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), \"the hold\": two filled\n * leaves cupping a warm core. The orbit and its one node, the moment, turn slowly; the core breathes; still when the\n * system reduces motion.\n */\nexport function YororisMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, 36_000);\n const id = useSvgId(\"yrm\");\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 {gradient}\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.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n <Path d={G.stem} stroke={fill} strokeWidth={G.stroke} strokeLinecap=\"round\" fill=\"none\" />\n {G.leaves.map((d) => (\n <Path key={d} d={d} fill={fill} />\n ))}\n <Path d={G.veins} stroke={G.vein.color} strokeOpacity={G.vein.opacity} strokeWidth={G.vein.width} strokeLinecap=\"round\" strokeDasharray={G.vein.dash} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\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.moment.at[0]} cy={G.moment.at[1]} r={G.moment.r} fill={fill} />\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <LinearGradient id={`${id}c`} x1=\"50%\" y1=\"100%\" x2=\"50%\" y2=\"0%\">\n {G.coreGradient.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n </Defs>\n <Circle cx={G.core.cx} cy={G.core.cy} r={G.core.r} fill={`url(#${id}c)`} />\n <Circle cx={G.core.cx} cy={G.core.cy} 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 Yororis mark's geometry — drawn by the web mark (YororisLogo) and the native one (YororisMark). The family's\n * grammar (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold filled emblem in the\n * brand gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem is \"the hold\": a \"Y\" whose two arms are two filled leaves — open hands — that rise from one stem and cup\n * a warm core. The core is not where the arms join, it rests *inside* them: held, given room, listened to. A vein of\n * light runs along each leaf (depth, like the Orochia serpent's scales). One node, the moment, rides the dashed orbit:\n * it comes round, then it goes (a presence that stops). The leaves wear the brand's mark gradient (`marks.yororis` of\n * @krizaka/tokens): sand → sage, mid-tones that read ≥ 3:1 on the page surfaces of both themes (tested in\n * @krizaka/tokens), so one mark serves dark and light; the core is a warm sand light that rises from the mark's sand.\n */\nconst sand = marks.yororis[0]![1];\n/** The calm end of the gradient (sage): the halo and the core's glow. */\nconst sage = marks.yororis[marks.yororis.length - 1]![1];\n\nexport const YORORIS = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"80 80 240 240\",\n center: 200,\n /** The two leaves — open hands, mirrored around x = 200 — filled, rising from the stem. */\n leaves: [\n \"M200 262 C142 256 104 206 110 122 C138 130 154 152 160 180 C168 218 182 238 204 246 Z\",\n \"M200 262 C258 256 296 206 290 122 C262 130 246 152 240 180 C232 218 218 238 196 246 Z\",\n ],\n /** A vein of light along each leaf (dashed, it drifts slowly when animated). */\n veins: \"M122 142 C128 196 156 232 192 248 M278 142 C272 196 244 232 208 248\",\n vein: { color: \"#fbf6ea\", opacity: 0.45, width: 3, dash: \"2 14\" },\n /** The stem, from the junction down. */\n stem: \"M200 244 L200 312\",\n stroke: 30,\n gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },\n /** The core's warm light: from the mark's sand (below) to a light sand (above). */\n coreGradient: { stops: [[\"0%\", sand], [\"100%\", \"#e6c993\"]] as const },\n /** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */\n core: { cx: 200, cy: 184, r: 32, inner: 11 },\n highlight: \"#fbf6ea\",\n /** The moment: one node on the orbit, that turns with it. */\n moment: { r: 9, at: [200, 40] as const },\n glow: { color: sage, opacity: 0.18 },\n /** The core's breathing shadow (web), in the core's warm sand. */\n pulse: { color: sand, 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 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\";\nimport { YazakiaMark } from \"./YazakiaMark\";\nimport { YororisMark } from \"./YororisMark\";\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 if (id === \"yazakia\") return <YazakiaMark {...props} />;\n if (id === \"yororis\") return <YororisMark {...props} />;\n return <OrochiaMark {...props} />;\n}\n","import * as React from \"react\";\nimport { Animated, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useEntrance } from \"./story-motion\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport interface ProfileStat {\n /** What it measures (“Response rate”) — passed translated. */\n label: string;\n /** The value, between 0 and `max`. */\n value: number;\n /** The top of the range (default 100). */\n max?: number;\n /** The value in words (“92 %”); default: the percentage. */\n valueText?: string;\n}\n\nexport type ProfileCardProps = Omit<ViewProps, \"children\"> & {\n /** The portrait: an `Avatar`, an image, a mark. Decorative — the name carries the meaning. */\n visual: React.ReactNode;\n /** The name (the card's heading). */\n name: string;\n /** The headline gauge's label (“Profile complete”); without it, no headline gauge. */\n statLabel?: string;\n /** The headline gauge's value, 0–100 (default 100). */\n value?: number;\n /** The headline value in words; default: the percentage. */\n valueText?: string;\n /** More gauges under the headline one, each with its value in words. */\n stats?: readonly ProfileStat[];\n /** One line under the gauges. */\n caption?: string;\n /** Under everything: actions (a `Button`), chips. */\n children?: React.ReactNode;\n /** The gauges fill once on mount; still when the system reduces motion. */\n animated?: boolean;\n};\n\nconst ratioOf = (value: number, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));\n\nfunction Bar({ label, ratio, words, animated, delay }: { label: string; ratio: number; words: string; animated: boolean; delay: number }) {\n const { theme } = useTheme();\n const t = useEntrance(animated, delay, 900);\n const [width, setWidth] = React.useState(0);\n const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });\n return (\n <View\n accessible\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(ratio * 100)}\n aria-valuetext={words}\n onLayout={(e) => setWidth(e.nativeEvent.layout.width)}\n style={[styles.track, { backgroundColor: theme.surface3 }]}\n >\n <Animated.View style={[styles.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }]} />\n </View>\n );\n}\n\n/** A profile at a glance for React Native: portrait, name, a headline gauge, stats in words, a line, actions. */\nexport function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }: ProfileCardProps) {\n const { theme, radius } = useTheme();\n const ratio = ratioOf(value);\n return (\n <View {...props} style={[styles.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius.xl }, style]}>\n <View aria-hidden style={[styles.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }]}>\n {visual}\n </View>\n <View style={styles.head}>\n <Txt variant=\"title\" style={styles.name}>\n {name}\n </Txt>\n {statLabel ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {statLabel} <Txt variant=\"caption\">{valueText ?? `${Math.round(ratio * 100)} %`}</Txt>\n </Txt>\n ) : null}\n </View>\n {statLabel ? <Bar label={statLabel} ratio={ratio} words={valueText ?? `${Math.round(ratio * 100)} %`} animated={animated} delay={200} /> : null}\n {stats?.map((s, i) => {\n const r = ratioOf(s.value, s.max);\n const words = s.valueText ?? `${Math.round(r * 100)} %`;\n return (\n <View key={s.label} style={styles.stat}>\n <View aria-hidden style={styles.statHead}>\n <Txt variant=\"caption\" tone=\"secondary\">\n {s.label}\n </Txt>\n <Txt variant=\"caption\">{words}</Txt>\n </View>\n <Bar label={s.label} ratio={r} words={words} animated={animated} delay={320 + i * 120} />\n </View>\n );\n })}\n {caption ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.caption}>\n {caption}\n </Txt>\n ) : null}\n {children ? <View style={styles.extra}>{children}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", gap: 12, padding: 20, borderWidth: StyleSheet.hairlineWidth },\n disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: \"center\", justifyContent: \"center\", overflow: \"hidden\" },\n head: { flexDirection: \"row\", alignSelf: \"stretch\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8 },\n name: { flexShrink: 1, fontSize: 17 },\n track: { alignSelf: \"stretch\", height: 6, borderRadius: 3, overflow: \"hidden\" },\n fill: { height: \"100%\", borderRadius: 3 },\n stat: { alignSelf: \"stretch\", gap: 5 },\n statHead: { flexDirection: \"row\", justifyContent: \"space-between\", gap: 8 },\n caption: { textAlign: \"center\" },\n extra: { flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"center\", gap: 8, alignSelf: \"stretch\" },\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 { RefreshControl, type RefreshControlProps } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type PullToRefreshProps = Omit<RefreshControlProps, \"colors\" | \"tintColor\" | \"progressBackgroundColor\" | \"titleColor\" | \"title\"> & {\n /** The words of the pull (“Pull to refresh”) — passed translated; shown on iOS under the spinner. */\n label?: string;\n};\n\n/**\n * The platform's pull to refresh in the theme's accent: the `refreshControl` of a ScrollView or a FlatList. `List`\n * draws it already with `onRefresh`.\n */\nexport function PullToRefresh({ label, ...props }: PullToRefreshProps) {\n const { theme } = useTheme();\n return <RefreshControl {...props} tintColor={theme.accent} colors={[theme.accent]} progressBackgroundColor={theme.surface2} title={label} titleColor={theme.textSecondary} />;\n}\n","import * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\n/** A choice: the value stored and its words (passed translated), a line under them, a second line on a key. */\nexport type RadioOption = { value: string; label: string; description?: string; hint?: string; disabled?: boolean };\n\nexport type RadioGroupProps = {\n /** The group's accessible name (the question), passed translated. */\n label: string;\n /** The choices, all visible (two to five, a few more for `buttons`). */\n options: readonly RadioOption[];\n /** The chosen value (controlled). */\n value?: string | null;\n /** The chosen value at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the value pressed. */\n onValueChange?: (value: string) => void;\n /**\n * `list` (a dot and its words, 44-pt rows), `cards` (whole cards, the check lit), `buttons` (tactile keys that press\n * in: an `impact` haptic), `segmented` (a track of equal segments).\n * @default \"list\"\n */\n variant?: \"list\" | \"cards\" | \"buttons\" | \"segmented\";\n /** An error under the group, read and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nfunction Check({ color }: { color: string }) {\n return (\n <Svg width={12} height={12} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={3.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n );\n}\n\n/** A tactile key: raised on its ledge, sunk while pressed and once chosen (the spring of the theme). */\nfunction Key({ option, checked, disabled, onPress }: { option: RadioOption; checked: boolean; disabled: boolean; onPress: () => void }) {\n const { theme, radius, motion } = useTheme();\n const [held, setHeld] = React.useState(false);\n const [sink] = React.useState(() => new Animated.Value(checked ? 1 : 0));\n const down = checked || held;\n React.useEffect(() => {\n Animated.timing(sink, { toValue: down ? 1 : 0, duration: motion.duration.fast, useNativeDriver: true }).start();\n }, [down, sink, motion.duration.fast]);\n return (\n <Pressable\n role=\"radio\"\n aria-checked={checked}\n aria-label={option.hint ? `${option.label}, ${option.hint}` : option.label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onPress={onPress}\n onPressIn={() => setHeld(true)}\n onPressOut={() => setHeld(false)}\n style={[styles.keySlot, disabled ? styles.disabled : null]}\n >\n <View style={[styles.ledge, { borderRadius: radius.lg, backgroundColor: checked ? theme.accentHover : theme.borderStrong }]} />\n <Animated.View\n style={[\n styles.key,\n {\n borderRadius: radius.lg,\n backgroundColor: checked ? theme.accent : theme.surface2,\n borderColor: checked ? theme.accent : theme.borderDefault,\n transform: [{ translateY: sink.interpolate({ inputRange: [0, 1], outputRange: [0, 3] }) }],\n },\n ]}\n >\n <Text style={[styles.keyLabel, { color: checked ? theme.onAccent : theme.textPrimary }]}>{option.label}</Text>\n {option.hint ? <Text style={[styles.keyHint, { color: checked ? theme.onAccent : theme.textSecondary }]}>{option.hint}</Text> : null}\n </Animated.View>\n </Pressable>\n );\n}\n\n/**\n * One choice among a few, all visible — the web `RadioGroup` in its four looks. A radio group for VoiceOver and\n * TalkBack; each press plays a haptic (`selection`, `impact` for a tactile key) when the app passes `haptics`.\n */\nexport function RadioGroup({ label, options, value: valueProp, defaultValue = null, onValueChange, variant = \"list\", error, disabled, style }: RadioGroupProps) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState<string | null>(defaultValue);\n const value = valueProp !== undefined ? valueProp : own;\n const pick = (v: string) => {\n haptic(variant === \"buttons\" ? \"impact\" : \"selection\");\n if (valueProp === undefined) setOwn(v);\n if (v !== value) onValueChange?.(v);\n };\n const body = options.map((o) => {\n const checked = o.value === value;\n const off = Boolean(disabled || o.disabled);\n const name = o.description ? `${o.label}, ${o.description}` : o.label;\n if (variant === \"buttons\") return <Key key={o.value} option={o} checked={checked} disabled={off} onPress={() => pick(o.value)} />;\n if (variant === \"segmented\")\n return (\n <Pressable\n key={o.value}\n role=\"radio\"\n aria-checked={checked}\n aria-label={o.label}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => pick(o.value)}\n style={[styles.segment, { borderRadius: radius.md }, checked ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null, off ? styles.disabled : null]}\n >\n <Text numberOfLines={1} style={[styles.segmentLabel, { color: checked ? theme.textPrimary : theme.textSecondary }]}>\n {o.label}\n </Text>\n </Pressable>\n );\n if (variant === \"cards\")\n return (\n <Pressable\n key={o.value}\n role=\"radio\"\n aria-checked={checked}\n aria-label={name}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => pick(o.value)}\n style={({ pressed }) => [\n styles.card,\n { borderRadius: radius.xl, backgroundColor: checked ? theme.accentSoft : theme.surface1, borderColor: checked ? theme.accent : theme.borderDefault, transform: [{ scale: pressed ? 0.98 : 1 }] },\n off ? styles.disabled : null,\n ]}\n >\n <View style={[styles.cardCheck, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }]}>{checked ? <Check color={theme.onAccent} /> : null}</View>\n <Text style={[styles.cardLabel, { color: theme.textPrimary }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.cardDescription, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </Pressable>\n );\n return (\n <Pressable key={o.value} role=\"radio\" aria-checked={checked} aria-label={name} aria-disabled={off || undefined} disabled={off} onPress={() => pick(o.value)} style={[styles.row, off ? styles.disabled : null]}>\n <View style={[styles.dot, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }]}>{checked ? <View style={[styles.dotIn, { backgroundColor: theme.onAccent }]} /> : null}</View>\n <View style={styles.rowText}>\n <Text style={[styles.rowLabel, { color: theme.textPrimary }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.cardDescription, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </View>\n </Pressable>\n );\n });\n return (\n <View style={[styles.root, style]}>\n <View\n role=\"radiogroup\"\n aria-label={label}\n style={\n variant === \"segmented\"\n ? [styles.track, { borderRadius: radius.lg, backgroundColor: theme.surface2, borderColor: error ? theme.danger : theme.borderDefault }]\n : variant === \"buttons\"\n ? styles.keys\n : variant === \"cards\"\n ? styles.cards\n : styles.list\n }\n >\n {body}\n </View>\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.error, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n list: { gap: 2 },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 12, minHeight: 44 },\n rowText: { flex: 1, gap: 1 },\n rowLabel: { fontSize: 15, lineHeight: 20 },\n dot: { width: 22, height: 22, borderRadius: 11, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n dotIn: { width: 8, height: 8, borderRadius: 4 },\n cards: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10 },\n card: { flexGrow: 1, flexBasis: 140, minHeight: 72, padding: 14, paddingRight: 40, gap: 2, borderWidth: 1 },\n cardCheck: { position: \"absolute\", right: 12, top: 12, width: 20, height: 20, borderRadius: 10, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n cardLabel: { fontSize: 16, fontWeight: \"700\" },\n cardDescription: { fontSize: 12, lineHeight: 16 },\n keys: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10, paddingBottom: 4 },\n keySlot: { minWidth: 64, minHeight: 52 },\n ledge: { position: \"absolute\", left: 0, right: 0, top: 4, bottom: -4 },\n key: { minHeight: 48, paddingHorizontal: 16, paddingVertical: 8, alignItems: \"center\", justifyContent: \"center\", gap: 1, borderWidth: 1 },\n keyLabel: { fontSize: 15, fontWeight: \"700\" },\n keyHint: { fontSize: 11, fontWeight: \"500\" },\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth, height: 42 },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n segmentLabel: { fontSize: 13, fontWeight: \"600\" },\n error: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type SearchFieldProps = Omit<TextInputProps, \"value\" | \"defaultValue\" | \"onChangeText\" | \"style\" | \"onSubmitEditing\"> & {\n /** The accessible name of the input (\"Search videos\"), passed translated. */\n label: string;\n /** The query (controlled). */\n value?: string;\n /** The query at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the query. */\n onValueChange?: (query: string) => void;\n /** Called with the query once typing pauses (`debounce` ms): fetch the results here. */\n onSearch?: (query: string) => void;\n /** The pause, in ms, before `onSearch`. Default 300. */\n debounce?: number;\n /** Called when the keyboard's search key is pressed. */\n onSubmit?: (query: string) => void;\n /** The clear button's name (\"Clear search\"), passed translated. */\n clearLabel: string;\n /** The words of a cancel button beside the field (“Cancel”, iOS search bars) — passed translated; with `onCancel` it shows while the field has the focus or a query. */\n cancelLabel?: string;\n /** Called by the cancel button: the query is cleared and the keyboard closes. */\n onCancel?: () => void;\n /** Styles merged last, on the field's frame. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A search box: the glyph, the input with the keyboard's search key, a clear button, and a debounced `onSearch` —\n * the web `SearchField` without the shortcut and the suggestions (a screen of results is the native idiom).\n */\nexport function SearchField({ label, value, defaultValue = \"\", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, cancelLabel, onCancel, style, placeholder, onFocus, onBlur, ...props }: SearchFieldProps) {\n const [focused, setFocused] = React.useState(false);\n const input = React.useRef<TextInput>(null);\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(defaultValue);\n const query = value ?? own;\n const timer = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n React.useEffect(() => () => clearTimeout(timer.current), []);\n const change = (next: string) => {\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n clearTimeout(timer.current);\n if (onSearch) timer.current = setTimeout(() => onSearch(next), debounce);\n };\n const field = (\n <View style={[styles.frame, { borderRadius: radius.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style]}>\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.textSecondary} strokeWidth={2} strokeLinecap=\"round\" aria-hidden>\n <Circle cx={11} cy={11} r={7} />\n <Path d=\"m20 20-3.5-3.5\" />\n </Svg>\n <TextInput\n ref={input}\n role=\"searchbox\"\n aria-label={label}\n value={query}\n placeholder={placeholder}\n placeholderTextColor={theme.textMuted}\n returnKeyType=\"search\"\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"never\"\n onChangeText={change}\n onSubmitEditing={() => {\n clearTimeout(timer.current);\n onSearch?.(query);\n onSubmit?.(query);\n }}\n style={[styles.input, { color: theme.textPrimary }]}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n {...props}\n />\n {query ? (\n <Pressable role=\"button\" aria-label={clearLabel} hitSlop={10} onPress={() => change(\"\")} style={styles.clear}>\n <Svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.textSecondary} strokeWidth={2.4} strokeLinecap=\"round\" aria-hidden>\n <Path d=\"M18 6 6 18M6 6l12 12\" />\n </Svg>\n </Pressable>\n ) : null}\n </View>\n );\n if (!cancelLabel || !onCancel) return field;\n return (\n <View style={styles.bar}>\n <View style={styles.grow}>{field}</View>\n {focused || query ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n change(\"\");\n input.current?.blur();\n onCancel();\n }}\n hitSlop={8}\n style={styles.cancel}\n >\n <Txt variant=\"label\" tone=\"accent\">\n {cancelLabel}\n </Txt>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n frame: { flexDirection: \"row\", alignItems: \"center\", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet.hairlineWidth },\n input: { flex: 1, height: \"100%\", fontSize: 15, paddingVertical: 0 },\n bar: { flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n grow: { flex: 1 },\n cancel: { minHeight: 44, justifyContent: \"center\" },\n clear: { width: 32, height: 32, alignItems: \"center\", justifyContent: \"center\" },\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 { type LayoutChangeEvent, PanResponder, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { useSvgId, useTheme } from \"./theme\";\n\nexport type SliderValue = number | [number, number];\n\nexport type SliderProps<V extends SliderValue = number> = {\n /** The accessible name of the thumb (or of both thumbs of a range), passed translated. */\n label: string;\n /** For a range: each thumb's own name ([\"Minimum\", \"Maximum\"]), passed translated. */\n thumbLabels?: [string, string];\n /** One number (a thumb) or two (a range), controlled. */\n value?: V;\n /** The value at first, uncontrolled. */\n defaultValue?: V;\n /** Called on every step the thumb passes. */\n onValueChange?: (value: V) => void;\n /** Called once the thumb is released (or an accessibility action is done). */\n onValueCommit?: (value: V) => void;\n /** The lowest value. Default 0. */\n min?: number;\n /** The highest value. Default 100. */\n max?: number;\n /** The step. Default 1. */\n step?: number;\n /** The value as words (read, and shown): \"1.5×\", \"15 %\". */\n formatValue?: (value: number) => string;\n /** Shows the label and the value above the track. */\n showLabel?: boolean;\n /** Shows the value floating over the thumb while it is dragged (`\"always\"`: at all times). */\n floatingValue?: boolean | \"always\";\n /** A graduation at every step (`true`, up to 40) or at the values given. */\n ticks?: boolean | readonly number[];\n /** Words under the track at some values. Horizontal only. */\n marks?: readonly { value: number; label: string }[];\n /** `gradient` (accent → accent-2, default) or `solid`. */\n tone?: \"gradient\" | \"solid\";\n /** `horizontal` (default) or `vertical` (give the slider a height). */\n orientation?: \"horizontal\" | \"vertical\";\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst THUMB = 26;\nconst toArray = (v: SliderValue | undefined) => (v === undefined ? undefined : typeof v === \"number\" ? [v] : [...v]);\n\n/**\n * A slider for React Native — the web `Slider`: one value or a range, drawn by the theme, dragged anywhere on the track.\n * Each step the thumb passes ticks under the thumb (`selection` haptic); for VoiceOver and TalkBack each thumb is an\n * adjustable control (swipe up or down by a step), its value read as words.\n */\nexport function Slider<V extends SliderValue = number>({\n label,\n thumbLabels,\n value,\n defaultValue,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n step = 1,\n formatValue = String,\n showLabel,\n floatingValue,\n ticks,\n marks,\n tone = \"gradient\",\n orientation = \"horizontal\",\n disabled,\n style,\n}: SliderProps<V>) {\n const { theme, radius, haptic } = useTheme();\n const range = Array.isArray(value ?? defaultValue);\n const vertical = orientation === \"vertical\";\n const [inner, setInner] = React.useState<number[]>(() => toArray(defaultValue) ?? [min]);\n const current = toArray(value) ?? inner;\n const [length, setLength] = React.useState(0);\n const [dragging, setDragging] = React.useState<number | null>(null);\n const gradientId = useSvgId(\"kzs\");\n const out = (next: number[]) => (range ? [next[0]!, next[1]!] : next[0]) as V;\n const snap = (v: number) => Math.min(max, Math.max(min, Math.round((v - min) / step) * step + min));\n const pct = (v: number) => (v - min) / (max - min || 1);\n\n // The latest state for the responder, created once.\n const live = React.useRef({ current, length, vertical, disabled });\n React.useLayoutEffect(() => {\n live.current = { current, length, vertical, disabled };\n });\n const active = React.useRef(0);\n const start = React.useRef(0);\n const set = (next: number[]) => {\n if (value === undefined) setInner(next);\n onValueChange?.(out(next));\n };\n const move = (thumb: number, to: number) => {\n const now = live.current.current;\n let v = snap(to);\n if (now.length === 2) v = thumb === 0 ? Math.min(v, now[1]!) : Math.max(v, now[0]!);\n if (v === now[thumb]) return;\n haptic(\"selection\");\n const next = [...now];\n next[thumb] = v;\n set(next);\n };\n // A touch on the control (its padding is half a thumb on each end of the track) → a value.\n const at = (position: number) => {\n const { length: l, vertical: vert } = live.current;\n const p = Math.min(1, Math.max(0, (vert ? l + THUMB / 2 - position : position - THUMB / 2) / (l || 1)));\n return min + p * (max - min);\n };\n // What the responder (created once) calls: always this render's.\n const commit = () => onValueCommit?.(out(live.current.current));\n const handlers = React.useRef({ move, at, commit });\n React.useLayoutEffect(() => {\n handlers.current = { move, at, commit };\n });\n // The responder reads the refs in its gestures only, never while rendering.\n // eslint-disable-next-line react-hooks/refs\n const [responder] = React.useState(() =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => !live.current.disabled,\n onMoveShouldSetPanResponder: () => !live.current.disabled,\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: (e) => {\n const pos = live.current.vertical ? e.nativeEvent.locationY : e.nativeEvent.locationX;\n start.current = pos;\n const target = handlers.current.at(pos);\n const now = live.current.current;\n active.current = now.length === 2 && Math.abs(target - now[1]!) < Math.abs(target - now[0]!) ? 1 : 0;\n setDragging(active.current);\n handlers.current.move(active.current, target);\n },\n onPanResponderMove: (_, g) => handlers.current.move(active.current, handlers.current.at(start.current + (live.current.vertical ? g.dy : g.dx))),\n onPanResponderRelease: () => {\n setDragging(null);\n handlers.current.commit();\n },\n onPanResponderTerminate: () => setDragging(null),\n }),\n );\n\n const lo = range ? Math.min(...current) : min;\n const hi = range ? Math.max(...current) : current[0]!;\n const tickValues = ticks === true ? ((max - min) / step <= 40 ? Array.from({ length: Math.round((max - min) / step) + 1 }, (_, i) => min + i * step) : []) : ticks ? [...ticks] : [];\n const along = (p: number) => (vertical ? { bottom: p * length } : { left: p * length });\n const onLayout = (e: LayoutChangeEvent) => setLength(vertical ? e.nativeEvent.layout.height : e.nativeEvent.layout.width);\n const fill = vertical ? { bottom: pct(lo) * length, height: (pct(hi) - pct(lo)) * length, left: 0, right: 0 } : { left: pct(lo) * length, width: (pct(hi) - pct(lo)) * length, top: 0, bottom: 0 };\n\n return (\n <View style={[styles.root, vertical ? styles.rootVertical : null, disabled ? styles.disabled : null, style]}>\n {showLabel ? (\n <View style={styles.header}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <Text aria-hidden style={[styles.value, { color: theme.textSecondary }]}>\n {current.map(formatValue).join(\" – \")}\n </Text>\n </View>\n ) : null}\n <View {...responder.panHandlers} style={vertical ? styles.controlVertical : styles.control}>\n <View onLayout={onLayout} pointerEvents=\"none\" style={[vertical ? styles.trackVertical : styles.track, { borderRadius: radius.full, backgroundColor: theme.surface3 }]}>\n <View style={[styles.fill, fill, { borderRadius: radius.full, overflow: \"hidden\", backgroundColor: theme.accent }]}>\n {tone === \"gradient\" ? (\n <Svg width=\"100%\" height=\"100%\" aria-hidden>\n <Defs>\n <LinearGradient id={gradientId} x1=\"0\" y1={vertical ? \"1\" : \"0\"} x2={vertical ? \"0\" : \"1\"} y2=\"0\">\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n <Rect width=\"100%\" height=\"100%\" fill={`url(#${gradientId})`} />\n </Svg>\n ) : null}\n </View>\n {tickValues.map((t) => (\n <View key={t} style={[vertical ? styles.tickVertical : styles.tick, along(pct(t)), { backgroundColor: t > lo && t < hi ? theme.onAccent : theme.borderStrong }]} />\n ))}\n </View>\n {current.map((v, i) => (\n <View\n key={i}\n accessible\n role=\"slider\"\n aria-label={range ? (thumbLabels?.[i] ?? label) : label}\n aria-valuenow={v}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={formatValue(v)}\n aria-disabled={disabled || undefined}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }]}\n onAccessibilityAction={(e) => {\n const next = snap(v + (e.nativeEvent.actionName === \"increment\" ? step : -step));\n move(i, next);\n const values = [...current];\n values[i] = next;\n onValueCommit?.(out(values));\n }}\n pointerEvents=\"none\"\n style={[styles.thumb, vertical ? { bottom: pct(v) * length, left: (44 - THUMB) / 2, marginLeft: 0, marginTop: 0 } : { left: pct(v) * length - THUMB / 2, top: 0 }, { borderColor: theme.accent, backgroundColor: theme.textOnMedia, shadowColor: theme.scrimStrong }]}\n >\n {floatingValue === \"always\" || (floatingValue && dragging === i) ? (\n <View aria-hidden style={[vertical ? styles.bubbleVertical : styles.bubble, { backgroundColor: theme.textPrimary, borderRadius: radius.md }]}>\n <Text style={[styles.bubbleText, { color: theme.surface0 }]}>{formatValue(v)}</Text>\n </View>\n ) : null}\n </View>\n ))}\n </View>\n {marks?.length && !vertical ? (\n <View aria-hidden style={styles.marks}>\n {marks.map((m) => (\n <Text key={m.value} style={[styles.mark, { left: pct(m.value) * length, color: theme.textSecondary, transform: [{ translateX: m.value === min ? 0 : m.value === max ? -40 : -20 }], textAlign: m.value === min ? \"left\" : m.value === max ? \"right\" : \"center\" }]}>\n {m.label}\n </Text>\n ))}\n </View>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 8, alignSelf: \"stretch\" },\n rootVertical: { alignSelf: \"flex-start\", alignItems: \"center\" },\n header: { flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 },\n label: { fontSize: 12, fontWeight: \"600\" },\n value: { fontSize: 12, fontVariant: [\"tabular-nums\"] },\n control: { height: 44, justifyContent: \"center\", paddingHorizontal: THUMB / 2 },\n controlVertical: { flex: 1, minHeight: 160, width: 44, alignItems: \"center\", paddingVertical: THUMB / 2 },\n track: { height: 6 },\n trackVertical: { width: 6, flex: 1 },\n fill: { position: \"absolute\" },\n tick: { position: \"absolute\", top: 1, width: 1, height: 4, marginLeft: -0.5 },\n tickVertical: { position: \"absolute\", left: 1, height: 1, width: 4, marginBottom: -0.5 },\n thumb: {\n position: \"absolute\",\n width: THUMB,\n height: THUMB,\n borderRadius: THUMB / 2,\n borderWidth: 2.5,\n marginLeft: THUMB / 2,\n marginTop: (44 - THUMB) / 2,\n shadowOpacity: 0.3,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n },\n bubble: { position: \"absolute\", bottom: THUMB + 6, left: -17, minWidth: 56, paddingHorizontal: 8, paddingVertical: 4, alignItems: \"center\" },\n bubbleVertical: { position: \"absolute\", left: THUMB + 8, top: -2, minWidth: 48, paddingHorizontal: 8, paddingVertical: 4, alignItems: \"center\" },\n bubbleText: { fontSize: 12, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n marks: { height: 16, marginHorizontal: THUMB / 2 },\n mark: { position: \"absolute\", width: 40, fontSize: 11, fontWeight: \"500\" },\n disabled: { opacity: 0.4 },\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 { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { LoaderGlyph } from \"./loader\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type StepStatus = \"done\" | \"current\" | \"upcoming\" | \"error\";\n\nexport type Step = {\n /** Its name — passed translated. */\n title: string;\n /** One line under it (what happens, a time) — passed translated. */\n description?: string;\n /** Where it stands; by default from `current`. */\n status?: StepStatus;\n /** Between 0 and 1 for the current step: its glyph grows to it. */\n value?: number;\n /** Anything under the step while it is current or failed: a progress bar, an action. */\n content?: React.ReactNode;\n};\n\nexport type StepperProps = {\n /** The steps, in order. */\n steps: readonly Step[];\n /** The index of the current step (the steps before are done). */\n current?: number;\n /** vertical (default: a job's run, a checkout) · horizontal (a few short steps across the screen). */\n orientation?: \"vertical\" | \"horizontal\";\n /** The words read after each step's title (`{ done: \"done\", current: \"in progress\", upcoming: \"to come\", error: \"failed\" }`) — passed translated. */\n statusLabels?: Partial<Record<StepStatus, string>>;\n /** The accessible name of the list (“Run of the dubbing job”). */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst WORDS: Record<StepStatus, string> = { done: \"done\", current: \"in progress\", upcoming: \"to come\", error: \"failed\" };\n\n/** The steps of a process, where it stands — the web `Stepper`: done steps checked, the current one tracing, a failure crossed. */\nexport function Stepper({ steps, current = 0, orientation = \"vertical\", statusLabels, \"aria-label\": label, style }: StepperProps) {\n const { theme } = useTheme();\n const words = { ...WORDS, ...statusLabels };\n const vertical = orientation === \"vertical\";\n return (\n <View role=\"list\" aria-label={label} style={[vertical ? styles.column : styles.row, style]}>\n {steps.map((step, i) => {\n const status: StepStatus = step.status ?? (i < current ? \"done\" : i === current ? \"current\" : \"upcoming\");\n const last = i === steps.length - 1;\n const node =\n status === \"current\" ? (\n <LoaderGlyph value={step.value ?? null} size={24} />\n ) : status === \"error\" ? (\n <LoaderGlyph state=\"error\" size={24} />\n ) : (\n <Svg width={24} height={24} viewBox=\"0 0 24 24\" aria-hidden>\n <Circle cx={12} cy={12} r={10} fill={status === \"done\" ? theme.accent : \"none\"} stroke={status === \"done\" ? theme.accent : theme.borderStrong} strokeWidth={2} />\n {status === \"done\" ? <Path d=\"M7.5 12.3l3 3 6-6.3\" stroke={theme.onAccent} strokeWidth={2.2} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /> : null}\n </Svg>\n );\n const connector = !last ? (\n <View aria-hidden style={[vertical ? styles.vLine : styles.hLine, { backgroundColor: status === \"done\" ? theme.accent : theme.borderDefault }]} />\n ) : null;\n return (\n <View key={i} role=\"listitem\" accessible aria-label={`${step.title}, ${words[status]}`} style={vertical ? styles.vStep : styles.hStep}>\n <View style={vertical ? styles.vRail : styles.hRail}>\n {node}\n {connector}\n </View>\n <View style={[styles.body, vertical && !last ? { paddingBottom: 20 } : null]}>\n <Txt variant=\"label\" tone={status === \"upcoming\" ? \"secondary\" : \"text\"} numberOfLines={vertical ? undefined : 2}>\n {step.title}\n </Txt>\n {step.description ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {step.description}\n </Txt>\n ) : null}\n {step.content && (status === \"current\" || status === \"error\") ? <View style={styles.content}>{step.content}</View> : null}\n </View>\n </View>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n column: { gap: 0 },\n row: { flexDirection: \"row\" },\n vStep: { flexDirection: \"row\", gap: 12 },\n hStep: { flex: 1, gap: 8 },\n vRail: { alignItems: \"center\", width: 24 },\n hRail: { flexDirection: \"row\", alignItems: \"center\" },\n vLine: { width: 2, flex: 1, marginVertical: 4, borderRadius: 1 },\n hLine: { height: 2, flex: 1, marginHorizontal: 6, borderRadius: 1 },\n body: { flex: 1, gap: 2, paddingTop: 2 },\n content: { marginTop: 8 },\n});\n","import * as React from \"react\";\nimport { Animated, PanResponder, Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { type Theme, useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type SwipeAction = {\n /** The action's words — passed translated; also its accessibility action. */\n label: string;\n /** What it does; the row closes first. */\n onPress: () => void;\n /** The tone: `danger` (delete), `accent` (pin, reply), `neutral` (archive, mute). Default `neutral`. */\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** A decorative icon above the words. */\n icon?: React.ReactNode;\n};\n\nexport type SwipeableRowProps = {\n /** The row's content (a `ListItem`). */\n children: React.ReactNode;\n /** Revealed by a swipe to the left, at the right edge (the first is the outermost). */\n trailing?: readonly SwipeAction[];\n /** Revealed by a swipe to the right, at the left edge. */\n leading?: readonly SwipeAction[];\n /** A full swipe past this share of the row runs the outermost action (delete, archive). Default 0.6; `false` never. */\n fullSwipe?: number | false;\n /** Width of each action, in points. Default 80. */\n actionWidth?: number;\n /**\n * The row's own action, for screen readers: the row is one element whose actions are the swipe actions, and\n * activating it calls this (pass the `onPress` of the `ListItem` inside).\n */\n onActivate?: () => void;\n /** The test id of the row's moving part (the accessibility element). */\n testID?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst toneColor = (t: Theme, tone: SwipeAction[\"tone\"]) =>\n ({ neutral: t.surface3, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger })[tone ?? \"neutral\"];\nconst toneText = (tone: SwipeAction[\"tone\"]) => (tone === \"neutral\" || tone === undefined ? \"text\" : \"onAccent\") as \"text\" | \"onAccent\";\n\n/**\n * A row whose actions show under a swipe — mail-style: swipe left for the trailing actions, right for the leading ones,\n * a full swipe runs the outermost one, a tick marks the threshold. Screen readers get the same actions from the\n * rotor (accessibility actions): nothing is reachable only by a gesture.\n */\nexport function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6, actionWidth = 80, onActivate, testID, style }: SwipeableRowProps) {\n const { theme, haptic } = useTheme();\n const reduce = useReducedMotion();\n const [x] = React.useState(() => new Animated.Value(0));\n const [width, setWidth] = React.useState(0);\n const rest = React.useRef(0);\n const armed = React.useRef(false);\n const settle = (to: number) => {\n rest.current = to;\n if (reduce) x.setValue(to);\n else Animated.spring(x, { toValue: to, useNativeDriver: true, damping: 22, stiffness: 240 }).start();\n };\n const run = (action: SwipeAction) => {\n settle(0);\n action.onPress();\n };\n // PanResponder's handlers run on gestures, never during render: the compiler's ref and purity checks misread them.\n /* eslint-disable react-hooks/refs */\n const pan = React.useMemo(\n () =>\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 8 && Math.abs(g.dx) > Math.abs(g.dy) * 1.5,\n onPanResponderMove: (_, g) => {\n let next = rest.current + g.dx;\n if (next < 0 && trailing.length === 0) next = 0;\n if (next > 0 && leading.length === 0) next = 0;\n x.setValue(next);\n const past = fullSwipe !== false && width > 0 && Math.abs(next) > width * fullSwipe;\n if (past !== armed.current) {\n armed.current = past;\n if (past) haptic(\"impact\");\n }\n },\n onPanResponderRelease: (_, g) => {\n const at = rest.current + g.dx;\n if (armed.current) {\n armed.current = false;\n const action = at < 0 ? trailing[0] : leading[0];\n if (action) return run(action);\n }\n const open = at < 0 ? -trailing.length * actionWidth : leading.length * actionWidth;\n settle(Math.abs(at) > actionWidth / 2 ? open : 0);\n },\n onPanResponderTerminate: () => settle(0),\n }),\n [trailing, leading, fullSwipe, width, actionWidth], // eslint-disable-line react-hooks/exhaustive-deps -- run/settle are stable in effect\n );\n /* eslint-enable react-hooks/refs */\n const side = (actions: readonly SwipeAction[], edge: \"left\" | \"right\") => (\n <View aria-hidden style={[styles.side, edge === \"left\" ? { left: 0 } : { right: 0, flexDirection: \"row-reverse\" }]}>\n {actions.map((action, i) => (\n // eslint-disable-next-line react-hooks/refs -- runs on a press, never during render\n <Pressable key={i} focusable={false} tabIndex={-1} onPress={() => run(action)} style={[styles.action, { width: actionWidth, backgroundColor: toneColor(theme, action.tone) }]}>\n {action.icon}\n <Txt variant=\"caption\" tone={toneText(action.tone)} style={styles.actionText} numberOfLines={1}>\n {action.label}\n </Txt>\n </Pressable>\n ))}\n </View>\n );\n const all = [...leading, ...trailing];\n return (\n <View style={[styles.root, style]} onLayout={(e) => setWidth(e.nativeEvent.layout.width)}>\n {leading.length > 0 ? side(leading, \"left\") : null}\n {trailing.length > 0 ? side(trailing, \"right\") : null}\n <Animated.View\n {...pan.panHandlers}\n accessible\n testID={testID}\n accessibilityActions={[...(onActivate ? [{ name: \"activate\" }] : []), ...all.map((a) => ({ name: a.label, label: a.label }))]}\n onAccessibilityAction={(e) => {\n if (e.nativeEvent.actionName === \"activate\") return onActivate?.();\n const action = all.find((a) => a.label === e.nativeEvent.actionName);\n if (action) action.onPress();\n }}\n style={[styles.front, { backgroundColor: theme.surface0, transform: [{ translateX: x }] }]}\n >\n {children}\n </Animated.View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\" },\n side: { position: \"absolute\", top: 0, bottom: 0, flexDirection: \"row\" },\n action: { alignItems: \"center\", justifyContent: \"center\", gap: 4, paddingHorizontal: 6 },\n actionText: { fontWeight: \"700\" },\n front: {},\n});\n","import * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SwitchProps = {\n /** The accessible name (\"Push notifications\"), passed translated — also the visible words when `children` is not given and `showLabel` is set. */\n label: string;\n /** On (controlled). */\n checked?: boolean;\n /** On at first, uncontrolled. */\n defaultChecked?: boolean;\n /** Called with the new state. */\n onCheckedChange?: (checked: boolean) => void;\n /** A line under the label, read with the switch (\"Auctions you follow, new messages\"). Shown with `showLabel`. */\n description?: string;\n /** Draws the label (and the description) beside the switch, the whole row pressable: a settings row. */\n showLabel?: boolean;\n /** sm · md (default). */\n size?: \"sm\" | \"md\";\n /** An error under the row, read and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst SIZES = { sm: { w: 40, h: 24, knob: 18 }, md: { w: 52, h: 32, knob: 26 } } as const;\n\n/**\n * An on/off switch for React Native — the web `Switch`, drawn by the theme (the accent when on, the material's knob),\n * not the system's: the same look on iOS and Android, a `selection` haptic when it flips. `showLabel` makes it a\n * settings row (the label and its description beside it, all pressable).\n */\nexport function Switch({ label, checked, defaultChecked = false, onCheckedChange, description, showLabel, size = \"md\", error, disabled, style }: SwitchProps) {\n const { theme, motion, haptic } = useTheme();\n const [own, setOwn] = React.useState(defaultChecked);\n const on = checked ?? own;\n const d = SIZES[size];\n const travel = d.w - d.knob - (d.h - d.knob);\n const [x] = React.useState(() => new Animated.Value(on ? 1 : 0));\n React.useEffect(() => {\n Animated.timing(x, { toValue: on ? 1 : 0, duration: motion.duration.base, useNativeDriver: true }).start();\n }, [on, x, motion.duration.base]);\n const toggle = () => {\n haptic(\"selection\");\n if (checked === undefined) setOwn(!on);\n onCheckedChange?.(!on);\n };\n const track = (\n <View style={[styles.track, { width: d.w, height: d.h, borderRadius: d.h / 2, backgroundColor: on ? theme.accent : theme.surface3, borderColor: error ? theme.danger : on ? theme.accent : theme.borderDefault }]}>\n <Animated.View\n style={[\n styles.knob,\n {\n width: d.knob,\n height: d.knob,\n borderRadius: d.knob / 2,\n backgroundColor: theme.textOnMedia,\n shadowColor: theme.scrimStrong,\n transform: [{ translateX: x.interpolate({ inputRange: [0, 1], outputRange: [0, travel] }) }],\n },\n ]}\n />\n </View>\n );\n const a11y = {\n role: \"switch\" as const,\n \"aria-checked\": on,\n \"aria-label\": label,\n \"aria-disabled\": disabled || undefined,\n accessibilityHint: error ?? description,\n disabled,\n onPress: toggle,\n };\n if (!showLabel)\n return (\n <Pressable {...a11y} hitSlop={{ top: (44 - d.h) / 2, bottom: (44 - d.h) / 2, left: Math.max(0, (44 - d.w) / 2), right: Math.max(0, (44 - d.w) / 2) }} style={[disabled ? styles.disabled : null, style]}>\n {track}\n </Pressable>\n );\n return (\n <View style={[styles.root, style]}>\n <Pressable {...a11y} style={[styles.row, disabled ? styles.disabled : null]}>\n <View style={styles.text}>\n <Text style={[styles.label, { color: theme.textPrimary }]}>{label}</Text>\n {description ? <Text style={[styles.description, { color: theme.textSecondary }]}>{description}</Text> : null}\n </View>\n {track}\n </Pressable>\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.description, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 2, alignSelf: \"stretch\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 16, minHeight: 48 },\n text: { flex: 1, gap: 2 },\n label: { fontSize: 15, lineHeight: 20, fontWeight: \"500\" },\n description: { fontSize: 12, lineHeight: 16 },\n track: { justifyContent: \"center\", paddingHorizontal: 2, borderWidth: 1 },\n knob: { shadowOpacity: 0.25, shadowRadius: 3, shadowOffset: { width: 0, height: 1 }, elevation: 2 },\n disabled: { opacity: 0.4 },\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 TabBarItem<T extends string> = {\n /** The section's key (the route name). */\n value: T;\n /** Its name under the icon — passed translated. */\n label: string;\n /** The icon: a function of the selected state and the colour (`(on, color) => <HomeIcon color={color} />`). */\n icon: (selected: boolean, color: string) => React.ReactNode;\n /** A count on the icon (`99+` past 99); `true` for a dot without a number. */\n badge?: number | boolean;\n /** The badge in words for screen readers (“3 unread”) — passed translated. */\n badgeLabel?: string;\n};\n\nexport type TabBarProps<T extends string> = {\n /** The app's main sections, two to five. */\n items: readonly TabBarItem<T>[];\n /** The current section. */\n value: T;\n /** Called with the section pressed (navigate there); a light tick confirms it. */\n onValueChange: (value: T) => void;\n /** Called when the current section is pressed again: scroll it to the top, refresh it. */\n onReselect?: (value: T) => void;\n /** The accessible name of the bar (“Main sections”) — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * The app's main sections, at the bottom of the screen: an icon and a word each, the current one in the accent, a\n * badge for what is new; clear of the home indicator (the safe area), a tick on change, a second press to go back to\n * the top. Plug it in expo-router's or React Navigation's `tabBar`.\n */\nexport function TabBar<T extends string>({ items, value, onValueChange, onReselect, \"aria-label\": label, style }: TabBarProps<T>) {\n const { theme, insets, haptic } = useTheme();\n return (\n <View role=\"tablist\" aria-label={label} style={[styles.bar, { backgroundColor: theme.glassBg, borderTopColor: theme.glassBorder, paddingBottom: Math.max(6, insets.bottom) }, style]}>\n {items.map((item) => {\n const selected = item.value === value;\n const color = selected ? theme.accentText : theme.textSecondary;\n const badge = item.badge === true ? \"\" : typeof item.badge === \"number\" && item.badge > 0 ? (item.badge > 99 ? \"99+\" : String(item.badge)) : null;\n return (\n <Pressable\n key={item.value}\n role=\"tab\"\n aria-selected={selected}\n onPress={() => {\n haptic(\"selection\");\n if (selected) onReselect?.(item.value);\n else onValueChange(item.value);\n }}\n style={({ pressed }) => [styles.item, { opacity: pressed ? 0.7 : 1 }]}\n >\n <View aria-hidden style={styles.icon}>\n {item.icon(selected, color)}\n {badge !== null ? (\n <View style={[badge ? styles.count : styles.dot, { backgroundColor: theme.danger, borderColor: theme.surface1 }]}>\n {badge ? <Text style={[styles.countText, { color: theme.onAccent }]}>{badge}</Text> : null}\n </View>\n ) : null}\n </View>\n <Text numberOfLines={1} style={[styles.label, { color, fontWeight: selected ? \"700\" : \"500\" }]}>\n {item.label}\n </Text>\n {/* The badge in words, read after the name and never seen (the digits on the icon are decorative). */}\n {badge !== null && item.badgeLabel ? <Text style={styles.unseen}>{`, ${item.badgeLabel}`}</Text> : null}\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n bar: { flexDirection: \"row\", borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 6 },\n item: { flex: 1, alignItems: \"center\", gap: 2, minHeight: 48, justifyContent: \"center\" },\n icon: { width: 28, height: 26, alignItems: \"center\", justifyContent: \"center\" },\n label: { fontSize: 11, lineHeight: 14 },\n unseen: { position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", opacity: 0 },\n count: { position: \"absolute\", top: -4, left: 16, minWidth: 18, height: 18, borderRadius: 9, paddingHorizontal: 4, alignItems: \"center\", justifyContent: \"center\", borderWidth: 2 },\n countText: { fontSize: 10, fontWeight: \"800\", lineHeight: 12 },\n dot: { position: \"absolute\", top: 0, right: 0, width: 10, height: 10, borderRadius: 5, borderWidth: 2 },\n});\n","import * as React from \"react\";\nimport { Pressable, ScrollView, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type TabItem<T extends string> = {\n /** The tab's key. */\n value: T;\n /** Its words — passed translated. */\n label: string;\n /** A count after the words (unread, results). */\n count?: number;\n /** The panel shown while it is selected. */\n content?: React.ReactNode;\n /** Cannot be selected. */\n disabled?: boolean;\n};\n\nexport type TabsProps<T extends string> = {\n /** The tabs, in order. */\n items: readonly TabItem<T>[];\n /** The selected tab (controlled). */\n value?: T;\n /** The selected tab at first, uncontrolled. Default: the first. */\n defaultValue?: T;\n /** Called with the tab pressed; a light tick confirms it. */\n onValueChange?: (value: T) => void;\n /** The accessible name of the tab list — passed translated. */\n \"aria-label\"?: string;\n /** `underline` (default: sections of a screen, scrolls sideways when they do not fit) or `segmented` (two to four views). */\n variant?: \"underline\" | \"segmented\";\n /** Styles merged last, on the root. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Sections of one screen — the web `Tabs`: a tab list (underlined, scrolling sideways when long, or segmented) and the\n * selected panel under it. For the app's main sections, use `TabBar`.\n */\nexport function Tabs<T extends string>({ items, value, defaultValue, onValueChange, \"aria-label\": label, variant = \"underline\", style }: TabsProps<T>) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState<T | undefined>(defaultValue ?? items[0]?.value);\n const current = value ?? own;\n const select = (next: T) => {\n if (next === current) return;\n haptic(\"selection\");\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n };\n const segmented = variant === \"segmented\";\n const tabs = items.map((item) => {\n const selected = item.value === current;\n return (\n <Pressable\n key={item.value}\n role=\"tab\"\n aria-selected={selected}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n onPress={() => select(item.value)}\n style={[\n segmented ? styles.segment : styles.tab,\n segmented && selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault, borderRadius: radius.sm } : null,\n !segmented ? { borderBottomColor: selected ? theme.accent : \"transparent\" } : null,\n item.disabled ? styles.disabled : null,\n ]}\n >\n <Txt variant=\"label\" tone={selected ? \"text\" : \"secondary\"} numberOfLines={1}>\n {item.label}\n {item.count !== undefined ? <Txt variant=\"caption\" tone=\"secondary\">{` ${item.count}`}</Txt> : null}\n </Txt>\n </Pressable>\n );\n });\n const panel = items.find((i) => i.value === current)?.content;\n return (\n <View style={[styles.root, style]}>\n {segmented ? (\n <View role=\"tablist\" aria-label={label} style={[styles.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius.md }]}>\n {tabs}\n </View>\n ) : (\n <View style={[styles.underline, { borderBottomColor: theme.borderSubtle }]}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false} role=\"tablist\" aria-label={label} contentContainerStyle={styles.scroll}>\n {tabs}\n </ScrollView>\n </View>\n )}\n {panel !== undefined ? <View role=\"tabpanel\">{panel}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 12 },\n underline: { borderBottomWidth: StyleSheet.hairlineWidth },\n scroll: { gap: 4, paddingHorizontal: 4 },\n tab: { minHeight: 44, justifyContent: \"center\", paddingHorizontal: 12, borderBottomWidth: 2 },\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth, height: 40 },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, PanResponder, 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, haptic } = useTheme();\n const reduce = useReducedMotion();\n // A swipe sideways dismisses it (the close button stays for everyone else).\n const [swipe] = React.useState(() => new Animated.Value(0));\n const drag = React.useMemo(\n () =>\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 8 && Math.abs(g.dx) > Math.abs(g.dy),\n onPanResponderMove: (_, g) => swipe.setValue(g.dx),\n onPanResponderRelease: (_, g) => {\n if (Math.abs(g.dx) > 96 || Math.abs(g.vx) > 0.9) {\n Animated.timing(swipe, { toValue: Math.sign(g.dx) * 480, duration: 160, useNativeDriver: true }).start(() => dismiss(item.id));\n } else Animated.spring(swipe, { toValue: 0, useNativeDriver: true }).start();\n },\n }),\n [swipe, item.id],\n );\n React.useEffect(() => {\n if (item.tone === \"success\" || item.tone === \"warning\") haptic(item.tone);\n if (item.tone === \"error\") haptic(\"warning\");\n }, [item.id]); // eslint-disable-line react-hooks/exhaustive-deps -- once per toast\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] }) }, { translateX: swipe }] };\n return (\n <Animated.View aria-live=\"polite\" style={motion} {...drag.panHandlers}>\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":["StyleSheet","React","themes","radius","motion","jsx","tone","jsx","radius","StyleSheet","styles","React","AccessibilityInfo","StyleSheet","View","jsx","jsxs","timer","AccessibilityInfo","View","styles","StyleSheet","React","StyleSheet","Text","View","jsx","jsxs","View","styles","StyleSheet","Text","items","React","StyleSheet","Text","jsx","jsxs","tone","styles","Text","StyleSheet","React","Pressable","StyleSheet","View","Svg","Defs","LinearGradient","Stop","jsx","jsxs","look","radius","Svg","StyleSheet","Defs","LinearGradient","Stop","Pressable","styles","View","Image","Pressable","StyleSheet","View","jsx","tone","radius","styles","View","Pressable","StyleSheet","Image","PADDING","React","Pressable","StyleSheet","Text","View","Svg","jsx","jsxs","radius","View","styles","Svg","Pressable","Text","StyleSheet","React","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","Text","styles","radius","on","_r","disabled","_s","style","children","rest","View","Pressable","StyleSheet","React","Pressable","ScrollView","StyleSheet","Text","View","Svg","Path","React","Animated","Modal","Pressable","StyleSheet","Text","View","jsx","jsxs","radius","motion","Animated","Modal","View","styles","StyleSheet","Pressable","Text","Fragment","jsx","jsxs","Svg","Path","radius","View","styles","Text","Pressable","ScrollView","timer","StyleSheet","React","Animated","StyleSheet","Text","jsx","jsxs","Animated","styles","Text","StyleSheet","React","StyleSheet","Text","TextInput","View","jsx","jsxs","radius","View","styles","Text","TextInput","StyleSheet","React","Pressable","ScrollView","StyleSheet","Text","View","Svg","Path","React","Pressable","ScrollView","StyleSheet","Text","View","jsx","jsxs","radius","View","styles","Text","ScrollView","Pressable","StyleSheet","jsx","jsxs","Chevron","Svg","Path","radius","Pressable","styles","View","Text","ScrollView","StyleSheet","StyleSheet","View","jsx","jsxs","items","radius","View","styles","StyleSheet","StyleSheet","View","jsx","jsxs","View","styles","StyleSheet","Pressable","StyleSheet","View","jsx","jsxs","View","styles","Pressable","StyleSheet","React","StyleSheet","Text","TextInput","View","jsx","jsxs","radius","View","styles","Text","TextInput","StyleSheet","Animated","StyleSheet","View","React","AccessibilityInfo","Animated","jsx","jsxs","Animated","styles","View","StyleSheet","React","Animated","Pressable","StyleSheet","View","Svg","Path","jsx","jsxs","Animated","View","styles","Pressable","Svg","Path","StyleSheet","React","AccessibilityInfo","Animated","Image","Modal","Pressable","StyleSheet","View","jsx","jsxs","Animated","dismiss","AccessibilityInfo","Modal","StyleSheet","View","Image","styles","Pressable","View","Svg","Circle","Defs","LinearGradient","Path","Stop","useEffect","useState","AccessibilityInfo","Animated","Easing","Fragment","jsx","jsxs","Animated","LinearGradient","Stop","Circle","View","Svg","Defs","Path","React","AccessibilityInfo","Animated","Easing","StyleSheet","View","Svg","Circle","Path","jsx","jsxs","Animated","Easing","Svg","Path","Circle","timer","radius","show","AccessibilityInfo","View","styles","StyleSheet","React","AccessibilityInfo","Animated","Easing","StyleSheet","View","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","jsx","jsxs","Animated","AccessibilityInfo","Easing","tone","styles","View","StyleSheet","StyleSheet","View","Svg","Circle","jsx","jsxs","tone","View","styles","Svg","Circle","StyleSheet","React","AccessibilityInfo","Animated","Easing","Text","jsx","tone","Animated","AccessibilityInfo","Easing","Text","React","ScrollView","StyleSheet","View","jsx","jsxs","View","styles","ScrollView","StyleSheet","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","React","Platform","Pressable","StyleSheet","TextInput","View","jsx","jsxs","radius","Pressable","styles","View","TextInput","Platform","StyleSheet","Pressable","StyleSheet","Text","View","Svg","Path","jsx","jsxs","Chevron","Svg","Path","radius","Pressable","styles","View","Text","StyleSheet","StyleSheet","View","Fragment","jsx","jsxs","radius","View","styles","StyleSheet","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","tone","View","Svg","Defs","LinearGradient","Stop","RadialGradient","Path","Circle","React","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","React","Path","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Path","jsx","React","Animated","StyleSheet","View","jsx","jsxs","View","styles","Animated","radius","StyleSheet","React","Animated","Easing","StyleSheet","View","Svg","Circle","Defs","LinearGradient","Rect","Stop","jsx","jsxs","Animated","Circle","BAR","RING","Easing","Defs","LinearGradient","Stop","View","styles","StyleSheet","Svg","Rect","jsx","React","Animated","Pressable","StyleSheet","Text","View","Svg","Path","jsx","jsxs","Svg","Path","radius","motion","Animated","Pressable","styles","View","Text","StyleSheet","React","Pressable","StyleSheet","TextInput","View","Svg","Circle","Path","jsx","jsxs","radius","timer","View","styles","Svg","Circle","Path","TextInput","Pressable","StyleSheet","Pressable","StyleSheet","Text","View","jsx","radius","View","styles","Pressable","Text","StyleSheet","React","Animated","jsx","Animated","React","PanResponder","StyleSheet","Text","View","Svg","Defs","LinearGradient","Rect","Stop","jsx","jsxs","marks","tone","radius","PanResponder","View","styles","Text","Svg","Defs","LinearGradient","Stop","Rect","StyleSheet","ActivityIndicator","jsx","ActivityIndicator","StyleSheet","View","Svg","Circle","Path","jsx","jsxs","View","styles","Svg","Circle","Path","StyleSheet","React","Animated","PanResponder","Pressable","StyleSheet","View","jsx","jsxs","tone","Animated","PanResponder","View","styles","Pressable","StyleSheet","React","Animated","Pressable","StyleSheet","Text","View","jsx","jsxs","motion","Animated","View","styles","Pressable","Text","StyleSheet","Pressable","StyleSheet","Text","View","jsx","jsxs","items","View","styles","Pressable","Text","StyleSheet","React","Pressable","ScrollView","StyleSheet","View","jsx","jsxs","items","radius","Pressable","styles","View","ScrollView","StyleSheet","React","AccessibilityInfo","Animated","PanResponder","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","listeners","subscribe","tone","radius","Animated","PanResponder","AccessibilityInfo","timer","View","styles","Pressable","Text","motion","StyleSheet"]}
|
|
1
|
+
{"version":3,"sources":["../src/countdown/core.ts","../src/date-picker/parts.ts","../src/native/action-sheet.tsx","../src/native/overlay.tsx","../../tokens/dist/native.js","../src/native/theme.tsx","../src/native/txt.tsx","../src/native/activity-feed.tsx","../src/activity-feed/group.ts","../src/native/avatar.tsx","../src/native/badge.tsx","../src/native/button.tsx","../src/native/card.tsx","../src/native/chat.tsx","../src/native/checkbox.tsx","../src/native/chip.tsx","../src/native/combobox.tsx","../src/native/dialog.tsx","../src/native/countdown.tsx","../src/native/date-picker.tsx","../src/native/date-time.tsx","../src/native/wheel.tsx","../src/native/description-list.tsx","../src/native/empty-state.tsx","../src/native/fab.tsx","../src/native/field.tsx","../src/native/goal-gauge.tsx","../src/native/story-motion.ts","../src/native/header.tsx","../src/native/image-viewer.tsx","../src/native/KrizakaMark.tsx","../src/marks/krizaka-geometry.ts","../src/native/mark-motion.ts","../src/native/loader.tsx","../src/native/OrazakaMark.tsx","../src/marks/orazaka-geometry.ts","../src/native/OrochiaMark.tsx","../src/marks/orochia-geometry.ts","../src/native/YazakiaMark.tsx","../src/marks/yazakia-geometry.ts","../src/native/YororisMark.tsx","../src/marks/yororis-geometry.ts","../src/native/ProductMark.tsx","../src/native/mascot-state.tsx","../src/native/mascots.tsx","../src/mascots/geometry.ts","../src/native/match-dialog.tsx","../src/native/meter.tsx","../src/native/number-ticker.tsx","../src/native/onboarding.tsx","../src/native/otp-input.tsx","../src/native/pagination.tsx","../src/native/permission-prompt.tsx","../src/native/phoenix.tsx","../src/mascots/phoenix-geometry.ts","../src/native/photo-grid.tsx","../src/native/profile-card.tsx","../src/native/progress.tsx","../src/native/pull-to-refresh.tsx","../src/native/radio-group.tsx","../src/native/screen.tsx","../src/native/search-field.tsx","../src/native/segmented.tsx","../src/native/skeleton.tsx","../src/native/slider.tsx","../src/native/spinner.tsx","../src/native/splash-handoff.tsx","../src/native/step-progress.tsx","../src/native/stepper.tsx","../src/native/swipe-deck.tsx","../src/native/swipeable-row.tsx","../src/native/switch.tsx","../src/native/tab-bar.tsx","../src/native/tabs.tsx","../src/native/tag-selector.tsx","../src/native/toast.tsx","../src/native/verified-badge.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","// Platform-neutral: a date typed as day, month and year (the native `DateField`, the form's `DateField entry=\"parts\"`).\n// Values are ISO calendar dates, `YYYY-MM-DD`, compared as strings.\n\n/** A part of a typed date. */\nexport type DatePart = \"day\" | \"month\" | \"year\";\n\n/** The digits of each part. */\nexport const DATE_PART_LENGTH: Readonly<Record<DatePart, number>> = { day: 2, month: 2, year: 4 };\n\n/** The order of day, month and year in a locale (`en-US` → month, day, year; `fr` → day, month, year). */\nexport function datePartsOrder(locale: string): DatePart[] {\n try {\n const parts = new Intl.DateTimeFormat(locale, { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" }).formatToParts(new Date(2001, 10, 22));\n const order = parts.map((p) => p.type).filter((t): t is DatePart => t === \"day\" || t === \"month\" || t === \"year\");\n if (order.length === 3) return order;\n } catch {\n // An engine without Intl's parts: day, month, year.\n }\n return [\"day\", \"month\", \"year\"];\n}\n\n/** The ISO-ordered value of what was typed: `\"\"` when nothing is, `YYYY-MM-DD` otherwise (not necessarily a real date). */\nexport function composeDate(parts: Readonly<Record<DatePart, string>>): string {\n if (!parts.day && !parts.month && !parts.year) return \"\";\n const pad = (v: string) => (v.length === 1 ? `0${v}` : v);\n return `${parts.year}-${pad(parts.month)}-${pad(parts.day)}`;\n}\n\n/** The parts of a value (`\"\"` → three empty parts). */\nexport function splitDate(value: string | null | undefined): Record<DatePart, string> {\n const m = /^(\\d*)-(\\d*)-(\\d*)$/.exec(value ?? \"\");\n return m ? { year: m[1]!, month: m[2]!, day: m[3]! } : { day: \"\", month: \"\", year: \"\" };\n}\n\n/** True for a real calendar date written `YYYY-MM-DD` (not `2001-02-30`). */\nexport function isRealDate(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n const date = new Date(`${value}T00:00:00Z`);\n return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;\n}\n\n/** The latest date of birth of someone `age` years old today (`YYYY-MM-DD`): an age gate's `max`, `value <= latestBirthDate(18)`. */\nexport function latestBirthDate(age: number, today = new Date()): string {\n return new Date(Date.UTC(today.getFullYear() - age, today.getMonth(), today.getDate())).toISOString().slice(0, 10);\n}\n\n// ─── Shared by the pickers, web and native (no DOM, no React) ───────────────────────────────────────────────────────\n\n/** The days of a month (`month` 1–12). */\nexport function daysInMonth(year: number, month: number): number {\n return new Date(Date.UTC(year, month, 0)).getUTCDate();\n}\n\n/** `2026-10-11` → `{ year: 2026, month: 10, day: 11 }` (no check: pair it with `isRealDate`). */\nexport function isoParts(iso: string): { year: number; month: number; day: number } {\n const [year = 0, month = 0, day = 0] = iso.split(\"-\").map(Number);\n return { year, month, day };\n}\n\n/** `{ 2026, 10, 11 }` → `2026-10-11`, the day kept inside the month (`2026-02-31` → `2026-02-28`). */\nexport function isoOf(year: number, month: number, day: number): string {\n const d = Math.min(Math.max(day, 1), daysInMonth(year, month));\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\n\n/** The ISO date of today on this device (or of the `Date` given). */\nexport function todayIso(now = new Date()): string {\n return isoOf(now.getFullYear(), now.getMonth() + 1, now.getDate());\n}\n\n/** The age in whole years on `today` of someone born on `birth` (both ISO). */\nexport function ageOn(birth: string, today: string = todayIso()): number {\n const b = isoParts(birth);\n const t = isoParts(today);\n return t.year - b.year - (t.month < b.month || (t.month === b.month && t.day < b.day) ? 1 : 0);\n}\n\n/** The month names of a locale, January first (`long` · `short` · `narrow`). */\nexport function monthNames(locale: string, style: \"long\" | \"short\" | \"narrow\" = \"long\"): string[] {\n const format = new Intl.DateTimeFormat(locale, { month: style, timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, i) => format.format(new Date(Date.UTC(2001, i, 1))));\n}\n\n/** The years from `from` to `to`, both included, in that order (descending when `from > to`). */\nexport function yearRange(from: number, to: number): number[] {\n const step = from <= to ? 1 : -1;\n return Array.from({ length: Math.abs(to - from) + 1 }, (_, i) => from + i * step);\n}\n\n/** A time of day, `HH:mm` on 24 hours (`\"09:30\"`, `\"18:00\"`): the value of every time picker. */\nexport type TimeValue = string;\n\n/** `\"9:5\"` / `\"09:05\"` → minutes since midnight; `null` when it is not a time. */\nexport function timeToMinutes(value: string | null | undefined): number | null {\n const m = /^(\\d{1,2}):(\\d{1,2})$/.exec(value ?? \"\");\n if (!m) return null;\n const h = Number(m[1]);\n const min = Number(m[2]);\n return h < 24 && min < 60 ? h * 60 + min : null;\n}\n\n/** Minutes since midnight → `HH:mm`. */\nexport function minutesToTime(minutes: number): TimeValue {\n const m = ((Math.round(minutes) % 1440) + 1440) % 1440;\n return `${String(Math.floor(m / 60)).padStart(2, \"0\")}:${String(m % 60).padStart(2, \"0\")}`;\n}\n\n/** The slots of a day from `start` to `end` (excluded) every `step` minutes: `timeSlots(\"09:00\", \"12:00\", 30)`. */\nexport function timeSlots(start: TimeValue, end: TimeValue, step = 30): TimeValue[] {\n const a = timeToMinutes(start);\n const b = timeToMinutes(end);\n if (a === null || b === null || step <= 0) return [];\n const slots: TimeValue[] = [];\n for (let m = a; m < b; m += step) slots.push(minutesToTime(m));\n return slots;\n}\n\n/** True when the locale writes the time on 12 hours with a day period (`en-US` → true, `fr-CA` → false). */\nexport function uses12Hours(locale: string): boolean {\n try {\n const options = new Intl.DateTimeFormat(locale, { hour: \"numeric\" }).resolvedOptions() as Intl.ResolvedDateTimeFormatOptions & { hourCycle?: string };\n return options.hourCycle ? options.hourCycle === \"h12\" || options.hourCycle === \"h11\" : Boolean(options.hour12);\n } catch {\n return false;\n }\n}\n\n/** The day periods of a locale, morning first (`[\"AM\", \"PM\"]`, `[\"a.m.\", \"p.m.\"]`). */\nexport function dayPeriods(locale: string): [string, string] {\n const format = new Intl.DateTimeFormat(locale, { hour: \"numeric\", hour12: true, timeZone: \"UTC\" });\n const period = (h: number) => format.formatToParts(new Date(Date.UTC(2001, 0, 1, h))).find((p) => p.type === \"dayPeriod\")?.value ?? (h < 12 ? \"AM\" : \"PM\");\n return [period(9), period(15)];\n}\n\n/** A time written the locale's way (`\"18:30\"` → `\"6:30 PM\"` in en-US, `\"18 h 30\"` in fr-CA). */\nexport function formatTime(locale: string, value: TimeValue): string {\n const minutes = timeToMinutes(value);\n if (minutes === null) return \"\";\n return new Intl.DateTimeFormat(locale, { hour: \"numeric\", minute: \"2-digit\", timeZone: \"UTC\" }).format(new Date(Date.UTC(2001, 0, 1, 0, minutes)));\n}\n\n/** A local `Date` at midnight for an ISO date (for formatting). */\nexport const toLocalDate = (iso: string) => {\n const { year, month, day } = isoParts(iso);\n return new Date(year, month - 1, day);\n};\n/** The ISO date of a local `Date`. */\nexport const toIsoDate = (date: Date): string => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n/** The ISO date `days` later (or earlier). */\nexport const addDays = (iso: string, days: number) => {\n const date = toLocalDate(iso);\n date.setDate(date.getDate() + days);\n return toIsoDate(date);\n};\n/** The ISO date `months` later (or earlier), the day kept inside the shorter months (`01-31` + 1 → `02-28`). */\nexport const addMonths = (iso: string, months: number) => {\n const { year, month, day } = isoParts(iso);\n const first = new Date(year, month - 1 + months, 1);\n return isoOf(first.getFullYear(), first.getMonth() + 1, day);\n};\n\n/** The first day of the week for a locale (0 = Sunday … 6 = Saturday), from `Intl.Locale` week info; Monday otherwise. */\nexport function weekStartOf(locale: string): number {\n try {\n const info = new Intl.Locale(locale) as Intl.Locale & { getWeekInfo?: () => { firstDay: number }; weekInfo?: { firstDay: number } };\n const firstDay = info.getWeekInfo?.().firstDay ?? info.weekInfo?.firstDay;\n return firstDay ? firstDay % 7 : 1;\n } catch {\n return 1;\n }\n}\n\n/** The weeks of a month's grid (six at most), each seven ISO dates from the locale's first day of the week. */\nexport function monthGrid(month: string, weekStartsOn: number): string[][] {\n const first = `${month.slice(0, 7)}-01`;\n const lead = (toLocalDate(first).getDay() - weekStartsOn + 7) % 7;\n const start = addDays(first, -lead);\n const days = Array.from({ length: 42 }, (_, i) => addDays(start, i));\n return Array.from({ length: 6 }, (_, w) => days.slice(w * 7, w * 7 + 7)).filter((week, w) => w < 5 || week[0]!.slice(0, 7) === first.slice(0, 7));\n}\n","import * as React from \"react\";\nimport { Modal, Pressable, StyleSheet, View } from \"react-native\";\n\nimport { type Controlled, modalName, useOpen } from \"./overlay\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ActionSheetAction = {\n /** The action's words — passed translated. */\n label: string;\n /** What it does; the sheet closes first. */\n onPress: () => void;\n /** A destructive action wears the danger text. */\n destructive?: boolean;\n /** A decorative icon before the words. */\n icon?: React.ReactNode;\n /** Cannot be chosen now. */\n disabled?: boolean;\n};\n\nexport type ActionSheetProps = Controlled & {\n /** What the choices are about (“Your video”) — the accessible name. */\n title: string;\n /** One line under the title. */\n description?: string;\n /** The choices, in order. */\n actions: readonly ActionSheetAction[];\n /** The cancel button's words (“Cancel”) — passed translated. */\n cancelLabel: string;\n};\n\n/** A short list of actions from the bottom edge — share, edit, delete — and a cancel button apart, as the platforms do. */\nexport function ActionSheet({ title, description, actions, cancelLabel, ...controlled }: ActionSheetProps) {\n const [open, setOpen] = useOpen(controlled);\n const { theme, radius, insets, haptic } = useTheme();\n const reduce = useReducedMotion();\n // The material: what floats over the screen is glass, its top edge catching the light.\n const card = { backgroundColor: theme.glassBg, borderColor: theme.glassBorder, borderTopColor: theme.edgeLight, borderRadius: radius.xl };\n return (\n <Modal {...modalName(title)} visible={open} transparent animationType={reduce ? \"none\" : \"slide\"} onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable aria-hidden accessible={false} style={[StyleSheet.absoluteFill, { backgroundColor: theme.scrim }]} onPress={() => setOpen(false)} />\n <View style={[styles.bottom, styles.actionWrap, { paddingBottom: 8 + insets.bottom }]} pointerEvents=\"box-none\">\n <View role=\"menu\" aria-label={title} style={[styles.actionCard, card]}>\n <View style={styles.actionHead}>\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.centred}>\n {title}\n </Txt>\n {description ? (\n <Txt variant=\"caption\" tone=\"muted\" style={styles.centred}>\n {description}\n </Txt>\n ) : null}\n </View>\n {actions.map((action, i) => (\n <Pressable\n key={i}\n role=\"menuitem\"\n aria-disabled={action.disabled}\n disabled={action.disabled}\n onPress={() => {\n haptic(\"selection\");\n setOpen(false);\n action.onPress();\n }}\n style={({ pressed }) => [styles.action, { borderTopColor: theme.borderSubtle, backgroundColor: pressed ? theme.surface2 : \"transparent\", opacity: action.disabled ? 0.4 : 1 }]}\n >\n {action.icon ? <View aria-hidden>{action.icon}</View> : null}\n <Txt variant=\"label\" tone={action.destructive ? \"danger\" : \"text\"}>\n {action.label}\n </Txt>\n </Pressable>\n ))}\n </View>\n <Pressable role=\"button\" onPress={() => setOpen(false)} style={({ pressed }) => [styles.cancel, card, { backgroundColor: pressed ? theme.surface2 : theme.surface1 }]}>\n <Txt variant=\"label\">{cancelLabel}</Txt>\n </Pressable>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n bottom: { flex: 1, justifyContent: \"flex-end\" },\n actionWrap: { paddingHorizontal: 8, gap: 8 },\n actionCard: { borderWidth: StyleSheet.hairlineWidth, overflow: \"hidden\" },\n actionHead: { paddingVertical: 12, paddingHorizontal: 16, gap: 2 },\n centred: { textAlign: \"center\" },\n action: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", gap: 10, minHeight: 52, paddingHorizontal: 16, borderTopWidth: StyleSheet.hairlineWidth },\n cancel: { minHeight: 52, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n});\n","// Shared by the overlays of /native (ActionSheet, ImageViewer): controlled-or-not opening, and the name react-native-web\n// gives its Modal. Not an entry of its own.\nimport * as React from \"react\";\n\n/**\n * The name of a `Modal`: react-native-web draws it as the page's `dialog` and forwards the props it does not know, so the\n * dialog is named there; React Native ignores it (the content carries the name and `accessibilityViewIsModal`).\n */\nexport const modalName = (label: string) => ({ \"aria-label\": label }) as object;\n\nexport type Controlled = {\n /** Open (controlled). */\n open?: boolean;\n /** Open at first, uncontrolled. */\n defaultOpen?: boolean;\n /** Called when it opens or closes (the back button, the scrim, an action). */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport function useOpen({ open, defaultOpen = false, onOpenChange }: Controlled): [boolean, (next: boolean) => void] {\n const [own, setOwn] = React.useState(defaultOpen);\n const value = open ?? own;\n const set = React.useCallback(\n (next: boolean) => {\n if (open === undefined) setOwn(next);\n onOpenChange?.(next);\n },\n [open, onOpenChange],\n );\n return [value, set];\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 \"successSoft\": \"rgba(16,183,127,0.14)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#f6a823\",\n \"warningSoft\": \"rgba(245,159,10,0.14)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#f87272\",\n \"dangerSoft\": \"rgba(239,67,67,0.14)\",\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 \"surfaceSheen\": \"rgba(255,255,255,0.045)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.07)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(4,4,7,0.5)\",\n \"glassBg\": \"rgba(29,29,32,0.88)\",\n \"glassBorder\": \"rgba(255,255,255,0.1)\"\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 \"successSoft\": \"rgba(16,183,127,0.1)\",\n \"warning\": \"#f59f0a\",\n \"warningText\": \"#955104\",\n \"warningSoft\": \"rgba(245,159,10,0.12)\",\n \"danger\": \"#ef4343\",\n \"dangerText\": \"#af1d1d\",\n \"dangerSoft\": \"rgba(239,67,67,0.1)\",\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 \"surfaceSheen\": \"rgba(255,255,255,0.7)\",\n \"fillShade\": \"rgba(0,0,0,0.12)\",\n \"edgeLight\": \"rgba(255,255,255,0.9)\",\n \"edgeOnFill\": \"rgba(255,255,255,0.22)\",\n \"edgeWell\": \"rgba(48,52,80,0.08)\",\n \"glassBg\": \"rgba(255,255,255,0.88)\",\n \"glassBorder\": \"rgba(0,0,0,0.08)\"\n}) });\n\n/** Corner radii, in dp. */\nexport const radius = /* @__PURE__ */ Object.freeze({\n \"xs\": 6,\n \"sm\": 8,\n \"md\": 12,\n \"lg\": 16,\n \"xl\": 20,\n \"2xl\": 28,\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 \"text\": \"Inter\",\n \"display\": \"Plus Jakarta Sans\",\n \"mono\": \"JetBrains Mono\"\n});\n\n/**\n * Motion: the cubic-bezier control points (`Easing.bezier(...motion.ease)`), the short spring of what answers the hand\n * (`motion.spring`) and the micro-interaction durations in ms (`motion.duration.fast`) — 0 when the system reduces motion.\n */\nexport const motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16,1,0.3,1]), spring: /* @__PURE__ */ Object.freeze([0.34,1.36,0.64,1]), duration: /* @__PURE__ */ Object.freeze({\"instant\":90,\"fast\":150,\"base\":200}) });\n\n/**\n * The type scale in dp: fontSize, lineHeight and letterSpacing absolute (React Native has no em), fontWeight as a string,\n * and the role whose family sets it — with @krizaka/fonts: `{ ...typeScale.bodyMd, fontFamily: fontFamily(role, weight) }`.\n */\nexport const typeScale = /* @__PURE__ */ Object.freeze({\n \"display2xl\": {\n \"role\": \"display\",\n \"fontSize\": 72,\n \"lineHeight\": 73,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -2.52\n },\n \"displayXl\": {\n \"role\": \"display\",\n \"fontSize\": 56,\n \"lineHeight\": 59,\n \"fontWeight\": \"800\",\n \"letterSpacing\": -1.68\n },\n \"displayLg\": {\n \"role\": \"display\",\n \"fontSize\": 44,\n \"lineHeight\": 48,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -1.1\n },\n \"displayMd\": {\n \"role\": \"display\",\n \"fontSize\": 34,\n \"lineHeight\": 39,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.68\n },\n \"displaySm\": {\n \"role\": \"display\",\n \"fontSize\": 26,\n \"lineHeight\": 31,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.39\n },\n \"titleLg\": {\n \"role\": \"display\",\n \"fontSize\": 20,\n \"lineHeight\": 27,\n \"fontWeight\": \"700\",\n \"letterSpacing\": -0.2\n },\n \"titleMd\": {\n \"role\": \"text\",\n \"fontSize\": 17,\n \"lineHeight\": 24,\n \"fontWeight\": \"600\",\n \"letterSpacing\": -0.2\n },\n \"bodyLg\": {\n \"role\": \"text\",\n \"fontSize\": 18,\n \"lineHeight\": 29,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.25\n },\n \"bodyMd\": {\n \"role\": \"text\",\n \"fontSize\": 16,\n \"lineHeight\": 26,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.18\n },\n \"bodySm\": {\n \"role\": \"text\",\n \"fontSize\": 14,\n \"lineHeight\": 21,\n \"fontWeight\": \"400\",\n \"letterSpacing\": -0.08\n },\n \"caption\": {\n \"role\": \"text\",\n \"fontSize\": 12,\n \"lineHeight\": 17,\n \"fontWeight\": \"500\",\n \"letterSpacing\": 0\n },\n \"overline\": {\n \"role\": \"mono\",\n \"fontSize\": 11,\n \"lineHeight\": 14,\n \"fontWeight\": \"600\",\n \"letterSpacing\": 1.32\n },\n \"monoMd\": {\n \"role\": \"mono\",\n \"fontSize\": 14,\n \"lineHeight\": 22,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n },\n \"monoSm\": {\n \"role\": \"mono\",\n \"fontSize\": 12,\n \"lineHeight\": 18,\n \"fontWeight\": \"400\",\n \"letterSpacing\": 0\n }\n});\n\n/**\n * The shadows per theme as React Native `boxShadow` strings (RN ≥ 0.76): `raised` (a button, a card), `floating`\n * (a menu, a popover), `overlay` (a sheet, a toast) — ink-tinted, several layers, as on the web.\n */\nexport const shadows = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.12), 0 1px 2px 0 rgba(0,0,0,0.06)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.15), 0 2px 4px 0 rgba(0,0,0,0.08)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.18), 0 4px 8px 0 rgba(0,0,0,0.08)\",\n \"raised\": \"0 1px 2px 0 rgba(4,4,7,0.45), 0 2px 6px -2px rgba(4,4,7,0.3)\",\n \"floating\": \"0 2px 4px 0 rgba(4,4,7,0.35), 0 12px 24px -6px rgba(4,4,7,0.45), 0 24px 48px -12px rgba(4,4,7,0.35)\",\n \"overlay\": \"0 4px 8px 0 rgba(4,4,7,0.4), 0 24px 48px -12px rgba(4,4,7,0.5), 0 48px 96px -24px rgba(4,4,7,0.45)\"\n}), light: /* @__PURE__ */ Object.freeze({\n \"sm\": \"0 1px 3px 0 rgba(0,0,0,0.06), 0 1px 2px 0 rgba(0,0,0,0.04)\",\n \"md\": \"0 4px 12px 0 rgba(0,0,0,0.08), 0 2px 4px 0 rgba(0,0,0,0.04)\",\n \"lg\": \"0 8px 24px 0 rgba(0,0,0,0.1), 0 4px 8px 0 rgba(0,0,0,0.05)\",\n \"raised\": \"0 1px 2px 0 rgba(48,52,80,0.08), 0 2px 6px -2px rgba(48,52,80,0.08)\",\n \"floating\": \"0 2px 4px 0 rgba(48,52,80,0.06), 0 12px 24px -6px rgba(48,52,80,0.1), 0 24px 48px -12px rgba(48,52,80,0.1)\",\n \"overlay\": \"0 4px 8px 0 rgba(48,52,80,0.08), 0 24px 48px -12px rgba(48,52,80,0.14), 0 48px 96px -24px rgba(48,52,80,0.14)\"\n}) });\n\n/** The griffe (BRAND.md §6.1): the size of the 45° cut corner of a control, in dp. */\nexport const cut = /* @__PURE__ */ Object.freeze({\n \"size\": 10\n});\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 \"yazakia\": {\n \"dark\": {\n \"accent\": \"#24dbc9\",\n \"accentHover\": \"#47e1d2\",\n \"accentSoft\": \"rgba(36,219,201,0.12)\",\n \"accentText\": \"#3ee0cf\",\n \"accent2\": \"#22c378\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#24dbc9\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#0a241e\",\n \"brandGradientVia\": \"#0c1818\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#097169\",\n \"accentHover\": \"#085e57\",\n \"accentSoft\": \"rgba(9,113,105,0.08)\",\n \"accentText\": \"#096d64\",\n \"accent2\": \"#107546\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#097169\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#e1faf1\",\n \"brandGradientVia\": \"#e9fbfa\",\n \"brandGradientTo\": \"#fafafa\"\n }\n },\n \"yororis\": {\n \"dark\": {\n \"accent\": \"#98b587\",\n \"accentHover\": \"#adc69f\",\n \"accentSoft\": \"rgba(152,181,135,0.12)\",\n \"accentText\": \"#a7c497\",\n \"accent2\": \"#c3a579\",\n \"onAccent\": \"#0c0c0e\",\n \"ring\": \"#98b587\",\n \"info\": \"#3b83f7\",\n \"infoText\": \"#629cf8\",\n \"brandGradientFrom\": \"#1c1812\",\n \"brandGradientVia\": \"#11140f\",\n \"brandGradientTo\": \"#0c0c0e\"\n },\n \"light\": {\n \"accent\": \"#456237\",\n \"accentHover\": \"#39532d\",\n \"accentSoft\": \"rgba(69,98,55,0.08)\",\n \"accentText\": \"#415b33\",\n \"accent2\": \"#745834\",\n \"onAccent\": \"#ffffff\",\n \"ring\": \"#456237\",\n \"info\": \"#0a64f5\",\n \"infoText\": \"#0954ce\",\n \"brandGradientFrom\": \"#f5efe5\",\n \"brandGradientVia\": \"#f1f6ee\",\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 \"yazakia\": [\n [\n \"0%\",\n \"#079d61\"\n ],\n [\n \"100%\",\n \"#089b96\"\n ]\n ],\n \"yororis\": [\n [\n \"0%\",\n \"#a4773d\"\n ],\n [\n \"100%\",\n \"#5d894d\"\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 /** Status tints (a badge, an alert): the primary text reads ≥ 4.5:1 on them. */\n readonly successSoft: string;\n readonly warningSoft: string;\n readonly dangerSoft: string;\n /** The material (BRAND.md §6): the top of a raised surface catches the light… */\n readonly surfaceSheen: string;\n /** …the bottom of a fill is shaded a little… */\n readonly fillShade: string;\n /** …and a 1-pt edge of light runs along the top of what is raised (`edgeOnFill` on an accent fill)… */\n readonly edgeLight: string;\n readonly edgeOnFill: string;\n /** …what you fill (a field, a track) is a well. */\n readonly edgeWell: string;\n /** Frosted glass: what floats over the screen (a toast, a sheet). */\n readonly glassBg: string;\n readonly glassBorder: string;\n};\n\n/** Corner radii, in points. */\nexport type Radius = {\n readonly xs: number;\n readonly sm: number;\n readonly md: number;\n readonly lg: number;\n readonly xl: number;\n readonly \"2xl\": number;\n readonly full: number;\n};\n/**\n * Motion: the cubic-bezier control points of the platform's ease (`Easing.bezier(...motion.ease)`), the short spring of\n * what answers the hand, and the micro-interaction durations in ms — `useTheme()` gives 0 ms when the system reduces motion.\n */\nexport type Motion = {\n readonly ease: readonly [number, number, number, number];\n readonly spring: readonly [number, number, number, number];\n readonly duration: { readonly instant: number; readonly fast: number; readonly base: number };\n};\n\nconst themes: Readonly<Record<ThemeName, Theme>> = tokenThemes;\nconst radius: Radius = tokenRadius;\nconst motion: Motion = tokenMotion;\nconst stillMotion: Motion = { ...motion, duration: { instant: 0, fast: 0, base: 0 } };\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\n/**\n * A touch the hand feels: `selection` (a wheel's value, a slider's step, a radio picked), `impact` (a tactile button\n * pressed in), `success` / `warning` (an outcome).\n */\nexport type HapticKind = \"selection\" | \"impact\" | \"success\" | \"warning\";\n\n/** The screen's safe-area insets, in points (`useSafeAreaInsets()` of react-native-safe-area-context). */\nexport type Insets = { readonly top: number; readonly right: number; readonly bottom: number; readonly left: number };\n\nconst NO_INSETS: Insets = { top: 0, right: 0, bottom: 0, left: 0 };\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 /** Plays a haptic (the app's `haptics`, through expo-haptics or another module); nothing without one. */\n haptic: (kind: HapticKind) => void;\n /** The safe-area insets the app passed (zero by default): the tab bar, the header and the FAB keep clear of them. */\n insets: Insets;\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null);\nconst noop = () => undefined;\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 * Plays the haptics of the controls (a wheel's tick, a slider's step, a tactile button). The platform has no module:\n * the app passes one — `(kind) => kind === \"selection\" ? Haptics.selectionAsync() : Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)`\n * with expo-haptics. Absent: no haptics.\n */\n haptics?: (kind: HapticKind) => void;\n /** The safe-area insets (`useSafeAreaInsets()` of react-native-safe-area-context): bars and floating buttons keep clear of them. */\n insets?: Insets;\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, haptics, insets }: 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 reduce = useReducedMotion();\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: reduce ? stillMotion : motion, fonts: fonts ?? {}, haptic: haptics ?? noop, insets: insets ?? NO_INSETS }),\n [mode, setMode, scheme, theme, fonts, reduce, haptics, insets],\n );\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\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: {}, haptic: noop, insets: NO_INSETS };\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 { 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 { AccessibilityInfo, SectionList, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { type ActivityEvent, type ActivityTone, groupActivity, timeAgo } from \"../activity-feed/group\";\nimport { type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type { ActivityEvent, ActivityTone } from \"../activity-feed/group\";\n\nexport type ActivityFeedLabels = {\n /** The heading of today's events. */\n today: string;\n /** The heading of yesterday's. */\n yesterday: string;\n /** A folded run: `(n) => \"×\" + n`. */\n times: (count: number) => string;\n /** Announced when new events arrive in a live feed. */\n newEvents: (count: number) => string;\n};\n\nconst LABELS: ActivityFeedLabels = { today: \"Today\", yesterday: \"Yesterday\", times: (n) => `×${n}`, newEvents: (n) => (n === 1 ? \"1 new event\" : `${n} new events`) };\n\nexport type ActivityFeedProps<T extends ActivityEvent> = {\n /** The events, in any order. */\n events: readonly T[];\n /** The feed's accessible name. */\n \"aria-label\"?: string;\n /** The locale of the dates and the “… ago”. Default `en-US`. */\n locale?: string;\n /** Now, for the “… ago” and the headings. Default: now, refreshed every minute. */\n now?: Date;\n /** Fold the runs of the same actor and kind. Default true. */\n fold?: boolean;\n /** Announce new events (a stream). */\n live?: boolean;\n /** Before an event's text: its actor's `Avatar`. */\n leading?: (event: T) => React.ReactNode;\n /** Shown when there is no event (an `EmptyState`). */\n empty?: React.ReactNode;\n /** The words, passed translated. */\n labels?: Partial<ActivityFeedLabels>;\n /** Styles of the list. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst tone = (t: Theme, name: ActivityTone | undefined) => ({ neutral: t.borderStrong, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger, info: t.info })[name ?? \"neutral\"];\n\n/** What happened, newest first — the web `ActivityFeed`: by day under sticky headings, runs folded, “2 min ago”, new events announced. */\nexport function ActivityFeed<T extends ActivityEvent>({ events, \"aria-label\": label, locale = \"en-US\", now: given, fold = true, live, leading, empty, labels: words, style }: ActivityFeedProps<T>) {\n const { theme } = useTheme();\n const labels = { ...LABELS, ...words };\n const [tick, setTick] = React.useState(() => given ?? new Date());\n React.useEffect(() => {\n if (given) return;\n const timer = setInterval(() => setTick(new Date()), 60_000);\n return () => clearInterval(timer);\n }, [given]);\n const now = given ?? tick;\n const seen = React.useRef(events.length);\n React.useEffect(() => {\n const added = events.length - seen.current;\n seen.current = events.length;\n if (live && added > 0) AccessibilityInfo.announceForAccessibility(labels.newEvents(added));\n }, [events.length, live]); // eslint-disable-line react-hooks/exhaustive-deps -- announce on a new count only\n const sections = groupActivity(events, { now, locale, today: labels.today, yesterday: labels.yesterday, fold }).map((g) => ({ title: g.label, data: g.events }));\n return (\n <SectionList\n aria-label={label}\n style={style}\n sections={sections}\n keyExtractor={(item) => item.event.id}\n stickySectionHeadersEnabled\n ListEmptyComponent={empty ? <>{empty}</> : null}\n renderSectionHeader={({ section }) => (\n <View style={[styles.heading, { backgroundColor: theme.surface0 }]}>\n <Txt variant=\"caption\" tone=\"secondary\" role=\"heading\" style={styles.headingText}>\n {section.title}\n </Txt>\n </View>\n )}\n renderItem={({ item: { event, count } }) => (\n <View style={styles.row} accessible>\n {leading ? leading(event) : <View aria-hidden style={[styles.marker, { backgroundColor: tone(theme, event.tone) }]} />}\n <View style={styles.body}>\n <Txt>\n {event.title}\n {count > 1 ? <Txt variant=\"caption\" tone=\"secondary\">{` ${labels.times(count)}`}</Txt> : null}\n </Txt>\n {event.description ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {event.description}\n </Txt>\n ) : null}\n </View>\n <Txt variant=\"caption\" tone=\"secondary\">\n {timeAgo(event.at, { now, locale })}\n </Txt>\n </View>\n )}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n heading: { paddingVertical: 6 },\n headingText: { fontWeight: \"700\", textTransform: \"uppercase\", letterSpacing: 0.6 },\n row: { flexDirection: \"row\", alignItems: \"flex-start\", gap: 12, paddingVertical: 10 },\n marker: { width: 10, height: 10, borderRadius: 5, marginTop: 5 },\n body: { flex: 1, gap: 2 },\n});\n","// Shared by the web and React Native ActivityFeed: the events grouped by day (“Today”, “Yesterday”, a date), the same\n// events of one actor in a row folded into one (“Mina tipped 3 times”), and how long ago each happened — Intl only.\n\nexport type ActivityTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport type ActivityEvent = {\n /** A stable id. */\n id: string;\n /** When it happened: an ISO date-time, an epoch in ms or a `Date`. */\n at: string | number | Date;\n /** What happened, in a sentence — passed translated (“Mina tipped your video $5”). */\n title: string;\n /** A detail under it. */\n description?: string;\n /** Who did it (folds a run of the same `kind` by the same actor). */\n actor?: string;\n /** The kind of event (`tip`, `bid`, `job.done`): with `actor`, what folds. */\n kind?: string;\n /** The tone of its marker: success for a payout, danger for a failure. */\n tone?: ActivityTone;\n};\n\nexport type ActivityGroup<T extends ActivityEvent> = {\n /** The day's heading (“Today”, “Yesterday”, “Monday, Oct 6”). */\n label: string;\n /** Its events, newest first; a folded run is its newest event with `count` > 1. */\n events: { event: T; count: number }[];\n};\n\nconst dayKey = (date: Date) => `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\n\n/** Groups events (any order) by day, newest first, folding runs of the same actor and kind when `fold` is set. */\nexport function groupActivity<T extends ActivityEvent>(\n events: readonly T[],\n { now = new Date(), locale = \"en-US\", today = \"Today\", yesterday = \"Yesterday\", fold = true }: { now?: Date; locale?: string; today?: string; yesterday?: string; fold?: boolean } = {},\n): ActivityGroup<T>[] {\n const sorted = [...events].sort((a, b) => new Date(b.at).getTime() - new Date(a.at).getTime());\n const day = new Intl.DateTimeFormat(locale, { weekday: \"long\", month: \"short\", day: \"numeric\" });\n const todayKey = dayKey(now);\n const yesterdayKey = dayKey(new Date(now.getTime() - 86_400_000));\n const groups: ActivityGroup<T>[] = [];\n let current: ActivityGroup<T> | null = null;\n let currentKey = \"\";\n for (const event of sorted) {\n const date = new Date(event.at);\n const key = dayKey(date);\n if (!current || key !== currentKey) {\n currentKey = key;\n current = { label: key === todayKey ? today : key === yesterdayKey ? yesterday : day.format(date), events: [] };\n groups.push(current);\n }\n const last = current.events[current.events.length - 1];\n if (fold && last && event.actor && event.kind && last.event.actor === event.actor && last.event.kind === event.kind) last.count += 1;\n else current.events.push({ event, count: 1 });\n }\n return groups;\n}\n\nconst UNITS: [Intl.RelativeTimeFormatUnit, number][] = [\n [\"second\", 60],\n [\"minute\", 60],\n [\"hour\", 24],\n [\"day\", 7],\n [\"week\", 4.35],\n [\"month\", 12],\n [\"year\", Number.POSITIVE_INFINITY],\n];\n\n/** “2 minutes ago”, “yesterday”: how long ago, in the largest unit that reads well (`style` short: “2 min. ago”). */\nexport function timeAgo(at: string | number | Date, { now = new Date(), locale = \"en-US\", style = \"short\" }: { now?: Date; locale?: string; style?: \"long\" | \"short\" | \"narrow\" } = {}): string {\n let value = (new Date(at).getTime() - now.getTime()) / 1000;\n let unit: Intl.RelativeTimeFormatUnit = \"second\";\n for (const [name, size] of UNITS) {\n unit = name;\n if (Math.abs(value) < size - 0.5) break;\n value /= size;\n }\n return new Intl.RelativeTimeFormat(locale, { numeric: \"auto\", style }).format(Math.round(value) + 0, unit);\n}\n","import * as React from \"react\";\nimport { Image, StyleSheet, Text, View, type ViewProps } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Stop, SvgUri } from \"react-native-svg\";\n\nimport { useSvgId, 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 /** A dot at the bottom right: `online` (success), `away` (warning), `busy` (danger), `offline` (hollow). */\n presence?: \"online\" | \"away\" | \"busy\" | \"offline\";\n /** The words of the presence for screen readers (“online”) — passed translated; read after the name. */\n presenceLabel?: string;\n /** A ring around it: `story` (an unseen story, in the accent gradient), `seen` (a story already watched), `live` (danger). */\n ring?: \"story\" | \"seen\" | \"live\";\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\", presence, presenceLabel, ring, style, ...props }: AvatarProps) {\n const { theme } = useTheme();\n const gradient = useSvgId(\"kz-ring-\");\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 const picture = (\n <View\n accessible={Boolean(alt) && !presence && !ring}\n role={alt && !presence && !ring ? \"img\" : undefined}\n aria-label={alt && !presence && !ring ? alt : undefined}\n {...(presence || ring ? {} : props)}\n style={[styles.root, { width: side, height: side, borderRadius: side / 2, backgroundColor: theme.surface3 }, presence || ring ? null : 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 if (!presence && !ring) return picture;\n const gap = ring ? Math.max(2.5, Math.round(side * 0.07)) : 0;\n const outer = side + gap * 4;\n const dot = Math.max(8, Math.round(side * 0.28));\n const dotColor = presence === \"online\" ? theme.success : presence === \"away\" ? theme.warning : presence === \"busy\" ? theme.danger : theme.surface0;\n const name = [alt, presence ? presenceLabel : null].filter(Boolean).join(\", \");\n return (\n <View accessible={Boolean(name)} role={name ? \"img\" : undefined} aria-label={name || undefined} {...props} style={[{ width: outer, height: outer, alignItems: \"center\", justifyContent: \"center\" }, style]}>\n {ring ? (\n <Svg width={outer} height={outer} style={StyleSheet.absoluteFill} aria-hidden>\n <Defs>\n <LinearGradient id={gradient} x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n <Circle\n cx={outer / 2}\n cy={outer / 2}\n r={outer / 2 - gap / 2 - 0.5}\n fill=\"none\"\n strokeWidth={gap}\n stroke={ring === \"story\" ? `url(#${gradient})` : ring === \"live\" ? theme.danger : theme.borderStrong}\n />\n </Svg>\n ) : null}\n {picture}\n {presence ? (\n <View\n aria-hidden\n style={[\n styles.dot,\n { width: dot, height: dot, borderRadius: dot / 2, right: gap * 2, bottom: gap * 2, backgroundColor: dotColor, borderColor: presence === \"offline\" ? theme.textMuted : theme.surface0 },\n ]}\n />\n ) : null}\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 dot: { position: \"absolute\", borderWidth: 2 },\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 { 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 { Animated, Easing, Pressable, type StyleProp, StyleSheet, TextInput, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { Avatar } from \"./avatar\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\n/** Where a sent message stands. */\nexport type MessageStatus = \"sending\" | \"sent\" | \"delivered\" | \"read\" | \"failed\";\n\nexport type MessageBubbleLabels = {\n /** The words of each status (“Sent”, “Read”…), shown under the last message of yours. */\n status?: Partial<Record<MessageStatus, string>>;\n /** The retry hint of a failed message (“Tap to retry”). */\n retry?: string;\n};\n\nexport type MessageBubbleProps = {\n /** The text. */\n text: string;\n /** Yours (right, in the accent) or theirs (left). */\n mine?: boolean;\n /** The time, written by the app (“14:02”). */\n time?: string;\n /** Where a message of yours stands; shown when `showStatus`. */\n status?: MessageStatus;\n /** Show the status under the bubble (the last message of yours). */\n showStatus?: boolean;\n /** A line above the text: what it answers (“Replied to your story”). */\n context?: string;\n /** Called when a failed message is pressed: send it again. */\n onRetry?: () => void;\n /** Part of a run of the same sender: the corner towards the next one is tighter. */\n grouped?: \"first\" | \"middle\" | \"last\" | \"single\";\n /** The words, passed translated. */\n labels?: MessageBubbleLabels;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst STATUS: Record<MessageStatus, string> = { sending: \"Sending\", sent: \"Sent\", delivered: \"Delivered\", read: \"Read\", failed: \"Not sent\" };\n\n/** A message: yours in the accent on the right, theirs on the left, the time inside, the receipt under the last of yours. */\nexport function MessageBubble({ text, mine, time, status, showStatus, context, onRetry, grouped = \"single\", labels, style }: MessageBubbleProps) {\n const { theme, radius } = useTheme();\n const words = { ...STATUS, ...labels?.status };\n const failed = status === \"failed\";\n const big = radius.xl;\n const tight = 6;\n const corners = mine\n ? { borderTopRightRadius: grouped === \"middle\" || grouped === \"last\" ? tight : big, borderBottomRightRadius: grouped === \"first\" || grouped === \"middle\" ? tight : big }\n : { borderTopLeftRadius: grouped === \"middle\" || grouped === \"last\" ? tight : big, borderBottomLeftRadius: grouped === \"first\" || grouped === \"middle\" ? tight : big };\n const tone = mine ? \"onAccent\" : \"text\";\n const bubble = (\n <View\n style={[\n styles.bubble,\n { borderRadius: big, backgroundColor: mine ? theme.accent : theme.surface2, opacity: status === \"sending\" ? 0.7 : 1 },\n corners,\n failed ? { borderWidth: 2, borderColor: theme.danger } : null,\n ]}\n >\n {context ? (\n <Txt variant=\"caption\" tone={mine ? \"onAccent\" : \"secondary\"} style={styles.context}>\n {context}\n </Txt>\n ) : null}\n <Txt tone={tone}>{text}</Txt>\n {time ? (\n <Txt variant=\"caption\" tone={tone} style={styles.time}>\n {time}\n </Txt>\n ) : null}\n </View>\n );\n const name = [text, time, failed ? `${words.failed}. ${labels?.retry ?? \"\"}` : null].filter(Boolean).join(\", \");\n return (\n <View style={[styles.row, mine ? styles.mine : styles.theirs, style]}>\n {failed && onRetry ? (\n <Pressable role=\"button\" aria-label={name} onPress={onRetry} style={styles.max}>\n {bubble}\n </Pressable>\n ) : (\n <View accessible aria-label={name} style={styles.max}>\n {bubble}\n </View>\n )}\n {showStatus && status ? (\n <View style={styles.status}>\n {status === \"delivered\" || status === \"read\" || status === \"sent\" ? (\n <Svg width={14} height={14} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d={status === \"sent\" ? \"M5 12.5l4.5 4.5L19 7.5\" : \"M2 12.5l4.5 4.5L16 7.5M9 15l2 2 9.5-9.5\"} fill=\"none\" stroke={status === \"read\" ? theme.accent : theme.textSecondary} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n ) : null}\n <Txt variant=\"caption\" tone={failed ? \"danger\" : \"secondary\"}>\n {words[status]}\n </Txt>\n </View>\n ) : null}\n </View>\n );\n}\n\nexport type TypingIndicatorProps = {\n /** What is said to screen readers and shown beside the dots (“Elena is typing”) — passed translated. */\n label: string;\n /** Show the words beside the dots. Default false. */\n showLabel?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Three dots that breathe in a bubble while the other person types; still under reduced motion. */\nexport function TypingIndicator({ label, showLabel, style }: TypingIndicatorProps) {\n const { theme, radius } = useTheme();\n const reduce = useReducedMotion();\n const [t] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (reduce) return;\n const loop = Animated.loop(Animated.timing(t, { toValue: 1, duration: 1200, easing: Easing.linear, useNativeDriver: true }));\n loop.start();\n return () => loop.stop();\n }, [reduce, t]);\n return (\n <View accessible role=\"progressbar\" aria-label={label} accessibilityLiveRegion=\"polite\" style={[styles.typingRow, style]}>\n <View style={[styles.typing, { backgroundColor: theme.surface2, borderRadius: radius.xl }]}>\n {[0, 1, 2].map((i) => (\n <Animated.View\n key={i}\n style={[\n styles.dot,\n { backgroundColor: theme.textSecondary },\n reduce ? null : { opacity: t.interpolate({ inputRange: [0, (i + 1) / 4, (i + 2) / 4, 1], outputRange: [0.35, 1, 0.35, 0.35], extrapolate: \"clamp\" }) },\n ]}\n />\n ))}\n </View>\n {showLabel ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {label}\n </Txt>\n ) : null}\n </View>\n );\n}\n\nexport type MessageComposerProps = {\n /** The draft (controlled). */\n value: string;\n /** Called on every key (send the typing signal from here). */\n onValueChange: (text: string) => void;\n /** Sends the draft; the composer does not clear it — the app does once sent. */\n onSend: () => void;\n /** The input's name and placeholder (“Message”) — passed translated. */\n placeholder: string;\n /** The send button's name (“Send”). */\n sendLabel: string;\n /** Before the input: an attach button. */\n leading?: React.ReactNode;\n /** Cannot write (blocked, read-only): the reason in its place. */\n disabledReason?: string;\n /** The longest message. Default 4000. */\n maxLength?: number;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Where a message is written: a growing input, an attach slot, a send button that wakes when there is something to send. */\nexport function MessageComposer({ value, onValueChange, onSend, placeholder, sendLabel, leading, disabledReason, maxLength = 4000, style }: MessageComposerProps) {\n const { theme, radius, insets, haptic } = useTheme();\n const ready = value.trim().length > 0;\n return (\n <View style={[styles.composer, { borderTopColor: theme.borderSubtle, backgroundColor: theme.surface0, paddingBottom: 8 + insets.bottom }, style]}>\n {disabledReason ? (\n <Txt tone=\"secondary\" style={styles.flex}>\n {disabledReason}\n </Txt>\n ) : (\n <>\n {leading}\n <TextInput\n aria-label={placeholder}\n value={value}\n onChangeText={onValueChange}\n placeholder={placeholder}\n placeholderTextColor={theme.textMuted}\n multiline\n maxLength={maxLength}\n style={[styles.input, { borderRadius: radius.xl, borderColor: theme.borderDefault, backgroundColor: theme.surface1, color: theme.textPrimary }]}\n />\n <Pressable\n role=\"button\"\n aria-label={sendLabel}\n aria-disabled={!ready}\n disabled={!ready}\n onPress={() => {\n haptic(\"impact\");\n onSend();\n }}\n style={({ pressed }) => [styles.send, { backgroundColor: ready ? (pressed ? theme.accentHover : theme.accent) : theme.surface3 }]}\n >\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d=\"M4 12l16-8-6 16-2.5-6.5L4 12z\" fill={ready ? theme.onAccent : theme.textMuted} />\n </Svg>\n </Pressable>\n </>\n )}\n </View>\n );\n}\n\nexport type ConversationItemProps = {\n /** The other person's name. */\n name: string;\n /** Their avatar's URI. */\n avatar?: string | null;\n /** Their presence (a dot on the avatar). */\n presence?: \"online\" | \"away\" | \"busy\" | \"offline\";\n /** The presence in words (“online”). */\n presenceLabel?: string;\n /** The last message, or “typing…”. */\n preview: string;\n /** The preview is the typing signal: in the accent. */\n typing?: boolean;\n /** When (“14:02”, “Mon”). */\n time?: string;\n /** Unread messages: a count in the accent, the name in bold. */\n unread?: number;\n /** The unread count in words (“3 unread”). */\n unreadLabel?: string;\n /** Opens the conversation. */\n onPress?: () => void;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A conversation in the list: avatar and presence, name, the last message or typing, the time, the unread count. */\nexport function ConversationItem({ name, avatar, presence, presenceLabel, preview, typing, time, unread = 0, unreadLabel, onPress, style }: ConversationItemProps) {\n const { theme, radius } = useTheme();\n const said = [unread > 0 ? unreadLabel : null, presence ? presenceLabel : null].filter(Boolean).join(\", \");\n return (\n <Pressable\n role=\"button\"\n // Named by its own words, in the order they are seen (the picture is hidden), then the words only read: how many\n // unread, the presence.\n onPress={onPress}\n style={({ pressed }) => [styles.item, { backgroundColor: pressed ? theme.surface2 : theme.surface0 }, style]}\n >\n <View aria-hidden>\n <Avatar src={avatar} alt={name} size=\"lg\" presence={presence} presenceLabel={presenceLabel} />\n </View>\n <View style={styles.flex}>\n <View style={styles.top}>\n <Txt variant=\"label\" numberOfLines={1} style={[styles.flex, unread > 0 ? styles.bold : null]}>\n {name}\n </Txt>\n {time ? (\n <Txt variant=\"caption\" tone={unread > 0 ? \"accent\" : \"secondary\"}>\n {time}\n </Txt>\n ) : null}\n </View>\n <View style={styles.top}>\n <Txt variant=\"caption\" tone={typing ? \"accent\" : unread > 0 ? \"text\" : \"secondary\"} numberOfLines={1} style={styles.flex}>\n {preview}\n </Txt>\n {unread > 0 ? (\n <View aria-hidden={unreadLabel ? true : undefined} style={[styles.count, { backgroundColor: theme.accent, borderRadius: radius.full }]}>\n <Txt variant=\"caption\" tone=\"onAccent\" style={styles.bold}>\n {unread > 99 ? \"99+\" : unread}\n </Txt>\n </View>\n ) : null}\n </View>\n </View>\n {said ? <Txt style={styles.readOnly}>{said}</Txt> : null}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n readOnly: { position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", opacity: 0 },\n row: { gap: 2 },\n mine: { alignItems: \"flex-end\" },\n theirs: { alignItems: \"flex-start\" },\n max: { maxWidth: \"80%\" },\n bubble: { paddingHorizontal: 12, paddingVertical: 8, gap: 2 },\n context: { opacity: 0.85 },\n time: { alignSelf: \"flex-end\", fontSize: 11 },\n status: { flexDirection: \"row\", alignItems: \"center\", gap: 4 },\n typingRow: { flexDirection: \"row\", alignItems: \"center\", gap: 8, alignSelf: \"flex-start\" },\n typing: { flexDirection: \"row\", gap: 4, paddingHorizontal: 14, paddingVertical: 12 },\n dot: { width: 7, height: 7, borderRadius: 4 },\n composer: { flexDirection: \"row\", alignItems: \"flex-end\", gap: 8, paddingHorizontal: 12, paddingTop: 8, borderTopWidth: StyleSheet.hairlineWidth },\n input: { flex: 1, maxHeight: 120, minHeight: 40, borderWidth: 1, paddingHorizontal: 14, paddingTop: 10, paddingBottom: 10, fontSize: 16 },\n send: { width: 40, height: 40, borderRadius: 20, alignItems: \"center\", justifyContent: \"center\" },\n flex: { flex: 1 },\n item: { flexDirection: \"row\", alignItems: \"center\", gap: 12, paddingHorizontal: 16, paddingVertical: 10 },\n top: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n bold: { fontWeight: \"800\" },\n count: { minWidth: 20, height: 20, paddingHorizontal: 6, alignItems: \"center\", justifyContent: \"center\" },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type CheckboxProps = {\n /** The words next to the box: text (pressable with it), or a `Txt` with links inside (terms, privacy) — then the box alone is pressed and `label` names it. */\n children?: React.ReactNode;\n /** The accessible name when `children` is not plain text (a sentence with links), passed translated. */\n label?: string;\n /** Ticked (controlled). */\n checked?: boolean;\n /** Ticked at first, uncontrolled. */\n defaultChecked?: boolean;\n /** Called with the new state when the row is pressed. */\n onCheckedChange?: (checked: boolean) => void;\n /** An error under the row (a box that must be ticked): read with it and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last, on the row. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A checkbox for React Native: a 44-pt row — the box and its words, pressed as one — with an error under it. The web\n * `Checkbox` with `children`.\n */\nexport function Checkbox({ children, label, checked, defaultChecked = false, onCheckedChange, error, disabled, style }: CheckboxProps) {\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(defaultChecked);\n const on = checked ?? own;\n const toggle = () => {\n if (checked === undefined) setOwn(!on);\n onCheckedChange?.(!on);\n };\n const box = (\n <View\n style={[\n styles.box,\n { borderRadius: radius.xs + 2, borderColor: error ? theme.danger : on ? theme.accent : theme.borderStrong, backgroundColor: on ? theme.accent : theme.surface1 },\n ]}\n >\n {on ? (\n <Svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.onAccent} strokeWidth={3} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n ) : null}\n </View>\n );\n const plain = children === undefined || typeof children === \"string\";\n const a11y = {\n role: \"checkbox\" as const,\n \"aria-checked\": on,\n \"aria-disabled\": disabled || undefined,\n \"aria-label\": label ?? (typeof children === \"string\" ? children : undefined),\n accessibilityHint: error,\n disabled,\n onPress: toggle,\n };\n return (\n <View style={[styles.root, style]}>\n {plain ? (\n <Pressable {...a11y} hitSlop={4} style={[styles.row, disabled ? styles.disabled : null]}>\n {box}\n {children !== undefined ? (\n <View style={styles.text}>\n <Text style={[styles.label, { color: theme.textPrimary }]}>{children}</Text>\n </View>\n ) : null}\n </Pressable>\n ) : (\n // Words with links: the box alone is the control (a 44-pt target, named by `label`), the links stay links.\n <View style={[styles.row, disabled ? styles.disabled : null]}>\n <Pressable {...a11y} hitSlop={11} style={styles.target}>\n {box}\n </Pressable>\n <View style={styles.text}>{children}</View>\n </View>\n )}\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.error, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 2, alignSelf: \"stretch\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 12, minHeight: 44 },\n target: { minHeight: 44, justifyContent: \"center\" },\n box: { width: 22, height: 22, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n text: { flex: 1 },\n label: { fontSize: 15, lineHeight: 21 },\n error: { fontSize: 12, lineHeight: 16, paddingLeft: 34 },\n disabled: { opacity: 0.4 },\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 { Pressable, ScrollView, type StyleProp, StyleSheet, Text, TextInput, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { Sheet } from \"./dialog\";\nimport { useTheme } from \"./theme\";\n\n/** An option: the value stored and its words (passed translated), a line under them. */\nexport type SelectOption = { value: string; label: string; description?: string; disabled?: boolean };\n\nfunction Chevron({ color }: { color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"m6 9 6 6 6-6\" />\n </Svg>\n );\n}\n\nfunction Tick({ color }: { color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n );\n}\n\ntype FieldShared = {\n /** The visible label, passed translated (the field's name). */\n label: string;\n /** Shown while nothing is chosen (\"Choose a category\"), passed translated. */\n placeholder?: string;\n /** A help text under the field. */\n hint?: string;\n /** An error under the field: a danger edge, read and announced. Replaces the hint. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Called when the sheet closes (the field is left). */\n onBlur?: () => void;\n /** Styles merged last, on the field. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The field that opens the sheet: a well with the label above, the value (or the placeholder), a chevron. */\nfunction Trigger({ shared, text, onPress, open }: { shared: FieldShared; text: string | null; onPress: () => void; open: boolean }) {\n const { theme, radius } = useTheme();\n const { label, placeholder, hint, error, disabled } = shared;\n const caption = error ?? hint;\n return (\n <View style={[styles.field, shared.style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <Pressable\n role=\"button\"\n aria-label={`${label}, ${text ?? placeholder ?? \"\"}`.replace(/, $/, \"\")}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled || undefined}\n accessibilityHint={caption}\n disabled={disabled}\n onPress={onPress}\n style={[styles.trigger, { borderRadius: radius.md, backgroundColor: theme.surface2, borderColor: error ? theme.danger : open ? theme.accent : theme.borderDefault }, disabled ? styles.disabled : null]}\n >\n <Text numberOfLines={1} style={[styles.triggerText, { color: text ? theme.textPrimary : theme.textSecondary }]}>\n {text ?? placeholder ?? \"\"}\n </Text>\n <Chevron color={theme.textSecondary} />\n </Pressable>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\n/** The options as rows of the sheet: radios (one) or checkboxes (several), each 48 pt. */\nfunction Options({ options, isChosen, onPick, multiple }: { options: readonly SelectOption[]; isChosen: (v: string) => boolean; onPick: (o: SelectOption) => void; multiple?: boolean }) {\n const { theme, radius, haptic } = useTheme();\n return (\n <ScrollView role={multiple ? \"list\" : \"radiogroup\"} keyboardShouldPersistTaps=\"handled\" style={styles.options}>\n {options.map((o) => {\n const chosen = isChosen(o.value);\n return (\n <Pressable\n key={o.value}\n role={multiple ? \"checkbox\" : \"radio\"}\n aria-checked={chosen}\n aria-label={o.description ? `${o.label}, ${o.description}` : o.label}\n aria-disabled={o.disabled || undefined}\n disabled={o.disabled}\n onPress={() => {\n haptic(\"selection\");\n onPick(o);\n }}\n style={({ pressed }) => [styles.option, { borderRadius: radius.md, backgroundColor: chosen ? theme.accentSoft : pressed ? theme.surface3 : \"transparent\" }, o.disabled ? styles.disabled : null]}\n >\n <View style={styles.optionText}>\n <Text style={[styles.optionLabel, { color: theme.textPrimary, fontWeight: chosen ? \"700\" : \"500\" }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </View>\n {chosen ? <Tick color={theme.accentText} /> : null}\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nexport type SelectProps = FieldShared & {\n /** The choices. */\n options: readonly SelectOption[];\n /** The chosen value (controlled); `null` or `\"\"` for none. */\n value?: string | null;\n /** The chosen value at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the value picked. */\n onValueChange?: (value: string) => void;\n /** The sheet's title. Default: the label. */\n sheetTitle?: string;\n};\n\n/** One choice among many — the web `<select>`: a field that opens a sheet of options; picking one closes it. */\nexport function Select({ options, value: valueProp, defaultValue = null, onValueChange, sheetTitle, ...shared }: SelectProps) {\n const [own, setOwn] = React.useState<string | null>(defaultValue);\n const value = valueProp !== undefined ? valueProp : own;\n const [open, setOpen] = React.useState(false);\n const close = () => {\n setOpen(false);\n shared.onBlur?.();\n };\n return (\n <>\n <Trigger shared={shared} text={options.find((o) => o.value === value)?.label ?? null} open={open} onPress={() => setOpen(true)} />\n <Sheet open={open} onOpenChange={(o) => (o ? setOpen(true) : close())} title={sheetTitle ?? shared.label}>\n <Options\n options={options}\n isChosen={(v) => v === value}\n onPick={(o) => {\n if (valueProp === undefined) setOwn(o.value);\n onValueChange?.(o.value);\n close();\n }}\n />\n </Sheet>\n </>\n );\n}\n\nexport type ComboboxLabels = {\n /** The search box's name and placeholder (\"Search\"). */\n search: string;\n /** While a search runs (\"Searching…\"). */\n loading: string;\n /** When nothing matches (\"No results\"). */\n empty: string;\n /** The button that closes a multiple choice (\"Done\"). */\n done: string;\n};\n\nexport const comboboxLabels: ComboboxLabels = { search: \"Search\", loading: \"Searching…\", empty: \"No results\", done: \"Done\" };\n\nexport type ComboboxProps = FieldShared & {\n /** The options, filtered by what is typed. */\n options?: readonly SelectOption[];\n /** Fetches the options for a query (debounced 250 ms, aborted by a newer one). */\n onSearch?: (query: string, signal: AbortSignal) => Promise<readonly SelectOption[]>;\n /** Several values (`string[]`, checkboxes, a Done button); one by default. */\n multiple?: boolean;\n /** The chosen value(s) (controlled): a string, or strings with `multiple`. */\n value?: string | readonly string[] | null;\n /** Called with the value — or the values — chosen. */\n onValueChange?: (value: string | string[]) => void;\n /** The words, passed translated; English by default. */\n labels?: Partial<ComboboxLabels>;\n};\n\n/** A choice among many, searched: a field that opens a sheet with a search box and the matching options. */\nexport function Combobox({ options = [], onSearch, multiple, value, onValueChange, labels: given, ...shared }: ComboboxProps) {\n const labels = { ...comboboxLabels, ...given };\n const { theme, radius } = useTheme();\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const [found, setFound] = React.useState<readonly SelectOption[] | null>(null);\n const [loading, setLoading] = React.useState(false);\n const [seen, setSeen] = React.useState<Record<string, SelectOption>>({});\n const chosen: string[] = value == null ? [] : typeof value === \"string\" ? (value ? [value] : []) : [...value];\n React.useEffect(() => {\n if (!onSearch || !open) return;\n const controller = new AbortController();\n const timer = setTimeout(() => {\n setLoading(true);\n onSearch(query, controller.signal)\n .then((result) => {\n if (!controller.signal.aborted) setFound(result);\n })\n .catch(() => undefined)\n .finally(() => {\n if (!controller.signal.aborted) setLoading(false);\n });\n }, 250);\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [query, onSearch, open]);\n const q = query.trim().toLowerCase();\n const list = onSearch ? (found ?? []) : options.filter((o) => !q || o.label.toLowerCase().includes(q));\n const labelOf = (v: string) => options.find((o) => o.value === v)?.label ?? seen[v]?.label ?? v;\n const close = () => {\n setOpen(false);\n setQuery(\"\");\n shared.onBlur?.();\n };\n return (\n <>\n <Trigger shared={shared} text={chosen.length ? chosen.map(labelOf).join(\", \") : null} open={open} onPress={() => setOpen(true)} />\n <Sheet open={open} onOpenChange={(o) => (o ? setOpen(true) : close())} title={shared.label}>\n <TextInput\n aria-label={labels.search}\n placeholder={labels.search}\n placeholderTextColor={theme.textMuted}\n value={query}\n onChangeText={setQuery}\n autoFocus\n autoCorrect={false}\n returnKeyType=\"search\"\n style={[styles.search, { borderRadius: radius.md, backgroundColor: theme.surface2, borderColor: theme.borderDefault, color: theme.textPrimary }]}\n />\n {loading ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{labels.loading}</Text> : null}\n {!loading && list.length === 0 ? <Text style={[styles.caption, { color: theme.textSecondary }]}>{labels.empty}</Text> : null}\n <Options\n options={list}\n multiple={multiple}\n isChosen={(v) => chosen.includes(v)}\n onPick={(o) => {\n setSeen((known) => ({ ...known, [o.value]: o }));\n if (multiple) onValueChange?.(chosen.includes(o.value) ? chosen.filter((v) => v !== o.value) : [...chosen, o.value]);\n else {\n onValueChange?.(o.value);\n close();\n }\n }}\n />\n {multiple ? (\n <Pressable role=\"button\" onPress={close} style={[styles.done, { borderRadius: radius.md, backgroundColor: theme.accent }]}>\n <Text style={[styles.doneText, { color: theme.onAccent }]}>{labels.done}</Text>\n </Pressable>\n ) : null}\n </Sheet>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n field: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n trigger: { minHeight: 48, flexDirection: \"row\", alignItems: \"center\", gap: 8, paddingHorizontal: 14, borderWidth: 1 },\n triggerText: { flex: 1, fontSize: 16 },\n caption: { fontSize: 12, lineHeight: 16 },\n options: { flexGrow: 0 },\n option: { minHeight: 48, flexDirection: \"row\", alignItems: \"center\", gap: 12, paddingHorizontal: 12, paddingVertical: 8 },\n optionText: { flex: 1, gap: 2 },\n optionLabel: { fontSize: 16 },\n search: { height: 44, paddingHorizontal: 12, borderWidth: 1, fontSize: 16 },\n done: { height: 48, alignItems: \"center\", justifyContent: \"center\" },\n doneText: { fontSize: 15, fontWeight: \"700\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { Animated, Modal, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SheetProps = {\n /** Open (controlled). */\n open: boolean;\n /** Called to close it: the scrim pressed, the back button, a choice made. */\n onOpenChange: (open: boolean) => void;\n /** The title at the top of the sheet (its accessible name), passed translated. */\n title?: string;\n /** The name of the close action read by screen readers (\"Close\"), passed translated. */\n closeLabel?: string;\n /** The content: a list, details, a form. */\n children: React.ReactNode;\n /** Styles merged last, on the sheet. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A bottom sheet: it rises over a dimmed screen, its grip on top, the scrim closes it. The web `Dialog` on a phone —\n * a choice (`Select`, `Combobox`), the details of a pin on a map, a short form. React Native's `Modal`: focus stays\n * inside, the back button closes it. Rises with the theme's ease; still under reduced motion.\n */\nexport function Sheet({ open, onOpenChange, title, closeLabel = \"Close\", children, style }: SheetProps) {\n const { theme, radius, motion } = useTheme();\n const [rise] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (open) Animated.timing(rise, { toValue: 1, duration: motion.duration.base * 1.6, useNativeDriver: true }).start();\n else rise.setValue(0);\n }, [open, rise, motion.duration.base]);\n return (\n <Modal transparent visible={open} animationType=\"none\" onRequestClose={() => onOpenChange(false)} statusBarTranslucent>\n <View style={styles.backdrop}>\n <Animated.View style={[StyleSheet.absoluteFill, { opacity: rise }]}>\n <Pressable role=\"button\" aria-label={closeLabel} onPress={() => onOpenChange(false)} style={[StyleSheet.absoluteFill, { backgroundColor: theme.scrim }]} />\n </Animated.View>\n <Animated.View\n role=\"dialog\"\n aria-label={title}\n style={[\n styles.sheet,\n {\n backgroundColor: theme.surface1,\n borderColor: theme.borderDefault,\n borderTopLeftRadius: radius[\"2xl\"],\n borderTopRightRadius: radius[\"2xl\"],\n shadowColor: theme.scrimStrong,\n transform: [{ translateY: rise.interpolate({ inputRange: [0, 1], outputRange: [48, 0] }) }],\n opacity: rise.interpolate({ inputRange: [0, 1], outputRange: [0.6, 1] }),\n },\n style,\n ]}\n >\n <View aria-hidden style={[styles.grip, { backgroundColor: theme.borderStrong }]} />\n {title ? (\n <Text role=\"heading\" style={[styles.title, { color: theme.textPrimary }]}>\n {title}\n </Text>\n ) : null}\n {children}\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: { flex: 1, justifyContent: \"flex-end\" },\n sheet: { maxHeight: \"85%\", paddingHorizontal: 16, paddingTop: 8, paddingBottom: 28, gap: 12, borderWidth: StyleSheet.hairlineWidth, shadowOpacity: 0.3, shadowRadius: 16, shadowOffset: { width: 0, height: -4 }, elevation: 12 },\n grip: { alignSelf: \"center\", width: 40, height: 5, borderRadius: 3, marginBottom: 4 },\n title: { fontSize: 17, fontWeight: \"700\" },\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 { Platform, type StyleProp, StyleSheet, Text, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\n\nimport { composeDate, DATE_PART_LENGTH, type DatePart, datePartsOrder, splitDate as split } from \"../date-picker/parts\";\nimport { useTheme } from \"./theme\";\n\ntype Part = DatePart;\nconst LENGTH = DATE_PART_LENGTH;\n\nexport type DateFieldLabels = {\n /** The name of the day's box. */\n day: string;\n /** The name of the month's box. */\n month: string;\n /** The name of the year's box. */\n year: string;\n};\n\nexport const dateFieldLabels: DateFieldLabels = { day: \"Day\", month: \"Month\", year: \"Year\" };\n\nexport type DateFieldProps = {\n /** The visible label of the date, passed translated (the group's accessible name). */\n label: string;\n /** A help text under the boxes (\"For example, 27 3 1990\"). */\n hint?: string;\n /** An error under the boxes: a danger border and caption, read with them and announced. Replaces the hint. */\n error?: string;\n /** The date, `YYYY-MM-DD` (controlled); `\"\"` for none. What is typed comes back in the same order, real date or not: the schema decides. */\n value?: string;\n /** The date at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the date typed so far (`\"\"` when the boxes are empty). */\n onValueChange?: (value: string) => void;\n /** Called when focus leaves the last box. */\n onBlur?: () => void;\n /** The locale that orders the boxes (day · month · year, or month · day · year). Default `en-US`. */\n locale?: string;\n /** The names of the boxes, passed translated; English by default. */\n labels?: Partial<DateFieldLabels>;\n /** `bday` for a date of birth: the system offers to fill it. */\n autoComplete?: \"bday\" | \"off\";\n /** Not available. */\n disabled?: boolean;\n /** The first box (in the locale's order), to focus the field from the one before it. */\n inputRef?: React.Ref<TextInput>;\n /** Called by the last box's return key (`returnKeyType`): move to the next field, or send the form. */\n onSubmitEditing?: () => void;\n /** The last box's return key. Default `done`. */\n returnKeyType?: \"next\" | \"done\" | \"go\" | \"send\";\n /** Styles merged last, on the field. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A date typed as day, month and year — a memorable date (a birth date, an expiry) that a calendar would make slow to\n * reach: numeric keypads, the boxes in the locale's order, the next box focused once one is full. No native module.\n */\nexport function DateField({ label, hint, error, value, defaultValue, onValueChange, onBlur, locale = \"en-US\", labels: given, autoComplete, disabled, inputRef, onSubmitEditing, returnKeyType = \"done\", style }: DateFieldProps) {\n const { theme, radius } = useTheme();\n const labels = { ...dateFieldLabels, ...given };\n const order = React.useMemo(() => datePartsOrder(locale), [locale]);\n const [parts, setParts] = React.useState(() => split(value ?? defaultValue));\n const [focused, setFocused] = React.useState<Part | null>(null);\n const refs = { day: React.useRef<TextInput>(null), month: React.useRef<TextInput>(null), year: React.useRef<TextInput>(null) };\n // A value set from outside (a reset, a suggestion) replaces what is in the boxes.\n if (value !== undefined && value !== composeDate(parts) && composeDate(split(value)) === value) setParts(split(value));\n const caption = error ?? hint;\n\n const change = (part: Part, text: string) => {\n const digits = text.replace(/\\D/g, \"\").slice(0, LENGTH[part]);\n const next = { ...parts, [part]: digits };\n setParts(next);\n onValueChange?.(composeDate(next));\n const following = order[order.indexOf(part) + 1];\n if (digits.length === LENGTH[part] && following) refs[following].current?.focus();\n };\n\n return (\n <View role=\"group\" aria-label={label} style={[styles.root, disabled ? styles.disabled : null, style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <View style={styles.row}>\n {order.map((part, i) => (\n <View key={part} style={part === \"year\" ? styles.yearBox : styles.box}>\n <Text style={[styles.part, { color: theme.textSecondary }]}>{labels[part]}</Text>\n <TextInput\n ref={(node) => {\n refs[part].current = node;\n if (i === 0 && inputRef) {\n if (typeof inputRef === \"function\") inputRef(node);\n else (inputRef as React.RefObject<TextInput | null>).current = node;\n }\n }}\n aria-label={`${label}, ${labels[part]}`}\n accessibilityHint={caption}\n value={parts[part]}\n editable={!disabled}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n maxLength={LENGTH[part]}\n autoComplete={autoComplete === \"bday\" ? ((Platform.OS === \"web\" ? `bday-${part}` : `birthdate-${part}`) as TextInputProps[\"autoComplete\"]) : \"off\"}\n returnKeyType={i === order.length - 1 ? returnKeyType : \"next\"}\n submitBehavior={i === order.length - 1 && returnKeyType !== \"next\" ? \"blurAndSubmit\" : \"submit\"}\n onSubmitEditing={() => {\n const following = order[i + 1];\n if (following) refs[following].current?.focus();\n else onSubmitEditing?.();\n }}\n onChangeText={(text) => change(part, text)}\n onFocus={() => setFocused(part)}\n onBlur={() => {\n setFocused(null);\n if (i === order.length - 1) onBlur?.();\n }}\n style={[\n styles.input,\n { color: theme.textPrimary, backgroundColor: theme.surface2, borderRadius: radius.md, borderColor: error ? theme.danger : focused === part ? theme.accent : theme.borderDefault },\n ]}\n />\n </View>\n ))}\n </View>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n row: { flexDirection: \"row\", gap: 10 },\n box: { width: 64, gap: 4 },\n yearBox: { width: 88, gap: 4 },\n part: { fontSize: 11, lineHeight: 14 },\n input: { height: 44, borderWidth: 1, paddingHorizontal: 10, fontSize: 16, fontVariant: [\"tabular-nums\"], textAlign: \"center\" },\n caption: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.5 },\n});\n","// React Native: the dates and times of the web's `@krizaka/ui/date-picker`, with the same ISO values (`YYYY-MM-DD`,\n// `YYYY-MM`, `HH:mm`) and the same helpers (`../date-picker/parts`): `Calendar`, `MonthPicker`, `DayStrip`,\n// `TimePicker` (wheels or slots) and `DateWheel`. Words come from Intl for the `locale` given; the hand feels each\n// choice (`selection` haptic, when the app passes `haptics` to the ThemeProvider).\nimport * as React from \"react\";\nimport { Pressable, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport {\n addDays,\n addMonths,\n datePartsOrder,\n dayPeriods,\n daysInMonth,\n formatTime,\n isoOf,\n isoParts,\n monthGrid,\n monthNames,\n timeToMinutes,\n type TimeValue,\n todayIso,\n toLocalDate,\n uses12Hours,\n weekStartOf,\n yearRange,\n} from \"../date-picker/parts\";\nimport { useTheme } from \"./theme\";\nimport { Wheel, WheelDivider, type WheelOption, WheelPicker } from \"./wheel\";\n\nconst longDate = (locale: string, iso: string) => new Intl.DateTimeFormat(locale, { dateStyle: \"long\" }).format(toLocalDate(iso));\nconst useOwn = <T,>(value: T | undefined, initial: T) => {\n const [own, setOwn] = React.useState(initial);\n return [value !== undefined ? value : own, (next: T) => value === undefined && setOwn(next)] as const;\n};\n\nfunction Chevron({ direction, color }: { direction: \"left\" | \"right\"; color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d={direction === \"left\" ? \"m15 18-6-6 6-6\" : \"m9 18 6-6-6-6\"} />\n </Svg>\n );\n}\n\nfunction NavButton({ label, direction, disabled, onPress }: { label: string; direction: \"left\" | \"right\"; disabled?: boolean; onPress: () => void }) {\n const { theme, radius } = useTheme();\n return (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [styles.nav, { borderRadius: radius.md, backgroundColor: pressed ? theme.surface3 : theme.surface2, borderColor: theme.borderSubtle }, disabled ? styles.disabled : null]}\n >\n <Chevron direction={direction} color={theme.textSecondary} />\n </Pressable>\n );\n}\n\n/** The node of the marks (a small diamond): today. */\nfunction Node({ color, style }: { color: string; style?: StyleProp<ViewStyle> }) {\n return <View aria-hidden style={[styles.node, { backgroundColor: color }, style]} />;\n}\n\nexport type CalendarLabels = {\n /** The previous-month button (\"Previous month\"). */\n previousMonth: string;\n /** The next-month button (\"Next month\"). */\n nextMonth: string;\n};\n\nexport const calendarLabels: CalendarLabels = { previousMonth: \"Previous month\", nextMonth: \"Next month\" };\n\nexport type CalendarProps = {\n /** The BCP 47 locale of the names: always explicit. */\n locale: string;\n /** The chosen date (one-date mode). */\n value?: string | null;\n /** The chosen range (range mode): its ends lit, the days between one band. */\n range?: { start: string; end: string | null } | null;\n /** Called with the day pressed. */\n onSelect?: (date: string) => void;\n /** The month shown at first (any day of it). Default: the value's, or today's. */\n defaultMonth?: string;\n /** The earliest date that can be picked. */\n min?: string;\n /** The latest date that can be picked. */\n max?: string;\n /** Refuses some dates. */\n isDateDisabled?: (date: string) => boolean;\n /** The first day of the week, 0 = Sunday. Default: the locale's. */\n weekStartsOn?: number;\n /** Today (marked by the node). Default: the device's date. */\n today?: string;\n /** The words, passed translated; English by default. */\n labels?: Partial<CalendarLabels>;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A month to pick a day or the ends of a period — the web `Calendar`: 44-pt days, today's node, the range as a band. */\nexport function Calendar({ locale, value, range, onSelect, defaultMonth, min, max, isDateDisabled, weekStartsOn, today: todayProp, labels: given, style }: CalendarProps) {\n const labels = { ...calendarLabels, ...given };\n const { theme, radius, haptic } = useTheme();\n const today = todayProp ?? todayIso();\n const [month, setMonth] = React.useState(`${(defaultMonth ?? value ?? range?.start ?? today).slice(0, 7)}-01`);\n const start = weekStartsOn ?? weekStartOf(locale);\n const weeks = monthGrid(month, start);\n const weekday = new Intl.DateTimeFormat(locale, { weekday: \"narrow\" });\n const title = new Intl.DateTimeFormat(locale, { month: \"long\", year: \"numeric\" }).format(toLocalDate(month));\n const [lo, hi] = range?.end ? (range.start <= range.end ? [range.start, range.end] : [range.end, range.start]) : [null, null];\n const off = (iso: string) => Boolean((min && iso < min) || (max && iso > max) || isDateDisabled?.(iso));\n return (\n <View style={[styles.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.xl }, style]}>\n <View style={styles.header}>\n <NavButton label={labels.previousMonth} direction=\"left\" disabled={Boolean(min && addDays(month, -1) < min)} onPress={() => setMonth(addMonths(month, -1))} />\n <Text role=\"heading\" aria-live=\"polite\" style={[styles.title, { color: theme.textPrimary }]}>\n {title}\n </Text>\n <NavButton label={labels.nextMonth} direction=\"right\" disabled={Boolean(max && addMonths(month, 1) > max)} onPress={() => setMonth(addMonths(month, 1))} />\n </View>\n <View style={styles.week} aria-hidden>\n {weeks[0]!.map((iso) => (\n <Text key={iso} style={[styles.weekday, { color: theme.textSecondary }]}>\n {weekday.format(toLocalDate(iso))}\n </Text>\n ))}\n </View>\n <View role=\"radiogroup\" aria-label={title}>\n {weeks.map((week) => (\n <View key={week[0]} style={styles.week}>\n {week.map((iso) => {\n const outside = iso.slice(0, 7) !== month.slice(0, 7);\n const selected = iso === value || Boolean(range && (iso === range.start || iso === range.end));\n const disabled = off(iso);\n const band = lo && hi && lo !== hi && iso >= lo && iso <= hi;\n return (\n <View\n key={iso}\n style={[\n styles.cell,\n band ? { backgroundColor: theme.accentSoft } : null,\n band && iso === lo ? { borderTopLeftRadius: radius.lg, borderBottomLeftRadius: radius.lg } : null,\n band && iso === hi ? { borderTopRightRadius: radius.lg, borderBottomRightRadius: radius.lg } : null,\n ]}\n >\n <Pressable\n role=\"radio\"\n aria-label={longDate(locale, iso)}\n aria-checked={selected}\n aria-disabled={disabled || undefined}\n aria-current={iso === today ? \"date\" : undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n onSelect?.(iso);\n }}\n style={({ pressed }) => [\n styles.day,\n { borderRadius: radius.lg },\n selected ? { backgroundColor: theme.accent } : pressed ? { backgroundColor: theme.surface3 } : null,\n ]}\n >\n <Text\n style={[\n styles.dayText,\n {\n color: selected ? theme.onAccent : disabled ? theme.textMuted : iso === today ? theme.accentText : outside ? theme.textSecondary : theme.textPrimary,\n fontWeight: selected || iso === today ? \"700\" : \"400\",\n textDecorationLine: disabled ? \"line-through\" : \"none\",\n },\n ]}\n >\n {Number(iso.slice(8))}\n </Text>\n {iso === today ? <Node color={selected ? theme.onAccent : theme.accent} style={styles.todayNode} /> : null}\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nexport type MonthPickerProps = {\n /** The BCP 47 locale of the month names: always explicit. */\n locale: string;\n /** The chosen month, `YYYY-MM` (controlled); `null` for none. */\n value?: string | null;\n /** Called with the month pressed. */\n onValueChange?: (value: string) => void;\n /** The earliest month, `YYYY-MM`. */\n min?: string;\n /** The latest month, `YYYY-MM`. */\n max?: string;\n /** The words of the year buttons, passed translated. */\n labels?: { previousYear?: string; nextYear?: string };\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A month of a year: the twelve months in a grid, the year above them — the web `MonthPicker`. */\nexport function MonthPicker({ locale, value, onValueChange, min, max, labels, style }: MonthPickerProps) {\n const { theme, radius, haptic } = useTheme();\n const [year, setYear] = React.useState(Number((value ?? todayIso()).slice(0, 4)));\n const names = monthNames(locale, \"short\").map((n) => n.replace(/\\.$/, \"\"));\n const long = monthNames(locale, \"long\");\n return (\n <View style={[styles.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.xl }, style]}>\n <View style={styles.header}>\n <NavButton label={labels?.previousYear ?? \"Previous year\"} direction=\"left\" disabled={Boolean(min && year - 1 < Number(min.slice(0, 4)))} onPress={() => setYear(year - 1)} />\n <Text role=\"heading\" aria-live=\"polite\" style={[styles.title, { color: theme.textPrimary }]}>\n {year}\n </Text>\n <NavButton label={labels?.nextYear ?? \"Next year\"} direction=\"right\" disabled={Boolean(max && year + 1 > Number(max.slice(0, 4)))} onPress={() => setYear(year + 1)} />\n </View>\n <View role=\"radiogroup\" aria-label={String(year)} style={styles.months}>\n {names.map((name, i) => {\n const id = `${year}-${String(i + 1).padStart(2, \"0\")}`;\n const selected = id === value;\n const disabled = Boolean((min && id < min) || (max && id > max));\n return (\n <Pressable\n key={id}\n role=\"radio\"\n aria-checked={selected}\n aria-label={`${long[i]} ${year}`}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n onValueChange?.(id);\n }}\n style={({ pressed }) => [styles.month, { borderRadius: radius.lg, backgroundColor: selected ? theme.accent : pressed ? theme.surface3 : \"transparent\" }, disabled ? styles.disabled : null]}\n >\n <Text style={[styles.monthText, { color: selected ? theme.onAccent : theme.textPrimary, fontWeight: selected ? \"700\" : \"500\" }]}>{name}</Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\nexport type DayStripProps = {\n /** The group's accessible name (\"Delivery day\"), passed translated. */\n label: string;\n /** The BCP 47 locale: always explicit. */\n locale: string;\n /** The chosen day, ISO (controlled); `null` for none. */\n value?: string | null;\n /** The chosen day at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the day pressed. */\n onValueChange?: (value: string) => void;\n /** The first day. Default: today. */\n start?: string;\n /** How many days. Default 14. */\n days?: number;\n /** Refuses some days (closed, full). */\n isDateDisabled?: (date: string) => boolean;\n /** Marks the days that have something: a dot, and `markedLabel` in their name. */\n isDateMarked?: (date: string) => boolean;\n /** Added to the name of a marked day (\"has events\"), passed translated. */\n markedLabel?: string;\n /** Today (the node). Default: the device's date. */\n today?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The days ahead in a row that scrolls sideways — the web `DayStrip`: a radio group of 56×72-pt days. */\nexport function DayStrip({ label, locale, value: valueProp, defaultValue = null, onValueChange, start, days = 14, isDateDisabled, isDateMarked, markedLabel = \"has events\", today: todayProp, style }: DayStripProps) {\n const { theme, radius, haptic } = useTheme();\n const today = todayProp ?? todayIso();\n const first = start ?? today;\n const [value, setValue] = useOwn(valueProp, defaultValue);\n const weekday = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n const list = Array.from({ length: days }, (_, i) => addDays(first, i));\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} role=\"radiogroup\" aria-label={label} contentContainerStyle={styles.strip} style={style}>\n {list.map((iso) => {\n const selected = iso === value;\n const disabled = Boolean(isDateDisabled?.(iso));\n const marked = Boolean(isDateMarked?.(iso));\n const name = longDate(locale, iso);\n return (\n <Pressable\n key={iso}\n role=\"radio\"\n aria-checked={selected}\n aria-label={marked ? `${name}, ${markedLabel}` : name}\n aria-disabled={disabled || undefined}\n aria-current={iso === today ? \"date\" : undefined}\n disabled={disabled}\n onPress={() => {\n haptic(\"selection\");\n setValue(iso);\n onValueChange?.(iso);\n }}\n style={({ pressed }) => [\n styles.stripDay,\n {\n borderRadius: radius.xl,\n backgroundColor: selected ? theme.accent : disabled ? \"transparent\" : theme.surface2,\n borderColor: selected ? theme.accent : theme.borderDefault,\n borderStyle: disabled ? \"dashed\" : \"solid\",\n transform: [{ scale: pressed ? 0.95 : 1 }],\n },\n ]}\n >\n {iso === today ? <Node color={selected ? theme.onAccent : theme.accent} style={styles.stripNode} /> : null}\n <Text style={[styles.stripWeekday, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textSecondary }]}>{weekday.format(toLocalDate(iso)).replace(/\\.$/, \"\").toUpperCase()}</Text>\n <Text style={[styles.stripNumber, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textPrimary }]}>{Number(iso.slice(8))}</Text>\n <View style={[styles.dot, marked ? { backgroundColor: selected ? theme.onAccent : theme.textSecondary } : null]} />\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nexport type TimePickerLabels = {\n /** The hours' wheel (\"Hours\"). */\n hours: string;\n /** The minutes' wheel (\"Minutes\"). */\n minutes: string;\n /** The day period's wheel (\"AM/PM\"). */\n period: string;\n};\n\nexport type TimePickerProps = {\n /** The accessible name (\"Pick-up time\"), passed translated. */\n label: string;\n /** The BCP 47 locale: how times are written, 12 or 24 hours. */\n locale: string;\n /** The time, `HH:mm` on 24 hours (controlled); `null` for none. */\n value?: TimeValue | null;\n /** The time at first, uncontrolled. */\n defaultValue?: TimeValue | null;\n /** Called with the time chosen. */\n onValueChange?: (value: TimeValue) => void;\n /** `wheel` (default: hours, minutes and the period as wheels) or `slots` (the free times as buttons). */\n variant?: \"wheel\" | \"slots\";\n /** Wheels: the minutes' step. Default 5. */\n minuteStep?: number;\n /** Wheels: forces 12 or 24 hours. Default: the locale's. */\n hour12?: boolean;\n /** Wheels: the names of the wheels, passed translated. */\n labels?: Partial<TimePickerLabels>;\n /** Slots: the times offered, `HH:mm` (`timeSlots(\"09:00\", \"17:00\", 30)`). */\n slots?: readonly TimeValue[];\n /** Slots: refuses some (taken). */\n isTimeDisabled?: (time: TimeValue) => boolean;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A time of day: wheels to set one, or slots to book one — the web `TimePicker`. */\nexport function TimePicker({ label, locale, value: valueProp, defaultValue = null, onValueChange, variant = \"wheel\", minuteStep = 5, hour12, labels: given, slots = [], isTimeDisabled, disabled, style }: TimePickerProps) {\n const { theme, radius, haptic } = useTheme();\n const [value, setOwn] = useOwn(valueProp, defaultValue);\n const set = (next: TimeValue) => {\n setOwn(next);\n onValueChange?.(next);\n };\n if (variant === \"slots\")\n return (\n <View role=\"radiogroup\" aria-label={label} style={[styles.slots, style]}>\n {slots.map((t) => {\n const selected = t === value;\n const off = disabled || Boolean(isTimeDisabled?.(t));\n return (\n <Pressable\n key={t}\n role=\"radio\"\n aria-checked={selected}\n aria-label={formatTime(locale, t)}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => {\n haptic(\"selection\");\n set(t);\n }}\n style={({ pressed }) => [\n styles.slot,\n {\n borderRadius: radius.lg,\n backgroundColor: selected ? theme.accent : off ? \"transparent\" : theme.surface2,\n borderColor: selected ? theme.accent : theme.borderDefault,\n borderStyle: off ? \"dashed\" : \"solid\",\n transform: [{ scale: pressed ? 0.97 : 1 }],\n },\n ]}\n >\n <Text style={[styles.slotText, { color: selected ? theme.onAccent : off ? theme.textMuted : theme.textPrimary, textDecorationLine: off ? \"line-through\" : \"none\" }]}>{formatTime(locale, t)}</Text>\n </Pressable>\n );\n })}\n </View>\n );\n const labels = { hours: \"Hours\", minutes: \"Minutes\", period: \"AM/PM\", ...given };\n const twelve = hour12 ?? uses12Hours(locale);\n const total = timeToMinutes(value) ?? 9 * 60;\n const h24 = Math.floor(total / 60);\n const minute = total % 60;\n const pm = h24 >= 12;\n const two = (n: number) => String(n).padStart(2, \"0\");\n const put = (h: number, m: number) => set(`${two(h)}:${two(m)}`);\n const hours: WheelOption[] = twelve ? [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((h) => ({ value: String(h), label: String(h) })) : Array.from({ length: 24 }, (_, h) => ({ value: String(h), label: two(h) }));\n const minutes: WheelOption[] = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => ({ value: String(i * minuteStep), label: two(i * minuteStep) }));\n const [am, pmLabel] = dayPeriods(locale);\n return (\n <WheelPicker label={value ? `${label}, ${formatTime(locale, value)}` : label} style={style}>\n <Wheel label={labels.hours} options={hours} disabled={disabled} value={twelve ? String(h24 % 12 === 0 ? 12 : h24 % 12) : String(h24)} onValueChange={(v) => put(twelve ? (Number(v) % 12) + (pm ? 12 : 0) : Number(v), minute)} />\n <WheelDivider>:</WheelDivider>\n <Wheel label={labels.minutes} options={minutes} disabled={disabled} value={String(Math.min(60 - minuteStep, Math.round(minute / minuteStep) * minuteStep))} onValueChange={(v) => put(h24, Number(v))} />\n {twelve ? (\n <Wheel\n label={labels.period}\n options={[\n { value: \"am\", label: am },\n { value: \"pm\", label: pmLabel },\n ]}\n disabled={disabled}\n value={pm ? \"pm\" : \"am\"}\n onValueChange={(v) => put((h24 % 12) + (v === \"pm\" ? 12 : 0), minute)}\n />\n ) : null}\n </WheelPicker>\n );\n}\n\nexport type DateWheelProps = {\n /** The visible label, passed translated (the group's name). */\n label: string;\n /** The BCP 47 locale: the order of the wheels, the month names. */\n locale: string;\n /** The date, `YYYY-MM-DD` (controlled); `\"\"` or `null` for none. */\n value?: string | null;\n /** The date at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the date under the band: always a real date within `min` / `max`. */\n onValueChange?: (value: string) => void;\n /** The earliest date (ISO). Default: 120 years ago. */\n min?: string;\n /** The latest date (ISO): `latestBirthDate(18)` for an age gate. Default: today. */\n max?: string;\n /** Where the wheels rest while there is no value. Default: `max`. */\n defaultView?: string;\n /** A help text under the wheels. */\n hint?: string;\n /** An error under the wheels: a danger edge, read and announced. Replaces the hint. */\n error?: string;\n /** The names of the wheels (`day`, `month`, `year`), passed translated. */\n labels?: Partial<Record<\"day\" | \"month\" | \"year\", string>>;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Day, month and year as three wheels in the locale's order, bounded by `min` and `max` — the web `DateWheel`. */\nexport function DateWheel({ label, locale, value: valueProp, defaultValue = null, onValueChange, min, max, defaultView, hint, error, labels: given, disabled, style }: DateWheelProps) {\n const { theme } = useTheme();\n const names = { day: \"Day\", month: \"Month\", year: \"Year\", ...given };\n const [value, setOwn] = useOwn(valueProp, defaultValue);\n const today = todayIso();\n const hi = max ?? today;\n const lo = min ?? isoOf(Number(today.slice(0, 4)) - 120, 1, 1);\n const { year, month, day } = isoParts(value || defaultView || hi);\n const months = monthNames(locale, \"long\");\n const set = (y: number, m: number, d: number) => {\n let next = isoOf(y, m, d);\n if (next > hi) next = hi;\n if (next < lo) next = lo;\n setOwn(next);\n onValueChange?.(next);\n };\n const last = daysInMonth(year, month);\n const columns = {\n day: <Wheel key=\"day\" label={names.day} disabled={disabled} options={Array.from({ length: last }, (_, i) => ({ value: String(i + 1), label: String(i + 1), disabled: isoOf(year, month, i + 1) > hi || isoOf(year, month, i + 1) < lo }))} value={String(Math.min(day, last))} onValueChange={(v) => set(year, month, Number(v))} style={styles.dayWheel} />,\n month: <Wheel key=\"month\" label={names.month} disabled={disabled} options={months.map((n, i) => ({ value: String(i + 1), label: n, disabled: isoOf(year, i + 1, 1) > hi || isoOf(year, i + 1, daysInMonth(year, i + 1)) < lo }))} value={String(month)} onValueChange={(v) => set(year, Number(v), day)} style={styles.monthWheel} />,\n year: <Wheel key=\"year\" label={names.year} disabled={disabled} options={yearRange(Number(hi.slice(0, 4)), Number(lo.slice(0, 4))).map((y) => ({ value: String(y), label: String(y) }))} value={String(year)} onValueChange={(v) => set(Number(v), month, day)} style={styles.yearWheel} />,\n };\n const caption = error ?? hint;\n return (\n <View style={[styles.field, style]}>\n <Text aria-hidden style={[styles.fieldLabel, { color: theme.textSecondary }]}>\n {label}\n </Text>\n <WheelPicker label={label} invalid={Boolean(error)} unset={!value}>\n {datePartsOrder(locale).map((part) => columns[part])}\n </WheelPicker>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n calendar: { padding: 12, gap: 4, borderWidth: StyleSheet.hairlineWidth, alignSelf: \"flex-start\" },\n header: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6, gap: 8 },\n title: { fontSize: 15, fontWeight: \"700\", textTransform: \"capitalize\" },\n nav: { width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n week: { flexDirection: \"row\" },\n weekday: { width: 44, textAlign: \"center\", fontSize: 11, fontWeight: \"700\", paddingBottom: 4 },\n cell: { width: 44, height: 44, marginVertical: 1 },\n day: { flex: 1, alignItems: \"center\", justifyContent: \"center\" },\n dayText: { fontSize: 15, fontVariant: [\"tabular-nums\"] },\n node: { width: 5, height: 5, borderRadius: 1, transform: [{ rotate: \"45deg\" }] },\n todayNode: { position: \"absolute\", bottom: 5 },\n months: { flexDirection: \"row\", flexWrap: \"wrap\", width: 264, gap: 6 },\n month: { width: 84, height: 44, alignItems: \"center\", justifyContent: \"center\" },\n monthText: { fontSize: 14, textTransform: \"capitalize\" },\n strip: { gap: 8, paddingVertical: 4 },\n stripDay: { width: 56, height: 72, alignItems: \"center\", justifyContent: \"center\", gap: 2, borderWidth: 1 },\n stripNode: { position: \"absolute\", top: 6 },\n stripWeekday: { fontSize: 11, fontWeight: \"700\", letterSpacing: 0.5 },\n stripNumber: { fontSize: 19, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n dot: { width: 6, height: 6, borderRadius: 3 },\n slots: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 8, alignSelf: \"stretch\" },\n slot: { minWidth: 88, height: 44, paddingHorizontal: 12, alignItems: \"center\", justifyContent: \"center\", borderWidth: 1 },\n slotText: { fontSize: 15, fontWeight: \"600\", fontVariant: [\"tabular-nums\"] },\n field: { gap: 6, alignSelf: \"stretch\" },\n fieldLabel: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n caption: { fontSize: 12, lineHeight: 16 },\n dayWheel: { minWidth: 56 },\n monthWheel: { minWidth: 128 },\n yearWheel: { minWidth: 76 },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { type NativeScrollEvent, type NativeSyntheticEvent, Pressable, ScrollView, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\n/** A value of a wheel: what is stored, and its words (passed translated or formatted for the locale). */\nexport type WheelOption = { value: string; label: string; disabled?: boolean };\n\nconst ITEM = 44;\nconst FrameContext = React.createContext({ visible: 5, unset: false });\n\nexport type WheelPickerProps = {\n /** The group's accessible name (\"Departure time\"), passed translated. */\n label: string;\n /** The wheels (`Wheel`), and dividers (`WheelDivider`) between them. */\n children: React.ReactNode;\n /** How many values are visible: 3, 5 (default) or 7. */\n visible?: 3 | 5 | 7;\n /** Marks the group invalid (a danger edge). */\n invalid?: boolean;\n /** Nothing is chosen yet: the values under the band stay quiet (secondary) until a wheel is turned. */\n unset?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The frame of one or several wheels: a raised surface, the lit band across them — the web `WheelPicker`. */\nexport function WheelPicker({ label, children, visible = 5, invalid, unset = false, style }: WheelPickerProps) {\n const { theme, radius } = useTheme();\n return (\n <FrameContext.Provider value={React.useMemo(() => ({ visible, unset }), [visible, unset])}>\n <View\n role=\"group\"\n aria-label={label}\n style={[styles.root, { height: ITEM * visible, borderRadius: radius.xl, backgroundColor: theme.surface1, borderColor: invalid ? theme.danger : theme.borderDefault }, style]}\n >\n <View pointerEvents=\"none\" style={[styles.band, { top: (ITEM * (visible - 1)) / 2, height: ITEM, borderRadius: radius.lg, backgroundColor: theme.surface3, borderColor: theme.borderSubtle }]} />\n {children}\n </View>\n </FrameContext.Provider>\n );\n}\n\n/** A divider between two wheels (`:` between the hours and the minutes). */\nexport function WheelDivider({ children }: { children: string }) {\n const { theme } = useTheme();\n return (\n <Text aria-hidden style={[styles.divider, { color: theme.textSecondary }]}>\n {children}\n </Text>\n );\n}\n\nexport type WheelProps = {\n /** The column's accessible name (\"Hour\", \"Month\"), passed translated. */\n label: string;\n /** The values, in order. */\n options: readonly WheelOption[];\n /** The chosen value (controlled). */\n value?: string | null;\n /** The chosen value at first, uncontrolled. Default: the first one. */\n defaultValue?: string;\n /** Called with the value that comes to rest under the band. */\n onValueChange?: (value: string) => void;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last, on the column (a width). */\n style?: StyleProp<ViewStyle>;\n};\n\nconst nearestEnabled = (options: readonly WheelOption[], index: number) => {\n for (let d = 0; d < options.length; d++) {\n if (options[index + d] && !options[index + d]!.disabled) return index + d;\n if (options[index - d] && !options[index - d]!.disabled) return index - d;\n }\n return index;\n};\n\n/**\n * One column of a `WheelPicker`: values that snap under the band, a tick of the hand (`selection` haptic) at each one\n * passed. For VoiceOver and TalkBack it is an adjustable control: swipe up or down to change it, its value read as words.\n */\nexport function Wheel({ label, options, value: valueProp, defaultValue, onValueChange, disabled, style }: WheelProps) {\n const { theme, haptic } = useTheme();\n const { visible, unset } = React.useContext(FrameContext);\n const [own, setOwn] = React.useState(defaultValue ?? options[0]?.value ?? \"\");\n const value = valueProp ?? own;\n const index = Math.max(0, options.findIndex((o) => o.value === value));\n const scroller = React.useRef<ScrollView>(null);\n const passing = React.useRef(index);\n const [shown, setShown] = React.useState(index);\n // The band follows the value set from outside (an accessibility action, a reset): adjusted while rendering.\n const [seen, setSeen] = React.useState(index);\n if (seen !== index) {\n setSeen(index);\n setShown(index);\n }\n\n const commit = (i: number) => {\n const target = nearestEnabled(options, Math.min(options.length - 1, Math.max(0, i)));\n const option = options[target];\n if (!option) return;\n if (target !== i) scroller.current?.scrollTo({ y: target * ITEM, animated: true });\n if (valueProp === undefined) setOwn(option.value);\n if (option.value !== value) onValueChange?.(option.value);\n };\n\n // The list follows the value set from outside (an accessibility action, a reset).\n React.useEffect(() => {\n passing.current = index;\n scroller.current?.scrollTo({ y: index * ITEM, animated: false });\n }, [index]);\n\n const onScroll = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const i = Math.round(e.nativeEvent.contentOffset.y / ITEM);\n if (i !== passing.current && i >= 0 && i < options.length) {\n passing.current = i;\n setShown(i);\n haptic(\"selection\");\n }\n };\n const settle = (e: NativeSyntheticEvent<NativeScrollEvent>) => commit(Math.round(e.nativeEvent.contentOffset.y / ITEM));\n const step = (by: number) => {\n let i = index + by;\n while (options[i]?.disabled) i += by;\n if (options[i]) commit(i);\n };\n const pad = ((visible - 1) / 2) * ITEM;\n return (\n <View\n accessible\n role=\"spinbutton\"\n aria-label={label}\n aria-valuetext={options[index]?.label}\n aria-valuenow={index}\n aria-valuemin={0}\n aria-valuemax={Math.max(0, options.length - 1)}\n aria-disabled={disabled || undefined}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }]}\n onAccessibilityAction={(e) => step(e.nativeEvent.actionName === \"increment\" ? 1 : -1)}\n style={[styles.column, disabled ? styles.disabled : null, style]}\n >\n <ScrollView\n ref={scroller}\n aria-hidden\n importantForAccessibility=\"no-hide-descendants\"\n scrollEnabled={!disabled}\n showsVerticalScrollIndicator={false}\n snapToInterval={ITEM}\n decelerationRate=\"fast\"\n contentOffset={{ x: 0, y: index * ITEM }}\n contentContainerStyle={{ paddingVertical: pad }}\n scrollEventThrottle={16}\n onScroll={onScroll}\n onMomentumScrollEnd={settle}\n onScrollEndDrag={(e) => {\n // Without momentum (a slow release), the drag's end is the rest.\n if (Math.abs(e.nativeEvent.velocity?.y ?? 0) < 0.05) settle(e);\n }}\n >\n {options.map((o, i) => {\n const distance = Math.abs(i - shown);\n return (\n <Pressable key={o.value} focusable={false} tabIndex={-1} disabled={disabled || o.disabled} onPress={() => commit(i)} style={[styles.item, { height: ITEM }]}>\n <Text\n numberOfLines={1}\n style={[\n styles.itemText,\n {\n color: o.disabled ? theme.textMuted : i === shown && !unset ? theme.textPrimary : theme.textSecondary,\n fontWeight: i === shown && !unset ? \"600\" : \"400\",\n opacity: distance === 0 ? 1 : distance === 1 ? 0.7 : 0.4,\n transform: [{ scale: distance === 0 ? 1 : 0.92 }],\n textDecorationLine: o.disabled ? \"line-through\" : \"none\",\n },\n ]}\n >\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flexDirection: \"row\", alignItems: \"stretch\", borderWidth: StyleSheet.hairlineWidth, paddingHorizontal: 6, gap: 4, overflow: \"hidden\", alignSelf: \"flex-start\" },\n band: { position: \"absolute\", left: 6, right: 6, borderWidth: StyleSheet.hairlineWidth },\n column: { minWidth: 56, flexGrow: 1 },\n item: { alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8 },\n itemText: { fontSize: 18, fontVariant: [\"tabular-nums\"] },\n divider: { alignSelf: \"center\", fontSize: 18, fontWeight: \"600\" },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type DescriptionItem = {\n /** The term (“Status”, “Credits”) — passed translated. */\n term: string;\n /** The value: text, a `Badge`. */\n details: React.ReactNode;\n /** A line under the value (a date, a unit). */\n hint?: string;\n /** A stable key, when the terms are not unique. */\n id?: string;\n};\n\nexport type DescriptionListProps = {\n /** The pairs, in reading order. */\n items: readonly DescriptionItem[];\n /** stacked (default) · inline (term left, value right: a receipt) · grid (cards, two per row). */\n layout?: \"stacked\" | \"inline\" | \"grid\";\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Term and value pairs — the web `DescriptionList`: a job's details, a payout's breakdown; each pair read as one. */\nexport function DescriptionList({ items, layout = \"stacked\", style }: DescriptionListProps) {\n const { theme, radius } = useTheme();\n return (\n <View role=\"list\" style={[layout === \"grid\" ? styles.grid : layout === \"inline\" ? null : styles.stacked, style]}>\n {items.map((item, i) => {\n const value =\n typeof item.details === \"string\" || typeof item.details === \"number\" ? (\n <Txt variant={layout === \"grid\" ? \"title\" : \"body\"} style={layout === \"inline\" ? styles.right : null}>\n {item.details}\n </Txt>\n ) : (\n item.details\n );\n return (\n <View\n key={item.id ?? item.term}\n role=\"listitem\"\n accessible\n style={[\n layout === \"inline\" ? [styles.inline, i > 0 ? { borderTopWidth: StyleSheet.hairlineWidth, borderTopColor: theme.borderSubtle } : null] : null,\n layout === \"grid\" ? [styles.card, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius.lg }] : null,\n ]}\n >\n <Txt variant=\"caption\" tone=\"secondary\" style={layout === \"grid\" ? styles.upper : null}>\n {item.term}\n </Txt>\n <View style={layout === \"inline\" ? styles.valueInline : styles.value}>\n {value}\n {item.hint ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={layout === \"inline\" ? styles.right : null}>\n {item.hint}\n </Txt>\n ) : null}\n </View>\n </View>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n stacked: { gap: 14 },\n inline: { flexDirection: \"row\", alignItems: \"baseline\", justifyContent: \"space-between\", gap: 16, paddingVertical: 10 },\n grid: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10 },\n card: { flexBasis: \"47%\", flexGrow: 1, padding: 12, gap: 4, borderWidth: StyleSheet.hairlineWidth },\n upper: { textTransform: \"uppercase\", letterSpacing: 0.6, fontWeight: \"700\" },\n value: { gap: 2, marginTop: 2 },\n valueInline: { flexShrink: 1, alignItems: \"flex-end\", gap: 2 },\n right: { textAlign: \"right\" },\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 * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type FabProps = {\n /** The action in words (“New challenge”) — passed translated: the accessible name, and shown when `extended`. */\n label: string;\n /** The icon (decorative). */\n icon: React.ReactNode;\n /** What it does. */\n onPress: () => void;\n /** Shows the words beside the icon (collapse it while the list scrolls down). */\n extended?: boolean;\n /** Which corner. Default `end` (bottom right in left-to-right). */\n placement?: \"end\" | \"center\" | \"start\";\n /** Extra distance from the bottom, above a tab bar (its height). Default 0. */\n offset?: number;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * The screen's main action, floating above the content in the accent — one per screen (create, compose, record). It\n * keeps clear of the safe area and the tab bar (`offset`), shows its words when `extended`, a light tap confirms.\n */\nexport function Fab({ label, icon, onPress, extended, placement = \"end\", offset = 0, style }: FabProps) {\n const { theme, insets, haptic } = useTheme();\n const position: ViewStyle =\n placement === \"center\" ? { alignSelf: \"center\" } : placement === \"start\" ? { left: 16 + insets.left } : { right: 16 + insets.right };\n return (\n <View pointerEvents=\"box-none\" style={[styles.layer, placement === \"center\" ? styles.centre : null]}>\n <Pressable\n role=\"button\"\n aria-label={label}\n onPress={() => {\n haptic(\"impact\");\n onPress();\n }}\n style={({ pressed }) => [\n styles.fab,\n extended ? styles.extended : null,\n position,\n { bottom: 16 + insets.bottom + offset, backgroundColor: pressed ? theme.accentHover : theme.accent, borderTopColor: theme.edgeOnFill, shadowColor: theme.scrimStrong },\n style,\n ]}\n >\n <View aria-hidden>{icon}</View>\n {extended ? (\n <Txt variant=\"label\" tone=\"onAccent\" aria-hidden numberOfLines={1} style={styles.label}>\n {label}\n </Txt>\n ) : null}\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n layer: { position: \"absolute\", top: 0, right: 0, bottom: 0, left: 0 },\n centre: { alignItems: \"center\" },\n fab: { borderTopWidth: 1, borderColor: \"transparent\", position: \"absolute\", minWidth: 56, height: 56, borderRadius: 28, alignItems: \"center\", justifyContent: \"center\", flexDirection: \"row\", gap: 8, shadowOpacity: 0.3, shadowRadius: 12, shadowOffset: { width: 0, height: 6 }, elevation: 6 },\n extended: { paddingHorizontal: 20 },\n label: { flexShrink: 0 },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, Text, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type TextFieldProps = Omit<TextInputProps, \"value\" | \"defaultValue\" | \"onChangeText\" | \"style\" | \"editable\"> & {\n /** The visible label above the input, passed translated (also its accessible name). */\n label: string;\n /** A help text under the input (\"At least 8 characters\"), read with it. */\n hint?: string;\n /** An error under the input: a danger border and caption, read with it and announced. Replaces the hint. */\n error?: string;\n /** The text (controlled). */\n value?: string;\n /** The text at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the text. */\n onValueChange?: (text: string) => void;\n /** Not available: dimmed, not focusable. */\n disabled?: boolean;\n /** Something at the end of the input: a spinner while a value is checked, a check once it is, a show-password button. */\n end?: React.ReactNode;\n /** The input itself, to focus it (`ref.current?.focus()`) or move to the next field. */\n inputRef?: React.Ref<TextInput>;\n /** Styles merged last, on the field (label, input, caption). */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A text field for React Native: its label, the input (every `TextInput` prop: `secureTextEntry`, `keyboardType`,\n * `autoComplete`, `returnKeyType`…), a hint or an error under it — the web `Field` + `Input`. `multiline` makes it a\n * text area.\n */\nexport function TextField({ label, hint, error, value, defaultValue, onValueChange, disabled, end, inputRef, style, multiline, onFocus, onBlur, ...props }: TextFieldProps) {\n const { theme, radius } = useTheme();\n const [focused, setFocused] = React.useState(false);\n const caption = error ?? hint;\n const border = error ? theme.danger : focused ? theme.accent : theme.borderDefault;\n return (\n <View style={[styles.root, disabled ? styles.disabled : null, style]}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <View style={[styles.frame, multiline ? styles.multiline : null, { borderRadius: radius.md, borderColor: border, backgroundColor: theme.surface2 }]}>\n <TextInput\n ref={inputRef}\n aria-label={label}\n aria-disabled={disabled || undefined}\n accessibilityHint={caption}\n value={value}\n defaultValue={defaultValue}\n editable={!disabled}\n multiline={multiline}\n textAlignVertical={multiline ? \"top\" : \"center\"}\n placeholderTextColor={theme.textMuted}\n onChangeText={onValueChange}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n style={[styles.input, multiline ? styles.inputMultiline : null, { color: theme.textPrimary }]}\n {...props}\n />\n {end ? <View style={styles.end}>{end}</View> : null}\n </View>\n {caption ? (\n <Text role={error ? \"alert\" : undefined} aria-live={error ? \"polite\" : undefined} style={[styles.caption, { color: error ? theme.dangerText : theme.textSecondary }]}>\n {caption}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n label: { fontSize: 12, lineHeight: 16, fontWeight: \"600\" },\n frame: { flexDirection: \"row\", alignItems: \"center\", minHeight: 44, paddingHorizontal: 12, borderWidth: 1 },\n multiline: { alignItems: \"flex-start\", minHeight: 96, paddingVertical: 10 },\n input: { flex: 1, minHeight: 42, fontSize: 15, paddingVertical: 0 },\n inputMultiline: { minHeight: 76 },\n end: { marginLeft: 8 },\n caption: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.5 },\n});\n","import * as React from \"react\";\nimport { Animated, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useEntrance } from \"./story-motion\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type GoalGaugeProps = Omit<ViewProps, \"children\"> & {\n /** What the gauge counts (“Backers”) — passed translated; the meter's accessible name. */\n label: string;\n /** The number of steps of the goal (2–24). */\n segments: number;\n /** The steps reached (lit), from 0 to `segments` (default `segments`). */\n value?: number;\n /** The value in words (“6 of 10”); default `value / segments`. */\n valueText?: string;\n /** `fill` (default) lights the reached steps one by one on mount; `drain` empties the spent ones. */\n mode?: \"fill\" | \"drain\";\n /** Shows the label and the value above the segments (default true). */\n showLabel?: boolean;\n /** `default`: rounded segments. `arcade`: a skewed frame, the label centred. */\n variant?: \"default\" | \"arcade\";\n /** The steps light (or drain) once on mount; still when the system reduces motion. */\n animated?: boolean;\n};\n\nfunction Cell({ lit, animate, order, animated, arcade }: { lit: boolean; animate: boolean; order: number; animated: boolean; arcade: boolean }) {\n const { theme } = useTheme();\n const t = useEntrance(animated && animate, 300 + order * 100, 350);\n const spentOpacity = arcade ? 0.14 : 1;\n const opacity = !animate ? 1 : lit ? t.interpolate({ inputRange: [0, 1], outputRange: [0.25, 1] }) : t.interpolate({ inputRange: [0, 1], outputRange: [1, arcade ? 0.14 : 1] });\n const color = lit || arcade ? theme.accent : theme.surface3;\n return (\n <Animated.View\n style={[styles.cell, arcade ? styles.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]}\n />\n );\n}\n\n/** A goal in steps for React Native: `role=\"meter\"`, the reached steps lit, the value in words beside the label. */\nexport function GoalGauge({ label, segments, value, valueText, mode = \"fill\", showLabel = true, variant = \"default\", animated = true, style, ...props }: GoalGaugeProps) {\n const { theme } = useTheme();\n const total = Math.max(1, Math.round(segments));\n const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));\n const words = valueText ?? `${lit} / ${total}`;\n const arcade = variant === \"arcade\";\n return (\n <View\n accessible\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={lit}\n aria-valuetext={words}\n {...props}\n style={[styles.root, style]}\n >\n {showLabel ? (\n <View aria-hidden style={[styles.head, arcade ? styles.headArcade : null]}>\n <Txt variant={arcade ? \"mono\" : \"caption\"} tone=\"secondary\">\n {arcade ? label.toUpperCase() : label}\n </Txt>\n {arcade ? null : <Txt variant=\"caption\">{words}</Txt>}\n </View>\n ) : null}\n <View aria-hidden style={[styles.cells, arcade ? [styles.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null]}>\n {Array.from({ length: total }, (_, i) => {\n const on = i < lit;\n const animate = mode === \"fill\" ? on : !on;\n return <Cell key={i} lit={on} animate={animate} order={mode === \"fill\" ? i : i - lit} animated={animated} arcade={arcade} />;\n })}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignSelf: \"stretch\", gap: 8 },\n head: { flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 },\n headArcade: { justifyContent: \"center\" },\n cells: { flexDirection: \"row\", gap: 4 },\n cellsArcade: { padding: 3, borderWidth: 1, borderRadius: 4, transform: [{ skewX: \"-14deg\" }] },\n cell: { flex: 1, height: 8, borderRadius: 4 },\n cellArcade: { height: 10, borderRadius: 1 },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing } from \"react-native\";\n\n/** 0 → 1 on the native driver after `delay`, once; already 1 when `animated` is false or the system reduces motion. */\nexport function useEntrance(animated: boolean, delay = 0, duration = 700) {\n const [value] = React.useState(() => new Animated.Value(animated ? 0 : 1));\n React.useEffect(() => {\n if (!animated) return;\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n if (reduce) value.setValue(1);\n else Animated.timing(value, { toValue: 1, duration, delay, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n });\n return () => {\n cancelled = true;\n };\n }, [animated, delay, duration, value]);\n return value;\n}\n","import * as React from \"react\";\nimport { Animated, type NativeScrollEvent, type NativeSyntheticEvent, Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type HeaderProps = {\n /** The screen's title — a heading, shown large under the bar until the content scrolls under it. */\n title: string;\n /** A line under the large title (a count, a date). */\n subtitle?: string;\n /** The scroll position of the screen's list (`useCollapsingHeader().scrollY`): the large title folds into the bar. Absent: always large. */\n scrollY?: Animated.Value;\n /** `large` (default: the top of a section) or `inline` (a detail screen: the title in the bar only). */\n size?: \"large\" | \"inline\";\n /** The back button's words (“Back”) — passed translated; with `onBack` it shows. */\n backLabel?: string;\n /** Called by the back button. */\n onBack?: () => void;\n /** Buttons at the right of the bar (`IconButton`s). */\n actions?: React.ReactNode;\n /** Under the title: a `SearchField`, `Tabs`. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst BAR = 44;\nconst LARGE = 52;\n\n/**\n * A screen's header: the bar (back, title, actions) under the status bar's safe area, and a large title that folds into\n * the bar as the content scrolls — the iOS idiom, readable on Android. Feed it the list's scroll with\n * `useCollapsingHeader()`. The title is the screen's heading for screen readers either way.\n */\nexport function Header({ title, subtitle, scrollY, size = \"large\", backLabel, onBack, actions, children, style }: HeaderProps) {\n const { theme, insets } = useTheme();\n const reduce = useReducedMotion();\n const large = size === \"large\";\n const fixed = React.useMemo(() => new Animated.Value(large ? 0 : 1), [large]);\n const progress = scrollY && large ? scrollY.interpolate({ inputRange: [0, LARGE], outputRange: [0, 1], extrapolate: \"clamp\" }) : fixed;\n const smallOpacity = progress.interpolate({ inputRange: [0.6, 1], outputRange: [0, 1], extrapolate: \"clamp\" });\n const largeOpacity = progress.interpolate({ inputRange: [0, 0.7], outputRange: [1, 0], extrapolate: \"clamp\" });\n const largeShift = reduce ? 0 : progress.interpolate({ inputRange: [0, 1], outputRange: [0, -10] });\n const largeHeight = progress.interpolate({ inputRange: [0, 1], outputRange: [LARGE + (subtitle ? 18 : 0), 0] });\n return (\n <View style={[{ paddingTop: insets.top, backgroundColor: theme.surface0 }, style]}>\n <View style={styles.bar}>\n <View style={styles.side}>\n {onBack && backLabel ? (\n <Pressable role=\"button\" aria-label={backLabel} onPress={onBack} hitSlop={8} style={styles.back}>\n <Svg width={22} height={22} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d=\"M15 5l-7 7 7 7\" stroke={theme.accentText} strokeWidth={2.4} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n <Txt variant=\"label\" tone=\"accent\" numberOfLines={1}>\n {backLabel}\n </Txt>\n </Pressable>\n ) : null}\n </View>\n <Animated.View style={[styles.middle, { opacity: smallOpacity }]} aria-hidden={large}>\n <Txt variant=\"label\" numberOfLines={1} role={large ? undefined : \"heading\"}>\n {title}\n </Txt>\n </Animated.View>\n <View style={[styles.side, styles.right]}>{actions}</View>\n </View>\n {large ? (\n <Animated.View style={{ height: largeHeight, overflow: \"hidden\" }}>\n <Animated.View style={[styles.large, { opacity: largeOpacity, transform: [{ translateY: largeShift }] }]}>\n <Txt variant=\"display\" numberOfLines={1} role=\"heading\" style={styles.largeTitle}>\n {title}\n </Txt>\n {subtitle ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {subtitle}\n </Txt>\n ) : null}\n </Animated.View>\n </Animated.View>\n ) : null}\n {children ? <View style={styles.children}>{children}</View> : null}\n <Animated.View aria-hidden style={[styles.rule, { backgroundColor: theme.borderSubtle, opacity: smallOpacity }]} />\n </View>\n );\n}\n\n/** The scroll position a `Header` folds with: `<ScrollView onScroll={onScroll} scrollEventThrottle={16}>` and `<Header scrollY={scrollY}>`. */\nexport function useCollapsingHeader(): { scrollY: Animated.Value; onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void } {\n const [scrollY] = React.useState(() => new Animated.Value(0));\n const onScroll = React.useMemo(() => Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }], { useNativeDriver: false }), [scrollY]);\n return { scrollY, onScroll };\n}\n\nconst styles = StyleSheet.create({\n bar: { height: BAR, flexDirection: \"row\", alignItems: \"center\", paddingHorizontal: 8 },\n side: { flex: 1, flexDirection: \"row\", alignItems: \"center\" },\n right: { justifyContent: \"flex-end\", gap: 4 },\n middle: { flex: 2, alignItems: \"center\" },\n back: { flexDirection: \"row\", alignItems: \"center\", gap: 2, minHeight: 44, paddingRight: 8 },\n large: { paddingHorizontal: 16, paddingBottom: 6 },\n largeTitle: { fontSize: 32, lineHeight: 40 },\n children: { paddingHorizontal: 16, paddingBottom: 8 },\n rule: { height: StyleSheet.hairlineWidth },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Image, Modal, PanResponder, Pressable, StyleSheet, useWindowDimensions,View } from \"react-native\";\n\nimport { modalName } from \"./overlay\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type ViewerImage = {\n /** The image's URI. */\n uri: string;\n /** What it shows — passed translated; its accessible name. */\n alt: string;\n /** A caption under it. */\n caption?: string;\n};\n\nexport type ImageViewerProps = {\n /** The images, in order. */\n images: readonly ViewerImage[];\n /** The image open (its index); `null` closes the viewer. */\n index: number | null;\n /** Called when the person moves to another image or closes the viewer (`null`). */\n onIndexChange: (index: number | null) => void;\n /** The close button's words (“Close”) — passed translated. */\n closeLabel: string;\n /** The position for screen readers and the counter: `(n, total) => \"2 of 5\"`. */\n positionLabel?: (position: number, total: number) => string;\n};\n\nconst MAX_SCALE = 4;\n\n/**\n * Images full screen, on black: pinch to zoom (to 4×), double tap to zoom in and out, drag a zoomed image, swipe left\n * and right between images, swipe down to close. Screen readers get the image's words, its position, and the close\n * button; their swipes move between images (accessibility actions).\n */\nexport function ImageViewer({ images, index, onIndexChange, closeLabel, positionLabel = (n, total) => `${n} / ${total}` }: ImageViewerProps) {\n const { theme, insets, haptic } = useTheme();\n const reduce = useReducedMotion();\n const { width, height } = useWindowDimensions();\n const open = index !== null && images[index] !== undefined;\n const [scale] = React.useState(() => new Animated.Value(1));\n const [pan] = React.useState(() => new Animated.ValueXY({ x: 0, y: 0 }));\n const [dismiss] = React.useState(() => new Animated.Value(0));\n const state = React.useRef({ scale: 1, x: 0, y: 0, pinch: 0, base: 1, lastTap: 0 });\n const reset = React.useCallback(() => {\n state.current = { ...state.current, scale: 1, x: 0, y: 0 };\n scale.setValue(1);\n pan.setValue({ x: 0, y: 0 });\n dismiss.setValue(0);\n }, [scale, pan, dismiss]);\n React.useEffect(() => {\n reset();\n if (open) AccessibilityInfo.announceForAccessibility(`${images[index]!.alt}, ${positionLabel(index + 1, images.length)}`);\n }, [index]); // eslint-disable-line react-hooks/exhaustive-deps -- once per image\n const go = (to: number) => {\n if (to < 0 || to >= images.length) return;\n haptic(\"selection\");\n onIndexChange(to);\n };\n const animateTo = (value: Animated.Value, to: number) => (reduce ? value.setValue(to) : Animated.spring(value, { toValue: to, useNativeDriver: true, damping: 20 }).start());\n const distance = (touches: readonly { pageX: number; pageY: number }[]) => Math.hypot(touches[0]!.pageX - touches[1]!.pageX, touches[0]!.pageY - touches[1]!.pageY);\n // PanResponder's handlers run on gestures, never during render: the compiler's ref and purity checks misread them.\n /* eslint-disable react-hooks/refs, react-hooks/purity */\n const responder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 4 || Math.abs(g.dy) > 4,\n onPanResponderGrant: (e) => {\n const now = Date.now();\n const s = state.current;\n if (e.nativeEvent.touches.length === 1 && now - s.lastTap < 280) {\n const next = s.scale > 1 ? 1 : 2.5;\n s.scale = next;\n s.x = 0;\n s.y = 0;\n animateTo(scale, next);\n pan.setValue({ x: 0, y: 0 });\n }\n s.lastTap = now;\n s.pinch = 0;\n },\n onPanResponderMove: (e, g) => {\n const s = state.current;\n const touches = e.nativeEvent.touches;\n if (touches.length === 2) {\n const d = distance(touches);\n if (!s.pinch) {\n s.pinch = d;\n s.base = s.scale;\n }\n s.scale = Math.min(MAX_SCALE, Math.max(1, s.base * (d / s.pinch)));\n scale.setValue(s.scale);\n return;\n }\n if (s.scale > 1) pan.setValue({ x: s.x + g.dx, y: s.y + g.dy });\n else if (Math.abs(g.dy) > Math.abs(g.dx)) dismiss.setValue(Math.max(0, g.dy));\n else pan.setValue({ x: g.dx, y: 0 });\n },\n onPanResponderRelease: (_, g) => {\n const s = state.current;\n if (s.pinch) {\n s.pinch = 0;\n if (s.scale <= 1.02) reset();\n return;\n }\n if (s.scale > 1) {\n s.x += g.dx;\n s.y += g.dy;\n return;\n }\n if (g.dy > 120 || g.vy > 1.2) return onIndexChange(null);\n if (g.dx < -width / 4 || g.vx < -0.8) go((index ?? 0) + 1);\n else if (g.dx > width / 4 || g.vx > 0.8) go((index ?? 0) - 1);\n animateTo(dismiss, 0);\n Animated.spring(pan, { toValue: { x: 0, y: 0 }, useNativeDriver: true }).start();\n },\n }),\n [index, width, images.length], // eslint-disable-line react-hooks/exhaustive-deps -- the gesture reads refs\n );\n /* eslint-enable react-hooks/refs, react-hooks/purity */\n if (!open) return null;\n const image = images[index]!;\n const backdrop = dismiss.interpolate({ inputRange: [0, height / 2], outputRange: [1, 0.3], extrapolate: \"clamp\" });\n return (\n <Modal {...modalName(image.alt)} visible transparent animationType={reduce ? \"none\" : \"fade\"} onRequestClose={() => onIndexChange(null)} statusBarTranslucent>\n <Animated.View style={[StyleSheet.absoluteFill, { backgroundColor: theme.media, opacity: backdrop }]} />\n <View\n style={StyleSheet.absoluteFill}\n accessible\n role=\"img\"\n aria-label={`${image.alt}, ${positionLabel(index + 1, images.length)}`}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }, { name: \"escape\" }]}\n onAccessibilityAction={(e) => {\n const name = e.nativeEvent.actionName;\n if (name === \"increment\") go(index + 1);\n if (name === \"decrement\") go(index - 1);\n if (name === \"escape\") onIndexChange(null);\n }}\n {...responder.panHandlers}\n >\n <Animated.View style={{ width, height, transform: [{ translateX: pan.x }, { translateY: Animated.add(pan.y, dismiss) }, { scale }] }}>\n <Image source={{ uri: image.uri }} resizeMode=\"contain\" style={{ width, height }} accessibilityIgnoresInvertColors />\n </Animated.View>\n </View>\n <View pointerEvents=\"box-none\" style={[styles.top, { paddingTop: insets.top + 8 }]}>\n <View aria-hidden style={[styles.counter, { backgroundColor: theme.scrimStrong }]}>\n <Txt variant=\"label\" tone=\"onMedia\">\n {positionLabel(index + 1, images.length)}\n </Txt>\n </View>\n <Pressable role=\"button\" aria-label={closeLabel} hitSlop={12} onPress={() => onIndexChange(null)} style={[styles.close, { backgroundColor: theme.scrimStrong }]}>\n <Txt tone=\"onMedia\" style={styles.cross} aria-hidden>\n ×\n </Txt>\n </Pressable>\n </View>\n {image.caption ? (\n <View pointerEvents=\"none\" style={[styles.caption, { paddingBottom: insets.bottom + 16, backgroundColor: theme.scrimStrong }]}>\n <Txt tone=\"onMedia\">{image.caption}</Txt>\n </View>\n ) : null}\n </Modal>\n );\n}\n\n/** Preloads the neighbours of the image open, so a swipe shows the next one at once. */\nexport function prefetchNeighbours(images: readonly ViewerImage[], index: number | null) {\n if (index === null) return;\n for (const i of [index - 1, index + 1]) if (images[i]) void Image.prefetch(images[i]!.uri).catch(() => undefined);\n}\n\nconst styles = StyleSheet.create({\n top: { position: \"absolute\", top: 0, left: 0, right: 0, flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", paddingHorizontal: 16 },\n counter: { paddingHorizontal: 10, paddingVertical: 4, borderRadius: 999 },\n close: { width: 40, height: 40, borderRadius: 20, alignItems: \"center\", justifyContent: \"center\" },\n cross: { fontSize: 24, lineHeight: 26 },\n caption: { position: \"absolute\", left: 0, right: 0, bottom: 0, paddingTop: 12, paddingHorizontal: 16 },\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 * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport type { BrandId } from \"../marks/ProductLogo\";\nimport { ProductMark } from \"./ProductMark\";\nimport { alpha, useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\n/** The hexagon of the marks, pointy top, radius 9 around (12, 12): the web glyph's geometry. */\nconst HEX = \"M12 3 19.79 7.5 19.79 16.5 12 21 4.21 16.5 4.21 7.5Z\";\nconst PERIMETER = 54;\n\nexport type LoaderGlyphProps = {\n /** loading · success · error. */\n state?: \"loading\" | \"success\" | \"error\";\n /** Between 0 and 1: the trace grows to it. Absent: indeterminate (the trace turns). */\n value?: number | null;\n /** The side, in points. Default 20. */\n size?: number;\n /** The stroke colour. Default: the accent (success and error: their tones). */\n color?: string;\n};\n\n/** The Krizaka loader glyph (decorative): a hexagon traced by a segment of light around a node; done, a check or a cross. */\nexport function LoaderGlyph({ state = \"loading\", value, size = 20, color }: LoaderGlyphProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [spin] = React.useState(() => new Animated.Value(0));\n const known = typeof value === \"number\" && Number.isFinite(value);\n React.useEffect(() => {\n if (state !== \"loading\" || known || reduce) return;\n const loop = Animated.loop(Animated.timing(spin, { toValue: 1, duration: 1400, easing: Easing.linear, useNativeDriver: true }));\n loop.start();\n return () => loop.stop();\n }, [state, known, reduce, spin]);\n const stroke = color ?? (state === \"success\" ? theme.success : state === \"error\" ? theme.danger : theme.accent);\n const fill = state !== \"loading\" ? 1 : known ? Math.min(1, Math.max(0, value)) : 0.3;\n const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: [\"0deg\", \"360deg\"] });\n return (\n <Animated.View aria-hidden style={{ width: size, height: size, transform: state === \"loading\" && !known ? [{ rotate }] : [] }}>\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path d={HEX} stroke={stroke} strokeOpacity={0.22} strokeWidth={2.2} strokeLinejoin=\"round\" />\n <Path d={HEX} stroke={stroke} strokeWidth={2.2} strokeLinejoin=\"round\" strokeLinecap=\"round\" strokeDasharray={`${fill * PERIMETER} ${PERIMETER}`} />\n {state === \"loading\" ? <Circle cx={12} cy={12} r={2.6} fill={stroke} /> : null}\n {state === \"success\" ? <Path d=\"M8.3 12.3l2.6 2.6 4.9-5.3\" stroke={stroke} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" /> : null}\n {state === \"error\" ? <Path d=\"M9.4 9.4l5.2 5.2M14.6 9.4l-5.2 5.2\" stroke={stroke} strokeWidth={2.2} strokeLinecap=\"round\" /> : null}\n </Svg>\n </Animated.View>\n );\n}\n\n/** `active` once it has lasted `delay` ms, then held at least `minDuration` ms: a wait never flashes nor blinks. */\nexport function useDelayedWait(active: boolean, delay = 250, minDuration = 600): boolean {\n const [shown, setShown] = React.useState(false);\n const since = React.useRef(0);\n React.useEffect(() => {\n if (active && !shown) {\n const timer = setTimeout(() => {\n since.current = Date.now();\n setShown(true);\n }, delay);\n return () => clearTimeout(timer);\n }\n if (!active && shown) {\n const timer = setTimeout(() => setShown(false), Math.max(0, minDuration - (Date.now() - since.current)));\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [active, shown, delay, minDuration]);\n return shown;\n}\n\nexport type LoaderProps = {\n /** What is loading, in words (“Loading your jobs”) — passed translated; shown and announced. */\n label: string;\n /** loading (default) · success · error: the ending shows for `endDuration` ms, then the loader goes. */\n status?: \"loading\" | \"success\" | \"error\";\n /** The words of a success — passed translated. Default: the label. */\n successLabel?: string;\n /** The words of a failure — passed translated. */\n errorLabel?: string;\n /** Between 0 and 1: a determinate wait, the percentage shows. */\n value?: number | null;\n /** The time left, in words (“About 20 s left”). */\n eta?: string;\n /** Milliseconds before anything shows. Default 250. */\n delay?: number;\n /** Once shown, the least milliseconds it stays. Default 600. */\n minDuration?: number;\n /** Milliseconds the ending stays. Default 1600; `0` never shows it. */\n endDuration?: number;\n /** inline (default) · block (a region's centre) · overlay (over its parent, frosted) · page (the whole screen). */\n variant?: \"inline\" | \"block\" | \"overlay\" | \"page\";\n /**\n * The product whose animated mark waits in place of the Krizaka glyph (`orochia`, `orazaka`, `yazakia`, `yororis`,\n * `krizaka`). Still when the system reduces motion; the ending stays the check or the cross.\n */\n product?: BrandId;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst GLYPH = { inline: 20, block: 36, overlay: 36, page: 56 } as const;\n\n/** A wait from start to end — the web `Loader`: delayed, never blinking, announced when it shows and when it ends. */\nexport function Loader({ label, status = \"loading\", successLabel, errorLabel, value, eta, delay = 250, minDuration = 600, endDuration = 1600, variant = \"inline\", product, style }: LoaderProps) {\n const { theme, radius } = useTheme();\n const waiting = useDelayedWait(status === \"loading\", delay, minDuration);\n const [ending, setEnding] = React.useState<\"success\" | \"error\" | null>(null);\n const seen = React.useRef(false);\n React.useEffect(() => {\n if (waiting) {\n seen.current = true;\n return;\n }\n if (!seen.current || status === \"loading\") return;\n seen.current = false;\n if (endDuration <= 0) return;\n const show = setTimeout(() => setEnding(status), 0);\n const hide = Number.isFinite(endDuration) ? setTimeout(() => setEnding(null), endDuration) : undefined;\n return () => {\n clearTimeout(show);\n clearTimeout(hide);\n };\n }, [waiting, status, endDuration]);\n const phase = waiting ? \"loading\" : ending;\n const words = phase === \"success\" ? (successLabel ?? label) : phase === \"error\" ? (errorLabel ?? label) : label;\n React.useEffect(() => {\n if (phase) AccessibilityInfo.announceForAccessibility(words);\n }, [phase, words]);\n if (!phase) return null;\n const known = phase === \"loading\" && typeof value === \"number\" && Number.isFinite(value);\n const detail = phase === \"loading\" ? [known ? `${Math.round(Math.min(1, Math.max(0, value)) * 100)} %` : null, eta].filter(Boolean).join(\" · \") : \"\";\n const stacked = variant !== \"inline\";\n const box = (\n <View style={[stacked ? styles.stacked : styles.inline, variant === \"overlay\" ? { backgroundColor: alpha(theme.surface1, 0.92), borderColor: theme.borderDefault, borderRadius: radius.lg, ...styles.card } : null]}>\n {product && phase === \"loading\" ? <ProductMark id={product} size={GLYPH[variant]} animated /> : <LoaderGlyph state={phase} value={known ? value : null} size={GLYPH[variant]} />}\n <View style={stacked ? styles.center : styles.text}>\n <Txt variant={variant === \"page\" ? \"title\" : \"label\"} style={stacked ? styles.centered : null}>\n {words}\n </Txt>\n {detail ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={stacked ? styles.centered : null}>\n {detail}\n </Txt>\n ) : null}\n </View>\n </View>\n );\n const a11y = { accessible: true, role: \"progressbar\" as const, \"aria-label\": words, \"aria-busy\": phase === \"loading\", accessibilityLiveRegion: \"polite\" as const };\n if (variant === \"overlay\" || variant === \"page\")\n return (\n <View {...a11y} style={[StyleSheet.absoluteFill, styles.cover, variant === \"page\" ? { backgroundColor: alpha(theme.surface0, 0.86) } : null, style]}>\n {box}\n </View>\n );\n return (\n <View {...a11y} style={[variant === \"block\" ? styles.block : null, style]}>\n {box}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n inline: { flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n stacked: { alignItems: \"center\", gap: 10 },\n card: { paddingHorizontal: 24, paddingVertical: 20, borderWidth: StyleSheet.hairlineWidth },\n text: { flexShrink: 1, gap: 2 },\n center: { alignItems: \"center\", gap: 2 },\n centered: { textAlign: \"center\" },\n block: { paddingVertical: 40, alignItems: \"center\" },\n cover: { alignItems: \"center\", justifyContent: \"center\", zIndex: 10 },\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\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { YAZAKIA as G } from \"../marks/yazakia-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Yazakia mark for React Native — the geometry of the web mark (marks/yazakia-geometry.ts): two voices, two\n * speech bubbles that overlap; the orbit and the pair turn slowly around them, the lens where they overlap breathes;\n * still when the system reduces motion.\n */\nexport function YazakiaMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);\n const id = useSvgId(\"yzm\");\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 {gradient}\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.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n {G.voices.map((v, i) => (\n <React.Fragment key={v.body}>\n <Path d={v.body} fill={fill} />\n <Path d={v.tail} fill={fill} />\n {i === 0 ? <Path d={`${v.body} ${v.tail}`} fill={G.shade.color} opacity={G.shade.opacity} /> : null}\n </React.Fragment>\n ))}\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\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 {G.pair.at.map(([cx, cy]) => (\n <Circle key={cx} cx={cx} cy={cy} r={G.pair.r} fill={fill} />\n ))}\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n {gradient}\n <LinearGradient id={`${id}l`} gradientUnits=\"userSpaceOnUse\" x1={0} y1={G.lens.y1} x2={0} y2={G.lens.y2}>\n <Stop offset=\"0%\" stopColor={G.highlight.color} stopOpacity={G.highlight.from} />\n <Stop offset=\"100%\" stopColor={G.highlight.color} stopOpacity={G.highlight.to} />\n </LinearGradient>\n </Defs>\n <Path d={G.lens.d} fill={fill} />\n <Path d={G.lens.d} fill={`url(#${id}l)`} />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","import { marks } from \"@krizaka/tokens/native\";\n\n/**\n * The Yazakia mark's geometry — drawn by the web mark (YazakiaLogo) and the native one (YazakiaMark). The family's\n * grammar (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold emblem in the brand\n * gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem is **two voices**: two solid speech bubbles, mirrored, that overlap. Where they overlap — what the two\n * people share once they have talked — is the bright core, a lens lit from above that breathes. The left voice sits a\n * shade deeper than the right, so the pair reads as two, with depth, at 16 px as at 128 px. A thin gap (the page shows\n * through) separates each bubble from the lens: the paths are cut here, no mask, so web and native draw the same thing.\n * Two nodes, the pair, ride the dashed orbit. The gradient is the brand's mark gradient (`marks.yazakia` of\n * @krizaka/tokens): emerald → turquoise, mid-tones that read ≥ 3:1 on the page surfaces of both themes (tested in\n * @krizaka/tokens), so one mark serves dark and light.\n */\n/** The bright end of the gradient (turquoise): the halo and the core's glow. */\nconst turquoise = marks.yazakia[marks.yazakia.length - 1]![1];\n\n/*\n * How the paths are drawn (literal, so the native bundle carries no geometry code): each bubble is a circle of radius 80\n * centred at y 184, 36 on either side of x = 200 (164 and 236); they overlap in the lens (x = 200, y 112.6 → 255.4).\n * Each bubble is cut by the other's circle grown by the gap (r 87): the cut runs from (191.9, 109) to (191.9, 259) on\n * the left, mirrored on the right. Each tail is a curved point from the bubble's lower outer side, down and out to\n * (88, 294) — mirrored (312, 294).\n */\nexport const YAZAKIA = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"80 80 240 240\",\n center: 200,\n /** The two voices, left then right: each a bubble (cut around the lens) and its tail. */\n voices: [\n { body: \"M191.9 109 A80 80 0 1 0 191.9 259 A87 87 0 0 1 191.9 109 Z\", tail: \"M98 230 Q104 268 88 294 Q122 288 144 262 L130 200 Z\" },\n { body: \"M208.1 109 A80 80 0 1 1 208.1 259 A87 87 0 0 0 208.1 109 Z\", tail: \"M302 230 Q296 268 312 294 Q278 288 256 262 L270 200 Z\" },\n ] as const,\n /** The left voice, a shade deeper: the depth between the two. */\n shade: { color: \"#000\", opacity: 0.22 },\n /** Where the bubbles overlap: the core, lit from above. */\n lens: { d: \"M200 112.6 A80 80 0 0 1 200 255.4 A80 80 0 0 1 200 112.6 Z\", y1: 112.6, y2: 255.4 },\n gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yazakia },\n /** The light on the lens: bright at the top, fading down. */\n highlight: { color: \"#f0fdfa\", from: 0.75, to: 0.2 },\n /** The pair: two nodes on the orbit, opposite each other, that turn with it. */\n pair: { r: 8, at: [[40, 200], [360, 200]] as const },\n glow: { color: turquoise, opacity: 0.16 },\n /** The core's breathing shadow (web), in the mark's turquoise. */\n pulse: { color: turquoise, 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 from \"react\";\nimport { View } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { YORORIS as G } from \"../marks/yororis-geometry\";\nimport { markA11y, type NativeMarkProps, useMarkMotion } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\n/**\n * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), \"the hold\": two filled\n * leaves cupping a warm core. The orbit and its one node, the moment, turn slowly; the core breathes; still when the\n * system reduces motion.\n */\nexport function YororisMark({ size = 48, animated = true, title, neutral }: NativeMarkProps) {\n const { theme } = useTheme();\n const { Animated, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, 36_000);\n const id = useSvgId(\"yrm\");\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 {gradient}\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.ring.r} stroke={stroke} strokeWidth={G.ring.width} opacity={0.35} fill=\"none\" />\n <Path d={G.stem} stroke={fill} strokeWidth={G.stroke} strokeLinecap=\"round\" fill=\"none\" />\n {G.leaves.map((d) => (\n <Path key={d} d={d} fill={fill} />\n ))}\n <Path d={G.veins} stroke={G.vein.color} strokeOpacity={G.vein.opacity} strokeWidth={G.vein.width} strokeLinecap=\"round\" strokeDasharray={G.vein.dash} fill=\"none\" />\n </Svg>\n <Animated.View style={[layer, spinStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>{gradient}</Defs>\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.moment.at[0]} cy={G.moment.at[1]} r={G.moment.r} fill={fill} />\n </Svg>\n </Animated.View>\n <Animated.View style={[layer, pulseStyle]}>\n <Svg viewBox={viewBox} style={layer}>\n <Defs>\n <LinearGradient id={`${id}c`} x1=\"50%\" y1=\"100%\" x2=\"50%\" y2=\"0%\">\n {G.coreGradient.stops.map(([offset, color]) => (\n <Stop key={offset} offset={offset} stopColor={color} />\n ))}\n </LinearGradient>\n </Defs>\n <Circle cx={G.core.cx} cy={G.core.cy} r={G.core.r} fill={`url(#${id}c)`} />\n <Circle cx={G.core.cx} cy={G.core.cy} 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 Yororis mark's geometry — drawn by the web mark (YororisLogo) and the native one (YororisMark). The family's\n * grammar (packages/tokens/BRAND.md, \"Marks\"): 400×400 view box, dashed orbit and ring, a bold filled emblem in the\n * brand gradient, a bright core; below 48 px the view box crops to the emblem.\n *\n * The emblem is \"the hold\": a \"Y\" whose two arms are two filled leaves — open hands — that rise from one stem and cup\n * a warm core. The core is not where the arms join, it rests *inside* them: held, given room, listened to. A vein of\n * light runs along each leaf (depth, like the Orochia serpent's scales). One node, the moment, rides the dashed orbit:\n * it comes round, then it goes (a presence that stops). The leaves wear the brand's mark gradient (`marks.yororis` of\n * @krizaka/tokens): sand → sage, mid-tones that read ≥ 3:1 on the page surfaces of both themes (tested in\n * @krizaka/tokens), so one mark serves dark and light; the core is a warm sand light that rises from the mark's sand.\n */\nconst sand = marks.yororis[0]![1];\n/** The calm end of the gradient (sage): the halo and the core's glow. */\nconst sage = marks.yororis[marks.yororis.length - 1]![1];\n\nexport const YORORIS = {\n viewBox: \"0 0 400 400\",\n croppedViewBox: \"80 80 240 240\",\n center: 200,\n /** The two leaves — open hands, mirrored around x = 200 — filled, rising from the stem. */\n leaves: [\n \"M200 262 C142 256 104 206 110 122 C138 130 154 152 160 180 C168 218 182 238 204 246 Z\",\n \"M200 262 C258 256 296 206 290 122 C262 130 246 152 240 180 C232 218 218 238 196 246 Z\",\n ],\n /** A vein of light along each leaf (dashed, it drifts slowly when animated). */\n veins: \"M122 142 C128 196 156 232 192 248 M278 142 C272 196 244 232 208 248\",\n vein: { color: \"#fbf6ea\", opacity: 0.45, width: 3, dash: \"2 14\" },\n /** The stem, from the junction down. */\n stem: \"M200 244 L200 312\",\n stroke: 30,\n gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },\n /** The core's warm light: from the mark's sand (below) to a light sand (above). */\n coreGradient: { stops: [[\"0%\", sand], [\"100%\", \"#e6c993\"]] as const },\n /** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */\n core: { cx: 200, cy: 184, r: 32, inner: 11 },\n highlight: \"#fbf6ea\",\n /** The moment: one node on the orbit, that turns with it. */\n moment: { r: 9, at: [200, 40] as const },\n glow: { color: sage, opacity: 0.18 },\n /** The core's breathing shadow (web), in the core's warm sand. */\n pulse: { color: sand, 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 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\";\nimport { YazakiaMark } from \"./YazakiaMark\";\nimport { YororisMark } from \"./YororisMark\";\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 if (id === \"yazakia\") return <YazakiaMark {...props} />;\n if (id === \"yororis\") return <YororisMark {...props} />;\n return <OrochiaMark {...props} />;\n}\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport type { MascotBird, MascotMood, MascotTone } from \"../mascots/geometry\";\nimport { Mascot } from \"./mascots\";\nimport { Txt } from \"./txt\";\n\nconst SIZE = { sm: 64, md: 96, lg: 128 } as const;\n\nexport type MascotStateProps = Omit<ViewProps, \"children\"> & {\n /** The bird whose job the moment is about: `owl` (documents), `falcon` (security), `duck` (code), `flamingo` (answers, payments), `pigeon` (delivery), `lovebird` (introductions), `crane` (listening). */\n bird?: MascotBird;\n /** The moment: `empty` (default), `thinking`, `success`, `error`, `welcome`. */\n mood?: MascotMood;\n /** What happened, in a few words. */\n title: string;\n /** Why, or what comes next. */\n description?: string;\n /** What to do next: a Button. */\n action?: React.ReactNode;\n /** The bird's size: `sm` 64, `md` 96 (default), `lg` 128 points. */\n size?: keyof typeof SIZE;\n /** `stacked` (default): the bird above centred words. `inline`: the bird beside the words. */\n layout?: \"stacked\" | \"inline\";\n /** `brand` (default): the theme's accent. `own`: the bird's colours of the Krizaka story. */\n tone?: MascotTone;\n /** The bird's bob and a short fade-in; still when the system reduces motion. */\n animated?: boolean;\n};\n\n/** A fade-in on the native driver, skipped when `animated` is false or the system reduces motion. */\nfunction useArrival(animated: boolean) {\n const [value] = React.useState(() => new Animated.Value(animated ? 0 : 1));\n React.useEffect(() => {\n if (!animated) return;\n let cancelled = false;\n void AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {\n if (cancelled) return;\n if (reduce) value.setValue(1);\n else Animated.timing(value, { toValue: 1, duration: 420, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n });\n return () => {\n cancelled = true;\n };\n }, [animated, value]);\n return value;\n}\n\n/**\n * A moment told by a bird of the flock — an empty list, a long wait, a success, an error, a welcome — for React Native.\n * Announced: `alert` for an error, a polite live region otherwise (`busy` while thinking).\n */\nexport function MascotState({ bird = \"owl\", mood = \"empty\", title, description, action, size = \"md\", layout = \"stacked\", tone, animated = true, style, ...props }: MascotStateProps) {\n const opacity = useArrival(animated);\n const inline = layout === \"inline\";\n return (\n <Animated.View\n role={mood === \"error\" ? \"alert\" : \"status\"}\n accessibilityLiveRegion={mood === \"error\" ? \"assertive\" : \"polite\"}\n aria-busy={mood === \"thinking\" ? true : undefined}\n {...props}\n style={[inline ? styles.inline : styles.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style]}\n >\n <Mascot bird={bird} mood={mood} tone={tone} size={SIZE[size]} animated={animated} />\n <View style={inline ? styles.wordsInline : styles.words}>\n <Txt variant=\"label\" role=\"heading\" style={inline ? null : styles.center}>\n {title}\n </Txt>\n {description ? (\n <Txt tone=\"secondary\" style={inline ? null : styles.center}>\n {description}\n </Txt>\n ) : null}\n {action ? <View style={[styles.action, inline ? null : styles.actionCentred]}>{action}</View> : null}\n </View>\n </Animated.View>\n );\n}\n\ntype PresetProps = Omit<MascotStateProps, \"mood\">;\n\n/** It failed: what went wrong and what to do. */\nexport const ErrorState = (props: PresetProps) => <MascotState mood=\"error\" {...props} />;\n/** It is done: a payment, a verification, a delivery. */\nexport const SuccessState = (props: PresetProps) => <MascotState mood=\"success\" {...props} />;\n/** A long task runs: what runs, beside the bird. */\nexport const LoadingState = (props: PresetProps) => <MascotState mood=\"thinking\" {...props} />;\n/** A first screen, an onboarding step. */\nexport const WelcomeState = (props: PresetProps) => <MascotState mood=\"welcome\" {...props} />;\n\nconst styles = StyleSheet.create({\n stacked: { alignItems: \"center\", justifyContent: \"center\", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },\n inline: { flexDirection: \"row\", alignItems: \"center\", gap: 16 },\n words: { alignItems: \"center\", gap: 6 },\n wordsInline: { flex: 1, gap: 4 },\n center: { textAlign: \"center\", maxWidth: 360 },\n action: { marginTop: 8, flexDirection: \"row\", flexWrap: \"wrap\", gap: 8 },\n actionCentred: { justifyContent: \"center\" },\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), `lovebird` (introductions), `crane` (listening). */\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 seven 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), the lovebird that\n * introduces (2026-10, with Yazakia: \"l'inséparable présente\") and the crane that listens (2026-10, with Yororis:\n * \"la grue écoute\"), redrawn on one 120 × 120 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\", \"lovebird\", \"crane\"] 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 * The lovebird — the inseparable that introduces two people. A plump little parrot: a short tail, a round head\n * with its coloured face (the detail colour), the white eye-rings of the species and a short hooked beak.\n */\n lovebird: {\n shadow: [60, 110, 23, 3.5],\n legs: [\"M53 96 L52 106 M48 106 L56 106\", \"M67 96 L68 106 M64 106 L72 106\"],\n back: [\"M74 90 C82 98 88 104 95 103 C91 98 86 91 82 84 Z\"],\n body: \"M32 66 C32 46 88 46 88 66 C88 90 76 100 60 100 C44 100 32 90 32 66 Z\",\n belly: \"M42 70 C42 59 78 59 78 70 C78 85 70 92 60 92 C50 92 42 85 42 70 Z\",\n wings: [\n { d: \"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\", pivot: [33, 60] },\n { d: mirror(\"M33 60 C20 68 22 88 40 90 C35 80 34 70 33 60 Z\"), pivot: [87, 60] },\n ],\n head: { cx: 60, cy: 38, r: 21 },\n details: [\"M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z\"],\n beak: \"M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z\",\n eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 },\n },\n /**\n * The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still\n * on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,\n * straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.\n */\n crane: {\n shadow: [62, 110, 20, 3],\n legs: [\"M56 87 L55 108 M51 108 L59 108\", \"M67 87 L68 108 M64 108 L73 108\"],\n body: \"M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z\",\n belly: \"M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z\",\n wings: [\n { d: \"M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z\", pivot: [44, 62] },\n { d: \"M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z\", pivot: [82, 62] },\n ],\n neck: { d: \"M52 62 C48 47 52 37 48 26\", width: 6 },\n head: { cx: 47, cy: 21, r: 8.5 },\n details: [\"M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z\"],\n beak: \"M40.5 18.5 L19 22.5 L40.5 25.5 Z\",\n eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 },\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 lovebird: { from: \"#6ee7b7\", to: \"#059669\", wing: \"#047857\", detail: \"#fb7185\", beak: \"#f97316\", eye: \"#1f2937\" },\n // The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.\n crane: { from: \"#ebe3d6\", to: \"#9c8f80\", wing: \"#7d7266\", detail: \"#dc2626\", beak: \"#44403c\", 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 * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, Modal, Pressable, StyleSheet, View } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { Avatar } from \"./avatar\";\nimport { Button } from \"./button\";\nimport { modalName } from \"./overlay\";\nimport { useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type MatchDialogProps = {\n /** Shown (controlled). */\n open: boolean;\n /** Called when it closes. */\n onOpenChange: (open: boolean) => void;\n /** The headline (“It's a match!”) — passed translated, announced. */\n title: string;\n /** A line under it (“You and Elena liked each other”). */\n description?: string;\n /** The two people: their avatar URIs and names. */\n people: readonly [{ src?: string | null; name: string }, { src?: string | null; name: string }];\n /** The main action (“Send a message”). */\n primaryLabel: string;\n /** What it does. */\n onPrimary: () => void;\n /** The way back (“Keep swiping”). */\n secondaryLabel: string;\n};\n\n/**\n * The moment two people choose each other — a match, a pair, a deal: full screen in the brand gradient, the two avatars\n * meeting at a heart, a success tick, the next step. Under reduced motion they are simply there.\n */\nexport function MatchDialog({ open, onOpenChange, title, description, people, primaryLabel, onPrimary, secondaryLabel }: MatchDialogProps) {\n const { theme, haptic } = useTheme();\n const reduce = useReducedMotion();\n const [t] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (!open) return;\n haptic(\"success\");\n AccessibilityInfo.announceForAccessibility([title, description].filter(Boolean).join(\". \"));\n if (reduce) return;\n t.setValue(0);\n Animated.timing(t, { toValue: 1, duration: 520, easing: Easing.out(Easing.back(1.6)), useNativeDriver: true }).start();\n }, [open]); // eslint-disable-line react-hooks/exhaustive-deps -- once per opening\n // Reduced motion (known a frame later): the cards stand where they land, whatever ran before.\n React.useEffect(() => {\n if (open && reduce) {\n t.stopAnimation();\n t.setValue(1);\n }\n }, [open, reduce, t]);\n const side = (dir: 1 | -1) => ({ transform: [{ translateX: t.interpolate({ inputRange: [0, 1], outputRange: [dir * 110, dir * 50] }) }, { rotate: dir === -1 ? \"-8deg\" : \"8deg\" }] });\n return (\n <Modal {...modalName(title)} visible={open} transparent animationType={reduce ? \"none\" : \"fade\"} onRequestClose={() => onOpenChange(false)} statusBarTranslucent>\n <View accessibilityViewIsModal style={[styles.screen, { backgroundColor: theme.accent }]}>\n <View style={[StyleSheet.absoluteFill, { backgroundColor: theme.accent2, opacity: 0.55 }]} />\n <Txt variant=\"display\" tone=\"onAccent\" style={styles.title}>\n {title}\n </Txt>\n {description ? (\n <Txt tone=\"onAccent\" style={styles.center}>\n {description}\n </Txt>\n ) : null}\n <View style={styles.pair} aria-hidden>\n <Animated.View style={[styles.photo, side(-1), { borderColor: theme.onAccent }]}>\n <Avatar src={people[0].src} alt=\"\" fallback={people[0].name.charAt(0)} size={112} />\n </Animated.View>\n <Animated.View style={[styles.photo, side(1), { borderColor: theme.onAccent }]}>\n <Avatar src={people[1].src} alt=\"\" fallback={people[1].name.charAt(0)} size={112} />\n </Animated.View>\n <Animated.View style={[styles.heart, { backgroundColor: theme.onAccent, transform: [{ scale: t }] }]}>\n <Svg width={26} height={26} viewBox=\"0 0 24 24\">\n <Path d=\"M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z\" fill={theme.accent} />\n </Svg>\n </Animated.View>\n </View>\n <View style={styles.actions}>\n <Button\n label={primaryLabel}\n size=\"lg\"\n onPress={() => {\n onOpenChange(false);\n onPrimary();\n }}\n />\n <Pressable role=\"button\" onPress={() => onOpenChange(false)} style={({ pressed }) => [styles.secondary, { borderColor: theme.onAccent, opacity: pressed ? 0.8 : 1 }]}>\n <Txt variant=\"label\" tone=\"onAccent\">\n {secondaryLabel}\n </Txt>\n </Pressable>\n </View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n screen: { flex: 1, alignItems: \"center\", justifyContent: \"center\", gap: 12, padding: 32 },\n title: { textAlign: \"center\", fontSize: 40, lineHeight: 46 },\n center: { textAlign: \"center\", maxWidth: 300 },\n pair: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"center\", height: 170, marginVertical: 24, width: 300 },\n photo: { position: \"absolute\", borderWidth: 4, borderRadius: 64 },\n heart: { position: \"absolute\", bottom: 4, width: 48, height: 48, borderRadius: 24, alignItems: \"center\", justifyContent: \"center\" },\n actions: { alignSelf: \"stretch\", gap: 10, maxWidth: 360, width: \"100%\" },\n secondary: { minHeight: 48, borderRadius: 999, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle } from \"react-native-svg\";\n\nimport { type Theme, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type MeterPart = {\n /** Its name (“To the creator”) — passed translated. */\n label: string;\n /** Its value, in the meter's unit. */\n value: number;\n /** Its value in words (“€9.00”); default: its percentage. */\n valueText?: string;\n};\n\nexport type MeterProps = {\n /** The accessible name (“Storage”, “Credits”) — passed translated; shown with `showLabel`. */\n label: string;\n /** The value, between `min` and `max` (ignored with `parts`). */\n value?: number;\n /** The start of the range. Default 0. */\n min?: number;\n /** The end of the range. Default 100. */\n max?: number;\n /** The value in words (“42 GB of 50 GB”); default: the percentage. */\n valueText?: string;\n /** The shares where the tone changes: below `low` good, up to `high` warning, past it the other end. */\n thresholds?: { readonly low: number; readonly high: number };\n /** Which end is good: `low` (default: a quota) or `high` (a score). */\n optimum?: \"low\" | \"high\";\n /** Split into parts that add up to `max`: a stacked bar or ring, with its legend. */\n parts?: readonly MeterPart[];\n /** bar (default) · ring. */\n variant?: \"bar\" | \"ring\";\n /** sm · md (default) · lg: the bar's thickness, the ring's diameter. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Shows the label and the value above the bar. */\n showLabel?: boolean;\n /** A ring's centre: the value, a word. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst THICK = { sm: 6, md: 8, lg: 12 } as const;\nconst RING = { sm: 56, md: 96, lg: 144 } as const;\n// The parts must stay apart in every brand (accent, accent-2 and info can be one hue): the accent, then the status tones.\nconst partColor = (t: Theme, i: number) => [t.accent, t.warning, t.success, t.textSecondary, t.danger][i % 5]!;\n\n/** A measure within a range — a quota, a balance, a share — toned by thresholds or split into parts: the web `Meter`. */\nexport function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, optimum = \"low\", parts, variant = \"bar\", size = \"md\", showLabel, children, style }: MeterProps) {\n const { theme } = useTheme();\n const span = max - min || 1;\n const ratio = Math.min(1, Math.max(0, (value - min) / span));\n const level = !thresholds ? \"ok\" : ratio >= thresholds.high ? (optimum === \"low\" ? \"danger\" : \"success\") : ratio >= thresholds.low ? \"warning\" : optimum === \"low\" ? \"success\" : \"danger\";\n const tone = { ok: theme.accent, success: theme.success, warning: theme.warning, danger: theme.danger }[level];\n const words = valueText ?? `${Math.round(ratio * 100)} %`;\n const shares = (parts ?? []).map((p, i) => ({ ...p, color: partColor(theme, i), ratio: Math.min(1, Math.max(0, p.value / span)), words: p.valueText ?? `${Math.round((p.value / span) * 100)} %` }));\n const a11y = parts\n ? { role: \"group\" as const, \"aria-label\": `${label}: ${shares.map((p) => `${p.label} ${p.words}`).join(\", \")}` }\n : { role: \"meter\" as const, \"aria-label\": label, \"aria-valuemin\": min, \"aria-valuemax\": max, \"aria-valuenow\": Math.min(max, Math.max(min, value)), \"aria-valuetext\": words };\n const legend = parts ? (\n <View style={styles.legend} aria-hidden>\n {shares.map((p, i) => (\n <View key={i} style={styles.legendItem}>\n <View style={[styles.swatch, { backgroundColor: p.color }]} />\n <Txt variant=\"caption\">{p.label}</Txt>\n <Txt variant=\"caption\" tone=\"secondary\">\n {p.words}\n </Txt>\n </View>\n ))}\n </View>\n ) : null;\n\n if (variant === \"ring\") {\n const side = RING[size];\n const r = 44;\n const c = 2 * Math.PI * r;\n let offset = 0;\n const arcs = parts\n ? shares.map((p) => {\n const arc = { color: p.color, len: p.ratio, start: offset };\n offset += p.ratio;\n return arc;\n })\n : [{ color: tone, len: ratio, start: 0 }];\n return (\n <View accessible {...a11y} style={[styles.ringRoot, style]}>\n <View style={{ width: side, height: side }}>\n <Svg width={side} height={side} viewBox=\"0 0 100 100\" style={{ transform: [{ rotate: \"-90deg\" }] }}>\n <Circle cx={50} cy={50} r={r} fill=\"none\" stroke={theme.borderDefault} strokeWidth={9} />\n {arcs.map((a, i) => (\n <Circle key={i} cx={50} cy={50} r={r} fill=\"none\" stroke={a.color} strokeWidth={9} strokeDasharray={`${Math.max(0, a.len * c - (parts ? 2 : 0))} ${c}`} strokeDashoffset={-a.start * c} strokeLinecap={parts ? \"butt\" : \"round\"} />\n ))}\n </Svg>\n {children !== undefined ? <View style={[StyleSheet.absoluteFill, styles.center]}>{children}</View> : null}\n </View>\n {legend}\n </View>\n );\n }\n return (\n <View accessible {...a11y} style={[styles.root, style]}>\n {showLabel ? (\n <View style={styles.header} aria-hidden>\n <Txt variant=\"caption\" numberOfLines={1} style={styles.caption}>\n {label}\n </Txt>\n {!parts ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {words}\n </Txt>\n ) : null}\n </View>\n ) : null}\n <View style={[styles.track, { height: THICK[size], backgroundColor: theme.surface3 }]}>\n {parts ? shares.map((p, i) => <View key={i} style={{ width: `${p.ratio * 100}%`, backgroundColor: p.color }} />) : <View style={[styles.fill, { width: `${ratio * 100}%`, backgroundColor: tone }]} />}\n </View>\n {legend}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { width: \"100%\", gap: 6 },\n header: { flexDirection: \"row\", alignItems: \"baseline\", gap: 8 },\n caption: { flex: 1, fontWeight: \"600\" },\n track: { flexDirection: \"row\", gap: 2, borderRadius: 999, overflow: \"hidden\", width: \"100%\" },\n fill: { height: \"100%\", borderRadius: 999 },\n legend: { flexDirection: \"row\", flexWrap: \"wrap\", columnGap: 14, rowGap: 4, marginTop: 4 },\n legendItem: { flexDirection: \"row\", alignItems: \"center\", gap: 6 },\n swatch: { width: 8, height: 8, borderRadius: 4 },\n ringRoot: { alignItems: \"center\", gap: 8 },\n center: { alignItems: \"center\", justifyContent: \"center\" },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Easing, type StyleProp, Text, type TextStyle } from \"react-native\";\n\nimport { useReducedMotion } from \"./theme\";\nimport { Txt, type TxtTone, type TxtVariant } from \"./txt\";\n\nexport type NumberTickerProps = {\n /** The value to show. */\n value: number;\n /** The locale of the digits and separators (`\"fr\"`: 1 204,5) — the app's locale. */\n locale?: string;\n /** How to write it (`{ style: \"currency\", currency: \"EUR\" }`): Intl.NumberFormat options. */\n format?: Intl.NumberFormatOptions;\n /** `mount` (default): climbs from zero once, when shown. `change`: rolls from the previous value on every change. */\n trigger?: \"mount\" | \"change\";\n /** Milliseconds of the roll. Default 1100. */\n duration?: number;\n /** Announce each new value (`trigger=\"change\"`): a live total the person should hear. */\n announce?: boolean;\n /** The type scale. Default `display`. */\n variant?: TxtVariant;\n /** The text role. Default `text`. */\n tone?: TxtTone;\n /** Styles merged last. */\n style?: StyleProp<TextStyle>;\n};\n\n/**\n * A figure that climbs to its value — the web `NumberTicker`: tabular digits (no jitter), the final value for screen\n * readers from the first frame, still under reduced motion.\n */\nexport function NumberTicker({ value, locale, format, trigger = \"mount\", duration = 1100, announce, variant = \"display\", tone = \"text\", style }: NumberTickerProps) {\n const reduce = useReducedMotion();\n const writer = React.useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);\n const [shown, setShown] = React.useState(() => (reduce ? value : trigger === \"mount\" ? 0 : value));\n const [anim] = React.useState(() => new Animated.Value(trigger === \"mount\" ? 0 : value));\n const first = React.useRef(true);\n React.useEffect(() => {\n const isFirst = first.current;\n first.current = false;\n if (reduce || (!isFirst && trigger === \"mount\") || (isFirst && trigger === \"change\")) {\n anim.setValue(value);\n setShown(value);\n if (!isFirst && announce) AccessibilityInfo.announceForAccessibility(writer.format(value));\n return;\n }\n const id = anim.addListener(({ value: v }) => setShown(v));\n const run = Animated.timing(anim, { toValue: value, duration, easing: Easing.out(Easing.cubic), useNativeDriver: false });\n run.start(({ finished }) => {\n if (finished) setShown(value);\n });\n if (!isFirst && announce) AccessibilityInfo.announceForAccessibility(writer.format(value));\n return () => {\n run.stop();\n anim.removeListener(id);\n };\n }, [value, reduce, trigger, duration, announce, anim, writer]);\n const digits = Number.isInteger(value) ? Math.round(shown) : shown;\n return (\n <Txt variant={variant} tone={tone} aria-label={writer.format(value)} style={[{ fontVariant: [\"tabular-nums\"] }, style]}>\n <Text aria-hidden>{writer.format(digits)}</Text>\n </Txt>\n );\n}\n","import * as React from \"react\";\nimport { type NativeScrollEvent, type NativeSyntheticEvent, ScrollView, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { Button } from \"./button\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type OnboardingSlide = {\n /** The picture: a `Mascot`, an illustration, a product mark (decorative). */\n visual?: React.ReactNode;\n /** The promise, in a few words — passed translated. */\n title: string;\n /** One or two sentences. */\n description: string;\n};\n\nexport type OnboardingProps = {\n /** The slides, three or four. */\n slides: readonly OnboardingSlide[];\n /** The words of the buttons — passed translated. */\n labels: {\n /** To the next slide (“Next”). */\n next: string;\n /** On the last slide (“Get started”). */\n done: string;\n /** Skips to the end (“Skip”). */\n skip: string;\n /** The position, for screen readers: `(n, total) => \"Step 2 of 3\"`. */\n position: (n: number, total: number) => string;\n };\n /** Called by “Get started” and “Skip”: remember it and leave. */\n onDone: () => void;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A first launch in a few slides: swipe or tap Next, Skip at any time, dots that say where you are, the safe areas\n * kept. Each slide is announced with its position; the buttons do everything a swipe does.\n */\nexport function Onboarding({ slides, labels, onDone, style }: OnboardingProps) {\n const { theme, insets, haptic } = useTheme();\n const [width, setWidth] = React.useState(0);\n const [page, setPage] = React.useState(0);\n const scroller = React.useRef<ScrollView>(null);\n const last = page === slides.length - 1;\n const go = (to: number) => {\n scroller.current?.scrollTo({ x: to * width, animated: true });\n setPage(to);\n haptic(\"selection\");\n };\n const onScroll = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (width > 0) setPage(Math.round(e.nativeEvent.contentOffset.x / width));\n };\n return (\n <View style={[styles.root, { backgroundColor: theme.surface0, paddingTop: insets.top + 8, paddingBottom: insets.bottom + 16 }, style]} onLayout={(e) => setWidth(e.nativeEvent.layout.width)}>\n <View style={styles.top}>\n {!last ? <Button label={labels.skip} variant=\"ghost\" size=\"sm\" onPress={onDone} /> : <View style={styles.spacer} />}\n </View>\n <ScrollView ref={scroller} tabIndex={0} horizontal pagingEnabled showsHorizontalScrollIndicator={false} onMomentumScrollEnd={onScroll} style={styles.flex}>\n {slides.map((slide, i) => (\n <View key={i} style={[styles.slide, { width: width || undefined }]} accessible aria-label={`${labels.position(i + 1, slides.length)}. ${slide.title}. ${slide.description}`} aria-hidden={i !== page}>\n {slide.visual ? <View style={styles.visual}>{slide.visual}</View> : null}\n <Txt variant=\"display\" style={styles.centred}>\n {slide.title}\n </Txt>\n <Txt tone=\"secondary\" style={[styles.centred, styles.description]}>\n {slide.description}\n </Txt>\n </View>\n ))}\n </ScrollView>\n <View style={styles.dots} aria-hidden>\n {slides.map((_, i) => (\n <View key={i} style={[styles.dot, { width: i === page ? 22 : 8, backgroundColor: i === page ? theme.accent : theme.borderStrong }]} />\n ))}\n </View>\n <View style={styles.bottom}>\n <Button label={last ? labels.done : labels.next} variant={last ? \"gradient\" : \"primary\"} size=\"lg\" onPress={() => (last ? onDone() : go(page + 1))} />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n top: { flexDirection: \"row\", justifyContent: \"flex-end\", paddingHorizontal: 16, minHeight: 32 },\n spacer: { height: 32 },\n flex: { flex: 1 },\n slide: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 32, gap: 12 },\n visual: { marginBottom: 12 },\n centred: { textAlign: \"center\" },\n description: { maxWidth: 340 },\n dots: { flexDirection: \"row\", justifyContent: \"center\", gap: 6, marginVertical: 16 },\n dot: { height: 8, borderRadius: 4 },\n bottom: { paddingHorizontal: 24 },\n});\n","import * as React from \"react\";\nimport { Platform, Pressable, type StyleProp, StyleSheet, TextInput, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type OtpInputProps = {\n /** The accessible name (“Verification code”) — passed translated. */\n label: string;\n /** How many characters. Default 6. */\n length?: number;\n /** The code (controlled). */\n value?: string;\n /** Called on every change with the code typed so far. */\n onValueChange?: (code: string) => void;\n /** Called once all the characters are there (check it here); a tick confirms. */\n onComplete?: (code: string) => void;\n /** `numeric` (default) or `text` (letters and digits). */\n mode?: \"numeric\" | \"text\";\n /** The code was refused: the boxes turn to danger, and an error tick. */\n invalid?: boolean;\n /** Cannot be typed in (checking). */\n disabled?: boolean;\n /** Focus it when shown. */\n autoFocus?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A one-time code in boxes — one real input underneath, so the keyboard's suggestion of the code from a message\n * (iOS `oneTimeCode`, Android `sms-otp`) and pasting fill every box at once; the caret shows in the next empty box.\n */\nexport function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode = \"numeric\", invalid, disabled, autoFocus, style }: OtpInputProps) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState(\"\");\n const code = value ?? own;\n const [focused, setFocused] = React.useState(false);\n const input = React.useRef<TextInput>(null);\n React.useEffect(() => {\n if (invalid) haptic(\"warning\");\n }, [invalid, haptic]);\n const change = (raw: string) => {\n const next = (mode === \"numeric\" ? raw.replace(/\\D/g, \"\") : raw.replace(/\\s/g, \"\").toUpperCase()).slice(0, length);\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n if (next.length === length && code.length !== length) {\n haptic(\"success\");\n onComplete?.(next);\n }\n };\n return (\n <Pressable onPress={() => input.current?.focus()} disabled={disabled} accessible={false} style={[styles.root, style]}>\n <View style={styles.boxes} aria-hidden>\n {Array.from({ length }, (_, i) => {\n const active = focused && i === Math.min(code.length, length - 1);\n return (\n <View\n key={i}\n style={[\n styles.box,\n {\n borderRadius: radius.md,\n backgroundColor: theme.surface2,\n borderColor: invalid ? theme.danger : active ? theme.ring : theme.borderDefault,\n borderWidth: invalid || active ? 2 : 1,\n },\n ]}\n >\n <Txt variant=\"title\">{code[i] ?? \"\"}</Txt>\n </View>\n );\n })}\n </View>\n <TextInput\n ref={input}\n aria-label={label}\n aria-invalid={invalid || undefined}\n value={code}\n onChangeText={change}\n maxLength={length}\n editable={!disabled}\n autoFocus={autoFocus}\n keyboardType={mode === \"numeric\" ? \"number-pad\" : \"default\"}\n textContentType=\"oneTimeCode\"\n autoComplete={Platform.OS === \"android\" && mode === \"numeric\" ? \"sms-otp\" : \"one-time-code\"}\n autoCapitalize=\"characters\"\n autoCorrect={false}\n caretHidden\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={styles.hidden}\n />\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignSelf: \"flex-start\" },\n boxes: { flexDirection: \"row\", gap: 8 },\n box: { width: 46, height: 56, alignItems: \"center\", justifyContent: \"center\" },\n hidden: { position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, opacity: 0.011, color: \"transparent\" },\n});\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\nexport type PaginationLabels = {\n /** The previous-page button (\"Previous page\"). */\n previous: string;\n /** The next-page button (\"Next page\"). */\n next: string;\n /** Where the list stands: `(page, count) => \"Page 3 of 12\"`. */\n compact: (page: number, pageCount: number) => string;\n};\n\nexport type PaginationProps = {\n /** Pages mode: the current page, from 1. */\n page?: number;\n /** Pages mode: how many pages. Without it, the pagination is in cursor mode. */\n pageCount?: number;\n /** Pages mode: called with the page asked for. */\n onPageChange?: (page: number) => void;\n /** Cursor mode: whether there is a previous page. */\n hasPrevious?: boolean;\n /** Cursor mode: whether there is a next page. */\n hasNext?: boolean;\n /** Cursor mode: called by the previous button. */\n onPrevious?: () => void;\n /** Cursor mode: called by the next button. */\n onNext?: () => void;\n /** A text between the buttons in cursor mode (\"41–60\"), or instead of \"Page 3 of 12\". */\n status?: string;\n /** Disables both buttons (a page is loading). */\n disabled?: boolean;\n /** The words, passed translated. */\n labels: PaginationLabels;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nfunction Chevron({ direction, color }: { direction: \"left\" | \"right\"; color: string }) {\n return (\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d={direction === \"left\" ? \"m15 6-6 6 6 6\" : \"m9 6 6 6-6 6\"} />\n </Svg>\n );\n}\n\n/**\n * Previous / next with where the list stands (\"Page 3 of 12\"), or the two buttons of a cursor — the web\n * `Pagination` folded, the form a phone's thumb reaches. On a feed, prefer loading more at the end of the list.\n */\nexport function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }: PaginationProps) {\n const { theme, radius } = useTheme();\n const paged = pageCount !== undefined;\n const count = Math.max(1, pageCount ?? 1);\n const current = Math.min(Math.max(1, page), count);\n const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));\n const canNext = !disabled && (paged ? current < count : Boolean(hasNext));\n const button = (direction: \"left\" | \"right\", enabled: boolean, onPress: (() => void) | undefined, label: string) => (\n <Pressable\n role=\"button\"\n aria-label={label}\n aria-disabled={!enabled}\n disabled={!enabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { borderRadius: radius.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? (pressed ? 0.8 : 1) : 0.4 },\n ]}\n >\n <Chevron direction={direction} color={theme.textPrimary} />\n </Pressable>\n );\n const text = status ?? (paged ? labels.compact(current, count) : null);\n return (\n <View role=\"navigation\" style={[styles.row, style]}>\n {button(\"left\", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous)}\n {text ? (\n <Text aria-live=\"polite\" style={[styles.status, { color: theme.textSecondary }]}>\n {text}\n </Text>\n ) : null}\n {button(\"right\", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n row: { flexDirection: \"row\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12 },\n button: { width: 44, height: 44, alignItems: \"center\", justifyContent: \"center\", borderWidth: StyleSheet.hairlineWidth },\n status: { fontSize: 13, fontWeight: \"600\", fontVariant: [\"tabular-nums\"] },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { Button } from \"./button\";\nimport { Mascot, type MascotProps } from \"./mascots\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type PermissionStatus = \"undetermined\" | \"granted\" | \"denied\" | \"blocked\";\n\nexport type PermissionPromptProps = {\n /** Where the permission stands (from expo-camera, expo-notifications…): `blocked` = denied and the system will not ask again. */\n status: PermissionStatus;\n /** What it is for, in a few words (“Film your challenge”) — passed translated. */\n title: string;\n /** Why the app needs it, said plainly, before the system asks. */\n description: string;\n /** The button that asks (“Allow the camera”). */\n allowLabel: string;\n /** Asks the system (`requestPermission()` of the module). */\n onAllow: () => void;\n /** The button when the system will not ask again (“Open settings”) — with `onOpenSettings`. */\n settingsLabel?: string;\n /** Opens the app's settings (`Linking.openSettings()`). */\n onOpenSettings?: () => void;\n /** The words when it is blocked (“The camera is off for Orochia. Turn it on in the settings.”). */\n blockedDescription?: string;\n /** A secondary way out (“Not now”), with `onDismiss`. */\n dismissLabel?: string;\n /** Called by the way out. */\n onDismiss?: () => void;\n /** The bird above (decorative): the falcon watches (camera), the pigeon delivers (notifications). Default falcon. */\n mascot?: MascotProps[\"bird\"];\n /** Rendered once granted: the camera, the screen. Absent: nothing. */\n children?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Before the system's permission dialog, the app says why: a bird, what it is for, the button that asks — and, once the\n * system will not ask again, the way to the settings. Once granted, its children (the camera, the feature) show.\n */\nexport function PermissionPrompt({\n status,\n title,\n description,\n allowLabel,\n onAllow,\n settingsLabel,\n onOpenSettings,\n blockedDescription,\n dismissLabel,\n onDismiss,\n mascot = \"falcon\",\n children,\n style,\n}: PermissionPromptProps) {\n const { theme, radius } = useTheme();\n if (status === \"granted\") return <>{children ?? null}</>;\n const blocked = status === \"blocked\" || (status === \"denied\" && Boolean(onOpenSettings));\n return (\n <View style={[styles.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius.xl }, style]}>\n <Mascot bird={mascot} mood={blocked ? \"error\" : \"welcome\"} size={104} />\n <Txt variant=\"title\" style={styles.centred}>\n {title}\n </Txt>\n <Txt tone=\"secondary\" style={styles.centred}>\n {blocked && blockedDescription ? blockedDescription : description}\n </Txt>\n <View style={styles.actions}>\n {blocked && settingsLabel && onOpenSettings ? (\n <Button label={settingsLabel} variant=\"primary\" onPress={onOpenSettings} />\n ) : (\n <Button label={allowLabel} variant=\"primary\" onPress={onAllow} />\n )}\n {dismissLabel && onDismiss ? <Button label={dismissLabel} variant=\"ghost\" onPress={onDismiss} /> : null}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", gap: 10, padding: 24, borderWidth: StyleSheet.hairlineWidth },\n centred: { textAlign: \"center\", maxWidth: 340 },\n actions: { marginTop: 8, gap: 8, alignSelf: \"stretch\" },\n});\n","import React, { useEffect, useState } from \"react\";\nimport { AccessibilityInfo, Animated, Easing, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Defs, LinearGradient, Path, RadialGradient, Stop } from \"react-native-svg\";\n\nimport { PHOENIX, PHOENIX_PALETTES,type PhoenixPalette } from \"../mascots/phoenix-geometry\";\nimport { markA11y } from \"./mark-motion\";\nimport { useSvgId, useTheme } from \"./theme\";\n\nexport interface PhoenixProps {\n /** `own` (default): the violet wing and the gold wing of the Krizaka story. `brand`: the theme's accent and accent-2. */\n tone?: \"own\" | \"brand\";\n /** Width and height in points. */\n size?: number;\n /** A slow float; always still when the system asks to reduce motion. */\n animated?: boolean;\n /** An accessible name (the phoenix becomes an image); without it, it is decorative. */\n title?: string;\n /** The outer view's style. */\n style?: ViewStyle;\n}\n\nfunction useFloat(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: 2500, easing: Easing.inOut(Easing.ease), useNativeDriver: true });\n loop = Animated.loop(Animated.sequence([step(-6), step(0)]));\n loop.start();\n });\n return () => {\n cancelled = true;\n loop?.stop();\n };\n }, [animated, y]);\n return y;\n}\n\n/** The phoenix of the Krizaka story — the comeback — for React Native: the web `Phoenix`'s geometry. */\nexport function Phoenix({ tone = \"own\", size = 120, animated = true, title, style }: PhoenixProps) {\n const { theme } = useTheme();\n const id = useSvgId(\"kzp\");\n const y = useFloat(animated);\n const p: PhoenixPalette =\n tone === \"brand\"\n ? { left: [theme.accent2, theme.accent], right: [theme.accent, theme.accent2], core: [\"#ffffff\", theme.accent], body: theme.surface3, edge: theme.borderStrong, crest: theme.accent }\n : PHOENIX_PALETTES.own;\n return (\n <View style={[{ width: size, height: size }, style]} {...markA11y(title)}>\n <Animated.View style={{ transform: [{ translateY: y }] }}>\n <Svg width={size} height={size} viewBox=\"0 0 120 120\">\n <Defs>\n <LinearGradient id={`${id}l`} x1=\"1\" y1=\"0\" x2=\"0\" y2=\"1\">\n <Stop offset=\"0%\" stopColor={p.left[0]} />\n <Stop offset=\"100%\" stopColor={p.left[1]} />\n </LinearGradient>\n <LinearGradient id={`${id}r`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <Stop offset=\"0%\" stopColor={p.right[0]} />\n <Stop offset=\"100%\" stopColor={p.right[1]} />\n </LinearGradient>\n <RadialGradient id={`${id}c`}>\n <Stop offset=\"0%\" stopColor={p.core[0]} />\n <Stop offset=\"100%\" stopColor={p.core[1]} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n <Path d={PHOENIX.wingL} fill={`url(#${id}l)`} />\n <Path d={PHOENIX.wingR} fill={`url(#${id}r)`} />\n <Path d={PHOENIX.tailL} fill={`url(#${id}l)`} opacity={0.7} />\n <Path d={PHOENIX.tailR} fill={`url(#${id}r)`} opacity={0.7} />\n <Path d={PHOENIX.body} fill={p.body} stroke={p.edge} strokeOpacity={0.5} />\n <Circle cx={60} cy={58} r={12} fill={`url(#${id}c)`} />\n <Circle cx={60} cy={58} r={3.5} fill=\"#ffffff\" />\n <Path d={PHOENIX.crest} stroke={p.crest} strokeWidth={2} strokeLinecap=\"round\" />\n </Svg>\n </Animated.View>\n </View>\n );\n}\n","/** The phoenix's geometry (120 × 120), drawn by the web `Phoenix` and the native one. */\nexport const PHOENIX = {\n wingL: \"M56 62 C40 40 22 36 8 40 C22 46 30 56 34 70 C40 64 48 62 56 62 Z\",\n wingR: \"M64 62 C80 40 98 36 112 40 C98 46 90 56 86 70 C80 64 72 62 64 62 Z\",\n tailL: \"M52 66 C46 82 40 94 30 104 C44 98 52 90 58 78 Z\",\n tailR: \"M68 66 C74 82 80 94 90 104 C76 98 68 90 62 78 Z\",\n body: \"M60 34 L68 60 L60 82 L52 60 Z\",\n crest: \"M60 34 L56 24 M60 34 L64 24\",\n} as const;\n\nexport interface PhoenixPalette {\n /** The left wing's gradient (top → bottom). */\n readonly left: readonly [string, string];\n /** The right wing's gradient. */\n readonly right: readonly [string, string];\n /** The core's glow: centre, edge. */\n readonly core: readonly [string, string];\n /** The body and its edge. */\n readonly body: string;\n readonly edge: string;\n /** The crest. */\n readonly crest: string;\n}\n\n/** The phoenix of the Krizaka story: a violet wing, a gold wing (the brand layer's own colours, like the marks). */\nexport const PHOENIX_PALETTES: { readonly own: PhoenixPalette } = {\n own: {\n left: [\"#c084fc\", \"#7c3aed\"],\n right: [\"#fde68a\", \"#f59e0b\"],\n core: [\"#fff7ed\", \"#fb923c\"],\n body: \"#1f1530\",\n edge: \"#e9d5ff\",\n crest: \"#fbbf24\",\n },\n};\n","import * as React from \"react\";\nimport { Image, Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { ActionSheet } from \"./action-sheet\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\n/** A photo of the grid. */\nexport type GridPhoto = {\n /** A stable id. */\n id: string;\n /** Its URI. */\n uri: string;\n /** What it shows — its accessible name. */\n alt?: string;\n};\n\nexport type PhotoGridLabels = {\n /** An empty slot's button (“Add a photo”). */\n add: string;\n /** The first photo's badge (“Main”). */\n main: string;\n /** A photo's menu title: `(n) => \"Photo \" + n`. */\n photo: (position: number) => string;\n /** Make it the main photo. */\n makeMain: string;\n /** Move it one place earlier. */\n moveEarlier: string;\n /** Move it one place later. */\n moveLater: string;\n /** Remove it. */\n remove: string;\n /** Cancel. */\n cancel: string;\n};\n\nexport type PhotoGridProps = {\n /** The photos, in order: the first is the main one. */\n value: readonly GridPhoto[];\n /** Called with the new order, or without a removed photo. */\n onValueChange: (photos: GridPhoto[]) => void;\n /** Called by an empty slot: open the `MediaPicker`, the camera or the editor, then add what comes back. */\n onAdd?: () => void;\n /** How many slots. Default 6. */\n slots?: number;\n /** Fewest photos required: the empty slots up to it are marked. Default 1. */\n required?: number;\n /** Columns. Default 3. */\n columns?: number;\n /** The words, passed translated. */\n labels: PhotoGridLabels;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A profile's photos in a grid of slots — the first one is the main photo, empty slots invite to add. A long press (or\n * a tap) opens a photo's menu: make it the main one, move it earlier or later, remove it; every move is a tick, and\n * screen readers get the same actions on each photo.\n */\nexport function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, columns = 3, labels, style }: PhotoGridProps) {\n const { theme, radius, haptic } = useTheme();\n const [menu, setMenu] = React.useState<number | null>(null);\n const move = (from: number, to: number) => {\n if (to < 0 || to >= value.length || from === to) return;\n const next = [...value];\n const [photo] = next.splice(from, 1);\n next.splice(to, 0, photo!);\n haptic(\"selection\");\n onValueChange(next);\n };\n const remove = (i: number) => {\n haptic(\"impact\");\n onValueChange(value.filter((_, j) => j !== i));\n };\n const width = `${100 / columns}%` as const;\n return (\n <View style={[styles.grid, style]}>\n {Array.from({ length: slots }, (_, i) => {\n const photo = value[i];\n const cell = [styles.slot, { borderRadius: radius.lg, aspectRatio: 3 / 4 }];\n return (\n <View key={photo?.id ?? `empty-${i}`} style={[styles.cell, { width }]}>\n {photo ? (\n <Pressable\n role=\"button\"\n aria-label={[labels.photo(i + 1), photo.alt, i === 0 ? labels.main : null].filter(Boolean).join(\", \")}\n onPress={() => setMenu(i)}\n onLongPress={() => {\n haptic(\"impact\");\n setMenu(i);\n }}\n accessibilityActions={[\n ...(i > 0 ? [{ name: \"makeMain\", label: labels.makeMain }, { name: \"earlier\", label: labels.moveEarlier }] : []),\n ...(i < value.length - 1 ? [{ name: \"later\", label: labels.moveLater }] : []),\n { name: \"remove\", label: labels.remove },\n ]}\n onAccessibilityAction={(e) => {\n const name = e.nativeEvent.actionName;\n if (name === \"makeMain\") move(i, 0);\n if (name === \"earlier\") move(i, i - 1);\n if (name === \"later\") move(i, i + 1);\n if (name === \"remove\") remove(i);\n }}\n style={[...cell, { backgroundColor: theme.surface3, overflow: \"hidden\" }]}\n >\n <Image source={{ uri: photo.uri }} style={StyleSheet.absoluteFill} resizeMode=\"cover\" />\n {i === 0 ? (\n <View style={[styles.main, { backgroundColor: theme.accent, borderRadius: radius.full }]}>\n <Txt variant=\"caption\" tone=\"onAccent\" style={styles.mainText}>\n {labels.main}\n </Txt>\n </View>\n ) : null}\n </Pressable>\n ) : (\n <Pressable\n role=\"button\"\n aria-label={labels.add}\n disabled={!onAdd || i > value.length}\n onPress={onAdd}\n style={({ pressed }) => [\n ...cell,\n styles.empty,\n { borderColor: i < required ? theme.accent : theme.borderStrong, backgroundColor: pressed ? theme.surface2 : theme.surface1, opacity: i > value.length ? 0.5 : 1 },\n ]}\n >\n <View style={[styles.plus, { backgroundColor: i === value.length ? theme.accent : theme.surface3, borderRadius: radius.full }]}>\n <Svg width={16} height={16} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d=\"M12 5v14M5 12h14\" stroke={i === value.length ? theme.onAccent : theme.textSecondary} strokeWidth={2.6} strokeLinecap=\"round\" />\n </Svg>\n </View>\n </Pressable>\n )}\n </View>\n );\n })}\n <ActionSheet\n open={menu !== null}\n onOpenChange={(open) => !open && setMenu(null)}\n title={menu !== null ? labels.photo(menu + 1) : \"\"}\n cancelLabel={labels.cancel}\n actions={\n menu === null\n ? []\n : [\n ...(menu > 0 ? [{ label: labels.makeMain, onPress: () => move(menu, 0) }, { label: labels.moveEarlier, onPress: () => move(menu, menu - 1) }] : []),\n ...(menu < value.length - 1 ? [{ label: labels.moveLater, onPress: () => move(menu, menu + 1) }] : []),\n { label: labels.remove, destructive: true, onPress: () => remove(menu) },\n ]\n }\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n grid: { flexDirection: \"row\", flexWrap: \"wrap\", marginHorizontal: -4 },\n cell: { padding: 4 },\n slot: { width: \"100%\" },\n empty: { borderWidth: 1.5, borderStyle: \"dashed\", alignItems: \"center\", justifyContent: \"center\" },\n plus: { width: 32, height: 32, alignItems: \"center\", justifyContent: \"center\" },\n main: { position: \"absolute\", left: 6, bottom: 6, paddingHorizontal: 8, paddingVertical: 2 },\n mainText: { fontWeight: \"800\", textTransform: \"uppercase\", letterSpacing: 0.5 },\n});\n","import * as React from \"react\";\nimport { Animated, StyleSheet, View, type ViewProps } from \"react-native\";\n\nimport { useEntrance } from \"./story-motion\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport interface ProfileStat {\n /** What it measures (“Response rate”) — passed translated. */\n label: string;\n /** The value, between 0 and `max`. */\n value: number;\n /** The top of the range (default 100). */\n max?: number;\n /** The value in words (“92 %”); default: the percentage. */\n valueText?: string;\n}\n\nexport type ProfileCardProps = Omit<ViewProps, \"children\"> & {\n /** The portrait: an `Avatar`, an image, a mark. Decorative — the name carries the meaning. */\n visual: React.ReactNode;\n /** The name (the card's heading). */\n name: string;\n /** The headline gauge's label (“Profile complete”); without it, no headline gauge. */\n statLabel?: string;\n /** The headline gauge's value, 0–100 (default 100). */\n value?: number;\n /** The headline value in words; default: the percentage. */\n valueText?: string;\n /** More gauges under the headline one, each with its value in words. */\n stats?: readonly ProfileStat[];\n /** One line under the gauges. */\n caption?: string;\n /** Under everything: actions (a `Button`), chips. */\n children?: React.ReactNode;\n /** The gauges fill once on mount; still when the system reduces motion. */\n animated?: boolean;\n};\n\nconst ratioOf = (value: number, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));\n\nfunction Bar({ label, ratio, words, animated, delay }: { label: string; ratio: number; words: string; animated: boolean; delay: number }) {\n const { theme } = useTheme();\n const t = useEntrance(animated, delay, 900);\n const [width, setWidth] = React.useState(0);\n const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });\n return (\n <View\n accessible\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(ratio * 100)}\n aria-valuetext={words}\n onLayout={(e) => setWidth(e.nativeEvent.layout.width)}\n style={[styles.track, { backgroundColor: theme.surface3 }]}\n >\n <Animated.View style={[styles.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }]} />\n </View>\n );\n}\n\n/** A profile at a glance for React Native: portrait, name, a headline gauge, stats in words, a line, actions. */\nexport function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }: ProfileCardProps) {\n const { theme, radius } = useTheme();\n const ratio = ratioOf(value);\n return (\n <View {...props} style={[styles.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius.xl }, style]}>\n <View aria-hidden style={[styles.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }]}>\n {visual}\n </View>\n <View style={styles.head}>\n <Txt variant=\"title\" style={styles.name}>\n {name}\n </Txt>\n {statLabel ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {statLabel} <Txt variant=\"caption\">{valueText ?? `${Math.round(ratio * 100)} %`}</Txt>\n </Txt>\n ) : null}\n </View>\n {statLabel ? <Bar label={statLabel} ratio={ratio} words={valueText ?? `${Math.round(ratio * 100)} %`} animated={animated} delay={200} /> : null}\n {stats?.map((s, i) => {\n const r = ratioOf(s.value, s.max);\n const words = s.valueText ?? `${Math.round(r * 100)} %`;\n return (\n <View key={s.label} style={styles.stat}>\n <View aria-hidden style={styles.statHead}>\n <Txt variant=\"caption\" tone=\"secondary\">\n {s.label}\n </Txt>\n <Txt variant=\"caption\">{words}</Txt>\n </View>\n <Bar label={s.label} ratio={r} words={words} animated={animated} delay={320 + i * 120} />\n </View>\n );\n })}\n {caption ? (\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.caption}>\n {caption}\n </Txt>\n ) : null}\n {children ? <View style={styles.extra}>{children}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { alignItems: \"center\", gap: 12, padding: 20, borderWidth: StyleSheet.hairlineWidth },\n disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: \"center\", justifyContent: \"center\", overflow: \"hidden\" },\n head: { flexDirection: \"row\", alignSelf: \"stretch\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8 },\n name: { flexShrink: 1, fontSize: 17 },\n track: { alignSelf: \"stretch\", height: 6, borderRadius: 3, overflow: \"hidden\" },\n fill: { height: \"100%\", borderRadius: 3 },\n stat: { alignSelf: \"stretch\", gap: 5 },\n statHead: { flexDirection: \"row\", justifyContent: \"space-between\", gap: 8 },\n caption: { textAlign: \"center\" },\n extra: { flexDirection: \"row\", flexWrap: \"wrap\", justifyContent: \"center\", gap: 8, alignSelf: \"stretch\" },\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 { AccessibilityInfo, Animated, type NativeScrollEvent, type NativeSyntheticEvent, RefreshControl, type RefreshControlProps, StyleSheet, View } from \"react-native\";\n\nimport type { BrandId } from \"../marks/ProductLogo\";\nimport { ProductMark } from \"./ProductMark\";\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type PullToRefreshProps = Omit<RefreshControlProps, \"colors\" | \"tintColor\" | \"progressBackgroundColor\" | \"titleColor\" | \"title\"> & {\n /** The words of the pull (“Pull to refresh”) — passed translated; shown on iOS under the spinner. */\n label?: string;\n};\n\n/**\n * The platform's pull to refresh in the theme's accent: the `refreshControl` of a ScrollView or a FlatList. `List`\n * draws it already with `onRefresh`.\n */\nexport function PullToRefresh({ label, ...props }: PullToRefreshProps) {\n const { theme } = useTheme();\n return <RefreshControl {...props} tintColor={theme.accent} colors={[theme.accent]} progressBackgroundColor={theme.surface2} title={label} titleColor={theme.textSecondary} />;\n}\n\n/** What `BrandedRefresh` hands to the scrollable: spread it on a `ScrollView` / `FlatList` (`{...scroll}`). */\nexport type BrandedRefreshScrollProps = {\n refreshControl: React.ReactElement<RefreshControlProps>;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n scrollEventThrottle: number;\n};\n\nexport type BrandedRefreshProps = {\n /** The product whose mark is drawn as the person pulls and turns while it refreshes. */\n product: BrandId;\n /** Whether the data is refreshing: keep it true until the new data is there. */\n refreshing: boolean;\n /** Called when the person pulls past the threshold. */\n onRefresh: () => void;\n /** The words announced when the refresh starts (“Refreshing your videos”) — passed translated. */\n label: string;\n /** The scrollable, given the props to spread: `{(scroll) => <ScrollView {...scroll}>…</ScrollView>}`. */\n children: (scroll: BrandedRefreshScrollProps) => React.ReactElement;\n /** The pull (in points) at which the mark is complete. Default 72. */\n threshold?: number;\n};\n\n/** How far the mark has come: 0 at rest, 1 at the threshold (a pull, iOS) or while refreshing. */\nexport const pullProgress = (offset: number, threshold: number) => Math.min(1, Math.max(0, -offset / threshold));\n\n/**\n * The product's mark as the pull-to-refresh: it grows and turns into place as the person pulls (iOS, where the content\n * overscrolls) and keeps its own motion while it refreshes (iOS and Android). The platform's control still does the\n * gesture, so the system announces it too; ours announces `label` when the refresh starts. Under reduced motion the mark\n * is still and appears without the growing.\n */\nexport function BrandedRefresh({ product, refreshing, onRefresh, label, children, threshold = 72 }: BrandedRefreshProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [pull] = React.useState(() => new Animated.Value(0));\n React.useEffect(() => {\n if (refreshing) AccessibilityInfo.announceForAccessibility(label);\n }, [refreshing, label]);\n const onScroll = React.useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => pull.setValue(pullProgress(event.nativeEvent.contentOffset.y, threshold)),\n [pull, threshold],\n );\n const shown = refreshing ? 1 : pull;\n const scale = refreshing || reduce ? 1 : pull.interpolate({ inputRange: [0, 1], outputRange: [0.4, 1] });\n const rotate = refreshing || reduce ? \"0deg\" : pull.interpolate({ inputRange: [0, 1], outputRange: [\"-90deg\", \"0deg\"] });\n return (\n <View style={styles.root}>\n {children({\n // The platform's control does the gesture and the haptics, drawn transparent: the mark is ours.\n refreshControl: <RefreshControl refreshing={refreshing} onRefresh={onRefresh} tintColor=\"transparent\" colors={[\"transparent\"]} progressBackgroundColor=\"transparent\" />,\n onScroll,\n scrollEventThrottle: 16,\n })}\n <Animated.View pointerEvents=\"none\" aria-hidden style={[styles.mark, { opacity: shown, transform: [{ scale }, { rotate }] }]}>\n <ProductMark id={product} size={32} animated={refreshing} neutral={theme.textMuted} />\n </Animated.View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n mark: { position: \"absolute\", top: 12, left: 0, right: 0, alignItems: \"center\" },\n});\n","import * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\n\n/** A choice: the value stored and its words (passed translated), a line under them, a second line on a key. */\nexport type RadioOption = { value: string; label: string; description?: string; hint?: string; disabled?: boolean };\n\nexport type RadioGroupProps = {\n /** The group's accessible name (the question), passed translated. */\n label: string;\n /** The choices, all visible (two to five, a few more for `buttons`). */\n options: readonly RadioOption[];\n /** The chosen value (controlled). */\n value?: string | null;\n /** The chosen value at first, uncontrolled. */\n defaultValue?: string | null;\n /** Called with the value pressed. */\n onValueChange?: (value: string) => void;\n /**\n * `list` (a dot and its words, 44-pt rows), `cards` (whole cards, the check lit), `buttons` (tactile keys that press\n * in: an `impact` haptic), `segmented` (a track of equal segments).\n * @default \"list\"\n */\n variant?: \"list\" | \"cards\" | \"buttons\" | \"segmented\";\n /** An error under the group, read and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nfunction Check({ color }: { color: string }) {\n return (\n <Svg width={12} height={12} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth={3.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <Path d=\"M20 6 9 17l-5-5\" />\n </Svg>\n );\n}\n\n/** A tactile key: raised on its ledge, sunk while pressed and once chosen (the spring of the theme). */\nfunction Key({ option, checked, disabled, onPress }: { option: RadioOption; checked: boolean; disabled: boolean; onPress: () => void }) {\n const { theme, radius, motion } = useTheme();\n const [held, setHeld] = React.useState(false);\n const [sink] = React.useState(() => new Animated.Value(checked ? 1 : 0));\n const down = checked || held;\n React.useEffect(() => {\n Animated.timing(sink, { toValue: down ? 1 : 0, duration: motion.duration.fast, useNativeDriver: true }).start();\n }, [down, sink, motion.duration.fast]);\n return (\n <Pressable\n role=\"radio\"\n aria-checked={checked}\n aria-label={option.hint ? `${option.label}, ${option.hint}` : option.label}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onPress={onPress}\n onPressIn={() => setHeld(true)}\n onPressOut={() => setHeld(false)}\n style={[styles.keySlot, disabled ? styles.disabled : null]}\n >\n <View style={[styles.ledge, { borderRadius: radius.lg, backgroundColor: checked ? theme.accentHover : theme.borderStrong }]} />\n <Animated.View\n style={[\n styles.key,\n {\n borderRadius: radius.lg,\n backgroundColor: checked ? theme.accent : theme.surface2,\n borderColor: checked ? theme.accent : theme.borderDefault,\n transform: [{ translateY: sink.interpolate({ inputRange: [0, 1], outputRange: [0, 3] }) }],\n },\n ]}\n >\n <Text style={[styles.keyLabel, { color: checked ? theme.onAccent : theme.textPrimary }]}>{option.label}</Text>\n {option.hint ? <Text style={[styles.keyHint, { color: checked ? theme.onAccent : theme.textSecondary }]}>{option.hint}</Text> : null}\n </Animated.View>\n </Pressable>\n );\n}\n\n/**\n * One choice among a few, all visible — the web `RadioGroup` in its four looks. A radio group for VoiceOver and\n * TalkBack; each press plays a haptic (`selection`, `impact` for a tactile key) when the app passes `haptics`.\n */\nexport function RadioGroup({ label, options, value: valueProp, defaultValue = null, onValueChange, variant = \"list\", error, disabled, style }: RadioGroupProps) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState<string | null>(defaultValue);\n const value = valueProp !== undefined ? valueProp : own;\n const pick = (v: string) => {\n haptic(variant === \"buttons\" ? \"impact\" : \"selection\");\n if (valueProp === undefined) setOwn(v);\n if (v !== value) onValueChange?.(v);\n };\n const body = options.map((o) => {\n const checked = o.value === value;\n const off = Boolean(disabled || o.disabled);\n const name = o.description ? `${o.label}, ${o.description}` : o.label;\n if (variant === \"buttons\") return <Key key={o.value} option={o} checked={checked} disabled={off} onPress={() => pick(o.value)} />;\n if (variant === \"segmented\")\n return (\n <Pressable\n key={o.value}\n role=\"radio\"\n aria-checked={checked}\n aria-label={o.label}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => pick(o.value)}\n style={[styles.segment, { borderRadius: radius.md }, checked ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null, off ? styles.disabled : null]}\n >\n <Text numberOfLines={1} style={[styles.segmentLabel, { color: checked ? theme.textPrimary : theme.textSecondary }]}>\n {o.label}\n </Text>\n </Pressable>\n );\n if (variant === \"cards\")\n return (\n <Pressable\n key={o.value}\n role=\"radio\"\n aria-checked={checked}\n aria-label={name}\n aria-disabled={off || undefined}\n disabled={off}\n onPress={() => pick(o.value)}\n style={({ pressed }) => [\n styles.card,\n { borderRadius: radius.xl, backgroundColor: checked ? theme.accentSoft : theme.surface1, borderColor: checked ? theme.accent : theme.borderDefault, transform: [{ scale: pressed ? 0.98 : 1 }] },\n off ? styles.disabled : null,\n ]}\n >\n <View style={[styles.cardCheck, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }]}>{checked ? <Check color={theme.onAccent} /> : null}</View>\n <Text style={[styles.cardLabel, { color: theme.textPrimary }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.cardDescription, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </Pressable>\n );\n return (\n <Pressable key={o.value} role=\"radio\" aria-checked={checked} aria-label={name} aria-disabled={off || undefined} disabled={off} onPress={() => pick(o.value)} style={[styles.row, off ? styles.disabled : null]}>\n <View style={[styles.dot, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }]}>{checked ? <View style={[styles.dotIn, { backgroundColor: theme.onAccent }]} /> : null}</View>\n <View style={styles.rowText}>\n <Text style={[styles.rowLabel, { color: theme.textPrimary }]}>{o.label}</Text>\n {o.description ? <Text style={[styles.cardDescription, { color: theme.textSecondary }]}>{o.description}</Text> : null}\n </View>\n </Pressable>\n );\n });\n return (\n <View style={[styles.root, style]}>\n <View\n role=\"radiogroup\"\n aria-label={label}\n style={\n variant === \"segmented\"\n ? [styles.track, { borderRadius: radius.lg, backgroundColor: theme.surface2, borderColor: error ? theme.danger : theme.borderDefault }]\n : variant === \"buttons\"\n ? styles.keys\n : variant === \"cards\"\n ? styles.cards\n : styles.list\n }\n >\n {body}\n </View>\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.error, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 6, alignSelf: \"stretch\" },\n list: { gap: 2 },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 12, minHeight: 44 },\n rowText: { flex: 1, gap: 1 },\n rowLabel: { fontSize: 15, lineHeight: 20 },\n dot: { width: 22, height: 22, borderRadius: 11, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n dotIn: { width: 8, height: 8, borderRadius: 4 },\n cards: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10 },\n card: { flexGrow: 1, flexBasis: 140, minHeight: 72, padding: 14, paddingRight: 40, gap: 2, borderWidth: 1 },\n cardCheck: { position: \"absolute\", right: 12, top: 12, width: 20, height: 20, borderRadius: 10, borderWidth: 1.5, alignItems: \"center\", justifyContent: \"center\" },\n cardLabel: { fontSize: 16, fontWeight: \"700\" },\n cardDescription: { fontSize: 12, lineHeight: 16 },\n keys: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 10, paddingBottom: 4 },\n keySlot: { minWidth: 64, minHeight: 52 },\n ledge: { position: \"absolute\", left: 0, right: 0, top: 4, bottom: -4 },\n key: { minHeight: 48, paddingHorizontal: 16, paddingVertical: 8, alignItems: \"center\", justifyContent: \"center\", gap: 1, borderWidth: 1 },\n keyLabel: { fontSize: 15, fontWeight: \"700\" },\n keyHint: { fontSize: 11, fontWeight: \"500\" },\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth, height: 42 },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n segmentLabel: { fontSize: 13, fontWeight: \"600\" },\n error: { fontSize: 12, lineHeight: 16 },\n disabled: { opacity: 0.4 },\n});\n","import * as React from \"react\";\nimport { KeyboardAvoidingView, Platform, ScrollView, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type ScreenProps = {\n /** At the top: a `Header`, a `StepProgress` (they keep clear of the status bar themselves). */\n header?: React.ReactNode;\n /** At the bottom: a `TabBar`, a `MessageComposer`, a main `Button` (they keep clear of the home indicator). */\n footer?: React.ReactNode;\n /** The content. */\n children: React.ReactNode;\n /** The content scrolls (default) — or not, for a list that scrolls itself (`List`, `FlatList`). */\n scroll?: boolean;\n /** The content rises with the keyboard (a form, a chat). Default true. */\n keyboard?: boolean;\n /** Padding around the content. Default 16. */\n padding?: number;\n /** The surface: `surface0` (default) or `surface1`. */\n surface?: \"surface0\" | \"surface1\";\n /** Styles of the content. */\n contentStyle?: StyleProp<ViewStyle>;\n};\n\n/**\n * A screen of the app: a header, the content (scrolling, rising with the keyboard), a footer — on the theme's surface,\n * clear of the safe areas through its parts. The base of the templates: app shell, sign-in, profile, feed, chat, settings.\n */\nexport function Screen({ header, footer, children, scroll = true, keyboard = true, padding = 16, surface = \"surface0\", contentStyle }: ScreenProps) {\n const { theme, insets } = useTheme();\n const body = scroll ? (\n <ScrollView style={styles.flex} contentContainerStyle={[{ padding, paddingTop: header ? padding : padding + insets.top, gap: 16 }, contentStyle]} keyboardShouldPersistTaps=\"handled\" tabIndex={0}>\n {children}\n </ScrollView>\n ) : (\n <View style={[styles.flex, { paddingTop: header ? 0 : insets.top }, contentStyle]}>{children}</View>\n );\n const inner = (\n <>\n {header}\n {body}\n {footer}\n </>\n );\n return (\n <View style={[styles.flex, { backgroundColor: theme[surface] }]}>\n {keyboard ? (\n <KeyboardAvoidingView style={styles.flex} behavior={Platform.OS === \"ios\" ? \"padding\" : undefined}>\n {inner}\n </KeyboardAvoidingView>\n ) : (\n inner\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({ flex: { flex: 1 } });\n","import * as React from \"react\";\nimport { Pressable, type StyleProp, StyleSheet, TextInput, type TextInputProps, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type SearchFieldProps = Omit<TextInputProps, \"value\" | \"defaultValue\" | \"onChangeText\" | \"style\" | \"onSubmitEditing\"> & {\n /** The accessible name of the input (\"Search videos\"), passed translated. */\n label: string;\n /** The query (controlled). */\n value?: string;\n /** The query at first, uncontrolled. */\n defaultValue?: string;\n /** Called on every key with the query. */\n onValueChange?: (query: string) => void;\n /** Called with the query once typing pauses (`debounce` ms): fetch the results here. */\n onSearch?: (query: string) => void;\n /** The pause, in ms, before `onSearch`. Default 300. */\n debounce?: number;\n /** Called when the keyboard's search key is pressed. */\n onSubmit?: (query: string) => void;\n /** The clear button's name (\"Clear search\"), passed translated. */\n clearLabel: string;\n /** The words of a cancel button beside the field (“Cancel”, iOS search bars) — passed translated; with `onCancel` it shows while the field has the focus or a query. */\n cancelLabel?: string;\n /** Called by the cancel button: the query is cleared and the keyboard closes. */\n onCancel?: () => void;\n /** Styles merged last, on the field's frame. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A search box: the glyph, the input with the keyboard's search key, a clear button, and a debounced `onSearch` —\n * the web `SearchField` without the shortcut and the suggestions (a screen of results is the native idiom).\n */\nexport function SearchField({ label, value, defaultValue = \"\", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, cancelLabel, onCancel, style, placeholder, onFocus, onBlur, ...props }: SearchFieldProps) {\n const [focused, setFocused] = React.useState(false);\n const input = React.useRef<TextInput>(null);\n const { theme, radius } = useTheme();\n const [own, setOwn] = React.useState(defaultValue);\n const query = value ?? own;\n const timer = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n React.useEffect(() => () => clearTimeout(timer.current), []);\n const change = (next: string) => {\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n clearTimeout(timer.current);\n if (onSearch) timer.current = setTimeout(() => onSearch(next), debounce);\n };\n const field = (\n <View style={[styles.frame, { borderRadius: radius.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style]}>\n <Svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.textSecondary} strokeWidth={2} strokeLinecap=\"round\" aria-hidden>\n <Circle cx={11} cy={11} r={7} />\n <Path d=\"m20 20-3.5-3.5\" />\n </Svg>\n <TextInput\n ref={input}\n role=\"searchbox\"\n aria-label={label}\n value={query}\n placeholder={placeholder}\n placeholderTextColor={theme.textMuted}\n returnKeyType=\"search\"\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"never\"\n onChangeText={change}\n onSubmitEditing={() => {\n clearTimeout(timer.current);\n onSearch?.(query);\n onSubmit?.(query);\n }}\n style={[styles.input, { color: theme.textPrimary }]}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n {...props}\n />\n {query ? (\n <Pressable role=\"button\" aria-label={clearLabel} hitSlop={10} onPress={() => change(\"\")} style={styles.clear}>\n <Svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke={theme.textSecondary} strokeWidth={2.4} strokeLinecap=\"round\" aria-hidden>\n <Path d=\"M18 6 6 18M6 6l12 12\" />\n </Svg>\n </Pressable>\n ) : null}\n </View>\n );\n if (!cancelLabel || !onCancel) return field;\n return (\n <View style={styles.bar}>\n <View style={styles.grow}>{field}</View>\n {focused || query ? (\n <Pressable\n role=\"button\"\n onPress={() => {\n change(\"\");\n input.current?.blur();\n onCancel();\n }}\n hitSlop={8}\n style={styles.cancel}\n >\n <Txt variant=\"label\" tone=\"accent\">\n {cancelLabel}\n </Txt>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n frame: { flexDirection: \"row\", alignItems: \"center\", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet.hairlineWidth },\n input: { flex: 1, height: \"100%\", fontSize: 15, paddingVertical: 0 },\n bar: { flexDirection: \"row\", alignItems: \"center\", gap: 10 },\n grow: { flex: 1 },\n cancel: { minHeight: 44, justifyContent: \"center\" },\n clear: { width: 32, height: 32, alignItems: \"center\", justifyContent: \"center\" },\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 { type LayoutChangeEvent, PanResponder, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\nimport Svg, { Defs, LinearGradient, Rect, Stop } from \"react-native-svg\";\n\nimport { useSvgId, useTheme } from \"./theme\";\n\nexport type SliderValue = number | [number, number];\n\nexport type SliderProps<V extends SliderValue = number> = {\n /** The accessible name of the thumb (or of both thumbs of a range), passed translated. */\n label: string;\n /** For a range: each thumb's own name ([\"Minimum\", \"Maximum\"]), passed translated. */\n thumbLabels?: [string, string];\n /** One number (a thumb) or two (a range), controlled. */\n value?: V;\n /** The value at first, uncontrolled. */\n defaultValue?: V;\n /** Called on every step the thumb passes. */\n onValueChange?: (value: V) => void;\n /** Called once the thumb is released (or an accessibility action is done). */\n onValueCommit?: (value: V) => void;\n /** The lowest value. Default 0. */\n min?: number;\n /** The highest value. Default 100. */\n max?: number;\n /** The step. Default 1. */\n step?: number;\n /** The value as words (read, and shown): \"1.5×\", \"15 %\". */\n formatValue?: (value: number) => string;\n /** Shows the label and the value above the track. */\n showLabel?: boolean;\n /** Shows the value floating over the thumb while it is dragged (`\"always\"`: at all times). */\n floatingValue?: boolean | \"always\";\n /** A graduation at every step (`true`, up to 40) or at the values given. */\n ticks?: boolean | readonly number[];\n /** Words under the track at some values. Horizontal only. */\n marks?: readonly { value: number; label: string }[];\n /** `gradient` (accent → accent-2, default) or `solid`. */\n tone?: \"gradient\" | \"solid\";\n /** `horizontal` (default) or `vertical` (give the slider a height). */\n orientation?: \"horizontal\" | \"vertical\";\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst THUMB = 26;\nconst toArray = (v: SliderValue | undefined) => (v === undefined ? undefined : typeof v === \"number\" ? [v] : [...v]);\n\n/**\n * A slider for React Native — the web `Slider`: one value or a range, drawn by the theme, dragged anywhere on the track.\n * Each step the thumb passes ticks under the thumb (`selection` haptic); for VoiceOver and TalkBack each thumb is an\n * adjustable control (swipe up or down by a step), its value read as words.\n */\nexport function Slider<V extends SliderValue = number>({\n label,\n thumbLabels,\n value,\n defaultValue,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n step = 1,\n formatValue = String,\n showLabel,\n floatingValue,\n ticks,\n marks,\n tone = \"gradient\",\n orientation = \"horizontal\",\n disabled,\n style,\n}: SliderProps<V>) {\n const { theme, radius, haptic } = useTheme();\n const range = Array.isArray(value ?? defaultValue);\n const vertical = orientation === \"vertical\";\n const [inner, setInner] = React.useState<number[]>(() => toArray(defaultValue) ?? [min]);\n const current = toArray(value) ?? inner;\n const [length, setLength] = React.useState(0);\n const [dragging, setDragging] = React.useState<number | null>(null);\n const gradientId = useSvgId(\"kzs\");\n const out = (next: number[]) => (range ? [next[0]!, next[1]!] : next[0]) as V;\n const snap = (v: number) => Math.min(max, Math.max(min, Math.round((v - min) / step) * step + min));\n const pct = (v: number) => (v - min) / (max - min || 1);\n\n // The latest state for the responder, created once.\n const live = React.useRef({ current, length, vertical, disabled });\n React.useLayoutEffect(() => {\n live.current = { current, length, vertical, disabled };\n });\n const active = React.useRef(0);\n const start = React.useRef(0);\n const set = (next: number[]) => {\n if (value === undefined) setInner(next);\n onValueChange?.(out(next));\n };\n const move = (thumb: number, to: number) => {\n const now = live.current.current;\n let v = snap(to);\n if (now.length === 2) v = thumb === 0 ? Math.min(v, now[1]!) : Math.max(v, now[0]!);\n if (v === now[thumb]) return;\n haptic(\"selection\");\n const next = [...now];\n next[thumb] = v;\n set(next);\n };\n // A touch on the control (its padding is half a thumb on each end of the track) → a value.\n const at = (position: number) => {\n const { length: l, vertical: vert } = live.current;\n const p = Math.min(1, Math.max(0, (vert ? l + THUMB / 2 - position : position - THUMB / 2) / (l || 1)));\n return min + p * (max - min);\n };\n // What the responder (created once) calls: always this render's.\n const commit = () => onValueCommit?.(out(live.current.current));\n const handlers = React.useRef({ move, at, commit });\n React.useLayoutEffect(() => {\n handlers.current = { move, at, commit };\n });\n // The responder reads the refs in its gestures only, never while rendering.\n // eslint-disable-next-line react-hooks/refs\n const [responder] = React.useState(() =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => !live.current.disabled,\n onMoveShouldSetPanResponder: () => !live.current.disabled,\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: (e) => {\n const pos = live.current.vertical ? e.nativeEvent.locationY : e.nativeEvent.locationX;\n start.current = pos;\n const target = handlers.current.at(pos);\n const now = live.current.current;\n active.current = now.length === 2 && Math.abs(target - now[1]!) < Math.abs(target - now[0]!) ? 1 : 0;\n setDragging(active.current);\n handlers.current.move(active.current, target);\n },\n onPanResponderMove: (_, g) => handlers.current.move(active.current, handlers.current.at(start.current + (live.current.vertical ? g.dy : g.dx))),\n onPanResponderRelease: () => {\n setDragging(null);\n handlers.current.commit();\n },\n onPanResponderTerminate: () => setDragging(null),\n }),\n );\n\n const lo = range ? Math.min(...current) : min;\n const hi = range ? Math.max(...current) : current[0]!;\n const tickValues = ticks === true ? ((max - min) / step <= 40 ? Array.from({ length: Math.round((max - min) / step) + 1 }, (_, i) => min + i * step) : []) : ticks ? [...ticks] : [];\n const along = (p: number) => (vertical ? { bottom: p * length } : { left: p * length });\n const onLayout = (e: LayoutChangeEvent) => setLength(vertical ? e.nativeEvent.layout.height : e.nativeEvent.layout.width);\n const fill = vertical ? { bottom: pct(lo) * length, height: (pct(hi) - pct(lo)) * length, left: 0, right: 0 } : { left: pct(lo) * length, width: (pct(hi) - pct(lo)) * length, top: 0, bottom: 0 };\n\n return (\n <View style={[styles.root, vertical ? styles.rootVertical : null, disabled ? styles.disabled : null, style]}>\n {showLabel ? (\n <View style={styles.header}>\n <Text style={[styles.label, { color: theme.textSecondary }]}>{label}</Text>\n <Text aria-hidden style={[styles.value, { color: theme.textSecondary }]}>\n {current.map(formatValue).join(\" – \")}\n </Text>\n </View>\n ) : null}\n <View {...responder.panHandlers} style={vertical ? styles.controlVertical : styles.control}>\n <View onLayout={onLayout} pointerEvents=\"none\" style={[vertical ? styles.trackVertical : styles.track, { borderRadius: radius.full, backgroundColor: theme.surface3 }]}>\n <View style={[styles.fill, fill, { borderRadius: radius.full, overflow: \"hidden\", backgroundColor: theme.accent }]}>\n {tone === \"gradient\" ? (\n <Svg width=\"100%\" height=\"100%\" aria-hidden>\n <Defs>\n <LinearGradient id={gradientId} x1=\"0\" y1={vertical ? \"1\" : \"0\"} x2={vertical ? \"0\" : \"1\"} y2=\"0\">\n <Stop offset=\"0\" stopColor={theme.accent} />\n <Stop offset=\"1\" stopColor={theme.accent2} />\n </LinearGradient>\n </Defs>\n <Rect width=\"100%\" height=\"100%\" fill={`url(#${gradientId})`} />\n </Svg>\n ) : null}\n </View>\n {tickValues.map((t) => (\n <View key={t} style={[vertical ? styles.tickVertical : styles.tick, along(pct(t)), { backgroundColor: t > lo && t < hi ? theme.onAccent : theme.borderStrong }]} />\n ))}\n </View>\n {current.map((v, i) => (\n <View\n key={i}\n accessible\n role=\"slider\"\n aria-label={range ? (thumbLabels?.[i] ?? label) : label}\n aria-valuenow={v}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={formatValue(v)}\n aria-disabled={disabled || undefined}\n accessibilityActions={[{ name: \"increment\" }, { name: \"decrement\" }]}\n onAccessibilityAction={(e) => {\n const next = snap(v + (e.nativeEvent.actionName === \"increment\" ? step : -step));\n move(i, next);\n const values = [...current];\n values[i] = next;\n onValueCommit?.(out(values));\n }}\n pointerEvents=\"none\"\n style={[styles.thumb, vertical ? { bottom: pct(v) * length, left: (44 - THUMB) / 2, marginLeft: 0, marginTop: 0 } : { left: pct(v) * length - THUMB / 2, top: 0 }, { borderColor: theme.accent, backgroundColor: theme.textOnMedia, shadowColor: theme.scrimStrong }]}\n >\n {floatingValue === \"always\" || (floatingValue && dragging === i) ? (\n <View aria-hidden style={[vertical ? styles.bubbleVertical : styles.bubble, { backgroundColor: theme.textPrimary, borderRadius: radius.md }]}>\n <Text style={[styles.bubbleText, { color: theme.surface0 }]}>{formatValue(v)}</Text>\n </View>\n ) : null}\n </View>\n ))}\n </View>\n {marks?.length && !vertical ? (\n <View aria-hidden style={styles.marks}>\n {marks.map((m) => (\n <Text key={m.value} style={[styles.mark, { left: pct(m.value) * length, color: theme.textSecondary, transform: [{ translateX: m.value === min ? 0 : m.value === max ? -40 : -20 }], textAlign: m.value === min ? \"left\" : m.value === max ? \"right\" : \"center\" }]}>\n {m.label}\n </Text>\n ))}\n </View>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 8, alignSelf: \"stretch\" },\n rootVertical: { alignSelf: \"flex-start\", alignItems: \"center\" },\n header: { flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 },\n label: { fontSize: 12, fontWeight: \"600\" },\n value: { fontSize: 12, fontVariant: [\"tabular-nums\"] },\n control: { height: 44, justifyContent: \"center\", paddingHorizontal: THUMB / 2 },\n controlVertical: { flex: 1, minHeight: 160, width: 44, alignItems: \"center\", paddingVertical: THUMB / 2 },\n track: { height: 6 },\n trackVertical: { width: 6, flex: 1 },\n fill: { position: \"absolute\" },\n tick: { position: \"absolute\", top: 1, width: 1, height: 4, marginLeft: -0.5 },\n tickVertical: { position: \"absolute\", left: 1, height: 1, width: 4, marginBottom: -0.5 },\n thumb: {\n position: \"absolute\",\n width: THUMB,\n height: THUMB,\n borderRadius: THUMB / 2,\n borderWidth: 2.5,\n marginLeft: THUMB / 2,\n marginTop: (44 - THUMB) / 2,\n shadowOpacity: 0.3,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n },\n bubble: { position: \"absolute\", bottom: THUMB + 6, left: -17, minWidth: 56, paddingHorizontal: 8, paddingVertical: 4, alignItems: \"center\" },\n bubbleVertical: { position: \"absolute\", left: THUMB + 8, top: -2, minWidth: 48, paddingHorizontal: 8, paddingVertical: 4, alignItems: \"center\" },\n bubbleText: { fontSize: 12, fontWeight: \"700\", fontVariant: [\"tabular-nums\"] },\n marks: { height: 16, marginHorizontal: THUMB / 2 },\n mark: { position: \"absolute\", width: 40, fontSize: 11, fontWeight: \"500\" },\n disabled: { opacity: 0.4 },\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 { Animated, Easing, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport type { BrandId } from \"../marks/ProductLogo\";\nimport { ProductMark } from \"./ProductMark\";\nimport { useReducedMotion, useTheme } from \"./theme\";\n\nexport type SplashHandoffProps = {\n /** The product whose animated mark holds the screen. */\n product: BrandId;\n /** `true` once the first screen is ready to show: the splash dissolves into it. */\n ready: boolean;\n /**\n * Called once the splash is on screen and painted — hide the native splash here\n * (`SplashScreen.hideAsync()` of expo-splash-screen), so the static image dissolves into this one with no flash.\n */\n onShown?: () => void;\n /** Called when the dissolve is over and the splash has left. */\n onDone?: () => void;\n /** The mark's side, in points. Default 96 — the size of the native splash icon, so nothing jumps. */\n size?: number;\n /** The background. Default: the theme's page colour, the one `app.json` gives the native splash. */\n background?: string;\n /** The words a screen reader hears while it waits (“Orochia is opening”) — passed translated. */\n label: string;\n /** The dissolve, in milliseconds. Default 320; none under reduced motion. */\n duration?: number;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * The splash hand-off: the app's first frame is the static native splash; this puts the product's animated mark at the\n * same place and size over the same background, then dissolves it away once `ready`. Render it above the app's root\n * (absolute, full screen) and unmount nothing yourself: it removes its own content when the dissolve ends. Reduced\n * motion: the mark stands still and the splash leaves without fading.\n */\nexport function SplashHandoff({ product, ready, onShown, onDone, size = 96, background, label, duration = 320, style }: SplashHandoffProps) {\n const { theme } = useTheme();\n const reduce = useReducedMotion();\n const [opacity] = React.useState(() => new Animated.Value(1));\n const [gone, setGone] = React.useState(false);\n React.useEffect(() => {\n if (!ready) return;\n const animation = Animated.timing(opacity, { toValue: 0, duration: reduce ? 0 : duration, easing: Easing.out(Easing.ease), useNativeDriver: true });\n animation.start(({ finished }) => {\n if (finished) {\n setGone(true);\n onDone?.();\n }\n });\n return () => animation.stop();\n }, [ready, reduce, duration, opacity, onDone]);\n if (gone) return null;\n return (\n <Animated.View\n accessible\n role=\"progressbar\"\n aria-label={label}\n aria-busy\n pointerEvents={ready ? \"none\" : \"auto\"}\n onLayout={onShown}\n style={[StyleSheet.absoluteFill, styles.root, { backgroundColor: background ?? theme.surface0, opacity }, style]}\n >\n <View>\n <ProductMark id={product} size={size} animated />\n </View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({ root: { alignItems: \"center\", justifyContent: \"center\", zIndex: 100 } });\n","import { Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type StepProgressProps = {\n /** The current step, from 1. */\n step: number;\n /** How many steps. */\n total: number;\n /** The position in words: `(n, total) => \"Step \" + n + \" of \" + total` — passed translated. */\n label: (step: number, total: number) => string;\n /** The back button's words (“Back”); with `onBack` it shows. */\n backLabel?: string;\n /** Goes back a step. */\n onBack?: () => void;\n /** At the right: a Skip button. */\n trailing?: React.ReactNode;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** The head of a multi-step flow (a sign-up, a profile to fill): back, segments that fill, the position in words. */\nexport function StepProgress({ step, total, label, backLabel, onBack, trailing, style }: StepProgressProps) {\n const { theme, insets } = useTheme();\n const words = label(step, total);\n return (\n <View style={[styles.root, { paddingTop: insets.top + 8 }, style]}>\n <View style={styles.row}>\n {onBack && backLabel ? (\n <Pressable role=\"button\" aria-label={backLabel} hitSlop={10} onPress={onBack} style={styles.back}>\n <Svg width={22} height={22} viewBox=\"0 0 24 24\" aria-hidden>\n <Path d=\"M15 5l-7 7 7 7\" stroke={theme.textPrimary} strokeWidth={2.4} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n </Pressable>\n ) : (\n <View style={styles.back} />\n )}\n <View accessible role=\"progressbar\" aria-label={words} aria-valuemin={1} aria-valuemax={total} aria-valuenow={step} aria-valuetext={words} style={styles.bars}>\n {Array.from({ length: total }, (_, i) => (\n <View key={i} style={[styles.bar, { backgroundColor: i < step ? theme.accent : theme.surface3 }]} />\n ))}\n </View>\n <View style={styles.trailing}>{trailing}</View>\n </View>\n <Txt variant=\"caption\" tone=\"secondary\" style={styles.words} aria-hidden>\n {words}\n </Txt>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { paddingHorizontal: 12, gap: 6 },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n back: { width: 40, height: 40, alignItems: \"center\", justifyContent: \"center\" },\n bars: { flex: 1, flexDirection: \"row\", gap: 4 },\n bar: { flex: 1, height: 4, borderRadius: 2 },\n trailing: { minWidth: 40, alignItems: \"flex-end\" },\n words: { textAlign: \"center\" },\n});\n","import * as React from \"react\";\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\nimport Svg, { Circle, Path } from \"react-native-svg\";\n\nimport { LoaderGlyph } from \"./loader\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type StepStatus = \"done\" | \"current\" | \"upcoming\" | \"error\";\n\nexport type Step = {\n /** Its name — passed translated. */\n title: string;\n /** One line under it (what happens, a time) — passed translated. */\n description?: string;\n /** Where it stands; by default from `current`. */\n status?: StepStatus;\n /** Between 0 and 1 for the current step: its glyph grows to it. */\n value?: number;\n /** Anything under the step while it is current or failed: a progress bar, an action. */\n content?: React.ReactNode;\n};\n\nexport type StepperProps = {\n /** The steps, in order. */\n steps: readonly Step[];\n /** The index of the current step (the steps before are done). */\n current?: number;\n /** vertical (default: a job's run, a checkout) · horizontal (a few short steps across the screen). */\n orientation?: \"vertical\" | \"horizontal\";\n /** The words read after each step's title (`{ done: \"done\", current: \"in progress\", upcoming: \"to come\", error: \"failed\" }`) — passed translated. */\n statusLabels?: Partial<Record<StepStatus, string>>;\n /** The accessible name of the list (“Run of the dubbing job”). */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst WORDS: Record<StepStatus, string> = { done: \"done\", current: \"in progress\", upcoming: \"to come\", error: \"failed\" };\n\n/** The steps of a process, where it stands — the web `Stepper`: done steps checked, the current one tracing, a failure crossed. */\nexport function Stepper({ steps, current = 0, orientation = \"vertical\", statusLabels, \"aria-label\": label, style }: StepperProps) {\n const { theme } = useTheme();\n const words = { ...WORDS, ...statusLabels };\n const vertical = orientation === \"vertical\";\n return (\n <View role=\"list\" aria-label={label} style={[vertical ? styles.column : styles.row, style]}>\n {steps.map((step, i) => {\n const status: StepStatus = step.status ?? (i < current ? \"done\" : i === current ? \"current\" : \"upcoming\");\n const last = i === steps.length - 1;\n const node =\n status === \"current\" ? (\n <LoaderGlyph value={step.value ?? null} size={24} />\n ) : status === \"error\" ? (\n <LoaderGlyph state=\"error\" size={24} />\n ) : (\n <Svg width={24} height={24} viewBox=\"0 0 24 24\" aria-hidden>\n <Circle cx={12} cy={12} r={10} fill={status === \"done\" ? theme.accent : \"none\"} stroke={status === \"done\" ? theme.accent : theme.borderStrong} strokeWidth={2} />\n {status === \"done\" ? <Path d=\"M7.5 12.3l3 3 6-6.3\" stroke={theme.onAccent} strokeWidth={2.2} fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /> : null}\n </Svg>\n );\n const connector = !last ? (\n <View aria-hidden style={[vertical ? styles.vLine : styles.hLine, { backgroundColor: status === \"done\" ? theme.accent : theme.borderDefault }]} />\n ) : null;\n return (\n <View key={i} role=\"listitem\" accessible aria-label={`${step.title}, ${words[status]}`} style={vertical ? styles.vStep : styles.hStep}>\n <View style={vertical ? styles.vRail : styles.hRail}>\n {node}\n {connector}\n </View>\n <View style={[styles.body, vertical && !last ? { paddingBottom: 20 } : null]}>\n <Txt variant=\"label\" tone={status === \"upcoming\" ? \"secondary\" : \"text\"} numberOfLines={vertical ? undefined : 2}>\n {step.title}\n </Txt>\n {step.description ? (\n <Txt variant=\"caption\" tone=\"secondary\">\n {step.description}\n </Txt>\n ) : null}\n {step.content && (status === \"current\" || status === \"error\") ? <View style={styles.content}>{step.content}</View> : null}\n </View>\n </View>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n column: { gap: 0 },\n row: { flexDirection: \"row\" },\n vStep: { flexDirection: \"row\", gap: 12 },\n hStep: { flex: 1, gap: 8 },\n vRail: { alignItems: \"center\", width: 24 },\n hRail: { flexDirection: \"row\", alignItems: \"center\" },\n vLine: { width: 2, flex: 1, marginVertical: 4, borderRadius: 1 },\n hLine: { height: 2, flex: 1, marginHorizontal: 6, borderRadius: 1 },\n body: { flex: 1, gap: 2, paddingTop: 2 },\n content: { marginTop: 8 },\n});\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, Image, PanResponder, Platform, Pressable, type StyleProp, StyleSheet, useWindowDimensions, View, type ViewStyle } from \"react-native\";\nimport Svg, { Defs, LinearGradient, Path, Rect, Stop } from \"react-native-svg\";\n\nimport { useReducedMotion, useSvgId, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type PersonCardProps = {\n /** The person's photos (URIs), the first shown first; tap the left or right side to move between them. */\n photos: readonly { uri: string; alt?: string }[];\n /** The name. */\n name: string;\n /** The age, written after the name. */\n age?: number;\n /** Beside the name: a `VerifiedBadge`. */\n badge?: React.ReactNode;\n /** A line under the name: a `DistanceChip`, a job. */\n meta?: React.ReactNode;\n /** A sentence about the person. */\n bio?: string;\n /** At the bottom: the interests as chips. */\n footer?: React.ReactNode;\n /** The photo position, read: `(n, total) => \"Photo \" + n + \" of \" + total`. */\n photoLabel?: (position: number, total: number) => string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** A person on a card: the photos full bleed (tap a side to change), the name and age over a scrim, a line, a bio, chips. */\nexport function PersonCard({ photos, name, age, badge, meta, bio, footer, photoLabel = (n, t) => `Photo ${n} of ${t}`, style }: PersonCardProps) {\n const { theme, radius } = useTheme();\n const [index, setIndex] = React.useState(0);\n const gradient = useSvgId(\"kz-profile-\");\n const [box, setBox] = React.useState<{ width: number; height: number } | null>(null);\n const photo = photos[index];\n return (\n <View\n // One element for VoiceOver and TalkBack (name, age, bio, the photo position); on the web a named group, so its\n // own buttons and chips stay reachable.\n accessible={Platform.OS !== \"web\"}\n accessibilityActions={photos.length > 1 ? [{ name: \"increment\" }, { name: \"decrement\" }] : []}\n onAccessibilityAction={(e) => setIndex((i) => Math.max(0, Math.min(photos.length - 1, i + (e.nativeEvent.actionName === \"increment\" ? 1 : -1))))}\n role={Platform.OS === \"web\" ? \"group\" : \"img\"}\n aria-label={[`${name}${age !== undefined ? `, ${age}` : \"\"}`, bio, photos.length > 1 ? photoLabel(index + 1, photos.length) : null].filter(Boolean).join(\". \")}\n style={[styles.card, { borderRadius: radius.xl, backgroundColor: theme.media }, style]}\n >\n {photo ? <Image testID=\"person-card-photo\" source={{ uri: photo.uri }} style={StyleSheet.absoluteFill} resizeMode=\"cover\" /> : null}\n {photos.length > 1 ? (\n <>\n <View style={styles.bars} aria-hidden>\n {photos.map((_, i) => (\n <View key={i} style={[styles.bar, { backgroundColor: theme.textOnMedia, opacity: i === index ? 1 : 0.4 }]} />\n ))}\n </View>\n <Pressable aria-hidden accessible={false} focusable={false} tabIndex={-1} style={[styles.half, { left: 0 }]} onPress={() => setIndex((i) => Math.max(0, i - 1))} />\n <Pressable aria-hidden accessible={false} focusable={false} tabIndex={-1} style={[styles.half, { right: 0 }]} onPress={() => setIndex((i) => Math.min(photos.length - 1, i + 1))} />\n </>\n ) : null}\n <View\n testID=\"person-card-overlay\"\n pointerEvents=\"box-none\"\n style={styles.bottom}\n onLayout={(e) => setBox({ width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height })}\n >\n {/* The scrim over the same photo, sized in points from the overlay's own layout: a percentage-sized Svg can be\n placed above its parent on iOS, which cut the photo in two (a dark band over the face, none under the name). */}\n {box ? (\n <Svg testID=\"person-card-scrim\" style={styles.scrim} width={box.width} height={box.height} aria-hidden>\n <Defs>\n <LinearGradient id={gradient} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <Stop offset=\"0\" stopColor={theme.scrimStrong} stopOpacity={0} />\n <Stop offset=\"0.5\" stopColor={theme.scrimStrong} stopOpacity={0.8} />\n <Stop offset=\"1\" stopColor={theme.scrimStrong} stopOpacity={1} />\n </LinearGradient>\n </Defs>\n <Rect x={0} y={0} width={box.width} height={box.height} fill={`url(#${gradient})`} />\n </Svg>\n ) : null}\n <View style={styles.text}>\n <View style={styles.nameRow}>\n <Txt variant=\"display\" tone=\"onMedia\" style={styles.name} numberOfLines={1}>\n {name}\n {age !== undefined ? <Txt variant=\"display\" tone=\"onMedia\" style={styles.age}>{` ${age}`}</Txt> : null}\n </Txt>\n {badge}\n </View>\n {meta}\n {bio ? (\n <Txt tone=\"onMedia\" numberOfLines={2}>\n {bio}\n </Txt>\n ) : null}\n {footer ? <View style={styles.footer}>{footer}</View> : null}\n </View>\n </View>\n </View>\n );\n}\n\nexport type SwipeDirection = \"like\" | \"pass\";\n\nexport type SwipeDeckLabels = {\n /** The like button and action (“Like”). */\n like: string;\n /** The pass button and action (“Pass”). */\n pass: string;\n /** The stamp shown while dragging right (“LIKE”). */\n likeStamp?: string;\n /** The stamp shown while dragging left (“NOPE”). */\n passStamp?: string;\n /** Announced when the deck is empty. */\n empty?: string;\n};\n\nexport type SwipeDeckProps<T> = {\n /** The cards still to decide, the first on top. */\n items: readonly T[];\n /** A card's id. */\n getId: (item: T) => string;\n /** A card (usually a `PersonCard`). */\n renderCard: (item: T) => React.ReactNode;\n /** Called with the card decided and the decision; remove it from `items`. */\n onSwipe: (item: T, direction: SwipeDirection) => void;\n /** Shown when there is no card left (an `EmptyState`). */\n empty?: React.ReactNode;\n /** The words, passed translated. */\n labels: SwipeDeckLabels;\n /** Hide the like and pass buttons (the app draws its own). */\n hideButtons?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * A deck of cards to decide one by one: drag the top card right to like, left to pass (it tilts, a stamp says what it\n * will do, past a third of the screen it flies off), or press the buttons; a tick marks the decision. Screen readers\n * get “Like” and “Pass” as actions of the card. Under reduced motion the card leaves without flying.\n */\nexport function SwipeDeck<T>({ items, getId, renderCard, onSwipe, empty, labels, hideButtons, style }: SwipeDeckProps<T>) {\n const { theme, haptic } = useTheme();\n const reduce = useReducedMotion();\n const { width } = useWindowDimensions();\n const [x] = React.useState(() => new Animated.Value(0));\n const top = items[0];\n const decide = React.useCallback(\n (direction: SwipeDirection) => {\n if (!top) return;\n haptic(\"impact\");\n const done = () => {\n x.setValue(0);\n onSwipe(top, direction);\n if (items.length === 1 && labels.empty) AccessibilityInfo.announceForAccessibility(labels.empty);\n };\n if (reduce) return done();\n Animated.timing(x, { toValue: (direction === \"like\" ? 1.4 : -1.4) * width, duration: 220, useNativeDriver: true }).start(done);\n },\n [top, haptic, reduce, x, width, onSwipe, items.length, labels.empty],\n );\n \n const pan = React.useMemo(\n () =>\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 8 && Math.abs(g.dx) > Math.abs(g.dy),\n onPanResponderMove: (_, g) => x.setValue(g.dx),\n onPanResponderRelease: (_, g) => {\n if (g.dx > width / 3 || g.vx > 1) decide(\"like\");\n else if (g.dx < -width / 3 || g.vx < -1) decide(\"pass\");\n else Animated.spring(x, { toValue: 0, useNativeDriver: true, friction: 6 }).start();\n },\n }),\n [x, width, decide],\n );\n \n const rotate = x.interpolate({ inputRange: [-width, 0, width], outputRange: [\"-14deg\", \"0deg\", \"14deg\"] });\n const likeOpacity = x.interpolate({ inputRange: [0, width / 4], outputRange: [0, 1], extrapolate: \"clamp\" });\n const passOpacity = x.interpolate({ inputRange: [-width / 4, 0], outputRange: [1, 0], extrapolate: \"clamp\" });\n const button = (direction: SwipeDirection) => (\n <Pressable\n role=\"button\"\n aria-label={direction === \"like\" ? labels.like : labels.pass}\n disabled={!top}\n onPress={() => decide(direction)}\n style={({ pressed }) => [\n styles.button,\n { borderColor: direction === \"like\" ? theme.success : theme.danger, backgroundColor: theme.surface1, transform: [{ scale: pressed ? 0.92 : 1 }], opacity: top ? 1 : 0.4 },\n ]}\n >\n <Svg width={28} height={28} viewBox=\"0 0 24 24\" aria-hidden>\n {direction === \"like\" ? (\n <Path d=\"M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z\" fill={theme.success} />\n ) : (\n <Path d=\"M6 6l12 12M18 6 6 18\" stroke={theme.danger} strokeWidth={3} strokeLinecap=\"round\" />\n )}\n </Svg>\n </Pressable>\n );\n return (\n <View style={[styles.deck, style]}>\n <View style={styles.stack}>\n {!top ? (empty ?? null) : null}\n {items\n .slice(0, 2)\n .reverse()\n .map((item) => {\n const isTop = item === top;\n return (\n <Animated.View\n key={getId(item)}\n {...(isTop ? pan.panHandlers : {})}\n accessibilityActions={isTop ? [{ name: \"like\", label: labels.like }, { name: \"pass\", label: labels.pass }] : []}\n onAccessibilityAction={(e) => isTop && decide(e.nativeEvent.actionName as SwipeDirection)}\n aria-hidden={!isTop}\n importantForAccessibility={isTop ? \"auto\" : \"no-hide-descendants\"}\n pointerEvents={isTop ? \"auto\" : \"none\"}\n style={[StyleSheet.absoluteFill, isTop ? { transform: [{ translateX: x }, { rotate }] } : { transform: [{ scale: 0.96 }], opacity: 0.9 }]}\n >\n {renderCard(item)}\n {isTop ? (\n <>\n <Animated.View pointerEvents=\"none\" style={[styles.stamp, styles.stampLike, { borderColor: theme.success, opacity: likeOpacity }]} aria-hidden>\n <Txt variant=\"title\" style={{ color: theme.success }}>\n {labels.likeStamp ?? labels.like.toUpperCase()}\n </Txt>\n </Animated.View>\n <Animated.View pointerEvents=\"none\" style={[styles.stamp, styles.stampPass, { borderColor: theme.danger, opacity: passOpacity }]} aria-hidden>\n <Txt variant=\"title\" style={{ color: theme.danger }}>\n {labels.passStamp ?? labels.pass.toUpperCase()}\n </Txt>\n </Animated.View>\n </>\n ) : null}\n </Animated.View>\n );\n })}\n </View>\n {hideButtons ? null : (\n <View style={styles.buttons}>\n {button(\"pass\")}\n {button(\"like\")}\n </View>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n card: { flex: 1, overflow: \"hidden\" },\n bars: { position: \"absolute\", top: 8, left: 8, right: 8, flexDirection: \"row\", gap: 4 },\n bar: { flex: 1, height: 3, borderRadius: 2 },\n half: { position: \"absolute\", top: 0, bottom: \"40%\", width: \"40%\" },\n bottom: { position: \"absolute\", left: 0, right: 0, bottom: 0, paddingTop: 80 },\n scrim: { position: \"absolute\", top: 0, left: 0 },\n text: { padding: 16, gap: 6 },\n nameRow: { flexDirection: \"row\", alignItems: \"center\", gap: 8 },\n name: { flexShrink: 1, fontSize: 28, lineHeight: 34 },\n age: { fontWeight: \"400\", fontSize: 26 },\n footer: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 6, marginTop: 4 },\n deck: { flex: 1, gap: 16 },\n stack: { flex: 1 },\n stamp: { position: \"absolute\", top: 40, borderWidth: 3, borderRadius: 8, paddingHorizontal: 10, paddingVertical: 2 },\n stampLike: { left: 24, transform: [{ rotate: \"-14deg\" }] },\n stampPass: { right: 24, transform: [{ rotate: \"14deg\" }] },\n buttons: { flexDirection: \"row\", justifyContent: \"center\", gap: 28 },\n button: { width: 64, height: 64, borderRadius: 32, borderWidth: 2, alignItems: \"center\", justifyContent: \"center\" },\n});\n","import * as React from \"react\";\nimport { Animated, PanResponder, Pressable, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { type Theme, useReducedMotion, useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type SwipeAction = {\n /** The action's words — passed translated; also its accessibility action. */\n label: string;\n /** What it does; the row closes first. */\n onPress: () => void;\n /** The tone: `danger` (delete), `accent` (pin, reply), `neutral` (archive, mute). Default `neutral`. */\n tone?: \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** A decorative icon above the words. */\n icon?: React.ReactNode;\n};\n\nexport type SwipeableRowProps = {\n /** The row's content (a `ListItem`). */\n children: React.ReactNode;\n /** Revealed by a swipe to the left, at the right edge (the first is the outermost). */\n trailing?: readonly SwipeAction[];\n /** Revealed by a swipe to the right, at the left edge. */\n leading?: readonly SwipeAction[];\n /** A full swipe past this share of the row runs the outermost action (delete, archive). Default 0.6; `false` never. */\n fullSwipe?: number | false;\n /** Width of each action, in points. Default 80. */\n actionWidth?: number;\n /**\n * The row's own action, for screen readers: the row is one element whose actions are the swipe actions, and\n * activating it calls this (pass the `onPress` of the `ListItem` inside).\n */\n onActivate?: () => void;\n /** The test id of the row's moving part (the accessibility element). */\n testID?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst toneColor = (t: Theme, tone: SwipeAction[\"tone\"]) =>\n ({ neutral: t.surface3, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger })[tone ?? \"neutral\"];\nconst toneText = (tone: SwipeAction[\"tone\"]) => (tone === \"neutral\" || tone === undefined ? \"text\" : \"onAccent\") as \"text\" | \"onAccent\";\n\n/**\n * A row whose actions show under a swipe — mail-style: swipe left for the trailing actions, right for the leading ones,\n * a full swipe runs the outermost one, a tick marks the threshold. Screen readers get the same actions from the\n * rotor (accessibility actions): nothing is reachable only by a gesture.\n */\nexport function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6, actionWidth = 80, onActivate, testID, style }: SwipeableRowProps) {\n const { theme, haptic } = useTheme();\n const reduce = useReducedMotion();\n const [x] = React.useState(() => new Animated.Value(0));\n const [width, setWidth] = React.useState(0);\n const rest = React.useRef(0);\n const armed = React.useRef(false);\n const settle = (to: number) => {\n rest.current = to;\n if (reduce) x.setValue(to);\n else Animated.spring(x, { toValue: to, useNativeDriver: true, damping: 22, stiffness: 240 }).start();\n };\n const run = (action: SwipeAction) => {\n settle(0);\n action.onPress();\n };\n // PanResponder's handlers run on gestures, never during render: the compiler's ref and purity checks misread them.\n /* eslint-disable react-hooks/refs */\n const pan = React.useMemo(\n () =>\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 8 && Math.abs(g.dx) > Math.abs(g.dy) * 1.5,\n onPanResponderMove: (_, g) => {\n let next = rest.current + g.dx;\n if (next < 0 && trailing.length === 0) next = 0;\n if (next > 0 && leading.length === 0) next = 0;\n x.setValue(next);\n const past = fullSwipe !== false && width > 0 && Math.abs(next) > width * fullSwipe;\n if (past !== armed.current) {\n armed.current = past;\n if (past) haptic(\"impact\");\n }\n },\n onPanResponderRelease: (_, g) => {\n const at = rest.current + g.dx;\n if (armed.current) {\n armed.current = false;\n const action = at < 0 ? trailing[0] : leading[0];\n if (action) return run(action);\n }\n const open = at < 0 ? -trailing.length * actionWidth : leading.length * actionWidth;\n settle(Math.abs(at) > actionWidth / 2 ? open : 0);\n },\n onPanResponderTerminate: () => settle(0),\n }),\n [trailing, leading, fullSwipe, width, actionWidth], // eslint-disable-line react-hooks/exhaustive-deps -- run/settle are stable in effect\n );\n /* eslint-enable react-hooks/refs */\n const side = (actions: readonly SwipeAction[], edge: \"left\" | \"right\") => (\n <View aria-hidden style={[styles.side, edge === \"left\" ? { left: 0 } : { right: 0, flexDirection: \"row-reverse\" }]}>\n {actions.map((action, i) => (\n // eslint-disable-next-line react-hooks/refs -- runs on a press, never during render\n <Pressable key={i} focusable={false} tabIndex={-1} onPress={() => run(action)} style={[styles.action, { width: actionWidth, backgroundColor: toneColor(theme, action.tone) }]}>\n {action.icon}\n <Txt variant=\"caption\" tone={toneText(action.tone)} style={styles.actionText} numberOfLines={1}>\n {action.label}\n </Txt>\n </Pressable>\n ))}\n </View>\n );\n const all = [...leading, ...trailing];\n return (\n <View style={[styles.root, style]} onLayout={(e) => setWidth(e.nativeEvent.layout.width)}>\n {leading.length > 0 ? side(leading, \"left\") : null}\n {trailing.length > 0 ? side(trailing, \"right\") : null}\n <Animated.View\n {...pan.panHandlers}\n accessible\n testID={testID}\n accessibilityActions={[...(onActivate ? [{ name: \"activate\" }] : []), ...all.map((a) => ({ name: a.label, label: a.label }))]}\n onAccessibilityAction={(e) => {\n if (e.nativeEvent.actionName === \"activate\") return onActivate?.();\n const action = all.find((a) => a.label === e.nativeEvent.actionName);\n if (action) action.onPress();\n }}\n style={[styles.front, { backgroundColor: theme.surface0, transform: [{ translateX: x }] }]}\n >\n {children}\n </Animated.View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { overflow: \"hidden\" },\n side: { position: \"absolute\", top: 0, bottom: 0, flexDirection: \"row\" },\n action: { alignItems: \"center\", justifyContent: \"center\", gap: 4, paddingHorizontal: 6 },\n actionText: { fontWeight: \"700\" },\n front: {},\n});\n","import * as React from \"react\";\nimport { Animated, Pressable, type StyleProp, StyleSheet, Text, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\n\nexport type SwitchProps = {\n /** The accessible name (\"Push notifications\"), passed translated — also the visible words when `children` is not given and `showLabel` is set. */\n label: string;\n /** On (controlled). */\n checked?: boolean;\n /** On at first, uncontrolled. */\n defaultChecked?: boolean;\n /** Called with the new state. */\n onCheckedChange?: (checked: boolean) => void;\n /** A line under the label, read with the switch (\"Auctions you follow, new messages\"). Shown with `showLabel`. */\n description?: string;\n /** Draws the label (and the description) beside the switch, the whole row pressable: a settings row. */\n showLabel?: boolean;\n /** sm · md (default). */\n size?: \"sm\" | \"md\";\n /** An error under the row, read and announced. */\n error?: string;\n /** Not available. */\n disabled?: boolean;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\nconst SIZES = { sm: { w: 40, h: 24, knob: 18 }, md: { w: 52, h: 32, knob: 26 } } as const;\n\n/**\n * An on/off switch for React Native — the web `Switch`, drawn by the theme (the accent when on, the material's knob),\n * not the system's: the same look on iOS and Android, a `selection` haptic when it flips. `showLabel` makes it a\n * settings row (the label and its description beside it, all pressable).\n */\nexport function Switch({ label, checked, defaultChecked = false, onCheckedChange, description, showLabel, size = \"md\", error, disabled, style }: SwitchProps) {\n const { theme, motion, haptic } = useTheme();\n const [own, setOwn] = React.useState(defaultChecked);\n const on = checked ?? own;\n const d = SIZES[size];\n const travel = d.w - d.knob - (d.h - d.knob);\n const [x] = React.useState(() => new Animated.Value(on ? 1 : 0));\n React.useEffect(() => {\n Animated.timing(x, { toValue: on ? 1 : 0, duration: motion.duration.base, useNativeDriver: true }).start();\n }, [on, x, motion.duration.base]);\n const toggle = () => {\n haptic(\"selection\");\n if (checked === undefined) setOwn(!on);\n onCheckedChange?.(!on);\n };\n const track = (\n <View style={[styles.track, { width: d.w, height: d.h, borderRadius: d.h / 2, backgroundColor: on ? theme.accent : theme.surface3, borderColor: error ? theme.danger : on ? theme.accent : theme.borderDefault }]}>\n <Animated.View\n style={[\n styles.knob,\n {\n width: d.knob,\n height: d.knob,\n borderRadius: d.knob / 2,\n backgroundColor: theme.textOnMedia,\n shadowColor: theme.scrimStrong,\n transform: [{ translateX: x.interpolate({ inputRange: [0, 1], outputRange: [0, travel] }) }],\n },\n ]}\n />\n </View>\n );\n const a11y = {\n role: \"switch\" as const,\n \"aria-checked\": on,\n \"aria-label\": label,\n \"aria-disabled\": disabled || undefined,\n accessibilityHint: error ?? description,\n disabled,\n onPress: toggle,\n };\n if (!showLabel)\n return (\n <Pressable {...a11y} hitSlop={{ top: (44 - d.h) / 2, bottom: (44 - d.h) / 2, left: Math.max(0, (44 - d.w) / 2), right: Math.max(0, (44 - d.w) / 2) }} style={[disabled ? styles.disabled : null, style]}>\n {track}\n </Pressable>\n );\n return (\n <View style={[styles.root, style]}>\n <Pressable {...a11y} style={[styles.row, disabled ? styles.disabled : null]}>\n <View style={styles.text}>\n <Text style={[styles.label, { color: theme.textPrimary }]}>{label}</Text>\n {description ? <Text style={[styles.description, { color: theme.textSecondary }]}>{description}</Text> : null}\n </View>\n {track}\n </Pressable>\n {error ? (\n <Text role=\"alert\" aria-live=\"polite\" style={[styles.description, { color: theme.dangerText }]}>\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 2, alignSelf: \"stretch\" },\n row: { flexDirection: \"row\", alignItems: \"center\", gap: 16, minHeight: 48 },\n text: { flex: 1, gap: 2 },\n label: { fontSize: 15, lineHeight: 20, fontWeight: \"500\" },\n description: { fontSize: 12, lineHeight: 16 },\n track: { justifyContent: \"center\", paddingHorizontal: 2, borderWidth: 1 },\n knob: { shadowOpacity: 0.25, shadowRadius: 3, shadowOffset: { width: 0, height: 1 }, elevation: 2 },\n disabled: { opacity: 0.4 },\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 TabBarItem<T extends string> = {\n /** The section's key (the route name). */\n value: T;\n /** Its name under the icon — passed translated. */\n label: string;\n /** The icon: a function of the selected state and the colour (`(on, color) => <HomeIcon color={color} />`). */\n icon: (selected: boolean, color: string) => React.ReactNode;\n /** A count on the icon (`99+` past 99); `true` for a dot without a number. */\n badge?: number | boolean;\n /** The badge in words for screen readers (“3 unread”) — passed translated. */\n badgeLabel?: string;\n};\n\nexport type TabBarProps<T extends string> = {\n /** The app's main sections, two to five. */\n items: readonly TabBarItem<T>[];\n /** The current section. */\n value: T;\n /** Called with the section pressed (navigate there); a light tick confirms it. */\n onValueChange: (value: T) => void;\n /** Called when the current section is pressed again: scroll it to the top, refresh it. */\n onReselect?: (value: T) => void;\n /** The accessible name of the bar (“Main sections”) — passed translated. */\n \"aria-label\"?: string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * The app's main sections, at the bottom of the screen: an icon and a word each, the current one in the accent, a\n * badge for what is new; clear of the home indicator (the safe area), a tick on change, a second press to go back to\n * the top. Plug it in expo-router's or React Navigation's `tabBar`.\n */\nexport function TabBar<T extends string>({ items, value, onValueChange, onReselect, \"aria-label\": label, style }: TabBarProps<T>) {\n const { theme, insets, haptic } = useTheme();\n return (\n <View role=\"tablist\" aria-label={label} style={[styles.bar, { backgroundColor: theme.glassBg, borderTopColor: theme.glassBorder, paddingBottom: Math.max(6, insets.bottom) }, style]}>\n {items.map((item) => {\n const selected = item.value === value;\n const color = selected ? theme.accentText : theme.textSecondary;\n const badge = item.badge === true ? \"\" : typeof item.badge === \"number\" && item.badge > 0 ? (item.badge > 99 ? \"99+\" : String(item.badge)) : null;\n return (\n <Pressable\n key={item.value}\n role=\"tab\"\n aria-selected={selected}\n onPress={() => {\n haptic(\"selection\");\n if (selected) onReselect?.(item.value);\n else onValueChange(item.value);\n }}\n style={({ pressed }) => [styles.item, { opacity: pressed ? 0.7 : 1 }]}\n >\n <View aria-hidden style={styles.icon}>\n {item.icon(selected, color)}\n {badge !== null ? (\n <View style={[badge ? styles.count : styles.dot, { backgroundColor: theme.danger, borderColor: theme.surface1 }]}>\n {badge ? <Text style={[styles.countText, { color: theme.onAccent }]}>{badge}</Text> : null}\n </View>\n ) : null}\n </View>\n <Text numberOfLines={1} style={[styles.label, { color, fontWeight: selected ? \"700\" : \"500\" }]}>\n {item.label}\n </Text>\n {/* The badge in words, read after the name and never seen (the digits on the icon are decorative). */}\n {badge !== null && item.badgeLabel ? <Text style={styles.unseen}>{`, ${item.badgeLabel}`}</Text> : null}\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n bar: { flexDirection: \"row\", borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 6 },\n item: { flex: 1, alignItems: \"center\", gap: 2, minHeight: 48, justifyContent: \"center\" },\n icon: { width: 28, height: 26, alignItems: \"center\", justifyContent: \"center\" },\n label: { fontSize: 11, lineHeight: 14 },\n unseen: { position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", opacity: 0 },\n count: { position: \"absolute\", top: -4, left: 16, minWidth: 18, height: 18, borderRadius: 9, paddingHorizontal: 4, alignItems: \"center\", justifyContent: \"center\", borderWidth: 2 },\n countText: { fontSize: 10, fontWeight: \"800\", lineHeight: 12 },\n dot: { position: \"absolute\", top: 0, right: 0, width: 10, height: 10, borderRadius: 5, borderWidth: 2 },\n});\n","import * as React from \"react\";\nimport { Pressable, ScrollView, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type TabItem<T extends string> = {\n /** The tab's key. */\n value: T;\n /** Its words — passed translated. */\n label: string;\n /** A count after the words (unread, results). */\n count?: number;\n /** The panel shown while it is selected. */\n content?: React.ReactNode;\n /** Cannot be selected. */\n disabled?: boolean;\n};\n\nexport type TabsProps<T extends string> = {\n /** The tabs, in order. */\n items: readonly TabItem<T>[];\n /** The selected tab (controlled). */\n value?: T;\n /** The selected tab at first, uncontrolled. Default: the first. */\n defaultValue?: T;\n /** Called with the tab pressed; a light tick confirms it. */\n onValueChange?: (value: T) => void;\n /** The accessible name of the tab list — passed translated. */\n \"aria-label\"?: string;\n /** `underline` (default: sections of a screen, scrolls sideways when they do not fit) or `segmented` (two to four views). */\n variant?: \"underline\" | \"segmented\";\n /** Styles merged last, on the root. */\n style?: StyleProp<ViewStyle>;\n};\n\n/**\n * Sections of one screen — the web `Tabs`: a tab list (underlined, scrolling sideways when long, or segmented) and the\n * selected panel under it. For the app's main sections, use `TabBar`.\n */\nexport function Tabs<T extends string>({ items, value, defaultValue, onValueChange, \"aria-label\": label, variant = \"underline\", style }: TabsProps<T>) {\n const { theme, radius, haptic } = useTheme();\n const [own, setOwn] = React.useState<T | undefined>(defaultValue ?? items[0]?.value);\n const current = value ?? own;\n const select = (next: T) => {\n if (next === current) return;\n haptic(\"selection\");\n if (value === undefined) setOwn(next);\n onValueChange?.(next);\n };\n const segmented = variant === \"segmented\";\n const tabs = items.map((item) => {\n const selected = item.value === current;\n return (\n <Pressable\n key={item.value}\n role=\"tab\"\n aria-selected={selected}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n onPress={() => select(item.value)}\n style={[\n segmented ? styles.segment : styles.tab,\n segmented && selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault, borderRadius: radius.sm } : null,\n !segmented ? { borderBottomColor: selected ? theme.accent : \"transparent\" } : null,\n item.disabled ? styles.disabled : null,\n ]}\n >\n <Txt variant=\"label\" tone={selected ? \"text\" : \"secondary\"} numberOfLines={1}>\n {item.label}\n {item.count !== undefined ? <Txt variant=\"caption\" tone=\"secondary\">{` ${item.count}`}</Txt> : null}\n </Txt>\n </Pressable>\n );\n });\n const panel = items.find((i) => i.value === current)?.content;\n return (\n <View style={[styles.root, style]}>\n {segmented ? (\n <View role=\"tablist\" aria-label={label} style={[styles.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius.md }]}>\n {tabs}\n </View>\n ) : (\n <View style={[styles.underline, { borderBottomColor: theme.borderSubtle }]}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false} role=\"tablist\" aria-label={label} contentContainerStyle={styles.scroll}>\n {tabs}\n </ScrollView>\n </View>\n )}\n {panel !== undefined ? <View role=\"tabpanel\">{panel}</View> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { gap: 12 },\n underline: { borderBottomWidth: StyleSheet.hairlineWidth },\n scroll: { gap: 4, paddingHorizontal: 4 },\n tab: { minHeight: 44, justifyContent: \"center\", paddingHorizontal: 12, borderBottomWidth: 2 },\n track: { flexDirection: \"row\", padding: 3, gap: 3, borderWidth: StyleSheet.hairlineWidth, height: 40 },\n segment: { flex: 1, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 8, borderWidth: StyleSheet.hairlineWidth, borderColor: \"transparent\" },\n disabled: { opacity: 0.4 },\n});\n","import { type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nimport { Chip } from \"./chip\";\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type TagOption = { value: string; label: string };\n\nexport type TagSelectorProps = {\n /** The group's name (“Interests”) — passed translated. */\n label: string;\n /** The tags offered. */\n options: readonly TagOption[];\n /** The tags chosen. */\n value: readonly string[];\n /** Called with the tags chosen. */\n onValueChange: (value: string[]) => void;\n /** The most that can be chosen; the others turn off once reached. */\n max?: number;\n /** The count under the tags: `(n, max) => n + \" of \" + max`. */\n countLabel?: (count: number, max: number) => string;\n /** Styles merged last. */\n style?: StyleProp<ViewStyle>;\n};\n\n/** Interests, languages, what one is looking for: toggle chips with a limit and a count — the others rest once it is reached. */\nexport function TagSelector({ label, options, value, onValueChange, max, countLabel, style }: TagSelectorProps) {\n const { haptic } = useTheme();\n const full = max !== undefined && value.length >= max;\n return (\n <View style={[styles.root, style]}>\n <View role=\"group\" aria-label={label} style={styles.wrap}>\n {options.map((option) => {\n const on = value.includes(option.value);\n return (\n <Chip\n key={option.value}\n selected={on}\n disabled={!on && full}\n onSelectedChange={(next) => {\n haptic(\"selection\");\n onValueChange(next ? [...value, option.value] : value.filter((v) => v !== option.value));\n }}\n >\n {option.label}\n </Chip>\n );\n })}\n </View>\n {max !== undefined && countLabel ? (\n <Txt variant=\"caption\" tone={full ? \"accent\" : \"secondary\"} aria-live=\"polite\">\n {countLabel(value.length, max)}\n </Txt>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({ root: { gap: 8 }, wrap: { flexDirection: \"row\", flexWrap: \"wrap\", gap: 8 } });\n","import * as React from \"react\";\nimport { AccessibilityInfo, Animated, PanResponder, 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, haptic } = useTheme();\n const reduce = useReducedMotion();\n // A swipe sideways dismisses it (the close button stays for everyone else).\n const [swipe] = React.useState(() => new Animated.Value(0));\n const drag = React.useMemo(\n () =>\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > 8 && Math.abs(g.dx) > Math.abs(g.dy),\n onPanResponderMove: (_, g) => swipe.setValue(g.dx),\n onPanResponderRelease: (_, g) => {\n if (Math.abs(g.dx) > 96 || Math.abs(g.vx) > 0.9) {\n Animated.timing(swipe, { toValue: Math.sign(g.dx) * 480, duration: 160, useNativeDriver: true }).start(() => dismiss(item.id));\n } else Animated.spring(swipe, { toValue: 0, useNativeDriver: true }).start();\n },\n }),\n [swipe, item.id],\n );\n React.useEffect(() => {\n if (item.tone === \"success\" || item.tone === \"warning\") haptic(item.tone);\n if (item.tone === \"error\") haptic(\"warning\");\n }, [item.id]); // eslint-disable-line react-hooks/exhaustive-deps -- once per toast\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] }) }, { translateX: swipe }] };\n return (\n <Animated.View aria-live=\"polite\" style={motion} {...drag.panHandlers}>\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","import { StyleSheet, View } from \"react-native\";\nimport Svg, { Path } from \"react-native-svg\";\n\nimport { useTheme } from \"./theme\";\nimport { Txt } from \"./txt\";\n\nexport type VerifiedBadgeProps = {\n /** Its words, read (and shown with `showLabel`): “Verified” — passed translated. */\n label: string;\n /** Show the words beside the seal. Default false: the seal alone, named. */\n showLabel?: boolean;\n /** The seal's side, in points. Default 16. */\n size?: number;\n /** On a photo (white seal on the accent, a ring of the media): `media`. Default `surface`. */\n on?: \"surface\" | \"media\";\n};\n\n/** A seal that says the person or the account was verified (a selfie check, an ID) — the accent, named in words. */\nexport function VerifiedBadge({ label, showLabel, size = 16, on = \"surface\" }: VerifiedBadgeProps) {\n const { theme } = useTheme();\n return (\n <View accessible role=\"img\" aria-label={label} style={styles.row}>\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" aria-hidden>\n <Path\n d=\"M12 2.5l2.4 1.7 2.9-.1.9 2.8 2.3 1.8-.9 2.8.9 2.8-2.3 1.8-.9 2.8-2.9-.1L12 21.5l-2.4-1.7-2.9.1-.9-2.8-2.3-1.8.9-2.8-.9-2.8 2.3-1.8.9-2.8 2.9.1z\"\n fill={theme.accent}\n stroke={on === \"media\" ? theme.textOnMedia : \"none\"}\n strokeWidth={1.2}\n />\n <Path d=\"M8.3 12.3l2.5 2.5 4.9-5.2\" fill=\"none\" stroke={theme.onAccent} strokeWidth={2.2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n {showLabel ? (\n <Txt variant=\"caption\" tone={on === \"media\" ? \"onMedia\" : \"accent\"} style={styles.text}>\n {label}\n </Txt>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({ row: { flexDirection: \"row\", alignItems: \"center\", gap: 4 }, text: { fontWeight: \"700\" } });\n"],"mappings":"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","names":["StyleSheet","React","themes","radius","motion","jsx","tone","jsx","radius","StyleSheet","styles","React","AccessibilityInfo","StyleSheet","View","jsx","jsxs","timer","AccessibilityInfo","View","styles","StyleSheet","React","StyleSheet","Text","View","jsx","jsxs","View","styles","StyleSheet","Text","items","React","StyleSheet","Text","jsx","jsxs","tone","styles","Text","StyleSheet","React","Pressable","StyleSheet","View","Svg","Defs","LinearGradient","Stop","jsx","jsxs","look","radius","Svg","StyleSheet","Defs","LinearGradient","Stop","Pressable","styles","View","Image","Pressable","StyleSheet","View","jsx","tone","radius","styles","View","Pressable","StyleSheet","Image","PADDING","React","Animated","Pressable","StyleSheet","View","Svg","Fragment","jsx","jsxs","radius","tone","View","styles","Pressable","Svg","Animated","StyleSheet","React","Pressable","StyleSheet","Text","View","Svg","Path","jsx","jsxs","radius","View","styles","Svg","Path","Pressable","Text","StyleSheet","React","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","Text","styles","radius","on","_r","disabled","_s","style","children","rest","View","Pressable","StyleSheet","React","Pressable","ScrollView","StyleSheet","Text","TextInput","View","Svg","Path","React","Animated","Modal","Pressable","StyleSheet","Text","View","jsx","jsxs","radius","motion","Animated","Modal","View","styles","StyleSheet","Pressable","Text","Fragment","jsx","jsxs","Svg","Path","radius","View","styles","Text","Pressable","ScrollView","timer","TextInput","StyleSheet","React","Animated","StyleSheet","Text","jsx","jsxs","Animated","styles","Text","StyleSheet","React","StyleSheet","Text","TextInput","View","jsx","jsxs","radius","View","styles","Text","TextInput","StyleSheet","React","Pressable","ScrollView","StyleSheet","Text","View","Svg","Path","React","Pressable","ScrollView","StyleSheet","Text","View","jsx","jsxs","radius","View","styles","Text","ScrollView","Pressable","StyleSheet","jsx","jsxs","Chevron","Svg","Path","radius","Pressable","styles","View","Text","ScrollView","StyleSheet","StyleSheet","View","jsx","jsxs","items","radius","View","styles","StyleSheet","StyleSheet","View","jsx","jsxs","View","styles","StyleSheet","Pressable","StyleSheet","View","jsx","jsxs","View","styles","Pressable","StyleSheet","React","StyleSheet","Text","TextInput","View","jsx","jsxs","radius","View","styles","Text","TextInput","StyleSheet","Animated","StyleSheet","View","React","AccessibilityInfo","Animated","Easing","jsx","jsxs","Animated","styles","View","StyleSheet","React","Animated","Pressable","StyleSheet","View","Svg","Path","jsx","jsxs","Animated","View","styles","Pressable","Svg","Path","StyleSheet","React","AccessibilityInfo","Animated","Image","Modal","Pressable","StyleSheet","View","jsx","jsxs","Animated","dismiss","AccessibilityInfo","Modal","StyleSheet","View","Image","styles","Pressable","View","Svg","Circle","Defs","LinearGradient","Path","Stop","useEffect","useState","AccessibilityInfo","Animated","Easing","Fragment","jsx","jsxs","Animated","LinearGradient","Stop","Circle","View","Svg","Defs","Path","React","AccessibilityInfo","Animated","Easing","StyleSheet","View","Svg","Circle","Path","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","React","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","React","Path","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","Animated","LinearGradient","Stop","View","Svg","Defs","RadialGradient","Circle","Path","jsx","jsx","jsxs","Animated","Easing","Svg","Path","Circle","timer","radius","show","AccessibilityInfo","View","styles","StyleSheet","React","AccessibilityInfo","Animated","Easing","StyleSheet","View","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","Ellipse","LinearGradient","Path","Rect","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","tone","look","View","Svg","Defs","LinearGradient","Stop","Ellipse","Path","Circle","Rect","jsx","jsxs","Animated","AccessibilityInfo","Easing","tone","styles","View","StyleSheet","React","AccessibilityInfo","Animated","Easing","Modal","Pressable","StyleSheet","View","Svg","Path","jsx","jsxs","Animated","AccessibilityInfo","Easing","Modal","View","styles","StyleSheet","Svg","Path","Pressable","StyleSheet","View","Svg","Circle","jsx","jsxs","tone","View","styles","Svg","Circle","StyleSheet","React","AccessibilityInfo","Animated","Easing","Text","jsx","tone","Animated","AccessibilityInfo","Easing","Text","React","ScrollView","StyleSheet","View","jsx","jsxs","View","styles","ScrollView","StyleSheet","React","Platform","Pressable","StyleSheet","TextInput","View","jsx","jsxs","radius","Pressable","styles","View","TextInput","Platform","StyleSheet","Pressable","StyleSheet","Text","View","Svg","Path","jsx","jsxs","Chevron","Svg","Path","radius","Pressable","styles","View","Text","StyleSheet","StyleSheet","View","Fragment","jsx","jsxs","radius","View","styles","StyleSheet","useEffect","useState","AccessibilityInfo","Animated","Easing","View","Svg","Circle","Defs","LinearGradient","Path","RadialGradient","Stop","jsx","jsxs","useState","Animated","useEffect","AccessibilityInfo","Easing","tone","View","Svg","Defs","LinearGradient","Stop","RadialGradient","Path","Circle","React","Image","Pressable","StyleSheet","View","Svg","Path","jsx","jsxs","radius","View","styles","Pressable","Image","StyleSheet","Svg","Path","React","Animated","StyleSheet","View","jsx","jsxs","View","styles","Animated","radius","StyleSheet","React","Animated","Easing","StyleSheet","View","Svg","Circle","Defs","LinearGradient","Rect","Stop","jsx","jsxs","Animated","Circle","BAR","RING","Easing","Defs","LinearGradient","Stop","View","styles","StyleSheet","Svg","Rect","React","AccessibilityInfo","Animated","StyleSheet","View","jsx","jsxs","Animated","AccessibilityInfo","View","styles","StyleSheet","React","Animated","Pressable","StyleSheet","Text","View","Svg","Path","jsx","jsxs","Svg","Path","radius","motion","Animated","Pressable","styles","View","Text","StyleSheet","Platform","ScrollView","StyleSheet","View","Fragment","jsx","jsxs","ScrollView","styles","View","Platform","StyleSheet","React","Pressable","StyleSheet","TextInput","View","Svg","Circle","Path","jsx","jsxs","radius","timer","View","styles","Svg","Circle","Path","TextInput","Pressable","StyleSheet","Pressable","StyleSheet","Text","View","jsx","radius","View","styles","Pressable","Text","StyleSheet","React","Animated","jsx","Animated","React","PanResponder","StyleSheet","Text","View","Svg","Defs","LinearGradient","Rect","Stop","jsx","jsxs","marks","tone","radius","PanResponder","View","styles","Text","Svg","Defs","LinearGradient","Stop","Rect","StyleSheet","ActivityIndicator","jsx","ActivityIndicator","React","Animated","Easing","StyleSheet","View","jsx","Animated","Easing","StyleSheet","styles","View","Pressable","StyleSheet","View","Svg","Path","jsx","jsxs","View","styles","Pressable","Svg","Path","StyleSheet","StyleSheet","View","Svg","Circle","Path","jsx","jsxs","View","styles","Svg","Circle","Path","StyleSheet","React","AccessibilityInfo","Animated","Image","PanResponder","Platform","Pressable","StyleSheet","useWindowDimensions","View","Svg","Defs","LinearGradient","Path","Rect","Stop","Fragment","jsx","jsxs","radius","View","Platform","styles","Image","StyleSheet","Pressable","Svg","Defs","LinearGradient","Stop","Rect","items","useWindowDimensions","Animated","AccessibilityInfo","PanResponder","Path","React","Animated","PanResponder","Pressable","StyleSheet","View","jsx","jsxs","tone","Animated","PanResponder","View","styles","Pressable","StyleSheet","React","Animated","Pressable","StyleSheet","Text","View","jsx","jsxs","motion","Animated","View","styles","Pressable","Text","StyleSheet","Pressable","StyleSheet","Text","View","jsx","jsxs","items","View","styles","Pressable","Text","StyleSheet","React","Pressable","ScrollView","StyleSheet","View","jsx","jsxs","items","radius","Pressable","styles","View","ScrollView","StyleSheet","StyleSheet","View","jsx","jsxs","View","styles","StyleSheet","React","AccessibilityInfo","Animated","PanResponder","Pressable","StyleSheet","Text","View","Fragment","jsx","jsxs","listeners","subscribe","tone","radius","Animated","PanResponder","AccessibilityInfo","timer","View","styles","Pressable","Text","motion","StyleSheet","StyleSheet","View","Svg","Path","jsx","jsxs","View","styles","Svg","Path","StyleSheet"]}
|