{"version":3,"file":"index-node22.mjs","sources":["../src/core/ThemeContext.ts","../src/themeVariables.ts","../src/ui/containers/ScopedTheme.tsx","../src/core/AlouetteProvider.tsx","../src/core/AlouetteDecorator.tsx","../src/core/useThemeToken.ts","../src/ui/primitives/View.tsx","../src/ui/containers/AccentScope.tsx","../src/ui/primitives/Text.tsx","../src/ui/primitives/ScrollView.tsx","../src/ui/primitives/FlatList.tsx","../src/ui/primitives/SectionList.tsx","../src/ui/stacks/stacks.tsx","../src/ui/stacks/Separator.tsx","../src/ui/containers/Box.tsx","../src/ui/containers/Surface.tsx","../src/ui/styled.tsx","../src/ui/story-components/StoryTitle.tsx","../src/ui/story-components/Story.tsx","../src/ui/story-components/StoryContainer.tsx","../src/ui/story-components/StoryDecorator.tsx","../src/ui/story-components/StoryGrid.tsx","../src/ui/containers/StableAccentScope.tsx","../src/ui/containers/Presence.tsx","../src/animationDurationsMs.ts","../src/ui/data/PressableBox.tsx","../src/core/useColorToken.ts","../src/ui/primitives/Icon.tsx","../src/ui/feedback/RingCircle.tsx","../src/ui/feedback/useSimulatedProgress.ts","../src/ui/feedback/CircularProgress.tsx","../src/ui/actions/Button.tsx","../src/ui/actions/IconButton.tsx","../src/ui/containers/Modal.tsx","../src/ui/containers/AlertDialog.tsx","../src/ui/feedback/Message.tsx","../src/ui/actions/usePressAsync.ts","../src/ui/actions/ActionButton.tsx","../src/ui/inputs/InputText.tsx","../src/ui/inputs/TextArea.tsx","../src/ui/inputs/Switch.tsx","../src/ui/inputs/Select.shared.tsx","../src/ui/inputs/Select.tsx","../src/ui/forms/FormItem.tsx","../src/ui/forms/Form.tsx","../src/ui/forms/FormField.tsx","../src/ui/forms/FormFieldArray.tsx","../src/ui/forms/FormSubmitButton.tsx","../src/ui/forms/SimpleVForm.tsx","../src/ui/feedback/Badge.tsx","../src/ui/feedback/ConnectionState.tsx","../src/ui/feedback/LinearProgress.tsx","../src/ui/data/PressableListItem.tsx","../src/ui/layout/GradientBackground.tsx","../src/ui/layout/GradientScrollView.tsx","../src/config/Breakpoints.ts","../src/windowSize/useCurrentBreakpointName.ts","../src/windowSize/SwitchBreakpoints.tsx","../src/expo/ExternalLink.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { AlouetteModeTheme, AlouetteTheme } from \"./AlouetteConfig\";\n\n/**\n * Tracks the currently applied theme name (e.g. \"dark_brand\") so JS reads\n * (`useThemeToken`) and accent composition (`AccentScope`) know which theme\n * is active. Set by `ScopedTheme` alongside NativeWind's variable context.\n *\n * Defaults to \"light\", matching the light defaults in the global `@theme` block.\n */\nexport const ThemeContext = createContext<AlouetteTheme>(\"light\");\n\nexport function useCurrentTheme(): AlouetteTheme {\n  return useContext(ThemeContext);\n}\n\nexport function useCurrentMode(): AlouetteModeTheme {\n  return useContext(ThemeContext).startsWith(\"dark\") ? \"dark\" : \"light\";\n}\n","/* Generated by scripts/build-css.ts. DO NOT EDIT. */\nimport type { AlouetteTheme } from \"./core/AlouetteConfig\";\n\n/**\n * Resolved CSS-variable maps for every theme, shared with global.css. Feeds\n * `ScopedTheme` (NativeWind's `VariableContextProvider`) and `useThemeToken`.\n */\nexport const themeVariables: Record<\n  AlouetteTheme,\n  Record<`--${string}`, string>\n> = {\n  \"light\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#EBEBEB\",\n    \"--color-surface\": \"#FAFAFA\",\n    \"--color-highlight\": \"#FFFFFF\",\n    \"--color-enabled\": \"#C7C7C7\",\n    \"--color-highlight-accent\": \"#E0E0E0\",\n    \"--color-lowered\": \"#E0E0E0\",\n    \"--color-screen-gradient-start\": \"#E0E0E0\",\n    \"--color-screen-gradient-middle\": \"#C7C7C7\",\n    \"--color-screen-gradient-end\": \"#B8B8B8\",\n    \"--color-border-muted\": \"#8F8F8F\",\n    \"--color-border-sharp\": \"#616161\",\n    \"--color-interactive-contained-pressable\": \"#FFFFFF\",\n    \"--color-interactive-contained-hover\": \"#FAFAFA\",\n    \"--color-interactive-contained-focus\": \"#FAFAFA\",\n    \"--color-interactive-contained-active\": \"#EBEBEB\",\n    \"--color-interactive-outlined-pressable\": \"#616161\",\n    \"--color-interactive-outlined-hover\": \"#8F8F8F\",\n    \"--color-interactive-outlined-focus\": \"#8F8F8F\",\n    \"--color-interactive-outlined-active\": \"#8F8F8F\",\n    \"--color-interactive-outlined-outline-focus\": \"#8F8F8F\",\n    \"--color-interactive-active\": \"#616161\",\n    \"--color-interactive-pressable\": \"#474747\",\n    \"--color-interactive-hover\": \"#141414\",\n    \"--color-sharp\": \"#141414\",\n    \"--color-accent\": \"#141414\",\n    \"--color-accent-muted\": \"#616161\",\n    \"--color-on-accent\": \"#141414\",\n    \"--color-on-accent-muted\": \"#616161\",\n    \"--color-selection\": \"#47474740\",\n    \"--color-interactive-accent-contained-bg\": \"#EBEBEB\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#FAFAFA\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#FAFAFA\",\n    \"--color-interactive-accent-contained-bg-active\": \"#FAFAFA\"\n  },\n  \"dark\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#1F1F1F\",\n    \"--color-surface\": \"#292929\",\n    \"--color-highlight\": \"#333333\",\n    \"--color-enabled\": \"#525252\",\n    \"--color-highlight-accent\": \"#333333\",\n    \"--color-lowered\": \"#0F0F0F\",\n    \"--color-screen-gradient-start\": \"#292929\",\n    \"--color-screen-gradient-middle\": \"#1F1F1F\",\n    \"--color-screen-gradient-end\": \"#0F0F0F\",\n    \"--color-border-muted\": \"#525252\",\n    \"--color-border-sharp\": \"#A8A8A8\",\n    \"--color-interactive-contained-pressable\": \"#474747\",\n    \"--color-interactive-contained-hover\": \"#525252\",\n    \"--color-interactive-contained-focus\": \"#525252\",\n    \"--color-interactive-contained-active\": \"#525252\",\n    \"--color-interactive-outlined-pressable\": \"#525252\",\n    \"--color-interactive-outlined-hover\": \"#A8A8A8\",\n    \"--color-interactive-outlined-focus\": \"#A8A8A8\",\n    \"--color-interactive-outlined-active\": \"#A8A8A8\",\n    \"--color-interactive-outlined-outline-focus\": \"#525252\",\n    \"--color-interactive-active\": \"#A8A8A8\",\n    \"--color-interactive-pressable\": \"#C2C2C2\",\n    \"--color-interactive-hover\": \"#F5F5F5\",\n    \"--color-sharp\": \"#F5F5F5\",\n    \"--color-accent\": \"#F5F5F5\",\n    \"--color-accent-muted\": \"#C2C2C2\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#C2C2C2\",\n    \"--color-selection\": \"#C2C2C240\",\n    \"--color-interactive-accent-contained-bg\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#525252\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#525252\",\n    \"--color-interactive-accent-contained-bg-active\": \"#525252\"\n  },\n  \"light_brand\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#DFF1F6\",\n    \"--color-surface\": \"#EFF8FB\",\n    \"--color-highlight\": \"#F7FBFD\",\n    \"--color-enabled\": \"#99DFF5\",\n    \"--color-highlight-accent\": \"#C7EEF9\",\n    \"--color-lowered\": \"#C7EEF9\",\n    \"--color-screen-gradient-start\": \"#C7EEF9\",\n    \"--color-screen-gradient-middle\": \"#99DFF5\",\n    \"--color-screen-gradient-end\": \"#7DD7F2\",\n    \"--color-border-muted\": \"#23C8FB\",\n    \"--color-border-sharp\": \"#037496\",\n    \"--color-interactive-contained-pressable\": \"#037496\",\n    \"--color-interactive-contained-hover\": \"#049AC8\",\n    \"--color-interactive-contained-focus\": \"#049AC8\",\n    \"--color-interactive-contained-active\": \"#23C8FB\",\n    \"--color-interactive-outlined-pressable\": \"#037496\",\n    \"--color-interactive-outlined-hover\": \"#23C8FB\",\n    \"--color-interactive-outlined-focus\": \"#23C8FB\",\n    \"--color-interactive-outlined-active\": \"#23C8FB\",\n    \"--color-interactive-outlined-outline-focus\": \"#23C8FB\",\n    \"--color-interactive-active\": \"#037496\",\n    \"--color-interactive-pressable\": \"#024D64\",\n    \"--color-interactive-hover\": \"#011F28\",\n    \"--color-sharp\": \"#011F28\",\n    \"--color-accent\": \"#024D64\",\n    \"--color-accent-muted\": \"#037496\",\n    \"--color-on-accent\": \"#FFFFFF\",\n    \"--color-on-accent-muted\": \"#C7EEF9\",\n    \"--color-selection\": \"#024D6440\",\n    \"--color-interactive-accent-contained-bg\": \"#DFF1F6\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#EFF8FB\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#EFF8FB\",\n    \"--color-interactive-accent-contained-bg-active\": \"#EFF8FB\"\n  },\n  \"light_info\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#DFF0F6\",\n    \"--color-surface\": \"#EFF8FB\",\n    \"--color-highlight\": \"#F7FBFD\",\n    \"--color-enabled\": \"#99DEF5\",\n    \"--color-highlight-accent\": \"#C7EDF9\",\n    \"--color-lowered\": \"#C7EDF9\",\n    \"--color-screen-gradient-start\": \"#C7EDF9\",\n    \"--color-screen-gradient-middle\": \"#99DEF5\",\n    \"--color-screen-gradient-end\": \"#7DD5F2\",\n    \"--color-border-muted\": \"#23C5FB\",\n    \"--color-border-sharp\": \"#037196\",\n    \"--color-interactive-contained-pressable\": \"#037196\",\n    \"--color-interactive-contained-hover\": \"#0497C8\",\n    \"--color-interactive-contained-focus\": \"#0497C8\",\n    \"--color-interactive-contained-active\": \"#23C5FB\",\n    \"--color-interactive-outlined-pressable\": \"#037196\",\n    \"--color-interactive-outlined-hover\": \"#23C5FB\",\n    \"--color-interactive-outlined-focus\": \"#23C5FB\",\n    \"--color-interactive-outlined-active\": \"#23C5FB\",\n    \"--color-interactive-outlined-outline-focus\": \"#23C5FB\",\n    \"--color-interactive-active\": \"#037196\",\n    \"--color-interactive-pressable\": \"#024B64\",\n    \"--color-interactive-hover\": \"#011E28\",\n    \"--color-sharp\": \"#011E28\",\n    \"--color-accent\": \"#024B64\",\n    \"--color-accent-muted\": \"#037196\",\n    \"--color-on-accent\": \"#FFFFFF\",\n    \"--color-on-accent-muted\": \"#C7EDF9\",\n    \"--color-selection\": \"#024B6440\",\n    \"--color-interactive-accent-contained-bg\": \"#DFF0F6\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#EFF8FB\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#EFF8FB\",\n    \"--color-interactive-accent-contained-bg-active\": \"#EFF8FB\"\n  },\n  \"light_success\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#DFF6DF\",\n    \"--color-surface\": \"#EFFBEF\",\n    \"--color-highlight\": \"#F7FDF7\",\n    \"--color-enabled\": \"#91F391\",\n    \"--color-highlight-accent\": \"#BFF8BF\",\n    \"--color-lowered\": \"#BFF8BF\",\n    \"--color-screen-gradient-start\": \"#BFF8BF\",\n    \"--color-screen-gradient-middle\": \"#91F391\",\n    \"--color-screen-gradient-end\": \"#75F075\",\n    \"--color-border-muted\": \"#19FA19\",\n    \"--color-border-sharp\": \"#027802\",\n    \"--color-interactive-contained-pressable\": \"#027802\",\n    \"--color-interactive-contained-hover\": \"#03AA03\",\n    \"--color-interactive-contained-focus\": \"#03AA03\",\n    \"--color-interactive-contained-active\": \"#19FA19\",\n    \"--color-interactive-outlined-pressable\": \"#027802\",\n    \"--color-interactive-outlined-hover\": \"#19FA19\",\n    \"--color-interactive-outlined-focus\": \"#19FA19\",\n    \"--color-interactive-outlined-active\": \"#19FA19\",\n    \"--color-interactive-outlined-outline-focus\": \"#19FA19\",\n    \"--color-interactive-active\": \"#027802\",\n    \"--color-interactive-pressable\": \"#014601\",\n    \"--color-interactive-hover\": \"#012801\",\n    \"--color-sharp\": \"#012801\",\n    \"--color-accent\": \"#014601\",\n    \"--color-accent-muted\": \"#027802\",\n    \"--color-on-accent\": \"#FFFFFF\",\n    \"--color-on-accent-muted\": \"#BFF8BF\",\n    \"--color-selection\": \"#01460140\",\n    \"--color-interactive-accent-contained-bg\": \"#DFF6DF\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#EFFBEF\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#EFFBEF\",\n    \"--color-interactive-accent-contained-bg-active\": \"#EFFBEF\"\n  },\n  \"light_warning\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#F6EEDF\",\n    \"--color-surface\": \"#FBF7EF\",\n    \"--color-highlight\": \"#FDFBF7\",\n    \"--color-enabled\": \"#F3D291\",\n    \"--color-highlight-accent\": \"#F8E5BF\",\n    \"--color-lowered\": \"#F8E5BF\",\n    \"--color-screen-gradient-start\": \"#F8E5BF\",\n    \"--color-screen-gradient-middle\": \"#F3D291\",\n    \"--color-screen-gradient-end\": \"#F0C775\",\n    \"--color-border-muted\": \"#FAAF19\",\n    \"--color-border-sharp\": \"#8C5E03\",\n    \"--color-interactive-contained-pressable\": \"#8C5E03\",\n    \"--color-interactive-contained-hover\": \"#BE8004\",\n    \"--color-interactive-contained-focus\": \"#BE8004\",\n    \"--color-interactive-contained-active\": \"#FAAF19\",\n    \"--color-interactive-outlined-pressable\": \"#8C5E03\",\n    \"--color-interactive-outlined-hover\": \"#FAAF19\",\n    \"--color-interactive-outlined-focus\": \"#FAAF19\",\n    \"--color-interactive-outlined-active\": \"#FAAF19\",\n    \"--color-interactive-outlined-outline-focus\": \"#FAAF19\",\n    \"--color-interactive-active\": \"#8C5E03\",\n    \"--color-interactive-pressable\": \"#5A3D02\",\n    \"--color-interactive-hover\": \"#281B01\",\n    \"--color-sharp\": \"#281B01\",\n    \"--color-accent\": \"#5A3D02\",\n    \"--color-accent-muted\": \"#8C5E03\",\n    \"--color-on-accent\": \"#FFFFFF\",\n    \"--color-on-accent-muted\": \"#F8E5BF\",\n    \"--color-selection\": \"#5A3D0240\",\n    \"--color-interactive-accent-contained-bg\": \"#F6EEDF\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#FBF7EF\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#FBF7EF\",\n    \"--color-interactive-accent-contained-bg-active\": \"#FBF7EF\"\n  },\n  \"light_danger\": {\n    \"--color-translucent\": \"#ffffff66\",\n    \"--color-disabled-sharp\": \"#616161\",\n    \"--color-disabled-muted\": \"#8F8F8F\",\n    \"--color-disabled-interactive\": \"#B8B8B8\",\n    \"--color-disabled-interactive-muted\": \"#E0E0E0\",\n    \"--color-muted\": \"#474747\",\n    \"--color-form-border-disabled\": \"#B8B8B8\",\n    \"--color-form-placeholder\": \"#616161\",\n    \"--color-form-disabled-text\": \"#474747\",\n    \"--color-interactive-contained-disabled\": \"#C7C7C7\",\n    \"--color-interactive-outlined-disabled\": \"#B8B8B8\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#EBEBEB\",\n    \"--color-interactive-accent-outlined-disabled\": \"#B8B8B8\",\n    \"--color-screen\": \"#F6E0DF\",\n    \"--color-surface\": \"#FBEFEF\",\n    \"--color-highlight\": \"#FDF7F7\",\n    \"--color-enabled\": \"#F7A4A1\",\n    \"--color-highlight-accent\": \"#FBD2D0\",\n    \"--color-lowered\": \"#FBD2D0\",\n    \"--color-screen-gradient-start\": \"#FBD2D0\",\n    \"--color-screen-gradient-middle\": \"#F7A4A1\",\n    \"--color-screen-gradient-end\": \"#F48985\",\n    \"--color-border-muted\": \"#FB342D\",\n    \"--color-border-sharp\": \"#A00803\",\n    \"--color-interactive-contained-pressable\": \"#A00803\",\n    \"--color-interactive-contained-hover\": \"#D20B04\",\n    \"--color-interactive-contained-focus\": \"#D20B04\",\n    \"--color-interactive-contained-active\": \"#FB342D\",\n    \"--color-interactive-outlined-pressable\": \"#A00803\",\n    \"--color-interactive-outlined-hover\": \"#FB342D\",\n    \"--color-interactive-outlined-focus\": \"#FB342D\",\n    \"--color-interactive-outlined-active\": \"#FB342D\",\n    \"--color-interactive-outlined-outline-focus\": \"#FB342D\",\n    \"--color-interactive-active\": \"#A00803\",\n    \"--color-interactive-pressable\": \"#6E0602\",\n    \"--color-interactive-hover\": \"#280201\",\n    \"--color-sharp\": \"#280201\",\n    \"--color-accent\": \"#6E0602\",\n    \"--color-accent-muted\": \"#A00803\",\n    \"--color-on-accent\": \"#FFFFFF\",\n    \"--color-on-accent-muted\": \"#FBD2D0\",\n    \"--color-selection\": \"#6E060240\",\n    \"--color-interactive-accent-contained-bg\": \"#F6E0DF\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#FBEFEF\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#FBEFEF\",\n    \"--color-interactive-accent-contained-bg-active\": \"#FBEFEF\"\n  },\n  \"dark_brand\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#0D2830\",\n    \"--color-surface\": \"#123540\",\n    \"--color-highlight\": \"#104E60\",\n    \"--color-enabled\": \"#1E94B8\",\n    \"--color-highlight-accent\": \"#104E60\",\n    \"--color-lowered\": \"#071418\",\n    \"--color-screen-gradient-start\": \"#123540\",\n    \"--color-screen-gradient-middle\": \"#0D2830\",\n    \"--color-screen-gradient-end\": \"#071418\",\n    \"--color-border-muted\": \"#1E94B8\",\n    \"--color-border-sharp\": \"#5CD1F5\",\n    \"--color-interactive-contained-pressable\": \"#156A84\",\n    \"--color-interactive-contained-hover\": \"#1E94B8\",\n    \"--color-interactive-contained-focus\": \"#1E94B8\",\n    \"--color-interactive-contained-active\": \"#1E94B8\",\n    \"--color-interactive-outlined-pressable\": \"#1E94B8\",\n    \"--color-interactive-outlined-hover\": \"#5CD1F5\",\n    \"--color-interactive-outlined-focus\": \"#5CD1F5\",\n    \"--color-interactive-outlined-active\": \"#5CD1F5\",\n    \"--color-interactive-outlined-outline-focus\": \"#1E94B8\",\n    \"--color-interactive-active\": \"#5CD1F5\",\n    \"--color-interactive-pressable\": \"#8CDFF8\",\n    \"--color-interactive-hover\": \"#D9F4FD\",\n    \"--color-sharp\": \"#D9F4FD\",\n    \"--color-accent\": \"#8CDFF8\",\n    \"--color-accent-muted\": \"#8CDFF8\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#8CDFF8\",\n    \"--color-selection\": \"#8CDFF840\",\n    \"--color-interactive-accent-contained-bg\": \"#156A84\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#1E94B8\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#1E94B8\",\n    \"--color-interactive-accent-contained-bg-active\": \"#1E94B8\"\n  },\n  \"dark_info\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#0D2730\",\n    \"--color-surface\": \"#123440\",\n    \"--color-highlight\": \"#104C60\",\n    \"--color-enabled\": \"#1E92B8\",\n    \"--color-highlight-accent\": \"#104C60\",\n    \"--color-lowered\": \"#071418\",\n    \"--color-screen-gradient-start\": \"#123440\",\n    \"--color-screen-gradient-middle\": \"#0D2730\",\n    \"--color-screen-gradient-end\": \"#071418\",\n    \"--color-border-muted\": \"#1E92B8\",\n    \"--color-border-sharp\": \"#5CCEF5\",\n    \"--color-interactive-contained-pressable\": \"#156884\",\n    \"--color-interactive-contained-hover\": \"#1E92B8\",\n    \"--color-interactive-contained-focus\": \"#1E92B8\",\n    \"--color-interactive-contained-active\": \"#1E92B8\",\n    \"--color-interactive-outlined-pressable\": \"#1E92B8\",\n    \"--color-interactive-outlined-hover\": \"#5CCEF5\",\n    \"--color-interactive-outlined-focus\": \"#5CCEF5\",\n    \"--color-interactive-outlined-active\": \"#5CCEF5\",\n    \"--color-interactive-outlined-outline-focus\": \"#1E92B8\",\n    \"--color-interactive-active\": \"#5CCEF5\",\n    \"--color-interactive-pressable\": \"#8CDDF8\",\n    \"--color-interactive-hover\": \"#D9F4FD\",\n    \"--color-sharp\": \"#D9F4FD\",\n    \"--color-accent\": \"#8CDDF8\",\n    \"--color-accent-muted\": \"#8CDDF8\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#8CDDF8\",\n    \"--color-selection\": \"#8CDDF840\",\n    \"--color-interactive-accent-contained-bg\": \"#156884\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#1E92B8\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#1E92B8\",\n    \"--color-interactive-accent-contained-bg-active\": \"#1E92B8\"\n  },\n  \"dark_success\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#0D300D\",\n    \"--color-surface\": \"#124012\",\n    \"--color-highlight\": \"#0F570F\",\n    \"--color-enabled\": \"#1FAD1F\",\n    \"--color-highlight-accent\": \"#0F570F\",\n    \"--color-lowered\": \"#071807\",\n    \"--color-screen-gradient-start\": \"#124012\",\n    \"--color-screen-gradient-middle\": \"#0D300D\",\n    \"--color-screen-gradient-end\": \"#071807\",\n    \"--color-border-muted\": \"#1FAD1F\",\n    \"--color-border-sharp\": \"#52F452\",\n    \"--color-interactive-contained-pressable\": \"#157915\",\n    \"--color-interactive-contained-hover\": \"#1FAD1F\",\n    \"--color-interactive-contained-focus\": \"#1FAD1F\",\n    \"--color-interactive-contained-active\": \"#1FAD1F\",\n    \"--color-interactive-outlined-pressable\": \"#1FAD1F\",\n    \"--color-interactive-outlined-hover\": \"#52F452\",\n    \"--color-interactive-outlined-focus\": \"#52F452\",\n    \"--color-interactive-outlined-active\": \"#52F452\",\n    \"--color-interactive-outlined-outline-focus\": \"#1FAD1F\",\n    \"--color-interactive-active\": \"#52F452\",\n    \"--color-interactive-pressable\": \"#82F782\",\n    \"--color-interactive-hover\": \"#D9FDD9\",\n    \"--color-sharp\": \"#D9FDD9\",\n    \"--color-accent\": \"#82F782\",\n    \"--color-accent-muted\": \"#82F782\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#82F782\",\n    \"--color-selection\": \"#82F78240\",\n    \"--color-interactive-accent-contained-bg\": \"#157915\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#1FAD1F\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#1FAD1F\",\n    \"--color-interactive-accent-contained-bg-active\": \"#1FAD1F\"\n  },\n  \"dark_warning\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#30240D\",\n    \"--color-surface\": \"#403012\",\n    \"--color-highlight\": \"#583F0E\",\n    \"--color-enabled\": \"#AF7E1D\",\n    \"--color-highlight-accent\": \"#583F0E\",\n    \"--color-lowered\": \"#181207\",\n    \"--color-screen-gradient-start\": \"#403012\",\n    \"--color-screen-gradient-middle\": \"#30240D\",\n    \"--color-screen-gradient-end\": \"#181207\",\n    \"--color-border-muted\": \"#AF7E1D\",\n    \"--color-border-sharp\": \"#F4BE52\",\n    \"--color-interactive-contained-pressable\": \"#7B5914\",\n    \"--color-interactive-contained-hover\": \"#AF7E1D\",\n    \"--color-interactive-contained-focus\": \"#AF7E1D\",\n    \"--color-interactive-contained-active\": \"#AF7E1D\",\n    \"--color-interactive-outlined-pressable\": \"#AF7E1D\",\n    \"--color-interactive-outlined-hover\": \"#F4BE52\",\n    \"--color-interactive-outlined-focus\": \"#F4BE52\",\n    \"--color-interactive-outlined-active\": \"#F4BE52\",\n    \"--color-interactive-outlined-outline-focus\": \"#AF7E1D\",\n    \"--color-interactive-active\": \"#F4BE52\",\n    \"--color-interactive-pressable\": \"#F7D082\",\n    \"--color-interactive-hover\": \"#FDF1D9\",\n    \"--color-sharp\": \"#FDF1D9\",\n    \"--color-accent\": \"#F7D082\",\n    \"--color-accent-muted\": \"#F7D082\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#F7D082\",\n    \"--color-selection\": \"#F7D08240\",\n    \"--color-interactive-accent-contained-bg\": \"#7B5914\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#AF7E1D\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#AF7E1D\",\n    \"--color-interactive-accent-contained-bg-active\": \"#AF7E1D\"\n  },\n  \"dark_danger\": {\n    \"--color-translucent\": \"#1f1e1e55\",\n    \"--color-disabled-sharp\": \"#A8A8A8\",\n    \"--color-disabled-muted\": \"#A8A8A8\",\n    \"--color-disabled-interactive\": \"#525252\",\n    \"--color-disabled-interactive-muted\": \"#333333\",\n    \"--color-muted\": \"#C2C2C2\",\n    \"--color-form-border-disabled\": \"#525252\",\n    \"--color-form-placeholder\": \"#A8A8A8\",\n    \"--color-form-disabled-text\": \"#C2C2C2\",\n    \"--color-interactive-contained-disabled\": \"#3D3D3D\",\n    \"--color-interactive-outlined-disabled\": \"#474747\",\n    \"--color-interactive-accent-contained-bg-disabled\": \"#3D3D3D\",\n    \"--color-interactive-accent-outlined-disabled\": \"#474747\",\n    \"--color-screen\": \"#300F0D\",\n    \"--color-surface\": \"#401312\",\n    \"--color-highlight\": \"#691411\",\n    \"--color-enabled\": \"#C1251F\",\n    \"--color-highlight-accent\": \"#691411\",\n    \"--color-lowered\": \"#180707\",\n    \"--color-screen-gradient-start\": \"#401312\",\n    \"--color-screen-gradient-middle\": \"#300F0D\",\n    \"--color-screen-gradient-end\": \"#180707\",\n    \"--color-border-muted\": \"#C1251F\",\n    \"--color-border-sharp\": \"#F56A66\",\n    \"--color-interactive-contained-pressable\": \"#8C1B17\",\n    \"--color-interactive-contained-hover\": \"#C1251F\",\n    \"--color-interactive-contained-focus\": \"#C1251F\",\n    \"--color-interactive-contained-active\": \"#C1251F\",\n    \"--color-interactive-outlined-pressable\": \"#C1251F\",\n    \"--color-interactive-outlined-hover\": \"#F56A66\",\n    \"--color-interactive-outlined-focus\": \"#F56A66\",\n    \"--color-interactive-outlined-active\": \"#F56A66\",\n    \"--color-interactive-outlined-outline-focus\": \"#C1251F\",\n    \"--color-interactive-active\": \"#F56A66\",\n    \"--color-interactive-pressable\": \"#F89996\",\n    \"--color-interactive-hover\": \"#FDDAD9\",\n    \"--color-sharp\": \"#FDDAD9\",\n    \"--color-accent\": \"#F89996\",\n    \"--color-accent-muted\": \"#F89996\",\n    \"--color-on-accent\": \"#F5F5F5\",\n    \"--color-on-accent-muted\": \"#F89996\",\n    \"--color-selection\": \"#F8999640\",\n    \"--color-interactive-accent-contained-bg\": \"#8C1B17\",\n    \"--color-interactive-accent-contained-bg-hover\": \"#C1251F\",\n    \"--color-interactive-accent-contained-bg-focus\": \"#C1251F\",\n    \"--color-interactive-accent-contained-bg-active\": \"#C1251F\"\n  }\n};\n","import { VariableContextProvider } from \"nativewind\";\nimport type { ReactNode } from \"react\";\nimport type { AlouetteTheme } from \"../../core/AlouetteConfig\";\nimport { ThemeContext } from \"../../core/ThemeContext\";\nimport { themeVariables } from \"../../themeVariables\";\n\nexport interface ScopedThemeProps {\n  /** Full theme name, e.g. \"light\", \"dark\", \"light_brand\", \"dark_danger\". */\n  theme: AlouetteTheme;\n  children?: ReactNode;\n}\n\n/**\n * Applies a theme to its subtree by pushing the theme's resolved CSS variables\n * through NativeWind's `VariableContextProvider` (layout-neutral on both web —\n * `display: contents` — and native — context only). It also records the active\n * theme name in `ThemeContext` so `useThemeToken` and `AccentScope` can read it.\n *\n * Replaces Uniwind's `ScopedTheme`.\n */\nexport function ScopedTheme({ theme, children }: ScopedThemeProps): ReactNode {\n  return (\n    <ThemeContext.Provider value={theme}>\n      <VariableContextProvider value={themeVariables[theme]}>\n        {children}\n      </VariableContextProvider>\n    </ThemeContext.Provider>\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { useColorScheme } from \"react-native\";\nimport { ScopedTheme } from \"../ui/containers/ScopedTheme\";\n\nexport interface AlouetteProviderProps {\n  children: ReactNode;\n}\n\nexport function AlouetteProvider({\n  children,\n}: AlouetteProviderProps): ReactNode {\n  // Apply the OS light/dark scheme as the root theme so base tokens resolve\n  // correctly app-wide. Subtrees can override via ScopedTheme / AccentScope.\n  const colorScheme = useColorScheme();\n  return (\n    <ScopedTheme theme={colorScheme === \"dark\" ? \"dark\" : \"light\"}>\n      {children}\n    </ScopedTheme>\n  );\n}\n","/* eslint-disable react/destructuring-assignment */\nimport type { Decorator } from \"@storybook/react-vite\";\nimport { ScopedTheme } from \"../ui/containers/ScopedTheme\";\nimport { AlouetteProvider } from \"./AlouetteProvider\";\nimport { SafeAreaProvider } from \"./SafeAreaProvider\";\n\n// eslint-disable-next-line react/function-component-definition -- not a component\nexport const AlouetteDecorator: Decorator = (storyFn, context) => {\n  const theme: \"dark\" | \"light\" =\n    context.globals.backgrounds?.value === \"#000000\" ? \"dark\" : \"light\";\n\n  return (\n    <SafeAreaProvider>\n      <AlouetteProvider>\n        <ScopedTheme theme={theme}>{storyFn(context)}</ScopedTheme>\n      </AlouetteProvider>\n    </SafeAreaProvider>\n  );\n};\n","import { useContext } from \"react\";\nimport { themeVariables } from \"../themeVariables\";\nimport { ThemeContext } from \"./ThemeContext\";\n\ntype TokenName = `--${string}`;\n\n/**\n * Reads theme token values in JS for the few props that can't take a className\n * (gradient stops, `placeholderTextColor`, native Switch track/thumb, the Expo\n * browser chrome, SVG icon tint). Values come from the generated `themeVariables`\n * map keyed by the active `ThemeContext`, so they stay in sync with `global.css`.\n *\n * Replaces Uniwind's `useCSSVariable`. Unlike NativeWind's\n * `useUnstableNativeVariable` this works on web and native alike and is stable.\n */\nexport function useThemeToken(token: TokenName): string | undefined;\nexport function useThemeToken<const T extends readonly TokenName[]>(\n  tokens: T,\n): { [K in keyof T]: string | undefined };\nexport function useThemeToken(\n  tokenOrTokens: TokenName | readonly TokenName[],\n): (string | undefined)[] | string | undefined {\n  const theme = useContext(ThemeContext);\n  const vars = themeVariables[theme];\n  if (Array.isArray(tokenOrTokens)) {\n    return tokenOrTokens.map((token) => vars[token]);\n  }\n  return vars[tokenOrTokens as TokenName];\n}\n","import { forwardRef } from \"react\";\nimport { View as RNView, type ViewProps as RNViewProps } from \"react-native\";\n\nexport type ViewProps = RNViewProps;\n\nexport const View = forwardRef<RNView, ViewProps>((props, ref) => {\n  return <RNView ref={ref} {...props} />;\n});\n","import type { ReactNode } from \"react\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { useCurrentMode } from \"../../core/ThemeContext\";\nimport { ScopedTheme } from \"./ScopedTheme\";\n\nexport interface AccentScopeProps {\n  mode?: \"dark\" | \"light\";\n  accent?: Accent;\n  children?: ReactNode;\n}\n\nexport function AccentScope({\n  mode: forcedMode,\n  accent,\n  children,\n}: AccentScopeProps): ReactNode {\n  const currentMode = useCurrentMode();\n  if (!accent) {\n    return children;\n  }\n  // ScopedTheme applies the accent theme's *resolved* variables (base mode + accent),\n  // so a single scope works at any depth — no need to pre-apply the base mode.\n  const mode = forcedMode ?? currentMode;\n  return <ScopedTheme theme={`${mode}_${accent}`}>{children}</ScopedTheme>;\n}\n","import { forwardRef } from \"react\";\nimport { Text as RNText, type TextProps as RNTextProps } from \"react-native\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\n\nconst twMerge = extendTailwindMerge({\n  extend: {\n    classGroups: {\n      \"font-family\": [\n        \"font-body\",\n        \"font-body-bold\",\n        \"font-body-extrabold\",\n        \"font-heading\",\n        \"font-heading-bold\",\n        \"font-heading-extrabold\",\n        \"font-mono\",\n        \"font-mono-bold\",\n        \"font-mono-extrabold\",\n      ],\n    },\n  },\n});\n\nexport interface TextProps extends RNTextProps {\n  accent?: Accent;\n}\n\nexport const Text = forwardRef<RNText, TextProps>(\n  ({ className, accent, ...props }, ref) => {\n    return (\n      <AccentScope accent={accent}>\n        <RNText\n          ref={ref}\n          className={twMerge(\"font-body text-sharp\", className)}\n          {...props}\n        />\n      </AccentScope>\n    );\n  },\n);\n\nexport type ParagraphProps = TextProps;\n\nexport const Paragraph = forwardRef<RNText, ParagraphProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <Text\n        ref={ref}\n        role=\"paragraph\"\n        className={`select-auto ${className ?? \"\"}`}\n        {...props}\n      />\n    );\n  },\n);\n","import { styled } from \"nativewind\";\nimport type { ComponentType } from \"react\";\nimport {\n  ScrollView as RNScrollView,\n  type ScrollViewProps as RNScrollViewProps,\n  type StyleProp,\n  type ViewStyle,\n} from \"react-native\";\n\nexport type ScrollViewProps = RNScrollViewProps;\n\ninterface StyledScrollViewProps {\n  style?: StyleProp<ViewStyle>;\n  contentContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport const ScrollView = styled(\n  RNScrollView as unknown as ComponentType<StyledScrollViewProps>,\n  {\n    className: \"style\",\n    contentContainerClassName: \"contentContainerStyle\",\n  },\n) as ComponentType<ScrollViewProps>;\n","import { styled } from \"nativewind\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport {\n  FlatList as RNFlatList,\n  type FlatListProps as RNFlatListProps,\n  type StyleProp,\n  type ViewStyle,\n} from \"react-native\";\n\nexport type FlatListProps<ItemT> = RNFlatListProps<ItemT>;\n\ninterface StyledFlatListProps {\n  style?: StyleProp<ViewStyle>;\n  contentContainerStyle?: StyleProp<ViewStyle>;\n  columnWrapperStyle?: StyleProp<ViewStyle>;\n}\n\nexport const FlatList = styled(\n  RNFlatList as unknown as ComponentType<StyledFlatListProps>,\n  {\n    className: \"style\",\n    contentContainerClassName: \"contentContainerStyle\",\n    columnWrapperClassName: \"columnWrapperStyle\",\n  },\n) as <ItemT>(props: FlatListProps<ItemT>) => ReactNode;\n","import { styled } from \"nativewind\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport {\n  SectionList as RNSectionList,\n  type SectionListProps as RNSectionListProps,\n  type StyleProp,\n  type ViewStyle,\n} from \"react-native\";\n\ntype DefaultSectionT = Record<string, unknown>;\n\nexport type SectionListProps<\n  ItemT,\n  SectionT = DefaultSectionT,\n> = RNSectionListProps<ItemT, SectionT>;\n\ninterface StyledSectionListProps {\n  style?: StyleProp<ViewStyle>;\n  contentContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport const SectionList = styled(\n  RNSectionList as unknown as ComponentType<StyledSectionListProps>,\n  {\n    className: \"style\",\n    contentContainerClassName: \"contentContainerStyle\",\n  },\n) as <ItemT, SectionT = DefaultSectionT>(\n  props: SectionListProps<ItemT, SectionT>,\n) => ReactNode;\n","import { forwardRef } from \"react\";\nimport { View as RNView, type ViewProps as RNViewProps } from \"react-native\";\n\nexport type StackProps = RNViewProps;\n\nexport const Stack = forwardRef<RNView, StackProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <RNView\n        ref={ref}\n        className={`flex-row flex-wrap ${className ?? \"\"}`}\n        {...props}\n      />\n    );\n  },\n);\n\nexport type HStackProps = RNViewProps;\n\nexport const HStack = forwardRef<RNView, HStackProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <RNView ref={ref} className={`flex-row ${className ?? \"\"}`} {...props} />\n    );\n  },\n);\n\nexport type VStackProps = RNViewProps;\n\nexport const VStack = forwardRef<RNView, VStackProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <RNView ref={ref} className={`flex-col ${className ?? \"\"}`} {...props} />\n    );\n  },\n);\n","import { forwardRef } from \"react\";\nimport { View as RNView, type ViewProps as RNViewProps } from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\n\nconst separatorVariants = tv({\n  base: \"border-border-sharp\",\n  variants: {\n    vertical: {\n      true: \"self-stretch border-r w-px\",\n      false: \"self-stretch border-b h-px\",\n    },\n  },\n  defaultVariants: {\n    vertical: false,\n  },\n});\n\ntype SeparatorVariantProps = VariantProps<typeof separatorVariants>;\n\nexport interface SeparatorProps extends RNViewProps, SeparatorVariantProps {}\n\nexport const Separator = forwardRef<RNView, SeparatorProps>(\n  ({ className, vertical, ...props }, ref) => {\n    return (\n      <RNView\n        ref={ref}\n        className={separatorVariants({ vertical, className })}\n        {...props}\n      />\n    );\n  },\n);\n","import type { ReactElement } from \"react\";\nimport { Children, cloneElement, forwardRef } from \"react\";\nimport {\n  Pressable,\n  type PressableProps,\n  View as RNView,\n  type ViewProps as RNViewProps,\n} from \"react-native\";\nimport type { VariantProps } from \"tailwind-variants\";\nimport { tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { useSafeAreaInsets } from \"../../core/useSafeAreaInsets\";\nimport { AccentScope } from \"./AccentScope\";\n// Allow Box to shrink when used inside HStack/VStack (matches the original\n// BoxFrame default). overflow is intentionally left off so multi-layer\n// box-shadows are not clipped.\nexport const boxBaseClasses = \"shrink\";\n\nexport interface BoxProps extends RNViewProps {\n  accent?: Accent;\n}\n\nexport const Box = forwardRef<RNView, BoxProps>(\n  ({ className, accent, ...props }, ref) => {\n    return (\n      <AccentScope accent={accent}>\n        <RNView\n          ref={ref}\n          className={`${boxBaseClasses} ${className ?? \"\"}`}\n          {...props}\n        />\n      </AccentScope>\n    );\n  },\n);\n\nexport const interactiveBoxVariants = tv({\n  base: [\n    boxBaseClasses,\n    \"cursor-pointer\",\n    \"transition-[transform,background-color,border-color] duration-fast ease-in\",\n    \"disabled:cursor-not-allowed disabled:opacity-70 aria-disabled:cursor-not-allowed aria-disabled:opacity-70\",\n    \"active:scale-[0.975]\",\n  ].join(\" \"),\n  variants: {\n    withFocusVisibleOutline: {\n      true: \"focus-visible:outline-2 focus-visible:outline-offset-2\",\n    },\n  },\n});\n\nexport interface InteractiveBoxProps\n  extends VariantProps<typeof interactiveBoxVariants>, PressableProps {}\n\nexport const InteractiveBox = forwardRef<RNView, InteractiveBoxProps>(\n  ({ withFocusVisibleOutline, className, ...rest }, ref) => (\n    <Pressable\n      ref={ref}\n      // override default behavior of Pressable which sets pointerEvents to \"none\" on disabled state. However this prevents cursor to display as\n      pointerEvents=\"auto\"\n      {...rest}\n      className={interactiveBoxVariants({ withFocusVisibleOutline, className })}\n    />\n  ),\n);\n\nexport const InteractiveBoxHitSlop = forwardRef<RNView, InteractiveBoxProps>(\n  ({ withFocusVisibleOutline, children, className, ...rest }, ref) => {\n    const child = Children.only(children) as ReactElement<RNViewProps>;\n    return (\n      <Pressable\n        ref={ref}\n        // override default behavior of Pressable which sets pointerEvents to \"none\" on disabled state. However this prevents cursor to display as\n        pointerEvents=\"auto\"\n        className={`flex-center ${className ?? \"\"}`}\n        {...rest}\n      >\n        {cloneElement(child, {\n          className: interactiveBoxVariants({\n            withFocusVisibleOutline,\n            className: child.props.className,\n          }),\n        })}\n      </Pressable>\n    );\n  },\n);\n\nexport type SafeAreaBoxProps = Omit<BoxProps, \"style\">;\n\nexport const SafeAreaBox = forwardRef<RNView, SafeAreaBoxProps>(\n  (props, ref) => {\n    const insets = useSafeAreaInsets();\n    return (\n      <Box\n        ref={ref}\n        style={{\n          paddingTop: insets.top,\n          paddingBottom: insets.bottom,\n          paddingLeft: insets.left,\n          paddingRight: insets.right,\n        }}\n        {...props}\n      />\n    );\n  },\n);\n","import { forwardRef } from \"react\";\nimport type { View as RNView } from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"./AccentScope\";\nimport { Box, type BoxProps } from \"./Box\";\n\nconst surfaceVariants = tv(\n  {\n    // overflow-hidden so the multi-layer shadow respects the rounded corners.\n    base: \"overflow-hidden transition-background duration-fast\",\n    variants: {\n      size: {\n        xs: \"p-sm rounded-xs\",\n        sm: \"p-m rounded-sm\",\n        md: \"p-xl rounded-sm\",\n        lg: \"p-xxl rounded-md\",\n      },\n      variant: {\n        surface: \"bg-surface\",\n        highlight: \"bg-highlight\",\n        \"highlight-accent\": \"bg-highlight-accent\",\n        lowered: \"bg-lowered\",\n        translucent: \"bg-translucent\",\n      },\n      shadow: {\n        none: \"shadow-none\",\n        s: \"shadow-s\",\n        m: \"shadow-m\",\n        l: \"shadow-l\",\n        lowered: \"shadow-lowered\",\n      },\n    },\n    defaultVariants: {\n      size: \"md\",\n      variant: \"surface\",\n    },\n  },\n  { twMerge: false },\n);\n\ntype SurfaceVariantProps = VariantProps<typeof surfaceVariants>;\n\nexport interface SurfaceProps extends BoxProps, SurfaceVariantProps {\n  accent?: Accent;\n}\n\nexport const Surface = forwardRef<RNView, SurfaceProps>(\n  ({ className, size, variant, shadow, accent, ...props }, ref) => {\n    // shadow defaults to \"s\", or \"lowered\" when variant=\"lowered\".\n    const resolvedShadow = shadow ?? (variant === \"lowered\" ? \"lowered\" : \"s\");\n    return (\n      <AccentScope accent={accent}>\n        <Box\n          ref={ref}\n          className={surfaceVariants({\n            size,\n            variant,\n            shadow: resolvedShadow,\n            className,\n          })}\n          {...props}\n        />\n      </AccentScope>\n    );\n  },\n);\n","import type { ComponentType } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function styled<P extends { className?: string }>(\n  Component: ComponentType<P>,\n  defaultClassName: string,\n): ComponentType<P> {\n  function StyledComponent({ className, ...props }: P) {\n    return (\n      <Component\n        className={twMerge(defaultClassName, className)}\n        {...(props as P)}\n      />\n    );\n  }\n  StyledComponent.displayName = `Styled(${Component.displayName ?? Component.name ?? \"Component\"})`;\n  StyledComponent.__isStyledComponent = true;\n  return StyledComponent;\n}\n","import { forwardRef } from \"react\";\nimport type { Text as RNText } from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport { Text, type TextProps } from \"../primitives/Text\";\n\nconst storyTitleVariants = tv({\n  base: \"font-heading-extrabold text-sharp\",\n  variants: {\n    level: {\n      1: \"text-4xl mb-xl\",\n      2: \"text-3xl mb-xl\",\n      3: \"text-2xl mb-m\",\n      4: \"text-xl mb-m\",\n    },\n  },\n  defaultVariants: {\n    level: 1,\n  },\n});\n\ntype StoryTitleVariantProps = VariantProps<typeof storyTitleVariants>;\n\nexport interface StoryTitleProps extends TextProps, StoryTitleVariantProps {}\n\nexport const StoryTitle = forwardRef<RNText, StoryTitleProps>(\n  ({ className, level, ...props }, ref) => {\n    return (\n      <Text\n        ref={ref}\n        className={storyTitleVariants({ level, className })}\n        {...props}\n      />\n    );\n  },\n);\n","import { Fragment, type ReactNode } from \"react\";\nimport { Platform } from \"react-native\";\nimport type { Accent, AlouetteModeTheme } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { ScopedTheme } from \"../containers/ScopedTheme\";\nimport { Surface } from \"../containers/Surface\";\nimport { ScrollView } from \"../primitives/ScrollView\";\nimport { View } from \"../primitives/View\";\nimport { VStack } from \"../stacks/stacks\";\nimport { styled } from \"../styled\";\nimport { StoryTitle } from \"./StoryTitle\";\n\nexport interface StorySectionProps {\n  title: ReactNode;\n  children: ReactNode;\n  level?: 1 | 2;\n  modeTheme?: AlouetteModeTheme;\n  accent?: Accent;\n  withSurface?: boolean;\n}\n\nconst InternalStorySection = styled(View, \"-mx-l px-l\");\n\nfunction StorySection({\n  title,\n  children,\n  level = 1,\n  modeTheme,\n  accent,\n  withSurface = false,\n}: StorySectionProps): ReactNode {\n  const content = (\n    <InternalStorySection className=\"pb-xl bg-screen\">\n      {withSurface ? (\n        <Surface>\n          <StoryTitle level={(level + 1) as 2 | 3}>{title}</StoryTitle>\n          <VStack className=\"gap-m\">{children}</VStack>\n        </Surface>\n      ) : (\n        <>\n          <StoryTitle level={(level + 1) as 2 | 3}>{title}</StoryTitle>\n          <VStack className=\"gap-m\">{children}</VStack>\n        </>\n      )}\n    </InternalStorySection>\n  );\n\n  if (modeTheme) {\n    return <ScopedTheme theme={modeTheme}>{content}</ScopedTheme>;\n  }\n  if (accent) {\n    return <AccentScope accent={accent}>{content}</AccentScope>;\n  }\n  return content;\n}\n\nfunction StorySubSection({\n  title,\n  children,\n  modeTheme,\n  accent,\n  withSurface = false,\n}: StorySectionProps): ReactNode {\n  const content = (\n    <InternalStorySection className=\"mb-m\">\n      {withSurface ? (\n        <Surface>\n          <StoryTitle level={3}>{title}</StoryTitle>\n          <VStack className=\"gap-m\">{children}</VStack>\n        </Surface>\n      ) : (\n        <>\n          <StoryTitle level={3}>{title}</StoryTitle>\n          <VStack className=\"gap-m\">{children}</VStack>\n        </>\n      )}\n    </InternalStorySection>\n  );\n  if (modeTheme) {\n    return <ScopedTheme theme={modeTheme}>{content}</ScopedTheme>;\n  }\n  if (accent) {\n    return <AccentScope accent={accent}>{content}</AccentScope>;\n  }\n  return content;\n}\n\n// const SimpleWebScrollView = styled(View, \"h-full overflow-auto\");\n\nconst ScrollWrapper = Platform.OS === \"web\" ? Fragment : ScrollView;\n\nexport interface StoryProps {\n  documentation?: NonNullable<ReactNode>;\n  children?: NonNullable<ReactNode>;\n  noDarkMode?: boolean;\n}\n\nexport function Story({\n  documentation,\n  children,\n  noDarkMode,\n}: StoryProps): ReactNode {\n  return (\n    <ScrollWrapper>\n      {documentation && (\n        <Surface accent=\"info\" className=\"mb-xxl\">\n          {documentation}\n        </Surface>\n      )}\n      {([\"light\", ...(noDarkMode ? [] : [\"dark\"])] as (\"dark\" | \"light\")[]).map(\n        (mode) => (\n          <ScopedTheme key={mode} theme={mode}>\n            <View className=\"bg-screen p-l\">{children}</View>\n          </ScopedTheme>\n        ),\n      )}\n    </ScrollWrapper>\n  );\n}\n\nStory.Section = StorySection;\nStory.SubSection = StorySubSection;\n\nexport const accents: Accent[] = [\n  \"brand\",\n  \"danger\",\n  \"info\",\n  \"success\",\n  \"warning\",\n];\n","import type { ReactNode } from \"react\";\nimport { ScopedTheme } from \"../containers/ScopedTheme\";\nimport { ScrollView } from \"../primitives/ScrollView\";\nimport { StoryTitle } from \"./StoryTitle\";\n\nexport interface StoryContainerProps {\n  title: ReactNode;\n  children: NonNullable<ReactNode>;\n}\n\nexport function StoryContainer({\n  title,\n  children,\n}: StoryContainerProps): ReactNode {\n  return (\n    <ScopedTheme theme=\"light\">\n      <ScrollView className=\"bg-white p-3xl\">\n        <StoryTitle level={1}>{title}</StoryTitle>\n        {children}\n      </ScrollView>\n    </ScopedTheme>\n  );\n}\n","import type { Decorator } from \"@storybook/react-vite\";\nimport { StoryContainer } from \"./StoryContainer\";\n\n// eslint-disable-next-line react/function-component-definition -- not a component, it's a decorator for storybook.\nexport const StoryDecorator: Decorator = (storyFn, { name, parameters }) => {\n  if (parameters?.container === false) return storyFn();\n  return <StoryContainer title={name}>{storyFn()}</StoryContainer>;\n};\n","import { Children, type ReactNode } from \"react\";\nimport { Platform } from \"react-native\";\nimport { tv } from \"tailwind-variants\";\nimport { View } from \"../primitives/View\";\nimport { VStack } from \"../stacks/stacks\";\nimport { StoryTitle } from \"./StoryTitle\";\n\nconst rowVariants = tv(\n  {\n    base: \"flex-col\",\n    variants: {\n      breakpoint: {\n        small: \"sm:flex-row sm:mb-xl\",\n        medium: \"md:flex-row md:mb-xl\",\n      },\n      flexWrap: { true: \"\" },\n    },\n    compoundVariants: [\n      { breakpoint: \"small\", flexWrap: true, class: \"sm:flex-wrap sm:gap-m\" },\n      { breakpoint: \"medium\", flexWrap: true, class: \"md:flex-wrap md:gap-m\" },\n    ],\n  },\n  { twMerge: false },\n);\n\nconst itemVariants = tv(\n  {\n    base: \"pt-m pb-xl\",\n    variants: {\n      breakpoint: {\n        small: \"sm:pt-0 sm:pb-0 sm:my-xxs shrink\",\n        medium: \"md:pt-0 md:pb-0 md:my-xxs shrink\",\n      },\n      flexWrap: {\n        true: \"\",\n        false: \"\",\n      },\n      loose: {\n        true: \"\",\n        false: \"grow\",\n      },\n    },\n    compoundVariants: [\n      { breakpoint: \"small\", flexWrap: false, class: \"sm:basis-0\" },\n      { breakpoint: \"medium\", flexWrap: false, class: \"md:basis-0\" },\n    ],\n    defaultVariants: {\n      flexWrap: false,\n    },\n  },\n  { twMerge: false },\n);\n\nexport interface StoryGridRowProps {\n  children: NonNullable<ReactNode>;\n  breakpoint?: \"medium\" | \"small\";\n  flexWrap?: boolean;\n  loose?: boolean;\n}\n\nfunction StoryGridRow({\n  children,\n  breakpoint = \"small\",\n  flexWrap,\n  loose,\n}: StoryGridRowProps): ReactNode {\n  return (\n    <View className={rowVariants({ breakpoint, flexWrap })}>\n      {Children.map(children, (child) => (\n        <View className={itemVariants({ breakpoint, flexWrap, loose })}>\n          {child}\n        </View>\n      ))}\n    </View>\n  );\n}\n\nexport interface StoryGridColProps {\n  children: NonNullable<ReactNode>;\n  title?: string;\n  platform?: \"all\" | \"native\" | \"web\";\n}\n\nfunction StoryGridCol({\n  title,\n  children,\n  platform = \"all\",\n}: StoryGridColProps): ReactNode {\n  const isNative = Platform.OS === \"ios\" || Platform.OS === \"android\";\n\n  if (Platform.OS === \"web\" && platform === \"native\") {\n    return null;\n  }\n  if (isNative && platform === \"web\") {\n    return null;\n  }\n\n  return title ? (\n    <VStack>\n      <StoryTitle level={4} numberOfLines={1}>\n        {title}\n      </StoryTitle>\n      {children}\n    </VStack>\n  ) : (\n    children\n  );\n}\n\nexport const StoryGrid = {\n  Row: StoryGridRow,\n  Col: StoryGridCol,\n};\n","import type { ReactNode } from \"react\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { useCurrentMode, useCurrentTheme } from \"../../core/ThemeContext\";\nimport { ScopedTheme } from \"./ScopedTheme\";\n\nexport interface StableAccentScopeProps {\n  mode?: \"dark\" | \"light\";\n  accent?: Accent;\n  children?: ReactNode;\n}\n\n/**\n * Like AccentScope, but always keeps a ScopedTheme mounted — when `accent` is\n * unset it re-applies the inherited theme instead of dropping the wrapper.\n * Toggling `accent` (e.g. on hover) therefore only changes the theme prop, so\n * the subtree — and any focused input inside it — is never remounted. Prefer\n * AccentScope when the accent is fixed; reach for this only when it toggles.\n */\nexport function StableAccentScope({\n  mode: forcedMode,\n  accent,\n  children,\n}: StableAccentScopeProps): ReactNode {\n  const currentTheme = useCurrentTheme();\n  const currentMode = useCurrentMode();\n  return (\n    <ScopedTheme\n      theme={accent ? `${forcedMode ?? currentMode}_${accent}` : currentTheme}\n    >\n      {children}\n    </ScopedTheme>\n  );\n}\n","import {\n  Children,\n  type Key,\n  type ReactElement,\n  type ReactNode,\n  cloneElement,\n  isValidElement,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { View } from \"../primitives/View\";\n\nexport interface PresenceBaseProps {\n  /**\n   * Identity of the current child. When it changes, the previous child is kept\n   * mounted (with `exitClassName`) for `exitDurationMs` so it can animate out\n   * while the new child animates in — an AnimatePresence-style swap done with\n   * pure CSS animations, no animation library.\n   */\n  activeKey: Key;\n  /** How long to keep the exiting child mounted — match the exit animation. */\n  exitDurationMs: number;\n  /** Animation class applied to the entering (current) child. */\n  enterClassName?: string;\n  /** Animation class applied to the exiting (previous) child. */\n  exitClassName?: string;\n  /** Class applied to every item (e.g. `absolute inset-0` to overlap). */\n  className?: string;\n}\n\ninterface Snapshot {\n  key: Key;\n  node: ReactNode;\n}\n\nfunction joinClasses(...classes: (string | undefined)[]): string {\n  return classes.filter(Boolean).join(\" \");\n}\n\n/**\n * Shared keyed-swap logic. Keeps the previously rendered child as a snapshot\n * after `activeKey` changes so an exit animation can play, then removes it once\n * `exitDurationMs` has elapsed. The entering child is keyed by `activeKey`, so\n * it remounts on each change and replays its enter animation.\n *\n * Assumes one child whose content is derived from `activeKey` (the common\n * keyed-swap case). Updates to the active child between key changes are shown\n * live but not snapshotted for the next exit.\n */\nfunction usePresence(\n  activeKey: Key,\n  exitDurationMs: number,\n  children: ReactNode,\n): Snapshot[] {\n  const [exiting, setExiting] = useState<Snapshot[]>([]);\n  const previousRef = useRef<Snapshot>({ key: activeKey, node: children });\n  const childrenRef = useRef<ReactNode>(children);\n  childrenRef.current = children;\n  const timersRef = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n  useEffect(\n    () => () => {\n      timersRef.current.forEach(clearTimeout);\n    },\n    [],\n  );\n\n  useEffect(() => {\n    const previous = previousRef.current;\n    if (previous.key === activeKey) {\n      return;\n    }\n    previousRef.current = { key: activeKey, node: childrenRef.current };\n    setExiting((list) => [...list, previous]);\n    const timer = setTimeout(() => {\n      setExiting((list) => list.filter((item) => item !== previous));\n      timersRef.current = timersRef.current.filter((t) => t !== timer);\n    }, exitDurationMs);\n    timersRef.current.push(timer);\n  }, [activeKey, exitDurationMs]);\n\n  return exiting;\n}\n\ninterface PresenceItem {\n  key: Key;\n  node: ReactNode;\n}\n\nfunction toItems(children: ReactNode): PresenceItem[] {\n  return Children.toArray(children)\n    .filter(isValidElement)\n    .map((child) => ({ key: child.key as Key, node: child }));\n}\n\n/**\n * Order-preserving merge of the previously rendered key order with the current\n * live keys (the react-transition-group algorithm). Removed keys stay in their\n * old positions, so an exiting item animates out in place instead of jumping to\n * the end of the list.\n */\nfunction mergeKeys(previous: Key[], next: Key[]): Key[] {\n  const nextSet = new Set(next);\n  const pendingByNext = new Map<Key, Key[]>();\n  let pending: Key[] = [];\n\n  for (const key of previous) {\n    if (nextSet.has(key)) {\n      if (pending.length > 0) {\n        pendingByNext.set(key, pending);\n        pending = [];\n      }\n    } else {\n      pending.push(key);\n    }\n  }\n\n  const result: Key[] = [];\n  for (const key of next) {\n    const before = pendingByNext.get(key);\n    if (before) {\n      result.push(...before);\n    }\n    result.push(key);\n  }\n  result.push(...pending);\n  return result;\n}\n\ninterface RenderedItem extends PresenceItem {\n  exiting: boolean;\n}\n\n/**\n * Diffs a list of keyed children across renders. New keys are returned with\n * `exiting: false` (mounted fresh, so their enter animation plays); removed keys\n * are kept with `exiting: true` for `exitDurationMs` so they can animate out,\n * then dropped. Order is preserved via {@link mergeKeys}.\n */\nfunction usePresenceList(\n  children: ReactNode,\n  exitDurationMs: number,\n): RenderedItem[] {\n  const items = toItems(children);\n  const liveKeys = items.map((item) => item.key);\n  const signature = liveKeys.join(\"\u0000\");\n\n  const nodesRef = useRef<Map<Key, ReactNode>>(new Map());\n  for (const item of items) {\n    nodesRef.current.set(item.key, item.node);\n  }\n  const liveKeysRef = useRef(liveKeys);\n  liveKeysRef.current = liveKeys;\n\n  const [order, setOrder] = useState<Key[]>(liveKeys);\n  const orderRef = useRef(order);\n  orderRef.current = order;\n  const timersRef = useRef<Map<Key, ReturnType<typeof setTimeout>>>(new Map());\n\n  useEffect(\n    () => () => {\n      timersRef.current.forEach(clearTimeout);\n    },\n    [],\n  );\n\n  useEffect(() => {\n    const live = new Set(liveKeysRef.current);\n    const newOrder = mergeKeys(orderRef.current, liveKeysRef.current);\n\n    // A key that came back before its timer fired cancels its pending exit.\n    for (const key of liveKeysRef.current) {\n      const timer = timersRef.current.get(key);\n      if (timer) {\n        clearTimeout(timer);\n        timersRef.current.delete(key);\n      }\n    }\n    // A key that's gone animates out, then is dropped once the timer fires.\n    for (const key of newOrder) {\n      if (!live.has(key) && !timersRef.current.has(key)) {\n        const timer = setTimeout(() => {\n          timersRef.current.delete(key);\n          nodesRef.current.delete(key);\n          setOrder((current) => current.filter((k) => k !== key));\n        }, exitDurationMs);\n        timersRef.current.set(key, timer);\n      }\n    }\n    setOrder(newOrder);\n  }, [signature, exitDurationMs]);\n\n  const live = new Set(liveKeys);\n  return order.map((key) => ({\n    key,\n    node: nodesRef.current.get(key),\n    exiting: !live.has(key),\n  }));\n}\n\nexport interface PresenceListProps {\n  /** How long to keep a removed child mounted — match the exit animation. */\n  exitDurationMs: number;\n  /** Animation class applied to entering children. */\n  enterClassName?: string;\n  /** Animation class applied to exiting children. */\n  exitClassName?: string;\n  /** Class applied to every item's wrapper `<View>`. */\n  className?: string;\n  /**\n   * A list of keyed elements — each child must have a stable `key`. Adding a key\n   * animates that item in while the others stay put; removing a key animates only\n   * that item out.\n   */\n  children: ReactNode;\n}\n\n/**\n * Keyed-list presence (AnimatePresence-style). Renders a list of keyed children,\n * each wrapped in its own `<View>`, and animates individual add/remove: added\n * keys mount with `enterClassName`, removed keys stay mounted with `exitClassName`\n * for `exitDurationMs` before unmounting. For swapping a single child, use\n * {@link PresenceOne}.\n */\nexport function PresenceList({\n  exitDurationMs,\n  enterClassName,\n  exitClassName,\n  className,\n  children,\n}: PresenceListProps): ReactNode {\n  const items = usePresenceList(children, exitDurationMs);\n\n  return (\n    <>\n      {items.map((item) => (\n        <View\n          key={item.key}\n          className={joinClasses(\n            className,\n            item.exiting ? exitClassName : enterClassName,\n          )}\n        >\n          {item.node}\n        </View>\n      ))}\n    </>\n  );\n}\n\ntype StyledElement = ReactElement<{ className?: string }>;\n\nexport interface PresenceOneProps extends PresenceBaseProps {\n  /**\n   * A single element that accepts and forwards `className` to its root view.\n   * The `className` + enter/exit animation classes are merged onto it directly,\n   * so no extra wrapper `<View>` is added to the tree.\n   */\n  children: StyledElement;\n}\n\n/**\n * Keyed-swap presence that merges the animation classes onto the child element\n * itself via `cloneElement` — no wrapper `<View>`. Requires a single element\n * that forwards `className`; for anything else use {@link PresenceList}.\n */\nexport function PresenceOne({\n  activeKey,\n  exitDurationMs,\n  enterClassName,\n  exitClassName,\n  className,\n  children,\n}: PresenceOneProps): ReactNode {\n  const exiting = usePresence(activeKey, exitDurationMs, children);\n\n  return (\n    <>\n      {exiting.map((item) => {\n        const node = item.node as StyledElement;\n        return cloneElement(node, {\n          key: item.key,\n          className: joinClasses(\n            node.props.className,\n            className,\n            exitClassName,\n          ),\n        });\n      })}\n      {cloneElement(children, {\n        key: activeKey,\n        className: joinClasses(\n          children.props.className,\n          className,\n          enterClassName,\n        ),\n      })}\n    </>\n  );\n}\n","/* Generated by scripts/build-css.ts. DO NOT EDIT. */\n\n/**\n * Duration (in ms) of each generic motion, mirroring the `--animate-*` CSS\n * tokens. Pass the matching value as `exitDurationMs` to {@link PresenceOne} /\n * {@link PresenceList} so the exit timer matches the CSS animation.\n */\nexport const animationDurationsMs = {\n  \"slide\": 600,\n  \"collapse\": 800,\n  \"progress\": 600,\n  \"fade\": 300,\n  \"fast\": 200\n} as const;\n","import { forwardRef } from \"react\";\nimport type {\n  PressableProps as RNPressableProps,\n  View as RNView,\n} from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { InteractiveBox, interactiveBoxVariants } from \"../containers/Box\";\n\nconst pressableBoxVariants = tv(\n  {\n    extend: interactiveBoxVariants,\n    base: \"overflow-hidden\",\n    variants: {\n      variant: {\n        contained: [\n          \"rounded-sm\",\n          process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n            ? \"\"\n            : \"shadow-s bg-interactive-contained-pressable\",\n          \"hover:bg-interactive-contained-hover\",\n          \"focus:bg-interactive-contained-focus\",\n          \"active:bg-interactive-contained-active\",\n          \"disabled:bg-interactive-contained-disabled disabled:shadow-none\",\n          \"focus-visible:outline-border-muted\",\n        ].join(\" \"),\n        outlined: [\n          \"border bg-highlight\",\n          process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n            ? \"\"\n            : \"border-interactive-outlined-pressable\",\n          \"hover:border-interactive-outlined-hover\",\n          \"focus:border-interactive-outlined-focus\",\n          \"active:border-interactive-outlined-active\",\n          \"disabled:border-interactive-outlined-disabled\",\n          \"focus-visible:outline-interactive-outlined-outline-focus\",\n        ].join(\" \"),\n        ghost: [\n          \"border border-transparent\",\n          \"hover:border hover:border-interactive-outlined-hover\",\n          \"focus:border focus:border-interactive-outlined-focus\",\n          \"active:border active:border-interactive-outlined-active\",\n          \"disabled:border-interactive-outlined-disabled\",\n          \"focus-visible:outline-interactive-outlined-outline-focus\",\n        ].join(\" \"),\n      },\n      forceStyle: {\n        hover: \"\",\n        focus: \"\",\n        press: \"scale-[0.975]\",\n      },\n    },\n    compoundVariants: process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n      ? [\n          /* contained */\n          {\n            variant: \"contained\",\n            forceStyle: undefined,\n            ghost: false,\n            className: \"shadow-s bg-interactive-contained-pressable\",\n          },\n          {\n            variant: \"contained\",\n            forceStyle: \"hover\",\n            className: \"shadow-s bg-interactive-contained-hover\",\n          },\n          {\n            variant: \"contained\",\n            forceStyle: \"focus\",\n            className: \"shadow-s bg-interactive-contained-focus\",\n          },\n          {\n            variant: \"contained\",\n            forceStyle: \"press\",\n            className: \"shadow-s bg-interactive-contained-active\",\n          },\n          /* outlined */\n          {\n            variant: \"outlined\",\n            forceStyle: undefined,\n            ghost: false,\n            className: \"border-interactive-outlined-pressable\",\n          },\n          {\n            variant: \"outlined\",\n            forceStyle: \"hover\",\n            className: \"border-interactive-outlined-hover\",\n          },\n          {\n            variant: \"outlined\",\n            forceStyle: \"focus\",\n            className: \"border-interactive-outlined-focus\",\n          },\n          {\n            variant: \"outlined\",\n            forceStyle: \"press\",\n            className: \"border-interactive-outlined-active\",\n          },\n          /* ghost */\n          {\n            variant: \"ghost\",\n            forceStyle: undefined,\n            className: \"border-transparent\",\n          },\n          {\n            variant: \"ghost\",\n            forceStyle: \"hover\",\n            className: \"border-interactive-outlined-hover\",\n          },\n          {\n            variant: \"ghost\",\n            forceStyle: \"focus\",\n            className: \"border-interactive-outlined-focus\",\n          },\n          {\n            variant: \"ghost\",\n            forceStyle: \"press\",\n            className: \"border-interactive-outlined-active\",\n          },\n        ]\n      : undefined,\n    defaultVariants: {\n      variant: \"contained\",\n    },\n  },\n  { twMerge: false },\n);\n\ntype PressableBoxVariantProps = VariantProps<typeof pressableBoxVariants>;\n\nexport interface PressableBoxProps\n  extends RNPressableProps, PressableBoxVariantProps {\n  accent?: Accent;\n  className?: string;\n  forceStyle?: \"focus\" | \"hover\" | \"press\";\n}\n\n// TODO what is the diff between <Box interactive> and PressableBox ?\nexport const PressableBox = forwardRef<RNView, PressableBoxProps>(\n  ({ className, variant, forceStyle, accent, ...props }, ref) => {\n    return (\n      <AccentScope accent={accent}>\n        <InteractiveBox\n          ref={ref}\n          withFocusVisibleOutline\n          role=\"button\"\n          className={pressableBoxVariants({\n            variant,\n\n            className,\n            forceStyle,\n          })}\n          {...props}\n        />\n      </AccentScope>\n    );\n  },\n);\n","import { useThemeToken } from \"./useThemeToken\";\n\nexport type ColorClassName =\n  | string // keeping string to allow tailwind-variants usage\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-accent\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-disabled-muted\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-disabled\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-muted\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-on-accent-muted\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-on-accent\"\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  | \"text-sharp\";\n/**\n * Resolves a `text-*` Tailwind className (e.g. `\"text-accent\"`) to its\n * concrete `--color-*` token value for the active theme. For native SVG\n * props (`color`, `stroke`, `fill`) that can't take a className directly and\n * so can't rely on CSS `currentColor` the way web SVG can.\n */\nexport function useColorToken(className: ColorClassName): string | undefined {\n  const token = className\n    .split(/\\s+/)\n    .find((part) => part.startsWith(\"text-\"))\n    ?.slice(\"text-\".length);\n  return useThemeToken(`--color-${token ?? \"sharp\"}`);\n}\n","import {\n  type ReactElement,\n  type ReactNode,\n  type SVGProps,\n  cloneElement,\n} from \"react\";\nimport type { ColorClassName } from \"../../core/useColorToken\";\nimport { useColorToken } from \"../../core/useColorToken\";\n\nexport type SVGIconElement = ReactElement<SVGProps<SVGSVGElement>>;\n\nexport interface IconProps {\n  icon: SVGIconElement;\n  /** Square size in px. Defaults to 20. */\n  size?: number;\n  /**\n   * Text-colour className driving the icon tint, e.g. `text-sharp`,\n   * `text-muted`, `text-accent`, `text-on-accent`, `text-disabled-muted`.\n   * Defaults to `text-sharp`.\n   */\n  className?: ColorClassName;\n}\n\nexport function Icon({\n  icon,\n  size = 20,\n  className = \"text-sharp\",\n}: IconProps): ReactNode {\n  // RN SVG needs a concrete color, not a className. Resolve the text-* color\n  // class to its --color-* token value via the active theme.\n  const color = useColorToken(className);\n  return cloneElement(icon, {\n    color,\n    width: size,\n    height: size,\n  });\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport Animated, {\n  Easing,\n  useAnimatedProps,\n  useSharedValue,\n  withTiming,\n} from \"react-native-reanimated\";\nimport { Circle, Svg } from \"react-native-svg\";\nimport { animationDurationsMs } from \"../../animationDurationsMs\";\n\nexport interface RingCircleProps {\n  center: number;\n  radius: number;\n  strokeWidth: number;\n  strokeDasharray?: number;\n  strokeDashoffset?: number;\n  /** Injected by the native `Icon` via `cloneElement`, resolved from a `useColorToken` string. */\n  color?: string;\n  /** Injected by the web `Icon` via `cloneElement` — the `text-*` class itself, resolved through CSS `currentColor`. */\n  className?: string;\n  width?: number;\n  height?: number;\n}\n\nconst AnimatedCircle = Animated.createAnimatedComponent(Circle);\n\n// Matches the web ring's CSS `ease-out` (cubic-bezier(0, 0, 0.58, 1)).\nconst easeOut = Easing.bezier(0, 0, 0.58, 1);\n\nexport function RingCircle({\n  center,\n  radius,\n  strokeWidth,\n  strokeDasharray,\n  strokeDashoffset,\n  color,\n  width,\n  height,\n}: RingCircleProps): ReactNode {\n  // Same viewBox as Phosphor icons (e.g. CheckCircleRegularIcon, viewBox\n  // \"0 0 256 256\"), whose glyph is a 208-diameter circle inset within it.\n  // Rendering into the same viewBox at the same glyph diameter gives the ring\n  // the same padding, so it keeps a consistent visual weight when swapped for\n  // a Phosphor icon in the same slot (Button's overlay spinner → success check).\n  const scale = 208 / (center * 2);\n  const scaledRadius = radius * scale;\n  const scaledStrokeWidth = strokeWidth * scale;\n  const scaledDashoffset =\n    strokeDashoffset == null ? undefined : strokeDashoffset * scale;\n\n  // strokeDashoffset is an SVG prop, not a view style, so NativeWind\n  // transitions can't animate it — drive it with Reanimated instead.\n  const animatedOffset = useSharedValue(scaledDashoffset ?? 0);\n\n  useEffect(() => {\n    animatedOffset.value = withTiming(scaledDashoffset ?? 0, {\n      duration: animationDurationsMs.progress,\n      easing: easeOut,\n    });\n  }, [animatedOffset, scaledDashoffset]);\n\n  const animatedProps = useAnimatedProps(() => ({\n    strokeDashoffset: animatedOffset.value,\n  }));\n\n  return (\n    <Svg color={color} width={width} height={height} viewBox=\"0 0 256 256\">\n      {strokeDasharray == null ? (\n        <Circle\n          cx={128}\n          cy={128}\n          r={scaledRadius}\n          stroke=\"currentColor\"\n          strokeWidth={scaledStrokeWidth}\n          fill=\"none\"\n        />\n      ) : (\n        <AnimatedCircle\n          animatedProps={animatedProps}\n          cx={128}\n          cy={128}\n          r={scaledRadius}\n          stroke=\"currentColor\"\n          strokeWidth={scaledStrokeWidth}\n          strokeDasharray={strokeDasharray * scale}\n          strokeLinecap=\"round\"\n          transform=\"rotate(-90 128 128)\"\n          fill=\"none\"\n        />\n      )}\n    </Svg>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { animationDurationsMs } from \"../../animationDurationsMs\";\n\nconst startDelayMs = 100;\nconst stepIntervalMs = 500;\nconst completeDelayMs = 500;\nconst resetDelayMs = 1000;\n\n/**\n * Time from `loading` going false until the ring has finished completing to\n * 100% and faded out — how long a consumer must keep the component mounted\n * to see the finish animation instead of cutting it off.\n */\nexport const indeterminateExitDurationMs =\n  resetDelayMs + animationDurationsMs.fade;\n\nconst random = (): number => Math.ceil(Math.random() * 100) / 100;\n\n/**\n * Advances toward 100 in decreasing increments so the bar appears to slow\n * down as it approaches completion, without ever reaching it on its own\n * (e.g. ~20% at 100ms, ~40% at 1s, ~60% at 2s, ~80% at 3s).\n */\nfunction nextSimulatedProgress(progress: number): number {\n  if (progress < 60) return progress + random() * 10 + 5;\n  if (progress < 70) return progress + random() * 10 + 3;\n  if (progress < 80) return progress + random() + 5;\n  if (progress < 90) return progress + random() + 1;\n  if (progress < 95) return progress + 0.1;\n  return progress;\n}\n\nexport function useSimulatedProgress(loading: boolean): {\n  progress: number;\n  hidden: boolean;\n} {\n  const [progress, setProgress] = useState(1);\n  const [hidden, setHidden] = useState(!loading);\n\n  useEffect(() => {\n    if (!loading) return undefined;\n\n    setHidden(false);\n    const startTimer = setTimeout(() => {\n      setProgress(20);\n    }, startDelayMs);\n    const stepTimer = setInterval(() => {\n      setProgress(nextSimulatedProgress);\n    }, stepIntervalMs);\n\n    return () => {\n      clearTimeout(startTimer);\n      clearInterval(stepTimer);\n    };\n  }, [loading]);\n\n  useEffect(() => {\n    if (loading) return undefined;\n\n    const completeTimer = setTimeout(() => {\n      setProgress(100);\n    }, completeDelayMs);\n    const resetTimer = setTimeout(() => {\n      setHidden(true);\n      setProgress(1);\n    }, resetDelayMs);\n\n    return () => {\n      clearTimeout(completeTimer);\n      clearTimeout(resetTimer);\n    };\n  }, [loading]);\n\n  return { progress, hidden };\n}\n","import type { ReactNode } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { Icon } from \"../primitives/Icon\";\nimport { View } from \"../primitives/View\";\nimport { RingCircle } from \"./RingCircle\";\nimport { useSimulatedProgress } from \"./useSimulatedProgress\";\n\nexport type CircularProgressSize = \"lg\" | \"md\" | \"sm\" | \"xs\";\n\nconst diameterBySize: Record<CircularProgressSize, number> = {\n  xs: 16,\n  sm: 32,\n  md: 64,\n  lg: 128,\n};\n\nconst strokeWidthBySize: Record<CircularProgressSize, number> = {\n  xs: 2,\n  sm: 4,\n  md: 8,\n  lg: 16,\n};\n\nconst ring = tv({\n  base: \"relative transition-opacity duration-fade\",\n  variants: {\n    hidden: {\n      true: \"opacity-0\",\n      false: \"opacity-100\",\n    },\n  },\n  defaultVariants: { hidden: false },\n});\n\nexport interface CircularProgressProps {\n  /** Known completion percentage, 0-100. For an unknown percentage (e.g.\n   * reconnecting, page transitions), use `IndeterminateCircularProgress` instead. */\n  progress: number;\n  hidden?: boolean;\n  accent?: Accent;\n  size?: CircularProgressSize;\n}\n\nexport function CircularProgress({\n  progress,\n  hidden = false,\n  accent = \"brand\",\n  size = \"md\",\n}: CircularProgressProps): ReactNode {\n  const diameter = diameterBySize[size];\n  const strokeWidth = strokeWidthBySize[size];\n  const radius = (diameter - strokeWidth) / 2;\n  const circumference = 2 * Math.PI * radius;\n  const clampedProgress = Math.min(Math.max(progress, 0), 100);\n  const dashOffset = circumference * (1 - clampedProgress / 100);\n  const center = diameter / 2;\n\n  const trackRing = (\n    <RingCircle center={center} radius={radius} strokeWidth={strokeWidth} />\n  );\n\n  const fillRing = (\n    <RingCircle\n      center={center}\n      radius={radius}\n      strokeWidth={strokeWidth}\n      strokeDasharray={circumference}\n      strokeDashoffset={dashOffset}\n    />\n  );\n\n  return (\n    <AccentScope accent={accent}>\n      <View\n        className={ring({ hidden })}\n        style={{ width: diameter, height: diameter }}\n      >\n        <View className=\"absolute inset-0\">\n          <Icon\n            icon={trackRing}\n            size={diameter}\n            className=\"text-highlight-accent\"\n          />\n        </View>\n        <View className=\"absolute inset-0\">\n          <Icon icon={fillRing} size={diameter} className=\"text-accent\" />\n        </View>\n      </View>\n    </AccentScope>\n  );\n}\n\nexport interface IndeterminateCircularProgressProps {\n  /** Whether an operation is in progress. The ring creeps toward 100% while\n   * `true`, then completes and fades out once `false`. */\n  loading: boolean;\n  accent?: Accent;\n  size?: CircularProgressSize;\n}\n\nexport function IndeterminateCircularProgress({\n  loading,\n  accent,\n  size,\n}: IndeterminateCircularProgressProps): ReactNode {\n  const { progress, hidden } = useSimulatedProgress(loading);\n\n  return (\n    <CircularProgress\n      progress={progress}\n      hidden={hidden}\n      accent={accent}\n      size={size}\n    />\n  );\n}\n","import { CheckCircleRegularIcon } from \"alouette-icons/phosphor-icons/CheckCircleRegularIcon\";\nimport { WarningDuotoneIcon } from \"alouette-icons/phosphor-icons/WarningDuotoneIcon\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { Platform } from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { PressableBox, type PressableBoxProps } from \"../data/PressableBox\";\nimport { IndeterminateCircularProgress } from \"../feedback/CircularProgress\";\nimport { indeterminateExitDurationMs } from \"../feedback/useSimulatedProgress\";\nimport { Icon, type SVGIconElement } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\nimport { View } from \"../primitives/View\";\n\nexport const buttonHeight = {\n  sm: 38,\n  md: 44,\n} as const;\n\nconst buttonVariants = tv(\n  {\n    slots: {\n      frame: \"flex-row flex-center relative\",\n      text: \"font-body-bold text-center shrink transition-opacity duration-fade\",\n      icon: \"\",\n      terminalIcon: \"text-accent\",\n      overlayIconContainer: \"absolute inset-0 flex-center\",\n    },\n    variants: {\n      size: {\n        sm: {\n          frame: \"rounded-sm px-xs gap-xxs min-h-[38px]\",\n          text: \"text-sm py-xxs\",\n        },\n        md: {\n          frame: \"rounded-sm px-m gap-xs min-h-[44px]\",\n          text: \"text-base py-xs\",\n        },\n      },\n      variant: {\n        contained: { text: \"text-on-accent\" },\n        outlined: { text: \"text-sharp\" },\n        ghost: { text: \"text-sharp\" },\n      },\n      disabled: { true: {}, false: {} },\n      dimmed: {\n        true: { text: \"opacity-30\", icon: \"opacity-30\" },\n        false: {},\n      },\n    },\n    compoundVariants: [\n      {\n        variant: \"contained\",\n        disabled: false,\n        ghost: false,\n        class: { icon: \"text-on-accent\" },\n      },\n      {\n        variant: \"contained\",\n        disabled: false,\n        ghost: true,\n        class: {\n          text: \"text-sharp hover:text-on-accent\",\n          icon: \"text-sharp hover:text-on-accent\",\n        },\n      },\n      { variant: \"outlined\", disabled: false, class: { icon: \"text-sharp\" } },\n      {\n        variant: \"contained\",\n        disabled: true,\n        class: { icon: \"text-disabled-sharp\", text: \"text-disabled-sharp\" },\n      },\n      {\n        variant: \"outlined\",\n        disabled: true,\n        class: { icon: \"text-disabled-muted\", text: \"text-disabled-muted\" },\n      },\n    ],\n    defaultVariants: { size: \"md\", variant: \"contained\" },\n  },\n  { twMerge: false },\n);\n\ntype ButtonSizeProps = Pick<VariantProps<typeof buttonVariants>, \"size\">;\n\nexport type ButtonState = \"failed\" | \"loading\" | \"success\";\n\n/** Icon shown above the text for a terminal `state`, once the spinner's\n * finish animation has played out. */\nfunction resolveTerminalIcon(state: ButtonState | undefined): {\n  terminalIcon: SVGIconElement | undefined;\n  terminalIconAccent: Accent | undefined;\n} {\n  if (state === \"success\") {\n    return {\n      terminalIcon: <CheckCircleRegularIcon />,\n      terminalIconAccent: \"success\",\n    };\n  }\n  if (state === \"failed\") {\n    return {\n      terminalIcon: <WarningDuotoneIcon />,\n      terminalIconAccent: \"danger\",\n    };\n  }\n  return { terminalIcon: undefined, terminalIconAccent: undefined };\n}\n\nexport interface ButtonProps\n  extends Omit<PressableBoxProps, \"children\">, ButtonSizeProps {\n  icon?: SVGIconElement;\n  accent?: Accent;\n  text: ReactNode;\n  state?: ButtonState;\n}\n\nexport function Button({\n  icon,\n  text,\n  disabled,\n  state,\n  accent = \"brand\",\n  variant = \"contained\",\n  size = \"md\",\n  className,\n  ...pressableProps\n}: ButtonProps): ReactNode {\n  const isLoading = state === \"loading\";\n\n  // Keep the spinner (and the disabled look) mounted past `state` leaving\n  // \"loading\" so the ring's complete-then-fade animation can finish, and the\n  // background transitions back in step with it, instead of both being cut\n  // off mid-animation.\n  const [showSpinner, setShowSpinner] = useState(isLoading);\n  useEffect(() => {\n    if (isLoading) {\n      setShowSpinner(true);\n      return undefined;\n    }\n    const timer = setTimeout(() => {\n      setShowSpinner(false);\n    }, indeterminateExitDurationMs);\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [isLoading]);\n\n  const { terminalIcon, terminalIconAccent } = resolveTerminalIcon(state);\n  const hasOverlayIcon = showSpinner || terminalIcon !== undefined;\n\n  const isDisabled = disabled === true || state != null;\n  const styles = buttonVariants({\n    size,\n    variant,\n    disabled: isDisabled,\n    dimmed: hasOverlayIcon,\n  });\n\n  return (\n    <PressableBox\n      accent={accent}\n      variant={variant}\n      disabled={isDisabled}\n      className={styles.frame({ className })}\n      {...pressableProps}\n    >\n      {hasOverlayIcon ? (\n        <View className={styles.overlayIconContainer()}>\n          {showSpinner || !terminalIcon ? (\n            <IndeterminateCircularProgress\n              loading={isLoading}\n              accent={accent}\n              size={size === \"sm\" ? \"xs\" : \"sm\"}\n            />\n          ) : (\n            <AccentScope accent={terminalIconAccent}>\n              <Icon\n                icon={terminalIcon}\n                className={styles.terminalIcon()}\n                size={size === \"sm\" ? 24 : 32}\n              />\n            </AccentScope>\n          )}\n        </View>\n      ) : null}\n      {icon ? (\n        <Icon\n          icon={icon}\n          className={styles.icon()}\n          size={size === \"sm\" ? 16 : 20}\n        />\n      ) : null}\n      <Text aria-disabled={isDisabled} className={styles.text()}>\n        {text}\n      </Text>\n    </PressableBox>\n  );\n}\n\nexport interface ExternalLinkButtonProps extends ButtonProps {\n  href: string;\n}\n\nexport function ExternalLinkButton({\n  href,\n  onPress,\n  ...buttonProps\n}: ExternalLinkButtonProps): ReactNode {\n  return (\n    <Button\n      {...buttonProps}\n      role=\"link\"\n      onPress={(event) => {\n        onPress?.(event);\n        if (event.defaultPrevented) return;\n        if (Platform.OS === \"web\") {\n          window.open(href, \"_blank\", \"noopener,noreferrer\");\n        } else {\n          throw new Error(\"todo\");\n          // Linking.openURL(href);\n        }\n      }}\n    />\n  );\n}\n\nexport interface InternalLinkButtonProps extends ButtonProps {\n  href: string;\n}\n\nexport function InternalLinkButton({\n  href: _href,\n  ...buttonProps\n}: InternalLinkButtonProps): ReactNode {\n  return <Button {...buttonProps} role=\"link\" />;\n}\n","import type { ReactNode } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { PressableBox, type PressableBoxProps } from \"../data/PressableBox\";\nimport { Icon, type SVGIconElement } from \"../primitives/Icon\";\nimport { buttonHeight } from \"./Button\";\n\nconst iconButtonVariants = tv(\n  {\n    slots: {\n      frame: \"shrink-0 flex-center rounded-full\",\n      icon: \"\",\n    },\n    variants: {\n      variant: {\n        contained: {},\n        outlined: {},\n        ghost: {},\n      },\n      disabled: {\n        true: {},\n        false: {},\n      },\n    },\n    compoundVariants: [\n      {\n        variant: \"contained\",\n        disabled: false,\n        class: { icon: \"text-on-accent\" },\n      },\n      {\n        variant: \"outlined\",\n        disabled: false,\n        class: { icon: \"text-sharp\" },\n      },\n      {\n        variant: \"ghost\",\n        disabled: false,\n        class: { icon: \"text-sharp\" },\n      },\n      {\n        variant: \"contained\",\n        disabled: true,\n        class: { icon: \"text-disabled-sharp\" },\n      },\n      {\n        variant: \"outlined\",\n        disabled: true,\n        class: { icon: \"text-disabled-muted\" },\n      },\n      {\n        variant: \"ghost\",\n        disabled: true,\n        class: { icon: \"text-disabled-muted\" },\n      },\n    ],\n    defaultVariants: { variant: \"contained\" },\n  },\n  { twMerge: false },\n);\n\nexport interface IconButtonProps extends Omit<PressableBoxProps, \"children\"> {\n  icon: SVGIconElement;\n  /** Preset size token, or any number for a custom diameter (px). */\n  size?: number | \"md\" | \"sm\";\n  /** When \"fill\", the icon takes 80% of the button; default uses 50%. */\n  iconSize?: \"fill\";\n  \"aria-label\": string;\n}\n\nexport function IconButton({\n  icon,\n  disabled,\n  size = \"md\",\n  iconSize,\n  variant = \"contained\",\n  className,\n  ...pressableProps\n}: IconButtonProps): ReactNode {\n  const diameter = typeof size === \"number\" ? size : buttonHeight[size];\n  const styles = iconButtonVariants({ variant, disabled: disabled === true });\n\n  return (\n    <PressableBox\n      variant={variant}\n      disabled={disabled}\n      className={styles.frame({ className })}\n      style={{ width: diameter, height: diameter }}\n      {...pressableProps}\n    >\n      <Icon\n        icon={icon}\n        size={diameter * (iconSize === \"fill\" ? 0.8 : 0.55)}\n        className={styles.icon()}\n      />\n    </PressableBox>\n  );\n}\n","import { XRegularIcon } from \"alouette-icons/phosphor-icons/XRegularIcon\";\nimport { type ReactNode, useId } from \"react\";\nimport { Pressable, Modal as RNModal, useWindowDimensions } from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { IconButton } from \"../actions/IconButton\";\nimport { Icon, type SVGIconElement } from \"../primitives/Icon\";\nimport { ScrollView } from \"../primitives/ScrollView\";\nimport { Text } from \"../primitives/Text\";\nimport { View } from \"../primitives/View\";\nimport { HStack, VStack } from \"../stacks/stacks\";\nimport { AccentScope } from \"./AccentScope\";\nimport { Surface } from \"./Surface\";\n\nconst panelVariants = tv(\n  {\n    // w-full so the panel shrinks on small screens (the backdrop padding keeps a\n    // margin); max-w caps it on wide viewports.\n    base: \"w-full\",\n    variants: {\n      size: {\n        sm: \"max-w-[360px]\",\n        md: \"max-w-[520px]\",\n        lg: \"max-w-[720px]\",\n      },\n    },\n    defaultVariants: { size: \"md\" },\n  },\n  { twMerge: false },\n);\n\ntype PanelVariantProps = VariantProps<typeof panelVariants>;\n\n// The close button is absolutely positioned at a fixed corner inset, so its\n// height no longer dictates the header row height and it hugs the corner\n// regardless of the Surface's size-scaled padding. The title reserves right\n// padding so its text can't run under the button — larger sizes need less\n// because the Surface padding already pushes the text inward.\nconst titleReserveVariants = tv(\n  {\n    variants: {\n      size: {\n        sm: \"pr-xxl\",\n        md: \"pr-xl\",\n        lg: \"pr-xl\",\n      },\n    },\n    defaultVariants: { size: \"md\" },\n  },\n  { twMerge: false },\n);\n\ninterface ModalBaseProps {\n  /** Whether the modal is shown. */\n  visible: boolean;\n  /**\n   * Called when the user dismisses the modal — backdrop press, close button, the\n   * Android back button, or the Escape key (web).\n   */\n  onClose: () => void;\n  children: ReactNode;\n  /** Accent-tinted icon rendered before the title in the header. */\n  icon?: SVGIconElement;\n  /** Actions row rendered below the body (e.g. Cancel/Confirm buttons). */\n  footer?: ReactNode;\n  accent?: Accent;\n  size?: PanelVariantProps[\"size\"];\n  /** Hide the header close button (the modal stays dismissible otherwise). */\n  hideCloseButton?: boolean;\n  /** Accessible label for the close button. */\n  closeButtonAriaLabel?: string;\n  /**\n   * `alertdialog` for interruptions that require an explicit response\n   * (destructive confirmation, errors). Defaults to `dialog`.\n   */\n  role?: \"alertdialog\" | \"dialog\";\n  /** ID of the element describing the dialog (announced by assistive tech). */\n  \"aria-describedby\"?: string;\n  testID?: string;\n}\n\ninterface ModalWithTitleProps extends ModalBaseProps {\n  /** Heading rendered in the header; also labels the dialog for assistive tech. */\n  title: string;\n  \"aria-label\"?: string;\n}\n\ninterface ModalWithoutTitleProps extends ModalBaseProps {\n  title?: undefined;\n  /** Required when there is no `title`, so the dialog is still labelled. */\n  \"aria-label\": string;\n}\n\nexport type ModalProps = ModalWithoutTitleProps | ModalWithTitleProps;\n\nexport function Modal({\n  visible,\n  onClose,\n  children,\n  icon,\n  footer,\n  accent,\n  size = \"md\",\n  title,\n  hideCloseButton = false,\n  closeButtonAriaLabel = \"Close\",\n  role = \"dialog\",\n  \"aria-describedby\": ariaDescribedby,\n  testID,\n  \"aria-label\": ariaLabel,\n}: ModalProps): ReactNode {\n  const { height: windowHeight } = useWindowDimensions();\n  const titleId = useId();\n\n  return (\n    <AccentScope accent={accent}>\n      <RNModal\n        transparent\n        visible={visible}\n        animationType=\"fade\"\n        onRequestClose={onClose}\n      >\n        <View className=\"flex-1 flex-center p-l\">\n          {/* Backdrop is an absolutely-filled sibling behind the panel, so it\n              catches outside clicks without wrapping the panel — clicks inside\n              the panel never reach it. aria-hidden + focusable={false} keep this\n              dismiss target out of the accessibility tree and the tab order. */}\n          <Pressable\n            aria-hidden\n            focusable={false}\n            className=\"absolute inset-0 bg-translucent\"\n            onPress={onClose}\n          />\n          <View\n            aria-modal\n            role={role}\n            aria-label={title === undefined ? ariaLabel : undefined}\n            aria-labelledby={title === undefined ? undefined : titleId}\n            aria-describedby={ariaDescribedby}\n            testID={testID}\n            className={`relative ${panelVariants({ size })}`}\n          >\n            <Surface\n              variant=\"highlight\"\n              size={size}\n              shadow=\"l\"\n              className=\"relative gap-m\"\n            >\n              {title === undefined && icon === undefined ? null : (\n                <HStack\n                  className={`items-center gap-xs ${\n                    hideCloseButton ? \"\" : titleReserveVariants({ size })\n                  }`}\n                >\n                  {icon === undefined ? null : (\n                    <Icon icon={icon} size={24} className=\"text-accent\" />\n                  )}\n                  {title === undefined ? null : (\n                    <Text\n                      nativeID={titleId}\n                      className=\"shrink font-heading-bold text-xl leading-tight text-sharp\"\n                    >\n                      {title}\n                    </Text>\n                  )}\n                </HStack>\n              )}\n\n              {hideCloseButton ? null : (\n                <IconButton\n                  icon={<XRegularIcon />}\n                  variant=\"ghost\"\n                  size={size === \"lg\" ? \"md\" : size}\n                  aria-label={closeButtonAriaLabel}\n                  className=\"absolute right-sm top-sm\"\n                  onPress={onClose}\n                />\n              )}\n\n              {/* Pixel maxHeight (not a %) so the ScrollView sizes to its\n                  content and only scrolls once it exceeds ~70% of the screen. */}\n              <ScrollView style={{ maxHeight: windowHeight * 0.7 }}>\n                <VStack className=\"gap-m\">{children}</VStack>\n              </ScrollView>\n\n              {footer === undefined ? null : (\n                <HStack className=\"items-center justify-end gap-m\">\n                  {footer}\n                </HStack>\n              )}\n            </Surface>\n          </View>\n        </View>\n      </RNModal>\n    </AccentScope>\n  );\n}\n","import { CheckRegularIcon } from \"alouette-icons/phosphor-icons/CheckRegularIcon\";\nimport { InfoRegularIcon } from \"alouette-icons/phosphor-icons/InfoRegularIcon\";\nimport { QuestionRegularIcon } from \"alouette-icons/phosphor-icons/QuestionRegularIcon\";\nimport { WarningRegularIcon } from \"alouette-icons/phosphor-icons/WarningRegularIcon\";\nimport { type ReactNode, useId } from \"react\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { Button } from \"../actions/Button\";\nimport type { SVGIconElement } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\nimport { Modal, type ModalProps } from \"./Modal\";\n\ninterface AlertDialogBaseProps extends Pick<ModalProps, \"size\" | \"testID\"> {\n  /** Whether the dialog is shown. */\n  visible: boolean;\n  /** Heading; also labels the dialog for assistive tech. */\n  title: string;\n  /** Body copy describing the situation or the consequence of confirming. */\n  children?: ReactNode;\n  /** Themes the icon and the primary button. Defaults to \"danger\". */\n  accent?: Accent;\n  /**\n   * Icon shown in the header, signalling the nature of the dialog. Prefer a\n   * usage component ({@link QuestionAlertDialog}, {@link WarningAlertDialog},\n   * {@link InfoAlertDialog}, {@link SuccessAlertDialog}) which supplies it.\n   */\n  icon: SVGIconElement;\n}\n\ninterface ConfirmAlertDialogProps extends AlertDialogBaseProps {\n  /**\n   * \"confirm\" (default) offers a cancel and a confirm action — for decisions,\n   * typically destructive ones.\n   */\n  variant?: \"confirm\";\n  /** Called when the user confirms the action. */\n  onConfirm: () => void;\n  /**\n   * Called when the user rejects the action — cancel button, backdrop, Escape,\n   * or the Android back button.\n   */\n  onCancel: () => void;\n  /** Confirm button label. Defaults to \"Confirm\". */\n  confirmText?: ReactNode;\n  /** Cancel button label. Defaults to \"Cancel\". */\n  cancelText?: ReactNode;\n  /** Disables the confirm button (e.g. while an async action is pending). */\n  confirmDisabled?: boolean;\n}\n\ninterface AcknowledgeAlertDialogProps extends AlertDialogBaseProps {\n  /**\n   * \"alert\" offers a single acknowledge action — for interruptions that only\n   * need to be read and dismissed.\n   */\n  variant: \"alert\";\n  /**\n   * Called when the user dismisses the dialog — acknowledge button, backdrop,\n   * Escape, or the Android back button.\n   */\n  onClose: () => void;\n  /** Acknowledge button label. Defaults to \"OK\". */\n  closeText?: ReactNode;\n}\n\ninterface RequiredAlertDialogProps extends AlertDialogBaseProps {\n  /**\n   * \"required\" offers a single action and cannot be dismissed by the backdrop,\n   * Escape, or the Android back button — the user must respond (e.g. accept\n   * updated terms, a forced sign-out).\n   */\n  variant: \"required\";\n  /** Called when the user takes the required action. */\n  onConfirm: () => void;\n  /** Action button label. Defaults to \"OK\". */\n  confirmText?: ReactNode;\n  /** Disables the action button (e.g. while an async action is pending). */\n  confirmDisabled?: boolean;\n}\n\nexport type AlertDialogProps =\n  | AcknowledgeAlertDialogProps\n  | ConfirmAlertDialogProps\n  | RequiredAlertDialogProps;\n\ninterface ResolvedVariant {\n  /** Footer buttons for the variant. */\n  footer: ReactNode;\n  /**\n   * Handler for the dialog's dismiss affordances (backdrop / Escape / Android\n   * back): the rejecting action for confirm/alert, a no-op for required.\n   */\n  onDismiss: () => void;\n}\n\n// Resolves the variant-specific footer and dismiss handler outside the\n// component so its discriminated props can be narrowed by destructuring.\nfunction resolveVariant(\n  props: AlertDialogProps,\n  accent: Accent,\n): ResolvedVariant {\n  switch (props.variant) {\n    case \"alert\": {\n      const { onClose, closeText } = props;\n      return {\n        onDismiss: onClose,\n        footer: (\n          <Button accent={accent} text={closeText ?? \"OK\"} onPress={onClose} />\n        ),\n      };\n    }\n    case \"required\": {\n      const { onConfirm, confirmText, confirmDisabled } = props;\n      return {\n        // Non-dismissible: only the explicit action closes it.\n        onDismiss: () => undefined,\n        footer: (\n          <Button\n            accent={accent}\n            text={confirmText ?? \"OK\"}\n            disabled={confirmDisabled}\n            onPress={onConfirm}\n          />\n        ),\n      };\n    }\n    case \"confirm\":\n    case undefined:\n    default: {\n      const { onConfirm, onCancel, confirmText, cancelText, confirmDisabled } =\n        props;\n      return {\n        onDismiss: onCancel,\n        footer: (\n          <>\n            <Button\n              variant=\"outlined\"\n              text={cancelText ?? \"Cancel\"}\n              onPress={onCancel}\n            />\n            <Button\n              accent={accent}\n              text={confirmText ?? \"Confirm\"}\n              disabled={confirmDisabled}\n              onPress={onConfirm}\n            />\n          </>\n        ),\n      };\n    }\n  }\n}\n\nexport function AlertDialog(props: AlertDialogProps): ReactNode {\n  const {\n    visible,\n    title,\n    children,\n    accent = \"danger\",\n    icon,\n    size = \"md\",\n    testID,\n  } = props;\n  const descriptionId = useId();\n  const { footer, onDismiss } = resolveVariant(props, accent);\n\n  return (\n    <Modal\n      hideCloseButton\n      visible={visible}\n      role=\"alertdialog\"\n      accent={accent}\n      size={size}\n      title={title}\n      icon={icon}\n      aria-describedby={children === undefined ? undefined : descriptionId}\n      testID={testID}\n      footer={footer}\n      onClose={onDismiss}\n    >\n      {children === undefined ? null : (\n        <Text nativeID={descriptionId} className=\"text-base text-muted\">\n          {children}\n        </Text>\n      )}\n    </Modal>\n  );\n}\n\n// Omit that distributes over the union so each variant keeps its own props.\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n  ? Omit<T, K>\n  : never;\n\n// Icon is fixed by the usage component; the accent stays the caller's choice.\nexport type AlertDialogUsageProps = DistributiveOmit<AlertDialogProps, \"icon\">;\n\nexport function QuestionAlertDialog(props: AlertDialogUsageProps): ReactNode {\n  return <AlertDialog {...props} icon={<QuestionRegularIcon />} />;\n}\n\nexport function WarningAlertDialog(props: AlertDialogUsageProps): ReactNode {\n  return <AlertDialog {...props} icon={<WarningRegularIcon />} />;\n}\n\nexport function InfoAlertDialog(props: AlertDialogUsageProps): ReactNode {\n  return <AlertDialog {...props} icon={<InfoRegularIcon />} />;\n}\n\nexport function SuccessAlertDialog(props: AlertDialogUsageProps): ReactNode {\n  return <AlertDialog {...props} icon={<CheckRegularIcon />} />;\n}\n","import { CheckRegularIcon } from \"alouette-icons/phosphor-icons/CheckRegularIcon\";\nimport { InfoRegularIcon } from \"alouette-icons/phosphor-icons/InfoRegularIcon\";\nimport { WarningDuotoneIcon } from \"alouette-icons/phosphor-icons/WarningDuotoneIcon\";\nimport { WarningRegularIcon } from \"alouette-icons/phosphor-icons/WarningRegularIcon\";\nimport { XRegularIcon } from \"alouette-icons/phosphor-icons/XRegularIcon\";\nimport type { ReactNode } from \"react\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Except } from \"type-fest\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { IconButton } from \"../actions/IconButton\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { Box } from \"../containers/Box\";\nimport { Icon, type SVGIconElement } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\n\nconst messageFrameVariants = tv(\n  {\n    base: \"flex-row items-center bg-highlight-accent overflow-hidden\",\n    variants: {\n      size: {\n        sm: \"gap-xs p-sm rounded-xs\",\n        md: \"gap-m p-m rounded-sm\",\n        lg: \"gap-l p-l rounded-md\",\n      },\n    },\n    defaultVariants: { size: \"md\" },\n  },\n  { twMerge: false },\n);\n\ntype MessageVariantProps = VariantProps<typeof messageFrameVariants>;\ntype MessageSize = NonNullable<MessageVariantProps[\"size\"]>;\n\nconst ICON_SIZE: Record<MessageSize, number> = { sm: 20, md: 24, lg: 28 };\nconst DISMISS_BUTTON_SIZE: Record<MessageSize, number> = {\n  sm: 24,\n  md: 40,\n  lg: 40,\n};\n\ninterface MessageBaseProps {\n  accent: Accent;\n  size?: MessageSize;\n  icon: SVGIconElement;\n  children?: ReactNode;\n}\ninterface MessagePropsWithDismiss extends MessageBaseProps {\n  onDismiss: () => void;\n  dismissIconAriaLabel: string;\n}\ninterface MessagePropsWithoutDismiss extends MessageBaseProps {\n  onDismiss?: undefined;\n  dismissIconAriaLabel?: undefined;\n}\n\nexport type MessageProps = MessagePropsWithDismiss | MessagePropsWithoutDismiss;\n\nexport function Message({\n  icon,\n  size = \"md\",\n  accent,\n  children,\n  onDismiss,\n  dismissIconAriaLabel,\n}: MessageProps): ReactNode {\n  const dismissDiameter = DISMISS_BUTTON_SIZE[size];\n  return (\n    <AccentScope accent={accent}>\n      <Box className={`shadow-m ${messageFrameVariants({ size })}`}>\n        <Icon icon={icon} size={ICON_SIZE[size]} className=\"text-accent\" />\n        <Text className=\"text-accent grow\">{children}</Text>\n        {onDismiss ? (\n          <Box\n            style={{ width: dismissDiameter, height: dismissDiameter }}\n            className=\"flex-center\"\n          >\n            <IconButton\n              icon={<XRegularIcon />}\n              iconSize={size === \"sm\" ? \"fill\" : undefined}\n              size={dismissDiameter}\n              variant=\"ghost\"\n              aria-label={dismissIconAriaLabel}\n              onPress={onDismiss}\n            />\n          </Box>\n        ) : null}\n      </Box>\n    </AccentScope>\n  );\n}\n\ntype AccentMessageProps = Except<MessageProps, \"accent\" | \"icon\">;\n\nexport function InfoMessage(props: AccentMessageProps): ReactNode {\n  return <Message {...props} accent=\"info\" icon={<InfoRegularIcon />} />;\n}\n\nexport function ConfirmationMessage(props: AccentMessageProps): ReactNode {\n  return <Message {...props} accent=\"success\" icon={<CheckRegularIcon />} />;\n}\n\nexport function WarningMessage(props: AccentMessageProps): ReactNode {\n  return <Message {...props} accent=\"warning\" icon={<WarningRegularIcon />} />;\n}\n\nexport function ErrorMessage(props: AccentMessageProps): ReactNode {\n  return <Message {...props} accent=\"danger\" icon={<WarningDuotoneIcon />} />;\n}\n","import { useEffect, useReducer, useRef } from \"react\";\nimport type { GestureResponderEvent } from \"react-native\";\nimport type { ButtonState } from \"./Button\";\n\nexport const settledDisplayDurationMs = 4000;\n\ninterface PressAsyncState {\n  buttonState: ButtonState | undefined;\n  error: Error | null;\n}\n\ntype PressAsyncAction =\n  | { type: \"reject\"; error: Error }\n  | { type: \"resolve\" }\n  | { type: \"settledTimeout\" }\n  | { type: \"start\" };\n\nconst idleState: PressAsyncState = { buttonState: undefined, error: null };\n\nfunction pressAsyncReducer(\n  previousState: PressAsyncState,\n  action: PressAsyncAction,\n): PressAsyncState {\n  switch (action.type) {\n    case \"start\":\n      return { buttonState: \"loading\", error: null };\n    case \"resolve\":\n      return { buttonState: \"success\", error: null };\n    case \"reject\":\n      return { buttonState: \"failed\", error: action.error };\n    case \"settledTimeout\":\n      return { buttonState: undefined, error: previousState.error };\n    default:\n      throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n  }\n}\n\nexport interface UsePressAsyncResult extends PressAsyncState {\n  handlePress: (event: GestureResponderEvent) => void;\n}\n\nexport function usePressAsync(\n  onPress: (event: GestureResponderEvent) => unknown,\n): UsePressAsyncResult {\n  const [pressAsyncState, dispatch] = useReducer(pressAsyncReducer, idleState);\n  const settledTimerRef = useRef<ReturnType<typeof setTimeout>>(null);\n\n  useEffect(() => {\n    return () => {\n      clearTimeout(settledTimerRef.current);\n    };\n  }, []);\n\n  function handlePress(event: GestureResponderEvent): void {\n    if (pressAsyncState.buttonState === \"loading\") return;\n    clearTimeout(settledTimerRef.current);\n    const result = onPress(event);\n    if (!(result instanceof Promise)) return;\n    dispatch({ type: \"start\" });\n\n    function scheduleSettledTimeout(): void {\n      settledTimerRef.current = setTimeout(() => {\n        dispatch({ type: \"settledTimeout\" });\n      }, settledDisplayDurationMs);\n    }\n\n    result\n      .then(() => {\n        dispatch({ type: \"resolve\" });\n        scheduleSettledTimeout();\n      })\n      .catch((caughtError: unknown) => {\n        const normalizedError =\n          caughtError instanceof Error\n            ? caughtError\n            : new Error(String(caughtError));\n        // eslint-disable-next-line no-console\n        console.error(\n          \"Unexpected error caught in ActionButton\",\n          normalizedError,\n        );\n        dispatch({ type: \"reject\", error: normalizedError });\n        scheduleSettledTimeout();\n      });\n  }\n\n  return { ...pressAsyncState, handlePress };\n}\n","import type { ReactNode } from \"react\";\nimport type { GestureResponderEvent } from \"react-native\";\nimport { ErrorMessage } from \"../feedback/Message\";\nimport { View } from \"../primitives/View\";\nimport { VStack } from \"../stacks/stacks\";\nimport { Button, type ButtonProps } from \"./Button\";\nimport { usePressAsync } from \"./usePressAsync\";\n\nexport interface ActionButtonProps extends Omit<\n  ButtonProps,\n  \"onPress\" | \"state\"\n> {\n  onPress: (event: GestureResponderEvent) => unknown;\n  errorToMessage: (error: unknown) => string;\n}\n\nexport function ActionButton({\n  onPress,\n  errorToMessage,\n  ...buttonProps\n}: ActionButtonProps): ReactNode {\n  const { buttonState, error, handlePress } = usePressAsync(onPress);\n\n  return (\n    <VStack>\n      <Button {...buttonProps} state={buttonState} onPress={handlePress} />\n      <View\n        className={`overflow-hidden transition-[height,opacity] duration-collapse p-sm ${\n          error ? \"h-auto opacity-100\" : \"h-0 opacity-0\"\n        }`}\n      >\n        <ErrorMessage size=\"sm\">{errorToMessage(error)}</ErrorMessage>\n      </View>\n    </VStack>\n  );\n}\n","import { forwardRef } from \"react\";\nimport {\n  TextInput as RNTextInput,\n  type TextInputProps as RNTextInputProps,\n} from \"react-native\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport { useThemeToken } from \"../../core/useThemeToken\";\n\nconst inputVariants = tv(\n  {\n    base: [\n      \"bg-highlight text-base text-sharp\",\n      \"border\",\n      \"transition-[border-color,background-color,outline-color] duration-fast ease-in\",\n      \"outline-interactive-outlined-pressable\", // to have proper outline color transition\n      process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n        ? \"\"\n        : \"border-interactive-outlined-pressable\",\n      \"hover:border-interactive-outlined-hover\",\n      \"focus:border-interactive-outlined-focus\",\n      \"focus:outline-1 focus:outline-interactive-outlined-focus focus:outline-offset-0\",\n      \"active:border-interactive-outlined-active\",\n      \"disabled:bg-disabled-interactive-muted disabled:border-interactive-outlined-disabled disabled:text-form-disabled-text disabled:cursor-not-allowed\",\n    ].join(\" \"),\n    variants: {\n      multiline: {\n        false: \"rounded-md px-m py-xs\",\n        true: \"min-h-[80px] resize-y rounded-xs px-xs py-xs\",\n      },\n      forceStyle: {\n        undefined: process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n          ? \"border-interactive-outlined-pressable\"\n          : \"\",\n        hover: process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n          ? \"border-interactive-outlined-hover\"\n          : \"\",\n        focus: process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n          ? \"border-interactive-outlined-focus outline-1 outline-interactive-outlined-focus outline-offset-0\"\n          : \"\",\n        press: process.env.EXPO_PUBLIC_STORYBOOK_ENABLED\n          ? \"border-interactive-outlined-active\"\n          : \"\",\n      },\n    },\n    defaultVariants: {\n      forceStyle: \"undefined\",\n    },\n  },\n  { twMerge: false },\n);\n\ntype InputVariantProps = VariantProps<typeof inputVariants>;\n\nconst MODE_PROPS = {\n  password: {\n    secureTextEntry: true,\n    autoComplete: \"current-password\",\n  },\n  number: {\n    inputMode: \"numeric\",\n    keyboardType: \"numeric\",\n  },\n  tel: {\n    inputMode: \"tel\",\n    autoComplete: \"tel\",\n    keyboardType: \"phone-pad\",\n  },\n  email: {\n    inputMode: \"email\",\n    autoComplete: \"email\",\n    keyboardType: \"email-address\",\n  },\n  url: {\n    inputMode: \"url\",\n    keyboardType: \"url\",\n  },\n  search: {\n    inputMode: \"search\",\n  },\n  webSearch: {\n    inputMode: \"search\",\n    keyboardType: \"web-search\",\n  },\n} as const satisfies Record<string, Partial<RNTextInputProps>>;\n\nexport type InputTextMode = keyof typeof MODE_PROPS;\n\nexport interface InputTextProps\n  extends Omit<RNTextInputProps, \"editable\">, InputVariantProps {\n  className?: string;\n  disabled?: boolean;\n  mode?: InputTextMode;\n}\n\nexport const InputText = forwardRef<RNTextInput, InputTextProps>(\n  ({ className, disabled, mode, multiline, forceStyle, ...props }, ref) => {\n    const placeholderColor = useThemeToken(\"--color-form-placeholder\");\n    const modeProps = mode ? MODE_PROPS[mode] : undefined;\n    return (\n      <RNTextInput\n        ref={ref}\n        editable={!disabled}\n        disabled={disabled}\n        aria-disabled={disabled === true}\n        multiline={multiline === true}\n        placeholderTextColor={\n          typeof placeholderColor === \"string\" ? placeholderColor : undefined\n        }\n        className={inputVariants({ multiline, forceStyle, className })}\n        {...modeProps}\n        {...props}\n      />\n    );\n  },\n);\n","import { forwardRef } from \"react\";\nimport type { TextInput as RNTextInput } from \"react-native\";\nimport { InputText, type InputTextProps } from \"./InputText\";\n\nexport type TextAreaProps = Omit<InputTextProps, \"multiline\">;\n\nexport const TextArea = forwardRef<RNTextInput, TextAreaProps>((props, ref) => {\n  return <InputText ref={ref} multiline {...props} />;\n});\n","import { type ReactNode, useCallback, useState } from \"react\";\nimport { Switch as RNSwitch } from \"react-native\";\nimport { useThemeToken } from \"../../core/useThemeToken\";\nimport { AccentScope, type AccentScopeProps } from \"../containers/AccentScope\";\n\nexport interface SwitchProps {\n  accent?: AccentScopeProps[\"accent\"];\n  checked?: boolean;\n  disabled?: boolean;\n  onValueChange?: (value: boolean) => void;\n  \"aria-labelledby\"?: string;\n  testID?: string;\n}\n\nfunction useControllableChecked(\n  controlled: boolean | undefined,\n  onValueChange?: (value: boolean) => void,\n): readonly [boolean, (next: boolean) => void] {\n  const [internal, setInternal] = useState(controlled ?? false);\n  const value = controlled ?? internal;\n  const onChange = useCallback(\n    (next: boolean) => {\n      if (controlled === undefined) {\n        setInternal(next);\n      }\n      if (next !== value) {\n        onValueChange?.(next);\n      }\n    },\n    [controlled, onValueChange, value],\n  );\n  return [value, onChange] as const;\n}\n\nfunction SwitchInner({\n  checked,\n  disabled,\n  onValueChange,\n  ...props\n}: SwitchProps): ReactNode {\n  const [value, setValue] = useControllableChecked(checked, onValueChange);\n  const [trackBg, thumb, disabledTrackBg, disabledThumb] = useThemeToken([\n    \"--color-lowered\",\n    \"--color-highlight\",\n    \"--color-disabled-interactive-muted\",\n    \"--color-disabled-muted\",\n  ]);\n  const track = disabled ? disabledTrackBg : trackBg;\n  const thumbColor = disabled ? disabledThumb : thumb;\n  return (\n    <RNSwitch\n      value={value}\n      disabled={disabled}\n      ios_backgroundColor={track}\n      trackColor={{ false: track, true: track }}\n      thumbColor={thumbColor}\n      onValueChange={setValue}\n      {...props}\n    />\n  );\n}\n\nexport function Switch({ accent, ...rest }: SwitchProps): ReactNode {\n  return (\n    <AccentScope accent={accent}>\n      <SwitchInner {...rest} />\n    </AccentScope>\n  );\n}\n","import { CaretDownRegularIcon } from \"alouette-icons/phosphor-icons/CaretDownRegularIcon\";\nimport { type ReactNode, useCallback, useState } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { Icon } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\n\nexport interface SelectOption {\n  label: string;\n  value: string;\n  disabled?: boolean;\n}\n\nexport interface SelectProps {\n  options: SelectOption[];\n  /** Controlled selected value. */\n  value?: string;\n  /** Initial value for uncontrolled usage. */\n  defaultValue?: string;\n  onValueChange?: (value: string) => void;\n  placeholder?: string;\n  disabled?: boolean;\n  accent?: Accent;\n  \"aria-label\"?: string;\n  \"aria-labelledby\"?: string;\n  testID?: string;\n}\n\nexport function useControllableValue(\n  controlled: string | undefined,\n  defaultValue: string | undefined,\n  onValueChange?: (value: string) => void,\n): readonly [string | undefined, (next: string) => void] {\n  const [internal, setInternal] = useState(defaultValue);\n  const value = controlled ?? internal;\n  const setValue = useCallback(\n    (next: string) => {\n      if (controlled === undefined) {\n        setInternal(next);\n      }\n      if (next !== value) {\n        onValueChange?.(next);\n      }\n    },\n    [controlled, onValueChange, value],\n  );\n  return [value, setValue] as const;\n}\n\n// Shared outlined-input look for the trigger, matching InputText. Focus styling\n// and the background are platform-specific (the background lives in each\n// platform's enabled/disabled variant so the disabled bg never competes with\n// bg-highlight at equal specificity), so they are applied by each platform file.\nexport const selectTriggerBaseClassName = [\n  \"flex-row items-center justify-between gap-xs\",\n  \"rounded-md border px-m py-xs min-h-[44px]\",\n  \"transition-[border-color,outline-color,background-color] duration-fast ease-in\",\n].join(\" \");\n\nconst triggerLabelVariants = tv({\n  base: \"flex-1 text-base\",\n  variants: {\n    // Mirrors InputText: sharp value, form-placeholder, form-disabled-text.\n    state: {\n      value: \"text-sharp\",\n      placeholder: \"text-form-placeholder\",\n      disabled: \"text-form-disabled-text\",\n    },\n  },\n  defaultVariants: { state: \"value\" },\n});\n\nexport interface SelectTriggerContentProps {\n  label?: string;\n  placeholder?: string;\n  disabled?: boolean;\n}\n\nexport function SelectTriggerContent({\n  label,\n  placeholder,\n  disabled,\n}: SelectTriggerContentProps): ReactNode {\n  const state = ((): \"disabled\" | \"placeholder\" | \"value\" => {\n    // Placeholder keeps its own color even when disabled (mirrors InputText,\n    // whose placeholderTextColor is independent of the disabled text color);\n    // only an actual value switches to the darker disabled text color.\n    if (label === undefined) return \"placeholder\";\n    if (disabled) return \"disabled\";\n    return \"value\";\n  })();\n  return (\n    <>\n      <Text numberOfLines={1} className={triggerLabelVariants({ state })}>\n        {label ?? placeholder ?? \"\"}\n      </Text>\n      <Icon\n        icon={<CaretDownRegularIcon />}\n        size={18}\n        className={disabled ? \"text-form-disabled-text\" : \"text-muted\"}\n      />\n    </>\n  );\n}\n","import { CheckRegularIcon } from \"alouette-icons/phosphor-icons/CheckRegularIcon\";\nimport { type ReactNode, useState } from \"react\";\nimport { Modal, Pressable, useWindowDimensions } from \"react-native\";\nimport { tv } from \"tailwind-variants\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { InteractiveBox } from \"../containers/Box\";\nimport { Surface } from \"../containers/Surface\";\nimport { Icon } from \"../primitives/Icon\";\nimport { ScrollView } from \"../primitives/ScrollView\";\nimport { Text } from \"../primitives/Text\";\nimport {\n  type SelectOption,\n  type SelectProps,\n  SelectTriggerContent,\n  selectTriggerBaseClassName,\n  useControllableValue,\n} from \"./Select.shared\";\n\nconst triggerVariants = tv(\n  {\n    base: selectTriggerBaseClassName,\n    variants: {\n      // bg lives in each branch (not the shared base) so the disabled bg never\n      // competes with bg-highlight at equal specificity.\n      disabled: {\n        true: \"bg-disabled-interactive-muted border-interactive-outlined-disabled\",\n        false: [\n          \"bg-highlight\",\n          \"border-interactive-outlined-pressable\",\n          \"hover:border-interactive-outlined-hover\",\n          \"focus:border-interactive-outlined-focus\",\n          \"active:border-interactive-outlined-active\",\n        ].join(\" \"),\n      },\n    },\n    defaultVariants: { disabled: false },\n  },\n  { twMerge: false },\n);\n\nconst optionVariants = tv(\n  {\n    base: [\n      \"flex-row items-center justify-between gap-xxs rounded-xs px-m py-m my-xxs\",\n      \"hover:bg-interactive-contained-hover focus:bg-interactive-contained-focus active:bg-interactive-contained-active\",\n    ].join(\" \"),\n    variants: {\n      selected: {\n        true: \"bg-interactive-contained-active\",\n        false: \"bg-interactive-contained-pressable\",\n      },\n      disabled: {\n        true: \"opacity-50\",\n        false: \"\",\n      },\n    },\n    defaultVariants: { selected: false, disabled: false },\n  },\n  { twMerge: false },\n);\n\ninterface SelectOptionRowProps {\n  option: SelectOption;\n  selected: boolean;\n  onSelect: (value: string) => void;\n}\n\nfunction SelectOptionRow({\n  option,\n  selected,\n  onSelect,\n}: SelectOptionRowProps): ReactNode {\n  return (\n    <Pressable\n      role=\"option\"\n      aria-selected={selected}\n      aria-disabled={option.disabled === true}\n      disabled={option.disabled}\n      className={optionVariants({ selected, disabled: option.disabled })}\n      onPress={() => {\n        onSelect(option.value);\n      }}\n    >\n      <Text numberOfLines={1} className=\"flex-1 text-base text-on-accent\">\n        {option.label}\n      </Text>\n      {selected ? (\n        <Icon\n          icon={<CheckRegularIcon />}\n          size={18}\n          className=\"text-on-accent\"\n        />\n      ) : null}\n    </Pressable>\n  );\n}\n\nfunction SelectInner({\n  options,\n  value,\n  defaultValue,\n  onValueChange,\n  placeholder,\n  disabled,\n  testID,\n  \"aria-label\": ariaLabel,\n  \"aria-labelledby\": ariaLabelledby,\n}: Omit<SelectProps, \"accent\">): ReactNode {\n  const [current, setValue] = useControllableValue(\n    value,\n    defaultValue,\n    onValueChange,\n  );\n  const [open, setOpen] = useState(false);\n  const { height: windowHeight } = useWindowDimensions();\n  const selected = options.find((option) => option.value === current);\n\n  const onSelect = (next: string) => {\n    setValue(next);\n    setOpen(false);\n  };\n\n  return (\n    <>\n      <InteractiveBox\n        withFocusVisibleOutline\n        role=\"combobox\"\n        aria-expanded={open}\n        aria-disabled={disabled === true}\n        disabled={disabled}\n        testID={testID}\n        aria-label={ariaLabel}\n        aria-labelledby={ariaLabelledby}\n        className={triggerVariants({ disabled })}\n        onPress={() => {\n          setOpen(true);\n        }}\n      >\n        <SelectTriggerContent\n          label={selected?.label}\n          placeholder={placeholder}\n          disabled={disabled}\n        />\n      </InteractiveBox>\n      <Modal\n        transparent\n        visible={open}\n        animationType=\"fade\"\n        onRequestClose={() => {\n          setOpen(false);\n        }}\n      >\n        <Pressable\n          className=\"flex-1 justify-center bg-translucent px-xl\"\n          onPress={() => {\n            setOpen(false);\n          }}\n        >\n          {/* Captures presses so tapping the list does not dismiss the modal. */}\n          <Pressable className=\"w-full\" aria-label={ariaLabel}>\n            <Surface variant=\"highlight\" shadow=\"l\" size=\"sm\" className=\"py-xs\">\n              {/* Pixel maxHeight (not a %) so the ScrollView sizes to its\n                  content and only scrolls once it exceeds ~70% of the screen. */}\n              <ScrollView\n                style={{ maxHeight: windowHeight * 0.7 }}\n                showsVerticalScrollIndicator={false}\n              >\n                {options.map((option) => (\n                  <SelectOptionRow\n                    key={option.value}\n                    option={option}\n                    selected={option.value === current}\n                    onSelect={onSelect}\n                  />\n                ))}\n              </ScrollView>\n            </Surface>\n          </Pressable>\n        </Pressable>\n      </Modal>\n    </>\n  );\n}\n\nexport function Select({ accent, ...rest }: SelectProps): ReactNode {\n  return (\n    <AccentScope accent={accent}>\n      <SelectInner {...rest} />\n    </AccentScope>\n  );\n}\n","import { AsteriskSimpleRegularIcon } from \"alouette-icons/phosphor-icons/AsteriskSimpleRegularIcon\";\nimport { WarningRegularIcon } from \"alouette-icons/phosphor-icons/WarningRegularIcon\";\nimport { type ReactNode, useId } from \"react\";\nimport { Pressable } from \"react-native\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { Icon } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\nimport { View } from \"../primitives/View\";\nimport { HStack, VStack } from \"../stacks/stacks\";\n\nexport interface FormItemProps {\n  label: string;\n  /** Muted helper text shown between the label and the input. */\n  details?: ReactNode;\n  error?: ReactNode;\n  /**\n   * True when `error` is caused by the field being left empty, as opposed\n   * to some other validation failure. An empty required field just needs\n   * its star recolored — a second warning icon would be a redundant cue.\n   */\n  isRequiredError?: boolean;\n  /** true shows the default marker; any other ReactNode replaces it. */\n  required?: ReactNode;\n  /**\n   * Wraps the rendered content in a left border + padding to visually nest it\n   * inside a group. The label stays at full width above the rail.\n   */\n  indented?: boolean;\n  /** Called when the label is pressed, so it can focus the input. */\n  onLabelPress?: () => void;\n  render: (labelId: string) => ReactNode;\n}\n\n/**\n * Label, error message and layout for a single form field. Form-library\n * agnostic — pass the input as a render prop so it can wire\n * aria-labelledby to the generated labelId, and onLabelPress so the label\n * can focus it, matching a native <label for> click.\n */\nexport function FormItem({\n  label,\n  details,\n  error,\n  isRequiredError,\n  required,\n  indented,\n  onLabelPress,\n  render,\n}: FormItemProps): ReactNode {\n  const labelId = useId();\n  const hasError = Boolean(error);\n  const showWarningIcon = hasError && !isRequiredError;\n\n  // The trailing marker is always the last element after the label text, so\n  // the text never shifts position when error/required state changes. The\n  // required star is never removed on error — it's only recolored, with the\n  // warning icon added alongside it for non-required-emptiness errors.\n  const marker = ((): ReactNode => {\n    if (required === true) {\n      return (\n        <HStack className=\"gap-xxs items-center\">\n          <Icon\n            icon={<AsteriskSimpleRegularIcon />}\n            size={12}\n            className=\"text-accent\"\n          />\n          {showWarningIcon ? (\n            <Icon\n              icon={<WarningRegularIcon />}\n              size={16}\n              className=\"text-accent\"\n            />\n          ) : null}\n        </HStack>\n      );\n    }\n    if (required) {\n      return required;\n    }\n    if (showWarningIcon) {\n      return (\n        <Icon icon={<WarningRegularIcon />} size={16} className=\"text-accent\" />\n      );\n    }\n    return null;\n  })();\n\n  return (\n    <VStack className=\"gap-xxs\">\n      <Pressable onPress={onLabelPress}>\n        <VStack>\n          <HStack className=\"gap-xxs items-center\">\n            <Text\n              nativeID={labelId}\n              accent={hasError ? \"danger\" : undefined}\n              className={`font-body-bold text-md ${hasError ? \"text-accent\" : \"\"}`}\n            >\n              {label}\n            </Text>\n            {marker ? (\n              <View aria-hidden>\n                {hasError ? (\n                  <AccentScope accent=\"danger\">{marker}</AccentScope>\n                ) : (\n                  marker\n                )}\n              </View>\n            ) : null}\n          </HStack>\n          {details ? (\n            <Text className=\"text-muted text-sm\">{details}</Text>\n          ) : null}\n        </VStack>\n      </Pressable>\n      {indented ? (\n        <View className=\"border-l border-border-muted pl-m\">\n          {render(labelId)}\n        </View>\n      ) : (\n        render(labelId)\n      )}\n      {error ? (\n        <View className=\"px-m\">\n          <Text role=\"alert\" accent=\"danger\" className=\"text-accent text-sm\">\n            {error}\n          </Text>\n        </View>\n      ) : null}\n    </VStack>\n  );\n}\n","import type { ReactNode } from \"react\";\nimport {\n  type DefaultValues,\n  type FieldValues,\n  FormProvider,\n  type SubmitHandler,\n  type UseFormProps,\n  useForm,\n} from \"react-hook-form\";\n\nexport class FormValidationError extends Error {\n  constructor() {\n    super(\"Form validation failed.\");\n    this.name = \"FormValidationError\";\n  }\n}\n\nexport interface FormProps<TFieldValues extends FieldValues> {\n  defaultValues: DefaultValues<TFieldValues>;\n  mode?: UseFormProps<TFieldValues>[\"mode\"];\n  onSubmit: SubmitHandler<TFieldValues>;\n  onSubmitError?: (error: unknown) => void;\n  render: (params: { submit: () => Promise<void> }) => ReactNode;\n}\n\n/**\n * Owns the react-hook-form instance and exposes it through context, so\n * FormField never needs a `control` prop. submit() rejects with\n * FormValidationError when fields are invalid (nothing was submitted), so\n * FormSubmitButton can tell that apart from a genuine onSubmit failure.\n * Without `onSubmitError`, an exception thrown from `onSubmit` is left to\n * propagate as a genuine unhandled rejection rather than being silently\n * logged — FormSubmitButton (built on ActionButton) consumes it instead to\n * drive its own loading/success/failed state.\n */\nexport function Form<TFieldValues extends FieldValues>({\n  defaultValues,\n  mode = \"onTouched\",\n  onSubmit,\n  onSubmitError,\n  render,\n}: FormProps<TFieldValues>): ReactNode {\n  const form = useForm<TFieldValues>({ mode, defaultValues });\n\n  function submit(): Promise<void> {\n    // react-hook-form only broadcasts the updated field errors to\n    // Controller subscribers in a final internal step *after* the onInvalid\n    // callback resolves — throwing from inside onInvalid pre-empts that\n    // broadcast, so field-level errors would never reach FormField/FormItem.\n    // Record invalidity instead, and throw only once handleSubmit is done.\n    let valid = true;\n    const result = form\n      .handleSubmit(onSubmit, () => {\n        valid = false;\n      })()\n      .then(() => {\n        if (!valid) throw new FormValidationError();\n      });\n    if (onSubmitError) result.catch(onSubmitError);\n    return result;\n  }\n\n  return <FormProvider {...form}>{render({ submit })}</FormProvider>;\n}\n","import type { ReactNode } from \"react\";\nimport {\n  Controller,\n  type ControllerRenderProps,\n  type FieldError,\n  type FieldPath,\n  type FieldValues,\n  type RegisterOptions,\n  useFormContext,\n} from \"react-hook-form\";\nimport { FormItem } from \"./FormItem\";\n\nexport interface FormFieldProps<TFieldValues extends FieldValues> {\n  name: FieldPath<TFieldValues>;\n  label: string;\n  /**\n   * Marks the field required and shows FormItem's marker. Pass true for no\n   * message, or any other ReactNode to use as the required-field error —\n   * unless renderError overrides it — once the field is left empty.\n   * react-hook-form's own FieldError.message is always a plain string, so\n   * this is the only way to get a richer, i18n'd required message without\n   * reaching for renderError.\n   */\n  required?: ReactNode;\n  validate?: RegisterOptions<TFieldValues>[\"validate\"];\n  renderError?: (error: FieldError | undefined) => ReactNode;\n  render: (params: {\n    field: ControllerRenderProps<TFieldValues>;\n    labelId: string;\n  }) => ReactNode;\n}\n\n/**\n * Wires a react-hook-form Controller to FormItem's label/error/layout.\n * Must be used inside <Form>, which provides the control via context.\n * Renders any input via `render` — not tied to a specific input component.\n * The rendered input must attach `field.ref` for pressing the label to\n * focus it, via react-hook-form's own setFocus.\n */\nexport function FormField<TFieldValues extends FieldValues>({\n  name,\n  label,\n  required,\n  validate,\n  renderError,\n  render,\n}: FormFieldProps<TFieldValues>): ReactNode {\n  const { control, setFocus } = useFormContext<TFieldValues>();\n\n  return (\n    <Controller\n      control={control}\n      name={name}\n      rules={{ required: Boolean(required), validate }}\n      render={({ field, fieldState }) => {\n        const requiredError =\n          fieldState.error?.type === \"required\" && required !== true\n            ? required\n            : undefined;\n        return (\n          <FormItem\n            label={label}\n            required={Boolean(required)}\n            isRequiredError={fieldState.error?.type === \"required\"}\n            error={\n              renderError\n                ? renderError(fieldState.error)\n                : (requiredError ?? fieldState.error?.message)\n            }\n            render={(labelId) => render({ field, labelId })}\n            onLabelPress={() => {\n              setFocus(name);\n            }}\n          />\n        );\n      }}\n    />\n  );\n}\n","import { PlusRegularIcon } from \"alouette-icons/phosphor-icons/PlusRegularIcon\";\nimport { TrashRegularIcon } from \"alouette-icons/phosphor-icons/TrashRegularIcon\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n  type ArrayPath,\n  type FieldArray,\n  type FieldPath,\n  type FieldValues,\n  useFieldArray,\n  useFormContext,\n} from \"react-hook-form\";\nimport { Button } from \"../actions/Button\";\nimport { IconButton } from \"../actions/IconButton\";\nimport { StableAccentScope } from \"../containers/StableAccentScope\";\nimport { View } from \"../primitives/View\";\nimport { HStack, VStack } from \"../stacks/stacks\";\nimport { FormItem } from \"./FormItem\";\n\nexport interface FormFieldArrayProps<TFieldValues extends FieldValues> {\n  name: ArrayPath<TFieldValues>;\n  label: string;\n  /** Muted helper text shown under the label (e.g. a minimum-count hint). */\n  details?: ReactNode;\n  /** Value appended when a new item is added. */\n  emptyValue: FieldArray<TFieldValues, ArrayPath<TFieldValues>>;\n  /**\n   * Minimum number of items. The array is padded to this length on mount and\n   * the leading `minSize` items cannot be removed.\n   */\n  minSize?: number;\n  /** aria-label for the add button. */\n  addLabel?: string;\n  /** Disables the add button, e.g. while the last item is still empty. */\n  disableAdd?: boolean;\n  /** aria-label for each remove button, given the item's own label. */\n  removeLabel?: (itemLabel: string) => string;\n  render: (params: {\n    /** Path prefix for this item, e.g. \"guests.0\". Build sub-paths as `${name}.value`. */\n    name: FieldPath<TFieldValues>;\n    index: number;\n    /** Per-item base accessible name (`${label} ${index + 1}`), e.g. \"Guests 1\". */\n    label: string;\n  }) => ReactNode;\n}\n\ninterface FormFieldArrayItemProps<TFieldValues extends FieldValues> {\n  name: FieldPath<TFieldValues>;\n  itemLabel: string;\n  removeLabel: string;\n  index: number;\n  removable: boolean;\n  onRemove: () => void;\n  render: FormFieldArrayProps<TFieldValues>[\"render\"];\n}\n\nfunction FormFieldArrayItem<TFieldValues extends FieldValues>({\n  name,\n  itemLabel,\n  removeLabel,\n  index,\n  removable,\n  onRemove,\n  render,\n}: FormFieldArrayItemProps<TFieldValues>): ReactNode {\n  // Hovering the remove button tints the whole row with the danger accent, as\n  // an affordance that pressing it will drop the item. StableAccentScope keeps\n  // the scope mounted across the toggle so the inputs don't remount.\n  const [pendingRemoval, setPendingRemoval] = useState(false);\n\n  return (\n    <StableAccentScope accent={pendingRemoval ? \"danger\" : undefined}>\n      <HStack className=\"gap-sm items-center p-xxs\">\n        <View className=\"grow shrink basis-0\">\n          {render({ name, index, label: itemLabel })}\n        </View>\n        {removable ? (\n          <IconButton\n            variant=\"ghost\"\n            icon={<TrashRegularIcon />}\n            aria-label={removeLabel}\n            onHoverIn={() => {\n              setPendingRemoval(true);\n            }}\n            onHoverOut={() => {\n              setPendingRemoval(false);\n            }}\n            onPress={onRemove}\n          />\n        ) : null}\n      </HStack>\n    </StableAccentScope>\n  );\n}\n\n/**\n * A repeatable list of object fields backed by react-hook-form's useFieldArray.\n * Must be used inside <Form>. FormFieldArray owns only the array label and the\n * add/remove buttons — it is agnostic about what an item contains, including\n * any per-item framing (a caller can wrap multi-field items in a Surface). Each item's inputs (their values, labels and error\n * messages) are the caller's job: `render` receives the item's path prefix\n * (e.g. \"guests.0\") and composes its own FormField(s), bound to `name` for a\n * raw value or `${name}.value` / `${name}.firstName` for an object item.\n */\nexport function FormFieldArray<TFieldValues extends FieldValues>({\n  name,\n  label,\n  details,\n  emptyValue,\n  minSize = 0,\n  addLabel = \"Add item\",\n  disableAdd,\n  removeLabel = (itemLabel) => `Remove ${itemLabel}`,\n  render,\n}: FormFieldArrayProps<TFieldValues>): ReactNode {\n  const { control } = useFormContext<TFieldValues>();\n  const { fields, append, remove } = useFieldArray<TFieldValues>({\n    control,\n    name,\n  });\n\n  // Pad up to the minimum once on mount, appending the whole shortfall in a\n  // single call. The ref keeps StrictMode's double-invoked effect from\n  // appending twice.\n  const paddedRef = useRef(false);\n  useEffect(() => {\n    if (paddedRef.current) return;\n    paddedRef.current = true;\n    const shortfall = minSize - fields.length;\n    if (shortfall > 0) {\n      append(\n        Array.from({ length: shortfall }, () => emptyValue),\n        { shouldFocus: false },\n      );\n    }\n  }, [append, emptyValue, fields.length, minSize]);\n\n  return (\n    <FormItem\n      label={label}\n      details={details}\n      render={() => (\n        <VStack className=\"gap-xs\">\n          {fields.map((field, index) => (\n            <FormFieldArrayItem<TFieldValues>\n              key={field.id}\n              name={`${name}.${index}` as FieldPath<TFieldValues>}\n              itemLabel={`${label} ${index + 1}`}\n              removeLabel={removeLabel(`${label} ${index + 1}`)}\n              index={index}\n              removable={index >= minSize}\n              render={render}\n              onRemove={() => {\n                remove(index);\n              }}\n            />\n          ))}\n          <Button\n            size=\"sm\"\n            variant=\"outlined\"\n            icon={<PlusRegularIcon />}\n            text={addLabel}\n            className=\"self-start\"\n            disabled={disableAdd}\n            onPress={() => {\n              append(emptyValue);\n            }}\n          />\n        </VStack>\n      )}\n    />\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { ActionButton } from \"../actions/ActionButton\";\n\nexport interface FormSubmitButtonProps {\n  label: string;\n  onPress: () => Promise<void>;\n  /**\n   * Maps a submit failure to displayed text. Required rather than\n   * defaulted, since a library-provided default could only ever be a\n   * hardcoded English string — not translatable. Check\n   * `error instanceof FormValidationError` to render a \"fix the errors\n   * above\" case distinctly from a genuine onSubmit failure.\n   */\n  errorToMessage: (error: unknown) => string;\n}\n\n/**\n * Submit button for a <Form>. Built on ActionButton, so submission gets the\n * same loading/success/failed lifecycle and inline error message as any\n * other async action in the app, rather than a plain boolean isSubmitting.\n */\nexport function FormSubmitButton({\n  label,\n  onPress,\n  errorToMessage,\n}: FormSubmitButtonProps): ReactNode {\n  return (\n    <ActionButton\n      text={label}\n      errorToMessage={errorToMessage}\n      onPress={onPress}\n    />\n  );\n}\n","import type { ReactNode } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { VStack } from \"../stacks/stacks\";\nimport { Form, type FormProps } from \"./Form\";\nimport { FormSubmitButton } from \"./FormSubmitButton\";\n\nexport interface SimpleVFormProps<\n  TFieldValues extends FieldValues,\n> extends Omit<FormProps<TFieldValues>, \"render\"> {\n  submitLabel: string;\n  /** Forwarded to FormSubmitButton — see its errorToMessage doc. */\n  submitErrorToMessage: (error: unknown) => string;\n  className?: string;\n  render: (params: { submit: () => Promise<void> }) => ReactNode;\n}\n\n/**\n * Standardizes the common case: a Form laid out as a vertical stack with\n * a trailing FormSubmitButton.\n */\nexport function SimpleVForm<TFieldValues extends FieldValues>({\n  submitLabel,\n  submitErrorToMessage,\n  className,\n  render,\n  ...formProps\n}: SimpleVFormProps<TFieldValues>): ReactNode {\n  return (\n    <Form\n      {...formProps}\n      render={({ submit }) => (\n        <VStack className={className ?? \"gap-l\"}>\n          {render({ submit })}\n          <FormSubmitButton\n            label={submitLabel}\n            errorToMessage={submitErrorToMessage}\n            onPress={submit}\n          />\n        </VStack>\n      )}\n    />\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { type VariantProps, tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { Box } from \"../containers/Box\";\nimport { Icon, type SVGIconElement } from \"../primitives/Icon\";\nimport { Text } from \"../primitives/Text\";\n\nconst badgeVariants = tv(\n  {\n    slots: {\n      frame: \"flex-row items-center self-start rounded-full\",\n      text: \"font-body-bold\",\n      icon: \"\",\n    },\n    variants: {\n      size: {\n        sm: { frame: \"gap-xxs px-xs py-xxs\", text: \"text-xs\", icon: \"\" },\n        md: { frame: \"gap-xs px-sm py-xxs\", text: \"text-sm\", icon: \"\" },\n      },\n      variant: {\n        solid: {\n          frame: \"bg-highlight-accent\",\n          text: \"text-sharp\",\n          icon: \"text-sharp\",\n        },\n        \"solid.enabled\": {\n          frame: \"bg-enabled\",\n          text: \"text-sharp\",\n          icon: \"text-sharp\",\n        },\n        outlined: {\n          frame: \"border border-accent\",\n          text: \"text-accent\",\n          icon: \"text-accent\",\n        },\n      },\n    },\n    defaultVariants: { size: \"md\", variant: \"solid\" },\n  },\n  { twMerge: false },\n);\n\ntype BadgeVariantProps = VariantProps<typeof badgeVariants>;\ntype BadgeSize = NonNullable<BadgeVariantProps[\"size\"]>;\n\nconst ICON_SIZE: Record<BadgeSize, number> = { sm: 12, md: 16 };\n\nexport interface BadgeProps {\n  accent?: Accent;\n  size?: BadgeSize;\n  variant?: NonNullable<BadgeVariantProps[\"variant\"]>;\n  icon?: SVGIconElement;\n  children?: ReactNode;\n}\n\nexport function Badge({\n  accent = \"brand\",\n  size = \"md\",\n  variant = \"solid\",\n  icon,\n  children,\n}: BadgeProps): ReactNode {\n  const styles = badgeVariants({ size, variant });\n  return (\n    <AccentScope accent={accent}>\n      <Box className={styles.frame()}>\n        {icon ? (\n          <Icon icon={icon} size={ICON_SIZE[size]} className={styles.icon()} />\n        ) : null}\n        <Text className={styles.text()}>{children}</Text>\n      </Box>\n    </AccentScope>\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { Text } from \"../primitives/Text\";\nimport { View } from \"../primitives/View\";\n\nexport type ConnectionStateStatus = \"connected\" | \"connecting\" | \"disconnected\";\n\n// How long the green \"connected\" pill stays fully visible before sliding out.\nconst connectedHoldMs = 1200;\n\nexport interface ConnectionStateProps {\n  /** Current connection status, or `null` when unknown (renders nothing). */\n  state: ConnectionStateStatus | null;\n  /** Force the banner off-screen regardless of `state`. */\n  forceHidden?: boolean;\n  /** Keep the banner on-screen even when `connected` (for demos/showcases). */\n  forceVisible?: boolean;\n  /** Label shown in the pill (e.g. \"Reconnecting…\"). */\n  children: NonNullable<ReactNode>;\n}\n\n/**\n * Thin status banner pinned to the top of the screen. It stays hidden while\n * connected and slides down to surface a red pill when connecting or\n * disconnected. On reconnection it turns green and holds for `connectedHoldMs`\n * so the confirmation is legible, then slides back out.\n */\nexport function ConnectionState({\n  state,\n  forceHidden,\n  forceVisible,\n  children,\n}: ConnectionStateProps): ReactNode {\n  const connected = state === \"connected\";\n\n  // While `connected`, keep the pill visible for a pause, then slide it out.\n  const [hideAfterHold, setHideAfterHold] = useState(false);\n  useEffect(() => {\n    if (!connected || forceVisible) {\n      setHideAfterHold(false);\n      return undefined;\n    }\n    const timer = setTimeout(() => {\n      setHideAfterHold(true);\n    }, connectedHoldMs);\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [connected, forceVisible]);\n\n  const hidden =\n    forceHidden || (!forceVisible && (!state || (connected && hideAfterHold)));\n  const accent: Accent = connected ? \"success\" : \"danger\";\n\n  return (\n    <AccentScope accent={accent}>\n      <View\n        className={`absolute inset-x-0 top-0 z-9 h-0.5 bg-interactive-contained-pressable shadow-m transition-transform duration-slide ease-in-out ${hidden ? \"-translate-y-6\" : \"translate-y-0\"}`}\n      >\n        {state ? (\n          <Text className=\"absolute left-1/2 top-0.5 h-5.5 w-50 -translate-x-1/2 rounded-b-sm bg-interactive-contained-pressable text-center leading-5.5 text-on-accent transition-colors duration-fast\">\n            {children}\n          </Text>\n        ) : null}\n      </View>\n    </AccentScope>\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { View } from \"../primitives/View\";\nimport { useSimulatedProgress } from \"./useSimulatedProgress\";\n\nexport type LinearProgressSize = \"lg\" | \"md\" | \"sm\" | \"xs\";\n\nconst track = tv({\n  base: \"absolute inset-x-0 top-0 z-10 overflow-hidden transition-opacity duration-fade\",\n  variants: {\n    size: {\n      xs: \"h-0.5\",\n      sm: \"h-1\",\n      md: \"h-1.5\",\n      lg: \"h-2\",\n    },\n    hidden: {\n      true: \"opacity-0\",\n      false: \"opacity-100\",\n    },\n  },\n  defaultVariants: { size: \"md\", hidden: false },\n});\n\nexport interface LinearProgressProps {\n  /** Known completion percentage, 0-100. For an unknown percentage (e.g.\n   * reconnecting, page transitions), use `IndeterminateLinearProgress` instead. */\n  progress: number;\n  hidden?: boolean;\n  accent?: Accent;\n  size?: LinearProgressSize;\n}\n\nexport function LinearProgress({\n  progress,\n  hidden = false,\n  accent = \"brand\",\n  size = \"md\",\n}: LinearProgressProps): ReactNode {\n  return (\n    <AccentScope accent={accent}>\n      <View pointerEvents=\"none\" className={track({ size, hidden })}>\n        <View\n          className=\"h-full bg-accent transition-[width] duration-progress ease-out\"\n          style={{ width: `${progress}%` }}\n        />\n      </View>\n    </AccentScope>\n  );\n}\n\nexport interface IndeterminateLinearProgressProps {\n  /** Whether an operation is in progress. The bar creeps toward 100% while\n   * `true`, then completes and fades out once `false`. */\n  loading: boolean;\n  accent?: Accent;\n  size?: LinearProgressSize;\n}\n\nexport function IndeterminateLinearProgress({\n  loading,\n  accent,\n  size,\n}: IndeterminateLinearProgressProps): ReactNode {\n  const { progress, hidden } = useSimulatedProgress(loading);\n\n  return (\n    <LinearProgress\n      progress={progress}\n      hidden={hidden}\n      accent={accent}\n      size={size}\n    />\n  );\n}\n","import { CaretRightRegularIcon } from \"alouette-icons/phosphor-icons/CaretRightRegularIcon\";\nimport type { ReactNode } from \"react\";\nimport { View } from \"react-native\";\nimport { Icon } from \"../primitives/Icon\";\nimport { PressableBox, type PressableBoxProps } from \"./PressableBox\";\n\nexport interface PressableListItemProps {\n  variant?: PressableBoxProps[\"variant\"];\n  accent?: PressableBoxProps[\"accent\"];\n  role?: PressableBoxProps[\"role\"];\n  children: ReactNode;\n  onPress: () => void;\n}\n\nexport function PressableListItem({\n  variant = \"contained\",\n  role = \"button\",\n  accent,\n  children,\n  onPress,\n}: PressableListItemProps): ReactNode {\n  return (\n    <PressableBox\n      variant={variant}\n      role={role}\n      accent={accent}\n      className=\"flex-row items-center justify-between mx-xs my-xxs px-m py-m\"\n      onPress={onPress}\n    >\n      <View className=\"flex-1\">{children}</View>\n      <View className=\"justify-center\">\n        <Icon\n          className={\n            variant === \"contained\" ? \"text-on-accent-muted\" : \"text-muted\"\n          }\n          icon={<CaretRightRegularIcon />}\n          size={18}\n        />\n      </View>\n    </PressableBox>\n  );\n}\n","import type { ReactNode } from \"react\";\nimport { View } from \"react-native\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { AccentScope } from \"../containers/AccentScope\";\n\nexport interface GradientBackgroundProps {\n  children?: ReactNode;\n  accent?: Accent;\n}\n\nexport function GradientBackground({\n  accent,\n  children,\n}: GradientBackgroundProps): ReactNode {\n  return (\n    <AccentScope accent={accent}>\n      <View className=\"absolute inset-0 bg-linear-to-t from-screen-gradient-end from-5% via-screen-gradient-middle via-80% to-screen-gradient-start to-98%\">\n        {children}\n      </View>\n    </AccentScope>\n  );\n}\n","import { type ReactNode, forwardRef } from \"react\";\nimport {\n  ScrollView as RNScrollView,\n  type ScrollViewProps as RNScrollViewProps,\n  View,\n} from \"react-native\";\nimport type { Accent } from \"../../core/AlouetteConfig\";\nimport { useThemeToken } from \"../../core/useThemeToken\";\nimport { AccentScope } from \"../containers/AccentScope\";\nimport { GradientBackground } from \"./GradientBackground\";\n\ninterface GradientScrollViewInnerProps extends RNScrollViewProps {\n  children?: ReactNode;\n}\n\nconst GradientScrollViewInner = forwardRef<\n  RNScrollView,\n  GradientScrollViewInnerProps\n>(({ children, ...scrollViewProps }, ref) => {\n  const [gradientStart, gradientEnd] = useThemeToken([\n    \"--color-screen-gradient-start\",\n    \"--color-screen-gradient-end\",\n  ]);\n  return (\n    <RNScrollView ref={ref} {...scrollViewProps}>\n      <View\n        className=\"absolute left-0 right-0\"\n        style={{\n          top: -600,\n          height: 600,\n          backgroundColor: gradientStart,\n        }}\n      />\n      <View\n        className=\"absolute left-0 right-0\"\n        style={{\n          bottom: -600,\n          height: 600,\n          backgroundColor: gradientEnd,\n        }}\n      />\n      <GradientBackground />\n      {children}\n    </RNScrollView>\n  );\n});\n\nexport interface GradientScrollViewProps extends RNScrollViewProps {\n  children?: ReactNode;\n  accent: Accent;\n}\n\nexport const GradientScrollView = forwardRef<\n  RNScrollView,\n  GradientScrollViewProps\n>(({ accent, children, ...scrollViewProps }, ref) => {\n  return (\n    <AccentScope accent={accent}>\n      <GradientScrollViewInner ref={ref} {...scrollViewProps}>\n        {children}\n      </GradientScrollViewInner>\n    </AccentScope>\n  );\n});\n","export const Breakpoints = {\n  /**\n   * min-width: 0\n   */\n  BASE: 0,\n  /**\n   * min-width: 480px\n   */\n  SMALL: 480,\n  /**\n   * min-width: 768px\n   */\n  MEDIUM: 768,\n  /**\n   * min-width: 1024px\n   */\n  LARGE: 1024,\n  /**\n   * min-width: 1280px\n   */\n  WIDE: 1280,\n} as const;\n\nexport type Breakpoint = (typeof Breakpoints)[keyof typeof Breakpoints];\nexport type BreakpointNames = \"base\" | \"large\" | \"medium\" | \"small\" | \"wide\";\n\nexport enum BreakpointNameEnum {\n  BASE = \"base\",\n  SMALL = \"small\",\n  MEDIUM = \"medium\",\n  LARGE = \"large\",\n  WIDE = \"wide\",\n}\n","import { useWindowDimensions } from \"react-native\";\nimport {\n  BreakpointNameEnum,\n  type BreakpointNames,\n  Breakpoints,\n} from \"../config/Breakpoints\";\n\nexport function useCurrentBreakpointName(): BreakpointNameEnum {\n  const { width } = useWindowDimensions();\n  if (width >= Breakpoints.WIDE) return BreakpointNameEnum.WIDE;\n  if (width >= Breakpoints.LARGE) return BreakpointNameEnum.LARGE;\n  if (width >= Breakpoints.MEDIUM) return BreakpointNameEnum.MEDIUM;\n  if (width >= Breakpoints.SMALL) return BreakpointNameEnum.SMALL;\n  return BreakpointNameEnum.BASE;\n}\n\nexport function useCurrentBreakpointNameFiltered<\n  Names extends BreakpointNames[],\n>(names: Names): Names[number] {\n  const current = useCurrentBreakpointName();\n  // Walk from the largest matching breakpoint down to BASE; pick the first\n  // one the consumer asked for.\n  const ordered = [\n    BreakpointNameEnum.WIDE,\n    BreakpointNameEnum.LARGE,\n    BreakpointNameEnum.MEDIUM,\n    BreakpointNameEnum.SMALL,\n    BreakpointNameEnum.BASE,\n  ] as const;\n  const startIndex = ordered.indexOf(current);\n  for (let i = startIndex; i < ordered.length; i++) {\n    const candidate = ordered[i]!;\n    if (names.includes(candidate)) return candidate;\n  }\n  return BreakpointNameEnum.BASE;\n}\n","import type { ReactNode } from \"react\";\nimport { View } from \"react-native\";\nimport type { SetRequired } from \"type-fest\";\nimport type { BreakpointNames } from \"../config/Breakpoints\";\nimport { useCurrentBreakpointNameFiltered } from \"./useCurrentBreakpointName\";\n\ntype SwitchBreakpointsProps = SetRequired<\n  Partial<Record<BreakpointNames, ReactNode>>,\n  \"base\"\n> & { children?: never };\n\n// Static lookup table so the Tailwind/NativeWind scanner sees every classname.\n// Keys are `\"<currentBreakpoint>:<nextDefinedBreakpointOrEnd>\"`. The value\n// is the className that makes the slot visible from `current` (inclusive)\n// up to `next` (exclusive).\n//\n// Tailwind v4 breakpoint mapping — see global.css:\n//   sm = 480px (alouette SMALL)\n//   md = 768px (alouette MEDIUM)\n//   lg = 1024px (alouette LARGE)\n//   xl = 1280px (alouette WIDE)\nconst VISIBILITY_CLASS: Record<string, string> = {\n  \"base:end\": \"flex\",\n  \"base:small\": \"flex sm:hidden\",\n  \"base:medium\": \"flex md:hidden\",\n  \"base:large\": \"flex lg:hidden\",\n  \"base:wide\": \"flex xl:hidden\",\n  \"small:end\": \"hidden sm:flex\",\n  \"small:medium\": \"hidden sm:flex md:hidden\",\n  \"small:large\": \"hidden sm:flex lg:hidden\",\n  \"small:wide\": \"hidden sm:flex xl:hidden\",\n  \"medium:end\": \"hidden md:flex\",\n  \"medium:large\": \"hidden md:flex lg:hidden\",\n  \"medium:wide\": \"hidden md:flex xl:hidden\",\n  \"large:end\": \"hidden lg:flex\",\n  \"large:wide\": \"hidden lg:flex xl:hidden\",\n  \"wide:end\": \"hidden xl:flex\",\n};\n\n/**\n * Display based on current breakpoint via responsive utility classes.\n *\n * On web this is SSR-friendly (CSS handles the switching). On native it\n * still relies on NativeWind's runtime media-query evaluation.\n */\nexport function SwitchBreakpointsUsingDisplayNone({\n  ...breakpoints\n}: SwitchBreakpointsProps): ReactNode {\n  const entries = Object.entries(breakpoints) as [BreakpointNames, ReactNode][];\n\n  return entries.map(([name, node], index) => {\n    const next = entries[index + 1]?.[0] ?? \"end\";\n    const className = VISIBILITY_CLASS[`${name}:${next}`] ?? \"flex\";\n    return (\n      <View key={name} className={className}>\n        {node}\n      </View>\n    );\n  });\n}\n\n/**\n * Display based on current breakpoint via conditional rendering. Only the\n * matching slot is in the tree — heavier components stay unmounted.\n */\nexport function SwitchBreakpointsUsingNull({\n  children,\n  ...breakpoints\n}: SwitchBreakpointsProps): ReactNode {\n  const currentBreakpointName = useCurrentBreakpointNameFiltered(\n    Object.keys(breakpoints) as (keyof typeof breakpoints)[],\n  );\n\n  return breakpoints[currentBreakpointName] ?? null;\n}\n","import * as WebBrowser from \"expo-web-browser\";\nimport { WebBrowserPresentationStyle } from \"expo-web-browser\";\nimport type { ComponentProps, FunctionComponent, ReactNode } from \"react\";\nimport { Linking } from \"react-native\";\nimport type { GestureResponderEvent } from \"react-native\";\nimport { useThemeToken } from \"../core/useThemeToken\";\n\nexport interface ExternalLinkRequiredComponentProps {\n  onPress?: (event: GestureResponderEvent) => Promise<void> | void;\n}\n\nexport interface ExternalOpenLinkBehavior {\n  native: \"linking\" | \"webBrowser\";\n  web: \"targetBlank\" | \"targetSelf\";\n}\nconst useOpenExternalLink = () => {\n  const [textSharp, bgSurface] = useThemeToken([\n    \"--color-sharp\",\n    \"--color-surface\",\n  ]);\n  return async (href: string, openLinkBehavior: ExternalOpenLinkBehavior) => {\n    switch (openLinkBehavior.native) {\n      case \"webBrowser\": {\n        return WebBrowser.openBrowserAsync(href, {\n          controlsColor: textSharp,\n          dismissButtonStyle: \"close\",\n          presentationStyle: WebBrowserPresentationStyle.PAGE_SHEET,\n          toolbarColor: bgSurface,\n          secondaryToolbarColor: bgSurface,\n          readerMode: false,\n          enableBarCollapsing: false,\n          showTitle: true,\n          enableDefaultShareMenuItem: true,\n        });\n      }\n      case \"linking\": {\n        return Linking.openURL(href);\n      }\n      default: {\n        throw new Error(\n          `Unsupported openLinkBehavior.native: ${openLinkBehavior.native as string}`,\n        );\n      }\n    }\n  };\n};\n\nexport interface ExternalLinkProps<C extends FunctionComponent<any>> {\n  as: C;\n  href: string;\n  onPress?: (event: GestureResponderEvent) => void;\n  openLinkBehavior: ExternalOpenLinkBehavior;\n}\n\ntype ExternalLinkSpreadProps<C extends FunctionComponent<any>> = Omit<\n  ComponentProps<C>,\n  keyof ExternalLinkProps<C>\n>;\n\nexport function ExternalLink<C extends FunctionComponent<any>>({\n  as: C,\n  href,\n  openLinkBehavior,\n  onPress,\n  ...props\n}: ExternalLinkProps<C> & ExternalLinkSpreadProps<C>): ReactNode {\n  const openExternalLink = useOpenExternalLink();\n  const handlePress: ExternalLinkRequiredComponentProps[\"onPress\"] = (e) => {\n    if (onPress) {\n      onPress(e);\n      if (e?.defaultPrevented) return;\n    }\n\n    if (!href) return;\n\n    return openExternalLink(href, openLinkBehavior);\n  };\n\n  return <C {...(props as any)} onPress={handlePress} />;\n}\n"],"names":["RNView","RNText","styled","RNScrollView","RNFlatList","RNSectionList","twMerge","Fragment","live","RNModal","ICON_SIZE","RNTextInput","RNSwitch","Modal","View","BreakpointNameEnum"],"mappings":"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"}