@almadar/mobile 1.2.6 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-4GLV4XIP.js +140 -0
- package/dist/chunk-4GLV4XIP.js.map +1 -0
- package/dist/{chunk-QUFLYKWA.js → chunk-A6AK75GP.js} +43 -554
- package/dist/chunk-A6AK75GP.js.map +1 -0
- package/dist/chunk-BUN5QD6C.js +525 -0
- package/dist/chunk-BUN5QD6C.js.map +1 -0
- package/dist/{chunk-PBO6ZN2M.js → chunk-C3USTXJ7.js} +1372 -2255
- package/dist/chunk-C3USTXJ7.js.map +1 -0
- package/dist/{chunk-5U5Z65ZO.js → chunk-DNC6CO6E.js} +58 -187
- package/dist/chunk-DNC6CO6E.js.map +1 -0
- package/dist/chunk-I6UYSB5R.js +935 -0
- package/dist/chunk-I6UYSB5R.js.map +1 -0
- package/dist/{chunk-ETD72PHO.js → chunk-SLYJ52HW.js} +30 -21
- package/dist/chunk-SLYJ52HW.js.map +1 -0
- package/dist/chunk-UIU7NWN2.js +924 -0
- package/dist/chunk-UIU7NWN2.js.map +1 -0
- package/dist/{chunk-BFRVXKSP.js → chunk-VNRKHWR7.js} +87 -4
- package/dist/chunk-VNRKHWR7.js.map +1 -0
- package/dist/{chunk-CA6Z3OTE.js → chunk-WHAG42QJ.js} +1 -1
- package/dist/chunk-WHAG42QJ.js.map +1 -0
- package/dist/{chunk-GMR5FKKB.js → chunk-XWPR5FXS.js} +2 -2
- package/dist/chunk-XWPR5FXS.js.map +1 -0
- package/dist/{chunk-MLTSQPVN.js → chunk-YWQRLHTP.js} +2 -2
- package/dist/chunk-YWQRLHTP.js.map +1 -0
- package/dist/components/atoms/Button.d.ts +3 -2
- package/dist/components/atoms/Button.d.ts.map +1 -1
- package/dist/components/atoms/Card.d.ts +3 -2
- package/dist/components/atoms/Card.d.ts.map +1 -1
- package/dist/components/atoms/Checkbox.d.ts +3 -2
- package/dist/components/atoms/Checkbox.d.ts.map +1 -1
- package/dist/components/atoms/DayCell.d.ts +3 -2
- package/dist/components/atoms/DayCell.d.ts.map +1 -1
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +3 -2
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -1
- package/dist/components/atoms/Radio.d.ts +3 -2
- package/dist/components/atoms/Radio.d.ts.map +1 -1
- package/dist/components/atoms/RangeSlider.d.ts +3 -2
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -1
- package/dist/components/atoms/Select.d.ts +3 -2
- package/dist/components/atoms/Select.d.ts.map +1 -1
- package/dist/components/atoms/Switch.d.ts +3 -2
- package/dist/components/atoms/Switch.d.ts.map +1 -1
- package/dist/components/atoms/TextHighlight.d.ts +3 -2
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -1
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts +25 -0
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts.map +1 -0
- package/dist/components/atoms/game/index.d.ts +2 -0
- package/dist/components/atoms/game/index.d.ts.map +1 -1
- package/dist/components/atoms/index.d.ts +4 -4
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +14 -9
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -20
- package/dist/components/molecules/Alert.d.ts +3 -2
- package/dist/components/molecules/Alert.d.ts.map +1 -1
- package/dist/components/molecules/DataGrid.d.ts +6 -5
- package/dist/components/molecules/DataGrid.d.ts.map +1 -1
- package/dist/components/molecules/DataList.d.ts +5 -4
- package/dist/components/molecules/DataList.d.ts.map +1 -1
- package/dist/components/molecules/NumberStepper.d.ts +3 -2
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -1
- package/dist/components/molecules/PullToRefresh.d.ts +3 -2
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -1
- package/dist/components/molecules/RelationSelect.d.ts +3 -2
- package/dist/components/molecules/RelationSelect.d.ts.map +1 -1
- package/dist/components/molecules/RepeatableFormSection.d.ts +6 -5
- package/dist/components/molecules/RepeatableFormSection.d.ts.map +1 -1
- package/dist/components/molecules/SortableList.d.ts +2 -1
- package/dist/components/molecules/SortableList.d.ts.map +1 -1
- package/dist/components/molecules/StarRating.d.ts +3 -2
- package/dist/components/molecules/StarRating.d.ts.map +1 -1
- package/dist/components/molecules/SwipeableRow.d.ts +3 -2
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -1
- package/dist/components/molecules/Toast.d.ts +3 -2
- package/dist/components/molecules/Toast.d.ts.map +1 -1
- package/dist/components/molecules/index.js +9 -6
- package/dist/components/organisms/CardGrid.d.ts +6 -5
- package/dist/components/organisms/CardGrid.d.ts.map +1 -1
- package/dist/components/organisms/ComponentPatterns.d.ts.map +1 -1
- package/dist/components/organisms/ContentRenderer.d.ts.map +1 -1
- package/dist/components/organisms/DataTable.d.ts +2 -4
- package/dist/components/organisms/DataTable.d.ts.map +1 -1
- package/dist/components/organisms/DocumentViewer.d.ts.map +1 -1
- package/dist/components/organisms/DrawerSlot.d.ts +5 -4
- package/dist/components/organisms/DrawerSlot.d.ts.map +1 -1
- package/dist/components/organisms/FormSection.d.ts +8 -1
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/Header.d.ts +3 -2
- package/dist/components/organisms/Header.d.ts.map +1 -1
- package/dist/components/organisms/LayoutPatterns.d.ts.map +1 -1
- package/dist/components/organisms/MasterDetail.d.ts.map +1 -1
- package/dist/components/organisms/MediaGallery.d.ts +2 -1
- package/dist/components/organisms/MediaGallery.d.ts.map +1 -1
- package/dist/components/organisms/ModalSlot.d.ts +5 -4
- package/dist/components/organisms/ModalSlot.d.ts.map +1 -1
- package/dist/components/organisms/PageHeader.d.ts +7 -0
- package/dist/components/organisms/PageHeader.d.ts.map +1 -1
- package/dist/components/organisms/SignaturePad.d.ts.map +1 -1
- package/dist/components/organisms/StatCard.d.ts +3 -2
- package/dist/components/organisms/StatCard.d.ts.map +1 -1
- package/dist/components/organisms/StateMachineView.d.ts.map +1 -1
- package/dist/components/organisms/Table.d.ts.map +1 -1
- package/dist/components/organisms/ToastSlot.d.ts +6 -5
- package/dist/components/organisms/ToastSlot.d.ts.map +1 -1
- package/dist/components/organisms/UISlotRenderer.d.ts +2 -1
- package/dist/components/organisms/UISlotRenderer.d.ts.map +1 -1
- package/dist/components/organisms/book/BookChapterView.d.ts +2 -1
- package/dist/components/organisms/book/BookChapterView.d.ts.map +1 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts +2 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts.map +1 -1
- package/dist/components/organisms/book/BookNavBar.d.ts +2 -1
- package/dist/components/organisms/book/BookNavBar.d.ts.map +1 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts +2 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts.map +1 -1
- package/dist/components/organisms/book/BookViewer.d.ts +2 -1
- package/dist/components/organisms/book/BookViewer.d.ts.map +1 -1
- package/dist/components/organisms/game/DialogueBox.d.ts.map +1 -1
- package/dist/components/organisms/game/InventoryPanel.d.ts.map +1 -1
- package/dist/components/organisms/game/physics-sim/SimulationCanvas.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionTile.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/CodeView.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateNode.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/TransitionArrow.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/VariablePanel.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +1 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +14 -10
- package/dist/components/organisms/layout/DashboardGrid.d.ts +3 -2
- package/dist/components/organisms/layout/DashboardGrid.d.ts.map +1 -1
- package/dist/components/templates/BattleTemplate.d.ts.map +1 -1
- package/dist/components/templates/index.js +26 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useTraitState.d.ts +3 -3
- package/dist/hooks/useTraitState.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -910
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +13 -6
- package/dist/chunk-5U5Z65ZO.js.map +0 -1
- package/dist/chunk-BFRVXKSP.js.map +0 -1
- package/dist/chunk-CA6Z3OTE.js.map +0 -1
- package/dist/chunk-ETD72PHO.js.map +0 -1
- package/dist/chunk-GMR5FKKB.js.map +0 -1
- package/dist/chunk-MLTSQPVN.js.map +0 -1
- package/dist/chunk-PBO6ZN2M.js.map +0 -1
- package/dist/chunk-QUFLYKWA.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/templates/DashboardLayout.tsx","../src/components/templates/AuthLayout.tsx","../src/components/templates/GameShell.tsx","../src/components/templates/BattleTemplate.tsx","../src/components/templates/CastleTemplate.tsx","../src/components/templates/WorldMapTemplate.tsx","../src/components/templates/CounterTemplate.tsx","../src/components/templates/GameTemplate.tsx"],"sourcesContent":["import React from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle,\n ScrollView,\n SafeAreaView \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Header, HeaderAction } from '../organisms/Header';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface DashboardLayoutProps {\n children: React.ReactNode;\n headerTitle?: string;\n headerActions?: HeaderAction[];\n showHeader?: boolean;\n style?: ViewStyle;\n contentStyle?: ViewStyle;\n scrollable?: boolean;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const DashboardLayout: React.FC<DashboardLayoutProps> = ({\n children,\n headerTitle,\n headerActions = [],\n showHeader = true,\n style,\n contentStyle,\n scrollable = true,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const Content = scrollable ? ScrollView : View;\n\n if (isLoading) {\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n {showHeader && (\n <Header title={headerTitle} rightActions={headerActions} />\n )}\n <LoadingState message=\"Loading...\" />\n </SafeAreaView>\n );\n }\n\n if (error) {\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n {showHeader && (\n <Header title={headerTitle} rightActions={headerActions} />\n )}\n <ErrorState message={error.message} />\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n {showHeader && (\n <Header title={headerTitle} rightActions={headerActions} />\n )}\n <Content \n style={[styles.content, contentStyle]}\n contentContainerStyle={scrollable ? styles.scrollContent : undefined}\n >\n {children}\n </Content>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n flex: 1,\n },\n scrollContent: {\n flexGrow: 1,\n padding: 16,\n },\n});\n\nDashboardLayout.displayName = 'DashboardLayout';\n","import React from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle,\n ScrollView,\n SafeAreaView,\n KeyboardAvoidingView,\n Platform,\n TouchableOpacity\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface AuthLayoutProps {\n children: React.ReactNode;\n title: string;\n subtitle?: string;\n footer?: React.ReactNode;\n showBackButton?: boolean;\n onBack?: () => void;\n backAction?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const AuthLayout: React.FC<AuthLayoutProps> = ({\n children,\n title,\n subtitle,\n footer,\n showBackButton = false,\n onBack,\n backAction,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleBack = () => {\n if (backAction) {\n eventBus.emit(`UI:${backAction}`);\n }\n onBack?.();\n };\n\n if (isLoading) {\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <LoadingState message=\"Loading...\" />\n </SafeAreaView>\n );\n }\n\n if (error) {\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <ErrorState message={error.message} />\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <KeyboardAvoidingView \n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n style={styles.keyboardView}\n >\n <ScrollView \n contentContainerStyle={styles.scrollContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n <VStack spacing={24} style={styles.content}>\n {showBackButton && (\n <TouchableOpacity onPress={handleBack} style={styles.backButton}>\n <Typography variant=\"h4\" style={{ color: theme.colors.primary }}>\n ← Back\n </Typography>\n </TouchableOpacity>\n )}\n\n <VStack spacing={8} align=\"center\">\n <Typography variant=\"h1\" style={{ color: theme.colors.foreground, textAlign: 'center' }}>\n {title}\n </Typography>\n {subtitle && (\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'], textAlign: 'center' }}>\n {subtitle}\n </Typography>\n )}\n </VStack>\n\n <View style={styles.form}>\n {children}\n </View>\n\n {footer && (\n <View style={styles.footer}>\n {footer}\n </View>\n )}\n </VStack>\n </ScrollView>\n </KeyboardAvoidingView>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n keyboardView: {\n flex: 1,\n },\n scrollContent: {\n flexGrow: 1,\n justifyContent: 'center',\n },\n content: {\n padding: 24,\n paddingTop: 40,\n paddingBottom: 40,\n },\n backButton: {\n alignSelf: 'flex-start',\n },\n form: {\n width: '100%',\n },\n footer: {\n marginTop: 16,\n },\n});\n\nAuthLayout.displayName = 'AuthLayout';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n SafeAreaView,\n StatusBar,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { GameHud, GameHudProps } from '../organisms/game/GameHud';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface GameShellProps {\n /** Main game content */\n children: React.ReactNode;\n /** HUD configuration */\n hud?: GameHudProps;\n /** Show HUD */\n showHud?: boolean;\n /** Header component (optional) */\n header?: React.ReactNode;\n /** Footer component (optional) */\n footer?: React.ReactNode;\n /** Additional container styles */\n style?: ViewStyle;\n /** Game area styles */\n gameAreaStyle?: ViewStyle;\n /** Background color override */\n backgroundColor?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const GameShell: React.FC<GameShellProps> = ({\n children,\n hud,\n showHud = true,\n header,\n footer,\n style,\n gameAreaStyle,\n backgroundColor,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n if (isLoading) {\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n <StatusBar barStyle=\"light-content\" />\n {header}\n <View style={styles.loadingContainer}>\n <LoadingState message=\"Loading game...\" />\n </View>\n </SafeAreaView>\n );\n }\n\n if (error) {\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n <StatusBar barStyle=\"light-content\" />\n {header}\n <View style={styles.loadingContainer}>\n <ErrorState\n message={error.message}\n onRetry={() => eventBus.emit('UI:GAME_RETRY', {})}\n />\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n <StatusBar barStyle=\"light-content\" />\n\n {/* Header */}\n {header && <View style={styles.header}>{header}</View>}\n\n {/* Game Area with HUD Overlay */}\n <View style={[styles.gameArea, gameAreaStyle]}>\n {children}\n\n {/* HUD Overlay */}\n {showHud && hud && (\n <View style={styles.hudContainer}>\n <GameHud\n {...hud}\n style={{ ...styles.hud, ...hud.style }}\n />\n </View>\n )}\n </View>\n\n {/* Footer */}\n {footer && <View style={styles.footer}>{footer}</View>}\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n zIndex: 20,\n },\n gameArea: {\n flex: 1,\n position: 'relative',\n },\n hudContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'box-none',\n },\n hud: {\n pointerEvents: 'auto',\n },\n footer: {\n zIndex: 20,\n },\n loadingContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nGameShell.displayName = 'GameShell';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { BattleBoard, BattleBoardProps } from '../organisms/game/BattleBoard';\nimport { GameHud, GameHudStat } from '../organisms/game/GameHud';\nimport { GameMenu, MenuOption } from '../organisms/game/GameMenu';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface BattleTemplateProps {\n /** Battle board configuration */\n battleBoard: BattleBoardProps;\n /** HUD stats configuration */\n hudStats?: GameHudStat[];\n /** Menu options for battle menu */\n menuOptions?: MenuOption[];\n /** Battle title */\n title?: string;\n /** Show battle menu overlay */\n showMenu?: boolean;\n /** Additional container styles */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Event fired when battle action occurs */\n onBattleAction?: (action: string) => void;\n /** Event fired when battle ends */\n onBattleEnd?: (result: 'win' | 'lose' | 'flee') => void;\n}\n\nexport const BattleTemplate: React.FC<BattleTemplateProps> = ({\n battleBoard,\n hudStats,\n menuOptions,\n title,\n showMenu = false,\n style,\n isLoading,\n error,\n entity,\n onBattleAction,\n onBattleEnd,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleBattleAction = (action: string) => {\n eventBus.emit('UI:BATTLE_ACTION', { action, entity });\n onBattleAction?.(action);\n };\n\n const handleBattleEnd = (result: 'win' | 'lose' | 'flee') => {\n eventBus.emit('UI:BATTLE_END', { result, entity });\n onBattleEnd?.(result);\n };\n\n const handleMenuSelect = (option: MenuOption) => {\n if (option.event) {\n eventBus.emit(`UI:${option.event}`, { option, entity });\n }\n if (option.navigatesTo) {\n eventBus.emit('UI:navigate', { to: option.navigatesTo });\n }\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <LoadingState message=\"Loading battle...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <ErrorState\n message={error.message}\n onRetry={() => eventBus.emit('UI:BATTLE_RETRY', { entity })}\n />\n </View>\n );\n }\n\n const hasUnits = battleBoard.units && battleBoard.units.length > 0;\n\n return (\n <View style={[styles.container, { backgroundColor: '#0f172a' }, style]}>\n {/* Header */}\n {title && (\n <View style={styles.header}>\n <Typography variant=\"h2\" style={{ color: '#fff' }}>\n {title}\n </Typography>\n </View>\n )}\n\n {/* HUD */}\n {hudStats && hudStats.length > 0 && (\n <View style={styles.hudContainer}>\n <GameHud stats={hudStats} position=\"corners\" transparent />\n </View>\n )}\n\n {/* Battle Board */}\n <View style={styles.boardContainer}>\n {hasUnits ? (\n <BattleBoard\n {...battleBoard}\n onAction={handleBattleAction}\n />\n ) : (\n <EmptyState\n message=\"No battle units available\"\n icon={<Typography variant=\"h1\">⚔️</Typography>}\n />\n )}\n </View>\n\n {/* Battle Controls */}\n <View style={styles.controls}>\n <HStack spacing={8} justify=\"center\">\n <Button\n variant=\"primary\"\n action=\"BATTLE_ATTACK\"\n actionPayload={{ entity }}\n onPress={() => handleBattleAction('attack')}\n >\n Attack\n </Button>\n <Button\n variant=\"secondary\"\n action=\"BATTLE_DEFEND\"\n actionPayload={{ entity }}\n onPress={() => handleBattleAction('defend')}\n >\n Defend\n </Button>\n <Button\n variant=\"ghost\"\n action=\"BATTLE_FLEE\"\n actionPayload={{ entity }}\n onPress={() => handleBattleEnd('flee')}\n >\n Flee\n </Button>\n </HStack>\n </View>\n\n {/* Menu Overlay */}\n {showMenu && menuOptions && (\n <View style={styles.menuOverlay}>\n <GameMenu\n title=\"Battle Menu\"\n options={menuOptions}\n onSelect={handleMenuSelect}\n />\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n padding: 16,\n alignItems: 'center',\n },\n hudContainer: {\n position: 'absolute',\n top: 60,\n left: 0,\n right: 0,\n height: 80,\n zIndex: 10,\n pointerEvents: 'none',\n },\n boardContainer: {\n flex: 1,\n padding: 16,\n justifyContent: 'center',\n },\n controls: {\n padding: 16,\n backgroundColor: 'rgba(0,0,0,0.5)',\n },\n menuOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 100,\n },\n});\n\nBattleTemplate.displayName = 'BattleTemplate';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { CastleBoard, CastleBoardProps } from '../organisms/game/CastleBoard';\nimport { GameHud, GameHudStat } from '../organisms/game/GameHud';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface CastleTemplateProps {\n /** Castle board configuration */\n castleBoard: CastleBoardProps;\n /** HUD stats configuration */\n hudStats?: GameHudStat[];\n /** Quick action buttons */\n actions?: Array<{\n label: string;\n event: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost';\n }>;\n /** Template title */\n title?: string;\n /** Additional container styles */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Event fired when room is entered */\n onEnterRoom?: (roomId: string) => void;\n /** Event fired when castle action occurs */\n onCastleAction?: (action: string) => void;\n}\n\nexport const CastleTemplate: React.FC<CastleTemplateProps> = ({\n castleBoard,\n hudStats,\n actions,\n title,\n style,\n isLoading,\n error,\n entity,\n onEnterRoom,\n onCastleAction,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleEnterRoom = (roomId: string) => {\n eventBus.emit('UI:CASTLE_ENTER_ROOM', { roomId, entity });\n onEnterRoom?.(roomId);\n };\n\n const handleAction = (action: string) => {\n eventBus.emit('UI:CASTLE_ACTION', { action, entity });\n onCastleAction?.(action);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <LoadingState message=\"Loading castle...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <ErrorState\n message={error.message}\n onRetry={() => eventBus.emit('UI:CASTLE_RETRY', { entity })}\n />\n </View>\n );\n }\n\n const hasRooms = castleBoard.rooms && castleBoard.rooms.length > 0;\n\n return (\n <View style={[styles.container, { backgroundColor: '#1e293b' }, style]}>\n {/* HUD */}\n {hudStats && hudStats.length > 0 && (\n <View style={styles.hudContainer}>\n <GameHud stats={hudStats} position=\"top\" transparent />\n </View>\n )}\n\n <ScrollView\n style={styles.scrollView}\n contentContainerStyle={styles.scrollContent}\n showsVerticalScrollIndicator={false}\n >\n {/* Title */}\n {title && (\n <View style={styles.header}>\n <Typography variant=\"h2\" style={{ color: '#fbbf24' }}>\n {title}\n </Typography>\n </View>\n )}\n\n {/* Castle Board */}\n <View style={styles.boardContainer}>\n {hasRooms ? (\n <CastleBoard\n {...castleBoard}\n onSelectRoom={handleEnterRoom}\n />\n ) : (\n <EmptyState\n message=\"No castle rooms available\"\n icon={<Typography variant=\"h1\">🏰</Typography>}\n />\n )}\n </View>\n\n {/* Action Buttons */}\n {actions && actions.length > 0 && (\n <View style={styles.actionsContainer}>\n <HStack spacing={8} justify=\"center\" style={styles.actions}>\n {actions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'default'}\n action={action.event}\n actionPayload={{ entity }}\n onPress={() => handleAction(action.event)}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n </View>\n )}\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n hudContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 10,\n },\n scrollView: {\n flex: 1,\n },\n scrollContent: {\n paddingTop: 80,\n paddingBottom: 24,\n },\n header: {\n padding: 16,\n alignItems: 'center',\n },\n boardContainer: {\n padding: 16,\n },\n actionsContainer: {\n padding: 16,\n },\n actions: {\n flexWrap: 'wrap',\n },\n});\n\nCastleTemplate.displayName = 'CastleTemplate';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { WorldMapBoard, WorldMapBoardProps } from '../organisms/game/WorldMapBoard';\nimport { GameHud, GameHudStat } from '../organisms/game/GameHud';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface WorldMapTemplateProps {\n /** World map board configuration */\n worldMapBoard: WorldMapBoardProps;\n /** HUD stats configuration */\n hudStats?: GameHudStat[];\n /** Quick navigation buttons */\n navigationActions?: Array<{\n label: string;\n event: string;\n targetNodeId?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost';\n }>;\n /** Template title */\n title?: string;\n /** Current region/act */\n act?: string;\n /** Additional container styles */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Event fired when node is selected */\n onSelectNode?: (nodeId: string) => void;\n /** Event fired when map action occurs */\n onMapAction?: (action: string, targetNodeId?: string) => void;\n}\n\nexport const WorldMapTemplate: React.FC<WorldMapTemplateProps> = ({\n worldMapBoard,\n hudStats,\n navigationActions,\n title,\n act,\n style,\n isLoading,\n error,\n entity,\n onSelectNode,\n onMapAction,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleSelectNode = (nodeId: string) => {\n eventBus.emit('UI:MAP_SELECT_NODE', { nodeId, entity });\n onSelectNode?.(nodeId);\n };\n\n const handleMapAction = (action: string, targetNodeId?: string) => {\n eventBus.emit('UI:MAP_ACTION', { action, targetNodeId, entity });\n onMapAction?.(action, targetNodeId);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <LoadingState message=\"Loading world map...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <ErrorState\n message={error.message}\n onRetry={() => eventBus.emit('UI:MAP_RETRY', { entity })}\n />\n </View>\n );\n }\n\n const hasNodes = worldMapBoard.nodes && worldMapBoard.nodes.length > 0;\n\n return (\n <View style={[styles.container, { backgroundColor: '#0f172a' }, style]}>\n {/* HUD */}\n {hudStats && hudStats.length > 0 && (\n <View style={styles.hudContainer}>\n <GameHud stats={hudStats} position=\"corners\" transparent />\n </View>\n )}\n\n {/* Header */}\n {(title || act) && (\n <View style={styles.header}>\n {title && (\n <Typography variant=\"h2\" style={{ color: '#fff' }}>\n {title}\n </Typography>\n )}\n {act && (\n <Typography variant=\"caption\" style={{ color: '#9ca3af' }}>\n {act}\n </Typography>\n )}\n </View>\n )}\n\n {/* Map Board */}\n <View style={styles.mapContainer}>\n {hasNodes ? (\n <WorldMapBoard\n {...worldMapBoard}\n title={worldMapBoard.title || title}\n act={worldMapBoard.act || act}\n onSelectNode={handleSelectNode}\n />\n ) : (\n <EmptyState\n message=\"No map locations available\"\n icon={<Typography variant=\"h1\">🗺️</Typography>}\n />\n )}\n </View>\n\n {/* Navigation Actions */}\n {navigationActions && navigationActions.length > 0 && (\n <View style={styles.actionsContainer}>\n <HStack spacing={8} justify=\"center\" style={styles.actions}>\n {navigationActions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'default'}\n action={action.event}\n actionPayload={{ entity, targetNodeId: action.targetNodeId }}\n onPress={() => handleMapAction(action.event, action.targetNodeId)}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n hudContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n zIndex: 10,\n },\n header: {\n padding: 16,\n alignItems: 'center',\n zIndex: 20,\n },\n mapContainer: {\n flex: 1,\n padding: 16,\n },\n actionsContainer: {\n padding: 16,\n backgroundColor: 'rgba(0,0,0,0.5)',\n zIndex: 20,\n },\n actions: {\n flexWrap: 'wrap',\n },\n});\n\nWorldMapTemplate.displayName = 'WorldMapTemplate';\n","import React, { useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CounterTemplateProps {\n /** Initial count value */\n initialCount?: number;\n /** Count step size */\n step?: number;\n /** Minimum count value */\n min?: number;\n /** Maximum count value */\n max?: number;\n /** Counter title */\n title?: string;\n /** Show reset button */\n showReset?: boolean;\n /** Additional container styles */\n style?: ViewStyle;\n /** Card style */\n cardStyle?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Event fired when count changes */\n onCountChange?: (count: number) => void;\n /** Event fired when count is reset */\n onReset?: () => void;\n}\n\nexport const CounterTemplate: React.FC<CounterTemplateProps> = ({\n initialCount = 0,\n step = 1,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n title = 'Counter',\n showReset = true,\n style,\n cardStyle,\n isLoading,\n error,\n entity,\n onCountChange,\n onReset,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [count, setCount] = useState<number>(initialCount);\n\n const handleIncrement = useCallback(() => {\n setCount((prev) => {\n const newCount = Math.min(prev + step, max);\n eventBus.emit('UI:COUNTER_INCREMENT', { count: newCount, entity });\n onCountChange?.(newCount);\n return newCount;\n });\n }, [step, max, entity, onCountChange, eventBus]);\n\n const handleDecrement = useCallback(() => {\n setCount((prev) => {\n const newCount = Math.max(prev - step, min);\n eventBus.emit('UI:COUNTER_DECREMENT', { count: newCount, entity });\n onCountChange?.(newCount);\n return newCount;\n });\n }, [step, min, entity, onCountChange, eventBus]);\n\n const handleReset = useCallback(() => {\n setCount(initialCount);\n eventBus.emit('UI:COUNTER_RESET', { count: initialCount, entity });\n onReset?.();\n onCountChange?.(initialCount);\n }, [initialCount, entity, onReset, onCountChange, eventBus]);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading counter...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState\n message={error.message}\n onRetry={() => eventBus.emit('UI:COUNTER_RETRY', { entity })}\n />\n </View>\n );\n }\n\n const isAtMin = count <= min;\n const isAtMax = count >= max;\n\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n <Card style={[styles.card, cardStyle || {}]}>\n <VStack spacing={24} align=\"center\">\n {/* Title */}\n <Typography variant=\"h3\">{title}</Typography>\n\n {/* Count Display */}\n <View style={styles.countDisplay}>\n <Typography\n variant=\"h1\"\n style={[\n styles.countText,\n { color: count > 0 ? theme.colors.success : count < 0 ? theme.colors.error : theme.colors.foreground },\n ]}\n >\n {count}\n </Typography>\n </View>\n\n {/* Controls */}\n <HStack spacing={16} align=\"center\">\n <Button\n variant=\"secondary\"\n action=\"COUNTER_DECREMENT\"\n actionPayload={{ entity, step }}\n onPress={handleDecrement}\n disabled={isAtMin}\n >\n -{step}\n </Button>\n\n {showReset && (\n <Button\n variant=\"ghost\"\n action=\"COUNTER_RESET\"\n actionPayload={{ entity }}\n onPress={handleReset}\n disabled={count === initialCount}\n >\n Reset\n </Button>\n )}\n\n <Button\n variant=\"primary\"\n action=\"COUNTER_INCREMENT\"\n actionPayload={{ entity, step }}\n onPress={handleIncrement}\n disabled={isAtMax}\n >\n +{step}\n </Button>\n </HStack>\n\n {/* Status */}\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n Min: {min} | Max: {max} | Step: {step}\n </Typography>\n </VStack>\n </Card>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 16,\n },\n card: {\n padding: 32,\n minWidth: 280,\n maxWidth: 400,\n width: '100%',\n },\n countDisplay: {\n paddingVertical: 24,\n paddingHorizontal: 48,\n backgroundColor: 'rgba(0,0,0,0.05)',\n borderRadius: 12,\n },\n countText: {\n fontSize: 64,\n fontWeight: '700',\n },\n});\n\nCounterTemplate.displayName = 'CounterTemplate';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n SafeAreaView,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { GameHud, GameHudProps } from '../organisms/game/GameHud';\nimport { GameMenu, GameMenuProps } from '../organisms/game/GameMenu';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface GameAction {\n /** Button label */\n label: string;\n /** Event name to emit */\n event: string;\n /** Button variant */\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n /** Whether the action is disabled */\n disabled?: boolean;\n /** Optional payload to include with the event */\n payload?: Record<string, unknown>;\n}\n\nexport interface GameTemplateProps {\n /** Main game content */\n children?: React.ReactNode;\n /** Game title displayed in header */\n title?: string;\n /** Game subtitle */\n subtitle?: string;\n /** HUD configuration */\n hud?: GameHudProps;\n /** Show HUD overlay */\n showHud?: boolean;\n /** Menu configuration (renders menu instead of game content if provided) */\n menu?: Omit<GameMenuProps, 'title' | 'subtitle'> & { title?: string; subtitle?: string };\n /** Show menu overlay */\n showMenu?: boolean;\n /** Quick action buttons displayed at bottom */\n actions?: GameAction[];\n /** Additional container styles */\n style?: ViewStyle;\n /** Content container styles */\n contentStyle?: ViewStyle;\n /** Background color override */\n backgroundColor?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Empty state message */\n emptyMessage?: string;\n /** Event fired when template action occurs */\n onAction?: (action: string, payload?: Record<string, unknown>) => void;\n}\n\nexport const GameTemplate: React.FC<GameTemplateProps> = ({\n children,\n title,\n subtitle,\n hud,\n showHud = true,\n menu,\n showMenu = false,\n actions,\n style,\n contentStyle,\n backgroundColor,\n isLoading,\n error,\n entity,\n emptyMessage = 'No game content available',\n onAction,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleAction = (action: string, payload?: Record<string, unknown>) => {\n eventBus.emit(`UI:${action}`, { ...payload, entity });\n onAction?.(action, payload);\n };\n\n if (isLoading) {\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n <LoadingState message=\"Loading game...\" />\n </SafeAreaView>\n );\n }\n\n if (error) {\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n <ErrorState\n message={error.message}\n onRetry={() => handleAction('GAME_RETRY')}\n />\n </SafeAreaView>\n );\n }\n\n // Render menu if showMenu is true or no children provided\n const shouldShowMenu = showMenu || (!children && menu);\n\n if (shouldShowMenu && menu) {\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || '#0f172a' },\n style,\n ]}\n >\n <GameMenu\n title={menu.title || title || 'Game Menu'}\n subtitle={menu.subtitle || subtitle}\n options={menu.options || menu.menuItems || []}\n onSelect={(option) => {\n if (option.event) {\n handleAction(option.event, { option });\n }\n if (option.navigatesTo) {\n handleAction('navigate', { to: option.navigatesTo });\n }\n menu.onSelect?.(option);\n }}\n background={menu.background}\n logo={menu.logo}\n style={menu.style}\n />\n </SafeAreaView>\n );\n }\n\n const hasContent = React.Children.count(children) > 0;\n\n return (\n <SafeAreaView\n style={[\n styles.container,\n { backgroundColor: backgroundColor || theme.colors.background },\n style,\n ]}\n >\n {/* HUD Overlay */}\n {showHud && hud && (\n <View style={styles.hudOverlay}>\n <GameHud {...hud} />\n </View>\n )}\n\n {/* Header */}\n {(title || subtitle) && (\n <View style={styles.header}>\n {title && (\n <Typography variant=\"h2\" style={styles.title}>\n {title}\n </Typography>\n )}\n {subtitle && (\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n {subtitle}\n </Typography>\n )}\n </View>\n )}\n\n {/* Main Content */}\n <View style={[styles.content, contentStyle]}>\n {hasContent ? (\n children\n ) : (\n <EmptyState\n message={emptyMessage}\n icon={<Typography variant=\"h1\">🎮</Typography>}\n />\n )}\n </View>\n\n {/* Action Bar */}\n {actions && actions.length > 0 && (\n <View style={styles.actionBar}>\n <Card variant=\"elevated\" style={styles.actionCard}>\n <HStack spacing={8} justify=\"center\" style={styles.actions}>\n {actions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant || 'default'}\n action={action.event}\n actionPayload={{ ...action.payload, entity }}\n onPress={() => handleAction(action.event, action.payload)}\n disabled={action.disabled}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n </Card>\n </View>\n )}\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n hudOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'box-none',\n zIndex: 10,\n },\n header: {\n padding: 16,\n alignItems: 'center',\n zIndex: 20,\n },\n title: {\n fontWeight: '700',\n },\n content: {\n flex: 1,\n padding: 16,\n },\n actionBar: {\n padding: 16,\n zIndex: 20,\n },\n actionCard: {\n padding: 12,\n },\n actions: {\n flexWrap: 'wrap',\n },\n});\n\nGameTemplate.displayName = 'GameTemplate';\n"],"mappings":"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","names":["React","View","StyleSheet","ScrollView","SafeAreaView","React","SafeAreaView","styles","ScrollView","View","StyleSheet","React","View","StyleSheet","SafeAreaView","React","SafeAreaView","styles","View","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","ScrollView","React","View","styles","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","SafeAreaView","React","SafeAreaView","styles","View","StyleSheet"]}
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EntityRow, FieldValue, EventKey, EventPayload, BusEvent, BusEventSource, BusEventListener } from '@almadar/core';
|
|
2
|
+
import type { TraitState } from '@almadar/runtime';
|
|
3
|
+
export type EntityWith<K extends string> = EntityRow & {
|
|
4
|
+
[P in K]: FieldValue | undefined;
|
|
5
|
+
};
|
|
6
|
+
export type { EntityRow, FieldValue, EventKey, EventPayload, BusEvent, BusEventSource, BusEventListener, TraitState, };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,SAAS,GAAG;KACpD,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,SAAS;CACjC,CAAC;AAEF,YAAY,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,UAAU,GACX,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/mobile",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "React Native UI components for Almadar - extends @almadar/ui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
"import": "./dist/components/organisms/index.js",
|
|
28
28
|
"types": "./dist/components/organisms/index.d.ts"
|
|
29
29
|
},
|
|
30
|
+
"./components/templates": {
|
|
31
|
+
"import": "./dist/components/templates/index.js",
|
|
32
|
+
"types": "./dist/components/templates/index.d.ts"
|
|
33
|
+
},
|
|
30
34
|
"./hooks": {
|
|
31
35
|
"import": "./dist/hooks/index.js",
|
|
32
36
|
"types": "./dist/hooks/index.d.ts"
|
|
@@ -62,15 +66,15 @@
|
|
|
62
66
|
"test:web": "vitest run --passWithNoTests"
|
|
63
67
|
},
|
|
64
68
|
"dependencies": {
|
|
65
|
-
"@almadar/core": "
|
|
69
|
+
"@almadar/core": "^10.0.0",
|
|
66
70
|
"@almadar/patterns": ">=2.14.1",
|
|
67
|
-
"@almadar/ui": "
|
|
71
|
+
"@almadar/ui": "^5.22.3",
|
|
68
72
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
69
73
|
"expo": "^54.0.0",
|
|
70
74
|
"expo-status-bar": "~3.0.9",
|
|
71
75
|
"react": "^19.0.0",
|
|
72
76
|
"react-dom": "^19.0.0",
|
|
73
|
-
"react-native": "
|
|
77
|
+
"react-native": "0.84.1",
|
|
74
78
|
"react-native-is-edge-to-edge": "^1.1.6",
|
|
75
79
|
"react-native-reanimated": "4.1.1",
|
|
76
80
|
"react-native-web": "^0.21.0",
|
|
@@ -82,20 +86,23 @@
|
|
|
82
86
|
"react-native-vector-icons": "^10.0.0"
|
|
83
87
|
},
|
|
84
88
|
"devDependencies": {
|
|
89
|
+
"@react-navigation/native": "^6.1.18",
|
|
85
90
|
"@storybook/addon-ondevice-actions": "8.6.2",
|
|
86
91
|
"@storybook/addon-ondevice-backgrounds": "8.6.2",
|
|
87
92
|
"@storybook/addon-ondevice-controls": "8.6.2",
|
|
88
93
|
"@storybook/react-native": "8.6.2",
|
|
89
|
-
"@
|
|
94
|
+
"@testing-library/react-native": "^13.3.3",
|
|
95
|
+
"@types/react": "^19.0.0",
|
|
90
96
|
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
91
97
|
"@typescript-eslint/parser": "^7.0.0",
|
|
92
98
|
"@vitest/ui": "^1.6.0",
|
|
93
99
|
"babel-plugin-transform-inline-environment-variables": "0.4.4",
|
|
94
100
|
"cross-env": "^7.0.0",
|
|
95
101
|
"eslint": "^8.57.0",
|
|
102
|
+
"jsdom": "^24.0.0",
|
|
103
|
+
"react-test-renderer": "^19.2.4",
|
|
96
104
|
"tsup": "^8.0.0",
|
|
97
105
|
"typescript": "^5.4.0",
|
|
98
|
-
"jsdom": "^24.0.0",
|
|
99
106
|
"vitest": "^1.0.0"
|
|
100
107
|
},
|
|
101
108
|
"publishConfig": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/molecules/EmptyState.tsx","../src/components/molecules/Modal.tsx","../src/components/molecules/Drawer.tsx","../src/components/molecules/Tabs.tsx","../src/components/molecules/Toast.tsx","../src/components/molecules/CodeBlock.tsx","../src/components/molecules/game/StatBadge.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nexport interface EmptyStateProps {\n message?: string;\n icon?: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No data available',\n icon,\n}) => {\n return (\n <VStack align=\"center\" spacing={12} style={styles.container}>\n {icon}\n <Typography variant=\"body\" color=\"#6b7280\">\n {message}\n </Typography>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nEmptyState.displayName = 'EmptyState';\n","import React, { useCallback } from 'react';\nimport { \n Modal as RNModal, \n View, \n TouchableOpacity, \n StyleSheet,\n ViewStyle\n} from 'react-native';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n showCloseButton?: boolean;\n closeOnBackdrop?: boolean;\n animationType?: 'none' | 'slide' | 'fade';\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n showCloseButton = true,\n closeOnBackdrop = true,\n animationType = 'fade',\n ...modalProps\n}) => {\n const handleBackdropPress = useCallback(() => {\n if (closeOnBackdrop) {\n onClose();\n }\n }, [closeOnBackdrop, onClose]);\n\n const transparent = animationType !== 'slide';\n\n return (\n <RNModal\n visible={isOpen}\n animationType={animationType}\n transparent={transparent}\n onRequestClose={onClose}\n {...modalProps}\n >\n <TouchableOpacity\n style={styles.overlay}\n activeOpacity={1}\n onPress={handleBackdropPress}\n >\n <View style={styles.centeredView}>\n <TouchableOpacity activeOpacity={1} onPress={(e) => e.stopPropagation()}>\n <Card style={[styles.modalCard, styles[size] as ViewStyle]}>\n <VStack spacing={16}>\n {/* Header */}\n {title && (\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">{title}</Typography>\n {showCloseButton && (\n <TouchableOpacity onPress={onClose}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n )}\n </HStack>\n )}\n\n {/* Content */}\n <View>{children}</View>\n\n {/* Footer */}\n {footer && (\n <HStack justify=\"flex-end\" spacing={12}>\n {footer}\n </HStack>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n </View>\n </TouchableOpacity>\n </RNModal>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n centeredView: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 20,\n },\n modalCard: {\n width: '100%',\n maxWidth: 400,\n },\n sm: {\n maxWidth: 300,\n },\n md: {\n maxWidth: 400,\n },\n lg: {\n maxWidth: 600,\n },\n});\n\nModal.displayName = 'Modal';\n\n// Confirm Modal\nexport interface ConfirmModalProps extends Omit<ModalProps, 'children' | 'footer'> {\n message: string;\n onConfirm: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = 'Confirm',\n message = 'Are you sure you want to proceed?',\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n \n}) => {\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={\n <>\n <Typography variant=\"body\" color=\"#6b7280\" onPress={onClose}>\n {cancelLabel}\n </Typography>\n <Typography variant=\"body\" color=\"#ef4444\" onPress={onConfirm}>\n {confirmLabel}\n </Typography>\n </>\n }\n >\n <Typography variant=\"body\">{message}</Typography>\n </Modal>\n );\n};\n\nConfirmModal.displayName = 'ConfirmModal';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n placement?: 'left' | 'right';\n width?: number;\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n children,\n title,\n placement = 'right',\n width = SCREEN_WIDTH * 0.8,\n}) => {\n const translateX = React.useRef(\n new Animated.Value(placement === 'right' ? SCREEN_WIDTH : -SCREEN_WIDTH)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(translateX, {\n toValue: isOpen ? 0 : placement === 'right' ? width : -width,\n duration: 250,\n useNativeDriver: true,\n }).start();\n }, [isOpen, placement, translateX, width]);\n\n if (!isOpen) return null;\n\n return (\n <View style={styles.overlay}>\n {/* Backdrop */}\n <TouchableOpacity\n style={styles.backdrop}\n activeOpacity={1}\n onPress={onClose}\n />\n \n {/* Drawer Panel */}\n <Animated.View\n style={[\n styles.drawer,\n {\n width,\n [placement]: 0,\n transform: [{ translateX }],\n },\n ]}\n >\n <View style={styles.content}>\n {/* Header */}\n {(title || true) && (\n <View style={styles.header}>\n <TouchableOpacity onPress={onClose} style={styles.closeButton}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n </View>\n )}\n\n {/* Drawer Content */}\n <VStack spacing={0} style={styles.children}>\n {children}\n </VStack>\n </View>\n </Animated.View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n flexDirection: 'row',\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n drawer: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n backgroundColor: '#ffffff',\n shadowColor: '#000',\n shadowOffset: { width: -2, height: 0 },\n shadowOpacity: 0.25,\n shadowRadius: 5,\n elevation: 5,\n },\n content: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e5e7eb',\n gap: 12,\n },\n closeButton: {\n padding: 4,\n },\n children: {\n flex: 1,\n padding: 16,\n },\n});\n\nDrawer.displayName = 'Drawer';\n","import React, { useState } from 'react';\nimport { \n View, \n TouchableOpacity, \n StyleSheet, \n ViewStyle,\n ScrollView \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { HStack } from '../atoms/Stack';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n badge?: number;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n activeTab?: string;\n onChange?: (tabId: string) => void;\n style?: ViewStyle;\n variant?: 'default' | 'pills' | 'underlined';\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n activeTab,\n onChange,\n style,\n variant = 'default',\n isLoading,\n error,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalActiveTab, setInternalActiveTab] = useState(tabs[0]?.id);\n const currentTab = activeTab ?? internalActiveTab;\n\n const handleTabPress = (tabId: string) => {\n setInternalActiveTab(tabId);\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { tabId });\n }\n onChange?.(tabId);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getTabStyle = (isActive: boolean) => {\n switch (variant) {\n case 'pills':\n return {\n backgroundColor: isActive ? theme.colors.primary : 'transparent',\n borderRadius: theme.borderRadius.full,\n };\n case 'underlined':\n return {\n borderBottomWidth: 2,\n borderBottomColor: isActive ? theme.colors.primary : 'transparent',\n backgroundColor: 'transparent',\n };\n default:\n return {\n backgroundColor: isActive ? theme.colors.card : 'transparent',\n borderRadius: theme.borderRadius.md,\n ...theme.shadows.sm,\n };\n }\n };\n\n return (\n <View style={[styles.container, style]}>\n <ScrollView \n horizontal \n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.scrollContent}\n >\n <HStack spacing={8}>\n {tabs.map((tab) => {\n const isActive = currentTab === tab.id;\n return (\n <TouchableOpacity\n key={tab.id}\n onPress={() => handleTabPress(tab.id)}\n style={[\n styles.tab,\n getTabStyle(isActive),\n ]}\n >\n <HStack spacing={4} align=\"center\">\n {tab.icon}\n <Typography \n variant=\"body\" \n style={{ \n color: isActive && variant === 'pills' \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground \n }}\n >\n {tab.label}\n </Typography>\n {tab.badge !== undefined && tab.badge > 0 && (\n <View style={[styles.badge, { backgroundColor: theme.colors.error }]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['error-foreground'] }}>\n {tab.badge > 99 ? '99+' : tab.badge}\n </Typography>\n </View>\n )}\n </HStack>\n </TouchableOpacity>\n );\n })}\n </HStack>\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n scrollContent: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n tab: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n badge: {\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n});\n\nTabs.displayName = 'Tabs';\n","import React, { useEffect } from 'react';\nimport { \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n Animated\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastProps {\n id: string;\n message: string;\n variant?: ToastVariant;\n duration?: number;\n onDismiss?: (id: string) => void;\n dismissAction?: string;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Payload for dismiss action */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n id,\n message,\n variant = 'info',\n duration = 5000,\n onDismiss,\n dismissAction,\n style,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateY = React.useRef(new Animated.Value(-100)).current;\n const opacity = React.useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n ]).start();\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n handleDismiss();\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [duration]);\n\n const handleDismiss = () => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: -100,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }),\n ]).start(() => {\n if (dismissAction) {\n eventBus.emit(`UI:${dismissAction}`, { ...actionPayload, toastId: id });\n }\n onDismiss?.(id);\n });\n };\n\n const variantStyles: Record<ToastVariant, { bg: string }> = {\n info: { bg: theme.colors.info },\n success: { bg: theme.colors.success },\n warning: { bg: theme.colors.warning },\n error: { bg: theme.colors.error },\n };\n\n const { bg } = variantStyles[variant];\n const textColor = variant === 'warning' ? '#000000' : '#ffffff';\n\n return (\n <Animated.View\n style={[\n styles.container,\n { backgroundColor: bg },\n { transform: [{ translateY }], opacity },\n style,\n ]}\n >\n <HStack spacing={12} align=\"center\" justify=\"space-between\">\n <Typography variant=\"body\" style={{ color: textColor, flex: 1 }}>\n {message}\n </Typography>\n \n <TouchableOpacity onPress={handleDismiss} style={styles.dismiss}>\n <Typography variant=\"body\" style={{ color: textColor }}>\n ✕\n </Typography>\n </TouchableOpacity>\n </HStack>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 12,\n marginHorizontal: 16,\n marginVertical: 4,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 4,\n },\n dismiss: {\n padding: 4,\n },\n});\n\nToast.displayName = 'Toast';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { HStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface CodeBlockProps {\n /** Code content to display */\n code: string;\n /** Programming language for syntax highlighting hint */\n language?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Whether to show copy button */\n showCopyButton?: boolean;\n /** Whether to allow horizontal scrolling */\n scrollable?: boolean;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative copy event name - emits UI:${copyEvent} via eventBus */\n copyEvent?: string;\n}\n\n// Simple syntax highlighting tokens\ninterface Token {\n text: string;\n style: 'keyword' | 'string' | 'comment' | 'number' | 'function' | 'default';\n}\n\nconst KEYWORDS = [\n 'const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while',\n 'import', 'export', 'from', 'class', 'interface', 'type', 'async', 'await',\n 'try', 'catch', 'throw', 'new', 'this', 'true', 'false', 'null', 'undefined',\n];\n\nconst TOKEN_COLORS: Record<Token['style'], string> = {\n keyword: '#c678dd',\n string: '#98c379',\n comment: '#5c6370',\n number: '#d19a66',\n function: '#61afef',\n default: '#abb2bf',\n};\n\n/**\n * Simple tokenizer for basic syntax highlighting\n */\nconst tokenizeCode = (code: string): Token[][] => {\n const lines = code.split('\\n');\n\n return lines.map((line) => {\n const tokens: Token[] = [];\n let remaining = line;\n\n while (remaining.length > 0) {\n let matched = false;\n\n // Check for comments\n if (remaining.startsWith('//')) {\n tokens.push({ text: remaining, style: 'comment' });\n break;\n }\n\n // Check for strings (double quotes)\n if (remaining.startsWith('\"')) {\n const endIndex = remaining.indexOf('\"', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (single quotes)\n if (remaining.startsWith(\"'\")) {\n const endIndex = remaining.indexOf(\"'\", 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (template literals)\n if (remaining.startsWith('`')) {\n const endIndex = remaining.indexOf('`', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for numbers\n const numberMatch = remaining.match(/^\\d+(\\.\\d+)?/);\n if (numberMatch) {\n tokens.push({ text: numberMatch[0], style: 'number' });\n remaining = remaining.slice(numberMatch[0].length);\n matched = true;\n continue;\n }\n\n // Check for keywords and identifiers\n const wordMatch = remaining.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);\n if (wordMatch) {\n const word = wordMatch[0];\n const style: Token['style'] = KEYWORDS.includes(word) ? 'keyword' : 'default';\n tokens.push({ text: word, style });\n remaining = remaining.slice(word.length);\n matched = true;\n continue;\n }\n\n // Check for function calls (identifier followed by opening paren)\n const funcMatch = remaining.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(/);\n if (funcMatch && !KEYWORDS.includes(funcMatch[1])) {\n tokens.pop(); // Remove the identifier we just added\n tokens.push({ text: funcMatch[1], style: 'function' });\n tokens.push({ text: '(', style: 'default' });\n remaining = remaining.slice(funcMatch[0].length - 1);\n matched = true;\n continue;\n }\n\n // If nothing matched, take the first character as default\n if (!matched) {\n tokens.push({ text: remaining[0], style: 'default' });\n remaining = remaining.slice(1);\n }\n }\n\n return tokens;\n });\n};\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code,\n language,\n showLineNumbers = true,\n showCopyButton = true,\n scrollable = true,\n style,\n isLoading,\n error,\n copyEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleCopy = () => {\n if (copyEvent) {\n eventBus.emit(`UI:${copyEvent}`, { code, language });\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style || {}]}>\n <LoadingState message=\"Loading code...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, style || {}]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n const tokenizedLines = tokenizeCode(code);\n const lineNumberWidth = String(tokenizedLines.length).length * 10 + 16;\n\n const CodeContent = (\n <View style={styles.codeContainer}>\n {tokenizedLines.map((tokens, lineIndex) => (\n <View key={lineIndex} style={styles.line}>\n {showLineNumbers && (\n <View style={[styles.lineNumber, { width: lineNumberWidth }]}>\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n {lineIndex + 1}\n </Typography>\n </View>\n )}\n <View style={styles.lineContent}>\n {tokens.length === 0 ? (\n <Typography variant=\"body\"> </Typography>\n ) : (\n <Typography variant=\"body\">\n {tokens.map((token, tokenIndex) => (\n <Typography\n key={tokenIndex}\n variant=\"body\"\n style={{\n color: TOKEN_COLORS[token.style],\n fontFamily: 'monospace',\n }}\n >\n {token.text}\n </Typography>\n ))}\n </Typography>\n )}\n </View>\n </View>\n ))}\n </View>\n );\n\n return (\n <Card style={[styles.container, style || {}]} padding=\"none\">\n {(language || showCopyButton) && (\n <HStack\n spacing={8}\n align=\"center\"\n justify=\"space-between\"\n style={[\n styles.header,\n { backgroundColor: theme.colors.muted, borderBottomColor: theme.colors.border },\n ]}\n >\n {language ? (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n textTransform: 'uppercase',\n }}\n >\n {language}\n </Typography>\n ) : (\n <View />\n )}\n {showCopyButton && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleCopy}>\n Copy\n </Button>\n )}\n </HStack>\n )}\n\n {scrollable ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n {CodeContent}\n </ScrollView>\n ) : (\n CodeContent\n )}\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n borderBottomWidth: 1,\n },\n codeContainer: {\n padding: 16,\n },\n line: {\n flexDirection: 'row',\n },\n lineNumber: {\n alignItems: 'flex-end',\n paddingRight: 16,\n opacity: 0.5,\n },\n lineContent: {\n flex: 1,\n },\n});\n\nCodeBlock.displayName = 'CodeBlock';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { HealthBar } from '../../atoms/game/HealthBar';\nimport { ScoreDisplay } from '../../atoms/game/ScoreDisplay';\n\nexport interface StatBadgeProps {\n /** Stat label */\n label: string;\n /** Current value (defaults to 0 if not provided) */\n value?: number | string;\n /** Maximum value (for bar/hearts format) */\n max?: number;\n /** Data source entity name (for schema config) */\n source?: string;\n /** Field name in the source (for schema config) */\n field?: string;\n /** Display format */\n format?: 'number' | 'hearts' | 'bar' | 'text' | string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | string;\n /** Visual variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst sizeMap: Record<string, { padding: number; fontSize: number }> = {\n sm: { padding: 8, fontSize: 12 },\n md: { padding: 12, fontSize: 14 },\n lg: { padding: 16, fontSize: 16 },\n};\n\nconst variantMap: Record<string, { backgroundColor: string; borderColor: string }> = {\n default: { backgroundColor: 'rgba(31, 41, 55, 0.8)', borderColor: '#374151' },\n primary: { backgroundColor: 'rgba(30, 58, 138, 0.8)', borderColor: '#1d4ed8' },\n success: { backgroundColor: 'rgba(20, 83, 45, 0.8)', borderColor: '#15803d' },\n warning: { backgroundColor: 'rgba(113, 63, 18, 0.8)', borderColor: '#a16207' },\n danger: { backgroundColor: 'rgba(127, 29, 29, 0.8)', borderColor: '#b91c1c' },\n};\n\nexport const StatBadge: React.FC<StatBadgeProps> = ({\n label,\n value = 0,\n max,\n format = 'number',\n icon,\n size = 'md',\n variant = 'default',\n style,\n // Ignored config props (used for schema binding)\n source: _source,\n field: _field,\n}) => {\n const theme = useTheme();\n const numValue = typeof value === 'number' ? value : parseInt(String(value), 10) || 0;\n const sizeStyles = sizeMap[size] ?? sizeMap.md;\n const variantStyles = variantMap[variant] ?? variantMap.default;\n\n return (\n <View\n style={[\n styles.container,\n {\n backgroundColor: variantStyles.backgroundColor,\n borderColor: variantStyles.borderColor,\n padding: sizeStyles.padding,\n },\n style as never,\n ]}\n >\n {icon && (\n <Text style={{ fontSize: 18, marginRight: 8 }}>\n {icon as string}\n </Text>\n )}\n \n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['muted-foreground'],\n fontWeight: '500',\n marginRight: 8,\n }}\n >\n {label}\n </Text>\n \n {format === 'hearts' && max && (\n <HealthBar\n current={numValue}\n max={max}\n format=\"hearts\"\n size={size === 'lg' ? 'md' : 'sm'}\n />\n )}\n \n {format === 'bar' && max && (\n <HealthBar\n current={numValue}\n max={max}\n format=\"bar\"\n size={size === 'lg' ? 'md' : 'sm'}\n />\n )}\n \n {format === 'number' && (\n <ScoreDisplay\n value={numValue}\n size={size === 'lg' ? 'md' : 'sm'}\n animated\n />\n )}\n \n {format === 'text' && (\n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['primary-foreground'],\n fontWeight: '700',\n }}\n >\n {value}\n </Text>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 8,\n borderWidth: 1,\n },\n});\n\nStatBadge.displayName = 'StatBadge';\n"],"mappings":"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","names":["React","StyleSheet","React","styles","StyleSheet","React","View","StyleSheet","TouchableOpacity","React","View","styles","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","TouchableOpacity","StyleSheet","Animated","React","Animated","styles","TouchableOpacity","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","View","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/atoms/Center.tsx","../src/components/atoms/Radio.tsx","../src/components/atoms/Switch.tsx","../src/components/atoms/Textarea.tsx","../src/components/atoms/Avatar.tsx","../src/components/atoms/Overlay.tsx","../src/components/atoms/Spacer.tsx","../src/components/atoms/ConditionalWrapper.tsx","../src/components/atoms/StatusDot.tsx","../src/components/atoms/TrendIndicator.tsx","../src/components/atoms/TextHighlight.tsx","../src/components/atoms/AnimatedCounter.tsx","../src/components/atoms/TypewriterText.tsx","../src/components/atoms/ThemeToggle.tsx","../src/components/atoms/RangeSlider.tsx","../src/components/atoms/game/Sprite.tsx","../src/components/atoms/game/StateIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CenterProps {\n children: React.ReactNode;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Center: React.FC<CenterProps> = ({\n children,\n style,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n {children}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nCenter.displayName = 'Center';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface RadioProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { outer: number; inner: number }> = {\n sm: { outer: 18, inner: 8 },\n md: { outer: 24, inner: 10 },\n lg: { outer: 32, inner: 14 },\n };\n\n const { outer, inner } = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n width: outer,\n height: outer,\n borderRadius: outer / 2,\n borderWidth: 2,\n borderColor: checked \n ? theme.colors.primary \n : theme.colors.border,\n backgroundColor: theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n {checked && (\n <View\n style={{\n width: inner,\n height: inner,\n borderRadius: inner / 2,\n backgroundColor: theme.colors.primary,\n }}\n />\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nRadio.displayName = 'Radio';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle,\n Animated \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateX = React.useRef(new Animated.Value(checked ? 1 : 0)).current;\n\n React.useEffect(() => {\n const { width } = sizeStyles[size];\n const thumbWidth = width * 0.4;\n const travelDistance = width - thumbWidth - 4;\n \n Animated.timing(translateX, {\n toValue: checked ? travelDistance : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, size]);\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { width: number; height: number }> = {\n sm: { width: 36, height: 20 },\n md: { width: 48, height: 28 },\n lg: { width: 60, height: 36 },\n };\n\n const { width, height } = sizeStyles[size];\n const thumbSize = height - 4;\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.track,\n {\n width,\n height,\n borderRadius: height / 2,\n backgroundColor: checked \n ? theme.colors.primary \n : theme.colors['muted-foreground'],\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: thumbSize,\n height: thumbSize,\n borderRadius: thumbSize / 2,\n backgroundColor: theme.colors['primary-foreground'],\n transform: [{ translateX }],\n },\n ]}\n />\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n track: {\n justifyContent: 'center',\n padding: 2,\n },\n thumb: {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 2,\n elevation: 2,\n },\n});\n\nSwitch.displayName = 'Switch';\n","import React from 'react';\nimport { \n TextInput, \n TextInputProps, \n StyleSheet, \n View, \n Text,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\n\nexport interface TextareaProps extends Omit<TextInputProps, 'onChange' | 'multiline'> {\n label?: string;\n /** String error message for form validation */\n errorMessage?: string;\n helperText?: string;\n containerStyle?: ViewStyle;\n numberOfLines?: number;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state object */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Declarative focus event name - emits UI:${focusEvent} via eventBus */\n focusEvent?: string;\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n label,\n errorMessage,\n helperText,\n containerStyle,\n style,\n numberOfLines = 4,\n isLoading,\n error,\n changeEvent,\n focusEvent,\n onChangeText,\n onFocus,\n ...textInputProps\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleChangeText = (text: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { value: text });\n }\n onChangeText?.(text);\n };\n\n const handleFocus = () => {\n if (focusEvent) {\n eventBus.emit(`UI:${focusEvent}`);\n }\n onFocus?.({} as never);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n const errorText = error?.message || errorMessage;\n\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <TextInput\n multiline\n numberOfLines={numberOfLines}\n textAlignVertical=\"top\"\n style={[\n styles.textarea,\n {\n borderColor: errorText ? theme.colors.error : theme.colors.border,\n backgroundColor: theme.colors.card,\n color: theme.colors.foreground,\n },\n style,\n ]}\n placeholderTextColor={theme.colors['muted-foreground']}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n {...textInputProps}\n />\n {errorText ? (\n <Text style={[styles.errorText, { color: theme.colors.error }]}>\n {errorText}\n </Text>\n ) : helperText ? (\n <Text style={[styles.helperText, { color: theme.colors['muted-foreground'] }]}>\n {helperText}\n </Text>\n ) : null}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n textarea: {\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 16,\n minHeight: 100,\n },\n errorText: {\n fontSize: 12,\n marginTop: 4,\n },\n helperText: {\n fontSize: 12,\n marginTop: 4,\n },\n});\n\nTextarea.displayName = 'Textarea';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Image,\n ImageSourcePropType \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface AvatarProps {\n src?: ImageSourcePropType;\n alt?: string;\n initials?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n initials,\n size = 'md',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const sizeMap: Record<string, { container: number; fontSize: number }> = {\n sm: { container: 32, fontSize: 12 },\n md: { container: 40, fontSize: 14 },\n lg: { container: 48, fontSize: 16 },\n xl: { container: 64, fontSize: 20 },\n };\n\n const { container, fontSize } = sizeMap[size];\n\n if (isLoading) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <LoadingState message=\"\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getInitials = () => {\n if (initials) return initials;\n if (alt) {\n return alt\n .split(' ')\n .map(n => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n }\n return '?';\n };\n\n if (src) {\n return (\n <Image\n source={src}\n style={[\n styles.image,\n { \n width: container, \n height: container, \n borderRadius: container / 2 \n },\n style as never,\n ]}\n accessibilityLabel={alt}\n />\n );\n }\n\n return (\n <View\n style={[\n styles.container,\n {\n width: container,\n height: container,\n borderRadius: container / 2,\n backgroundColor: theme.colors.primary,\n },\n style,\n ]}\n >\n <Text\n style={[\n styles.initials,\n {\n fontSize,\n color: theme.colors['primary-foreground'],\n },\n ]}\n >\n {getInitials()}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n resizeMode: 'cover',\n },\n initials: {\n fontWeight: '600',\n },\n});\n\nAvatar.displayName = 'Avatar';\n","import React from 'react';\nimport { \n TouchableWithoutFeedback, \n View,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isVisible?: boolean;\n /** Called when overlay is pressed */\n onPress?: () => void;\n /** Whether to apply blur effect (iOS only) */\n blur?: boolean;\n /** Declarative event name — emits UI:{action} via eventBus on press */\n action?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const Overlay: React.FC<OverlayProps> = ({\n isVisible = true,\n onPress,\n blur = true,\n action,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n if (!isVisible) return null;\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, {});\n }\n onPress?.();\n };\n\n return (\n <TouchableWithoutFeedback onPress={handlePress}>\n <View \n style={[\n styles.overlay,\n { \n backgroundColor: theme.colors.background,\n opacity: 0.8,\n },\n blur && styles.blur,\n ...(style ? [style] : []),\n ]}\n pointerEvents=\"auto\"\n />\n </TouchableWithoutFeedback>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 40,\n },\n blur: {\n // Note: For actual blur effect on iOS, use @react-native-community/blur\n // This is a fallback opacity-based overlay\n },\n});\n\nOverlay.displayName = 'Overlay';\n","import React from 'react';\nimport { View, ViewStyle } from 'react-native';\n\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n\nexport interface SpacerProps {\n /** Fixed size (auto = flex grow) */\n size?: SpacerSize;\n /** Orientation (for fixed sizes) */\n axis?: 'horizontal' | 'vertical';\n /** Custom style */\n style?: ViewStyle;\n}\n\nconst sizeValues: Record<Exclude<SpacerSize, 'auto'>, number> = {\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n};\n\n/**\n * Spacer - Flexible spacing element for flex layouts\n * \n * Usage:\n * - size=\"auto\" (default): Expands to fill available space (flex: 1)\n * - size=\"md\": Fixed size spacing\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'auto',\n axis = 'horizontal',\n style,\n}) => {\n if (size === 'auto') {\n return (\n <View \n style={[{ flex: 1 }, ...(style ? [style] : [])]} \n accessibilityElementsHidden\n />\n );\n }\n\n const sizeValue = sizeValues[size];\n const spacerStyle: ViewStyle = axis === 'horizontal' \n ? { width: sizeValue }\n : { height: sizeValue };\n\n return (\n <View \n style={[\n spacerStyle,\n ...(style ? [style] : []),\n ]} \n accessibilityElementsHidden\n />\n );\n};\n\nSpacer.displayName = 'Spacer';\n","/**\n * ConditionalWrapper Atom Component\n *\n * A wrapper component that conditionally renders its children based on\n * condition evaluation. Used for dynamic field visibility in forms.\n * \n * Note: S-expression evaluation requires @almadar/evaluator to be installed.\n * For now, this uses a simplified condition evaluator.\n */\n\nimport React from 'react';\nimport { Animated, ViewStyle } from 'react-native';\n\nexport interface ConditionalContext {\n formValues: Record<string, unknown>;\n globalVariables: Record<string, unknown>;\n localVariables?: Record<string, unknown>;\n entity?: Record<string, unknown>;\n}\n\nexport type Condition = \n | boolean \n | string \n | [string, string, unknown] // [operator, field, value]\n | ((context: ConditionalContext) => boolean);\n\nexport interface ConditionalWrapperProps {\n /** The condition to evaluate (boolean, expression tuple, or function) */\n condition?: Condition;\n /** Context for evaluating the condition */\n context?: ConditionalContext;\n /** Children to render when condition is true */\n children: React.ReactNode;\n /** Optional fallback to render when condition is false */\n fallback?: React.ReactNode;\n /** Whether to animate the transition */\n animate?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/**\n * Simple condition evaluator\n * Supports: boolean, comparison tuples like [\"=\", \"fieldName\", \"value\"], or functions\n */\nfunction evaluateCondition(\n condition: Condition, \n context: ConditionalContext = { formValues: {}, globalVariables: {} }\n): boolean {\n // Boolean condition\n if (typeof condition === 'boolean') {\n return condition;\n }\n\n // Function condition\n if (typeof condition === 'function') {\n return condition(context);\n }\n\n // Expression tuple: [operator, field, value]\n if (Array.isArray(condition) && condition.length === 3) {\n const [operator, fieldPath, expectedValue] = condition;\n \n // Parse field path (e.g., \"formValues.myField\" or \"globalVariables.HG_VAR\")\n const parts = String(fieldPath).split('.');\n let actualValue: unknown;\n \n if (parts[0] === 'formValues' && parts[1]) {\n actualValue = context.formValues?.[parts[1]];\n } else if (parts[0] === 'globalVariables' && parts[1]) {\n actualValue = context.globalVariables?.[parts[1]];\n } else if (parts[0] === 'localVariables' && parts[1]) {\n actualValue = context.localVariables?.[parts[1]];\n } else if (parts[0] && context.entity?.[parts[0]]) {\n actualValue = context.entity[parts[0]];\n }\n\n switch (operator) {\n case '=':\n case '==':\n return actualValue === expectedValue;\n case '!=':\n return actualValue !== expectedValue;\n case '>':\n return Number(actualValue) > Number(expectedValue);\n case '>=':\n return Number(actualValue) >= Number(expectedValue);\n case '<':\n return Number(actualValue) < Number(expectedValue);\n case '<=':\n return Number(actualValue) <= Number(expectedValue);\n case 'includes':\n return Array.isArray(actualValue) && actualValue.includes(expectedValue);\n default:\n return false;\n }\n }\n\n // String truthiness\n return Boolean(condition);\n}\n\nexport const ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({\n condition,\n context = { formValues: {}, globalVariables: {} },\n children,\n fallback = null,\n animate = false,\n style,\n}) => {\n const [isVisible, setIsVisible] = React.useState(!condition ? true : false);\n const fadeAnim = React.useRef(new Animated.Value(!condition ? 1 : 0)).current;\n\n React.useEffect(() => {\n if (!condition) {\n setIsVisible(true);\n return;\n }\n\n const visible = evaluateCondition(condition, context);\n \n setIsVisible(visible);\n\n if (animate) {\n Animated.timing(fadeAnim, {\n toValue: visible ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(visible ? 1 : 0);\n }\n }, [condition, context, animate, fadeAnim]);\n\n if (!condition) {\n return <>{children}</>;\n }\n\n if (animate) {\n return (\n <Animated.View\n style={[\n { opacity: fadeAnim, overflow: 'hidden' },\n ...(style ? [style] : []),\n ]}\n >\n {isVisible ? children : fallback}\n </Animated.View>\n );\n }\n\n return isVisible ? <>{children}</> : <>{fallback}</>;\n};\n\nConditionalWrapper.displayName = 'ConditionalWrapper';\n","import React, { useEffect, useRef } from 'react';\nimport { View, Animated, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from './Typography';\nimport { HStack } from './Stack';\n\nexport type StatusDotStatus = 'online' | 'offline' | 'busy' | 'away' | 'error';\nexport type StatusDotSize = 'sm' | 'md' | 'lg';\n\nexport interface StatusDotProps {\n status?: StatusDotStatus;\n pulse?: boolean;\n size?: StatusDotSize;\n label?: string;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeMap: Record<StatusDotSize, number> = {\n sm: 8,\n md: 12,\n lg: 16,\n};\n\nexport const StatusDot: React.FC<StatusDotProps> = ({\n status = 'offline',\n pulse = false,\n size = 'md',\n label,\n style,\n}) => {\n const theme = useTheme();\n const pulseAnim = useRef(new Animated.Value(1)).current;\n\n const statusColors: Record<StatusDotStatus, string> = {\n online: theme.colors.success,\n offline: theme.colors['muted-foreground'],\n busy: theme.colors.error,\n away: theme.colors.warning,\n error: theme.colors.error,\n };\n\n useEffect(() => {\n if (pulse && (status === 'online' || status === 'busy')) {\n const animation = Animated.loop(\n Animated.sequence([\n Animated.timing(pulseAnim, {\n toValue: 0.3,\n duration: 1000,\n useNativeDriver: true,\n }),\n Animated.timing(pulseAnim, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: true,\n }),\n ])\n );\n animation.start();\n return () => animation.stop();\n } else {\n pulseAnim.setValue(1);\n }\n }, [pulse, status, pulseAnim]);\n\n const dotSize = sizeMap[size];\n const color = statusColors[status];\n\n const dot = (\n <View style={[styles.wrapper, style]}>\n <Animated.View\n style={[\n styles.dot,\n {\n width: dotSize,\n height: dotSize,\n borderRadius: dotSize / 2,\n backgroundColor: color,\n opacity: pulseAnim,\n },\n ]}\n />\n </View>\n );\n\n if (label) {\n return (\n <HStack spacing={theme.spacing[2]} align=\"center\" style={style}>\n {dot}\n <Typography variant=\"caption\" style={{ color: theme.colors.foreground }}>\n {label}\n </Typography>\n </HStack>\n );\n }\n\n return dot;\n};\n\nconst styles = StyleSheet.create({\n wrapper: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n dot: {},\n});\n\nStatusDot.displayName = 'StatusDot';\n","import React from 'react';\nimport { StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from './Typography';\nimport { Icon } from './Icon';\nimport { HStack } from './Stack';\n\nexport type TrendDirection = 'up' | 'down' | 'neutral';\nexport type TrendSize = 'sm' | 'md' | 'lg';\n\nexport interface TrendIndicatorProps {\n value?: number;\n direction?: TrendDirection;\n showValue?: boolean;\n size?: TrendSize;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeConfig: Record<TrendSize, { icon: number; font: 'xs' | 'sm' | 'base' }> = {\n sm: { icon: 14, font: 'xs' },\n md: { icon: 18, font: 'sm' },\n lg: { icon: 22, font: 'base' },\n};\n\nexport const TrendIndicator: React.FC<TrendIndicatorProps> = ({\n value,\n direction = 'neutral',\n showValue = true,\n size = 'md',\n style,\n}) => {\n const theme = useTheme();\n const config = sizeConfig[size];\n\n const directionColors: Record<TrendDirection, string> = {\n up: theme.colors.success,\n down: theme.colors.error,\n neutral: theme.colors['muted-foreground'],\n };\n\n const color = directionColors[direction];\n const iconName = direction === 'up' ? 'chevron-up' : direction === 'down' ? 'chevron-down' : 'minus';\n\n return (\n <HStack spacing={4} align=\"center\" style={style}>\n <Icon name={iconName} size={config.icon} color={color} />\n {showValue && value !== undefined && (\n <Typography\n variant=\"body\"\n style={[\n styles.value,\n { color, fontSize: theme.typography.sizes[config.font] },\n ]}\n >\n {Math.abs(value)}%\n </Typography>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n value: {\n fontWeight: '500',\n },\n});\n\nTrendIndicator.displayName = 'TrendIndicator';\n","import React from 'react';\nimport { Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from './Typography';\n\nexport type HighlightType = 'mark' | 'code' | 'emphasis' | 'custom';\n\nexport interface TextHighlightProps {\n children: React.ReactNode;\n highlightType?: HighlightType;\n isActive?: boolean;\n action?: string;\n actionPayload?: Record<string, unknown>;\n color?: string;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const TextHighlight: React.FC<TextHighlightProps> = ({\n children,\n highlightType = 'mark',\n isActive = true,\n action,\n actionPayload,\n color,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, actionPayload);\n }\n };\n\n const highlightColors: Record<HighlightType, { bg: string; fg: string }> = {\n mark: { bg: theme.colors.warning + '40', fg: theme.colors.foreground },\n code: { bg: theme.colors.muted, fg: theme.colors.foreground },\n emphasis: { bg: theme.colors.primary + '20', fg: theme.colors.primary },\n custom: { bg: (color || theme.colors.accent) + '30', fg: theme.colors.foreground },\n };\n\n const { bg, fg } = highlightColors[highlightType];\n\n const content = (\n <Typography\n variant=\"body\"\n style={[\n styles.text,\n isActive && {\n backgroundColor: bg,\n color: fg,\n },\n highlightType === 'code' && {\n fontFamily: 'monospace',\n fontSize: theme.typography.sizes.sm,\n },\n style,\n ]}\n >\n {children}\n </Typography>\n );\n\n if (action) {\n return (\n <Pressable onPress={handlePress} style={styles.pressable}>\n {content}\n </Pressable>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n text: {\n paddingHorizontal: 4,\n paddingVertical: 1,\n borderRadius: 4,\n },\n pressable: {\n alignSelf: 'flex-start',\n },\n});\n\nTextHighlight.displayName = 'TextHighlight';\n","import React, { useEffect, useRef } from 'react';\nimport { Animated, StyleSheet, ViewStyle, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface AnimatedCounterProps {\n value: number;\n duration?: number;\n prefix?: string;\n suffix?: string;\n style?: ViewStyle;\n textStyle?: TextStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const AnimatedCounter: React.FC<AnimatedCounterProps> = ({\n value,\n duration = 800,\n prefix = '',\n suffix = '',\n style,\n textStyle,\n}) => {\n const theme = useTheme();\n const animatedValue = useRef(new Animated.Value(0)).current;\n const displayRef = useRef(0);\n const [displayValue, setDisplayValue] = React.useState(0);\n\n useEffect(() => {\n animatedValue.setValue(displayRef.current);\n\n Animated.timing(animatedValue, {\n toValue: value,\n duration,\n useNativeDriver: false,\n }).start();\n\n const listener = animatedValue.addListener(({ value: v }) => {\n const rounded = Math.round(v);\n if (rounded !== displayRef.current) {\n displayRef.current = rounded;\n setDisplayValue(rounded);\n }\n });\n\n return () => {\n animatedValue.removeListener(listener);\n };\n }, [value, duration, animatedValue]);\n\n return (\n <Animated.View style={[styles.container, style]}>\n <Animated.Text\n style={[\n styles.text,\n {\n color: theme.colors.foreground,\n fontSize: theme.typography.sizes['2xl'],\n fontWeight: theme.typography.fontWeight.bold as '600',\n },\n textStyle,\n ]}\n >\n {prefix}{displayValue}{suffix}\n </Animated.Text>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n textAlign: 'center',\n },\n});\n\nAnimatedCounter.displayName = 'AnimatedCounter';\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Animated, StyleSheet, ViewStyle, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { HStack } from './Stack';\n\nexport interface TypewriterTextProps {\n text: string;\n speed?: number;\n startDelay?: number;\n onComplete?: () => void;\n showCursor?: boolean;\n style?: ViewStyle;\n textStyle?: TextStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const TypewriterText: React.FC<TypewriterTextProps> = ({\n text,\n speed = 50,\n startDelay = 0,\n onComplete,\n showCursor = true,\n style,\n textStyle,\n}) => {\n const theme = useTheme();\n const [displayedText, setDisplayedText] = useState('');\n const [isComplete, setIsComplete] = useState(false);\n const cursorOpacity = useRef(new Animated.Value(1)).current;\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setDisplayedText('');\n setIsComplete(false);\n let charIndex = 0;\n\n timeoutRef.current = setTimeout(() => {\n intervalRef.current = setInterval(() => {\n if (charIndex < text.length) {\n setDisplayedText(text.slice(0, charIndex + 1));\n charIndex++;\n } else {\n if (intervalRef.current) clearInterval(intervalRef.current);\n setIsComplete(true);\n onComplete?.();\n }\n }, speed);\n }, startDelay);\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [text, speed, startDelay, onComplete]);\n\n useEffect(() => {\n if (showCursor && !isComplete) {\n const blink = Animated.loop(\n Animated.sequence([\n Animated.timing(cursorOpacity, {\n toValue: 0,\n duration: 500,\n useNativeDriver: true,\n }),\n Animated.timing(cursorOpacity, {\n toValue: 1,\n duration: 500,\n useNativeDriver: true,\n }),\n ])\n );\n blink.start();\n return () => blink.stop();\n }\n }, [showCursor, isComplete, cursorOpacity]);\n\n return (\n <HStack spacing={0} align=\"flex-end\" style={style}>\n <Animated.Text\n style={[\n styles.text,\n {\n color: theme.colors.foreground,\n fontSize: theme.typography.sizes.base,\n },\n textStyle,\n ]}\n >\n {displayedText}\n </Animated.Text>\n {showCursor && !isComplete && (\n <Animated.Text\n style={[\n styles.cursor,\n {\n color: theme.colors.primary,\n fontSize: theme.typography.sizes.base,\n opacity: cursorOpacity,\n },\n ]}\n >\n |\n </Animated.Text>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n text: {\n fontWeight: '400',\n },\n cursor: {\n fontWeight: '300',\n marginLeft: 1,\n },\n});\n\nTypewriterText.displayName = 'TypewriterText';\n","import React from 'react';\nimport { Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useThemeMode } from '../../providers/ThemeProvider';\nimport { Typography } from './Typography';\nimport { Icon } from './Icon';\nimport { HStack } from './Stack';\n\nexport type ThemeToggleSize = 'sm' | 'md' | 'lg';\n\nexport interface ThemeToggleProps {\n size?: ThemeToggleSize;\n showLabel?: boolean;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeConfig: Record<ThemeToggleSize, { icon: number; padding: number }> = {\n sm: { icon: 18, padding: 6 },\n md: { icon: 24, padding: 10 },\n lg: { icon: 30, padding: 14 },\n};\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({\n size = 'md',\n showLabel = false,\n style,\n}) => {\n const theme = useTheme();\n const { resolvedMode, toggleMode } = useThemeMode();\n const config = sizeConfig[size];\n\n const isDark = resolvedMode === 'dark';\n const iconText = isDark ? '☀' : '☾';\n const label = isDark ? 'Light mode' : 'Dark mode';\n\n return (\n <Pressable\n onPress={toggleMode}\n style={[\n styles.container,\n {\n padding: config.padding,\n borderRadius: theme.borderRadius.full,\n backgroundColor: theme.colors.secondary,\n },\n style,\n ]}\n >\n <HStack spacing={theme.spacing[2]} align=\"center\">\n <Icon name={isDark ? 'check' : 'settings'} size={config.icon} color={theme.colors.foreground} />\n <Typography variant=\"body\" style={{ color: theme.colors.foreground, fontSize: config.icon * 0.7 }}>\n {iconText}\n </Typography>\n {showLabel && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {label}\n </Typography>\n )}\n </HStack>\n </Pressable>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignSelf: 'flex-start',\n },\n});\n\nThemeToggle.displayName = 'ThemeToggle';\n","import React, { useRef, useState } from 'react';\nimport { View, PanResponder, StyleSheet, ViewStyle, LayoutChangeEvent } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from './Typography';\nimport { HStack } from './Stack';\nimport { VStack } from './Stack';\n\nexport interface RangeSliderProps {\n min?: number;\n max?: number;\n value?: number;\n step?: number;\n action?: string;\n actionPayload?: Record<string, unknown>;\n onChange?: (value: number) => void;\n showValue?: boolean;\n label?: string;\n disabled?: boolean;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst THUMB_SIZE = 24;\nconst TRACK_HEIGHT = 4;\n\nexport const RangeSlider: React.FC<RangeSliderProps> = ({\n min = 0,\n max = 100,\n value: controlledValue,\n step = 1,\n action,\n actionPayload,\n onChange,\n showValue = false,\n label,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalValue, setInternalValue] = useState(controlledValue ?? min);\n const trackWidth = useRef(0);\n const currentValue = controlledValue ?? internalValue;\n\n const clamp = (v: number) => {\n const stepped = Math.round((v - min) / step) * step + min;\n return Math.max(min, Math.min(max, stepped));\n };\n\n const getFraction = () => (currentValue - min) / (max - min);\n\n const emitValue = (v: number) => {\n const clamped = clamp(v);\n setInternalValue(clamped);\n onChange?.(clamped);\n if (action) {\n eventBus.emit(`UI:${action}`, { ...actionPayload, value: clamped });\n }\n };\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabled,\n onMoveShouldSetPanResponder: () => !disabled,\n onPanResponderGrant: (_, gestureState) => {\n const fraction = Math.max(0, Math.min(1, gestureState.x0 / (trackWidth.current || 1)));\n emitValue(fraction * (max - min) + min);\n },\n onPanResponderMove: (_, gestureState) => {\n const startFraction = getFraction();\n const deltaFraction = gestureState.dx / (trackWidth.current || 1);\n const newValue = (startFraction + deltaFraction) * (max - min) + min;\n emitValue(newValue);\n },\n })\n ).current;\n\n const handleLayout = (e: LayoutChangeEvent) => {\n trackWidth.current = e.nativeEvent.layout.width;\n };\n\n const fraction = getFraction();\n\n const content = (\n <View\n style={[styles.trackContainer, disabled && { opacity: 0.5 }, style]}\n onLayout={handleLayout}\n {...panResponder.panHandlers}\n >\n <View\n style={[\n styles.track,\n { backgroundColor: theme.colors.border },\n ]}\n />\n <View\n style={[\n styles.trackFill,\n {\n backgroundColor: theme.colors.primary,\n width: `${fraction * 100}%` as unknown as number,\n },\n ]}\n />\n <View\n style={[\n styles.thumb,\n {\n backgroundColor: theme.colors.primary,\n borderColor: theme.colors.card,\n left: `${fraction * 100}%` as unknown as number,\n marginLeft: -THUMB_SIZE / 2,\n ...theme.shadows.sm,\n },\n ]}\n />\n </View>\n );\n\n if (label || showValue) {\n return (\n <VStack spacing={theme.spacing[2]} style={style}>\n {(label || showValue) && (\n <HStack spacing={0} align=\"center\" style={styles.header}>\n {label && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'], flex: 1 }}>\n {label}\n </Typography>\n )}\n {showValue && (\n <Typography variant=\"body\" style={{ color: theme.colors.foreground, fontWeight: '500' }}>\n {currentValue}\n </Typography>\n )}\n </HStack>\n )}\n {content}\n </VStack>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n trackContainer: {\n height: THUMB_SIZE + 8,\n justifyContent: 'center',\n paddingHorizontal: THUMB_SIZE / 2,\n },\n track: {\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n position: 'absolute',\n left: THUMB_SIZE / 2,\n right: THUMB_SIZE / 2,\n },\n trackFill: {\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n position: 'absolute',\n left: THUMB_SIZE / 2,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n borderWidth: 3,\n position: 'absolute',\n },\n header: {\n justifyContent: 'space-between',\n },\n});\n\nRangeSlider.displayName = 'RangeSlider';\n","import React, { useMemo } from 'react';\nimport { \n View, \n Image, \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n ImageSourcePropType \n} from 'react-native';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface SpriteProps {\n /** Spritesheet image URL or require */\n spritesheet: ImageSourcePropType;\n /** Width of each frame in pixels */\n frameWidth: number;\n /** Height of each frame in pixels */\n frameHeight: number;\n /** Frame index to display (0-based, left-to-right, top-to-bottom) */\n frame: number;\n /** X position in pixels */\n x: number;\n /** Y position in pixels */\n y: number;\n /** Scale factor (default: 1) */\n scale?: number;\n /** Flip horizontally */\n flipX?: boolean;\n /** Flip vertically */\n flipY?: boolean;\n /** Rotation in degrees */\n rotation?: number;\n /** Opacity (0-1) */\n opacity?: number;\n /** Z-index for layering */\n zIndex?: number;\n /** Number of columns in spritesheet (for frame calculation) */\n columns?: number;\n /** Optional style */\n style?: ViewStyle;\n /** Optional onPress handler */\n onPress?: () => void;\n /** Declarative event name emitted on press via useEventBus */\n action?: string;\n}\n\n/**\n * Sprite component for rendering spritesheet frames\n */\nexport const Sprite: React.FC<SpriteProps> = ({\n spritesheet,\n frameWidth,\n frameHeight,\n frame,\n x,\n y,\n scale = 1,\n flipX = false,\n flipY = false,\n rotation = 0,\n opacity = 1,\n zIndex = 0,\n columns = 16,\n style,\n onPress,\n action,\n}) => {\n const eventBus = useEventBus();\n\n // Calculate source position in spritesheet\n const sourcePosition = useMemo(() => {\n const frameX = frame % columns;\n const frameY = Math.floor(frame / columns);\n return {\n x: frameX * frameWidth,\n y: frameY * frameHeight,\n };\n }, [frame, columns, frameWidth, frameHeight]);\n\n const handlePress = () => {\n if (action) eventBus.emit(`UI:${action}`, {});\n onPress?.();\n };\n\n const transform = [\n { translateX: x },\n { translateY: y },\n { scale: scale },\n { rotate: `${rotation}deg` },\n { scaleX: flipX ? -1 : 1 },\n { scaleY: flipY ? -1 : 1 },\n ];\n\n const Container = (action || onPress) ? TouchableOpacity : View;\n\n return (\n <Container\n onPress={(action || onPress) ? handlePress : undefined}\n style={[\n styles.container,\n {\n width: frameWidth,\n height: frameHeight,\n transform,\n opacity,\n zIndex,\n },\n style as never,\n ]}\n >\n <View\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n position: 'absolute',\n left: -sourcePosition.x,\n top: -sourcePosition.y,\n overflow: 'hidden',\n }}\n >\n <Image\n source={spritesheet}\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n resizeMode: 'stretch',\n }}\n />\n </View>\n </Container>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n overflow: 'hidden',\n },\n});\n\nSprite.displayName = 'Sprite';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nexport interface StateStyle {\n icon: string;\n backgroundColor: string;\n}\n\nexport interface StateIndicatorProps {\n /** The current state name */\n state: string;\n /** Optional label override (defaults to capitalized state name) */\n label?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show pulse animation on non-idle states */\n animated?: boolean;\n /** Custom state styles to extend/override defaults */\n stateStyles?: Record<string, StateStyle>;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst DEFAULT_STATE_STYLES: Record<string, StateStyle> = {\n idle: { icon: '⏸', backgroundColor: '#6b7280' },\n active: { icon: '▶', backgroundColor: '#22c55e' },\n sleeping: { icon: '💤', backgroundColor: '#6b7280' },\n moving: { icon: '🚶', backgroundColor: '#3b82f6' },\n eating: { icon: '🍽', backgroundColor: '#22c55e' },\n waiting: { icon: '⏳', backgroundColor: '#eab308' },\n happy: { icon: '😊', backgroundColor: '#22c55e' },\n scared: { icon: '😨', backgroundColor: '#ef4444' },\n done: { icon: '✓', backgroundColor: '#22c55e' },\n error: { icon: '✗', backgroundColor: '#ef4444' },\n ready: { icon: '✓', backgroundColor: '#22c55e' },\n cooldown: { icon: '🔄', backgroundColor: '#eab308' },\n};\n\nconst DEFAULT_STYLE: StateStyle = { icon: '?', backgroundColor: '#6b7280' };\n\nconst SIZE_STYLES: Record<string, { padding: number; fontSize: number }> = {\n sm: { padding: 4, fontSize: 10 },\n md: { padding: 8, fontSize: 12 },\n lg: { padding: 12, fontSize: 14 },\n};\n\nexport const StateIndicator: React.FC<StateIndicatorProps> = ({\n state,\n label,\n size = 'md',\n animated = true,\n stateStyles,\n style,\n}) => {\n const theme = useTheme();\n const mergedStyles = stateStyles\n ? { ...DEFAULT_STATE_STYLES, ...stateStyles }\n : DEFAULT_STATE_STYLES;\n const config = mergedStyles[state.toLowerCase()] || DEFAULT_STYLE;\n const displayLabel = label || state.charAt(0).toUpperCase() + state.slice(1);\n const sizeStyles = SIZE_STYLES[size];\n const shouldAnimate = animated && \n state.toLowerCase() !== 'idle' && \n state.toLowerCase() !== 'done';\n\n return (\n <View\n style={[\n styles.container,\n {\n backgroundColor: config.backgroundColor,\n paddingHorizontal: sizeStyles.padding,\n paddingVertical: sizeStyles.padding * 0.5,\n opacity: shouldAnimate ? 0.8 : 1,\n },\n style as never,\n ]}\n >\n <Text style={{ fontSize: sizeStyles.fontSize, marginRight: 4 }}>\n {config.icon}\n </Text>\n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['primary-foreground'],\n fontWeight: '500',\n }}\n >\n {displayLabel}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 9999,\n },\n});\n\nStateIndicator.displayName = 'StateIndicator';\n"],"mappings":"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","names":["React","View","StyleSheet","React","View","styles","StyleSheet","React","TouchableOpacity","View","StyleSheet","React","width","View","styles","TouchableOpacity","StyleSheet","React","StyleSheet","View","React","View","styles","StyleSheet","React","View","Text","StyleSheet","sizeMap","React","View","styles","Text","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","React","Animated","React","View","Animated","StyleSheet","Animated","React","View","styles","StyleSheet","React","StyleSheet","React","styles","StyleSheet","React","StyleSheet","React","styles","StyleSheet","React","useEffect","useRef","Animated","StyleSheet","useRef","Animated","React","useEffect","styles","StyleSheet","React","useEffect","useRef","Animated","StyleSheet","useRef","Animated","useEffect","React","styles","StyleSheet","React","Pressable","StyleSheet","sizeConfig","React","Pressable","styles","StyleSheet","React","useRef","useState","View","StyleSheet","useState","useRef","fraction","React","View","styles","StyleSheet","React","View","Image","TouchableOpacity","StyleSheet","TouchableOpacity","View","React","styles","Image","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useTraitState.ts","../src/hooks/useUIEvents.ts","../src/hooks/useNavigation.ts","../src/hooks/useKeyboard.ts","../src/hooks/useThemeStyles.ts","../src/hooks/useScrollHeader.ts","../src/hooks/useSafeAreaInsets.ts","../src/hooks/usePullToRefresh.ts","../src/hooks/useInfiniteScroll.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport interface TraitState {\n [key: string]: unknown;\n}\n\nexport interface UseTraitStateReturn<T extends TraitState> {\n state: T;\n setState: (updates: Partial<T>) => void;\n getValue: <K extends keyof T>(key: K) => T[K];\n setValue: <K extends keyof T>(key: K, value: T[K]) => void;\n}\n\nexport function useTraitState<T extends TraitState>(initialState: T): UseTraitStateReturn<T> {\n const [state, setStateRaw] = useState<T>(initialState);\n\n const setState = useCallback((updates: Partial<T>) => {\n setStateRaw(prev => ({ ...prev, ...updates }));\n }, []);\n\n const getValue = useCallback(<K extends keyof T>(key: K): T[K] => {\n return state[key];\n }, [state]);\n\n const setValue = useCallback(<K extends keyof T>(key: K, value: T[K]) => {\n setStateRaw(prev => ({ ...prev, [key]: value }));\n }, []);\n\n return {\n state,\n setState,\n getValue,\n setValue,\n };\n}\n","// Re-export from @almadar/ui - no code duplication\nexport { useUIEvents } from '@almadar/ui/hooks';\n","import { useCallback } from 'react';\nimport { useNavigation as useRNNavigation, useRoute } from '@react-navigation/native';\nimport type { NavigationProp, RouteProp, ParamListBase } from '@react-navigation/native';\n\nexport interface NavigationOptions {\n replace?: boolean;\n reset?: boolean;\n}\n\n/**\n * Hook for navigation in React Native apps.\n * \n * This hook wraps React Navigation's useNavigation and useRoute\n * with a simpler API for common navigation patterns.\n * \n * @example\n * // With typed navigation (recommended)\n * type RootStackParamList = {\n * Home: undefined;\n * Profile: { userId: string };\n * };\n * const navigation = useNavigation<RootStackParamList>();\n * \n * // Navigate to a screen\n * navigation.navigateTo('Profile', { userId: '123' });\n * \n * // Get a route param\n * const userId = navigation.getParam<string>('userId');\n */\nexport function useNavigation<T extends ParamListBase = ParamListBase>() {\n // Cast to NavigationProp<T> for generic type support\n // The actual React Navigation hook returns more specific types based on context\n const navigation = useRNNavigation<NavigationProp<T>>();\n const route = useRoute<RouteProp<T, keyof T>>();\n\n const navigateTo = useCallback(<K extends keyof T>(\n screenName: K,\n params?: T[K],\n options?: NavigationOptions\n ): void => {\n const screen = String(screenName);\n \n if (options?.replace) {\n // Stack navigator specific - cast for compatibility\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (navigation as any).replace(screen, params);\n } else if (options?.reset) {\n navigation.reset({\n index: 0,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routes: [{ name: screen, params } as any],\n });\n } else {\n // Use navigation.navigate with proper typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (navigation.navigate as any)(screen, params);\n }\n }, [navigation]);\n\n const goBack = useCallback((): void => {\n navigation.goBack();\n }, [navigation]);\n\n const getParam = useCallback(<V,>(key: string, defaultValue?: V): V | undefined => {\n // Route params come as unknown from React Navigation\n // Cast to Record for safe property access\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const params = route.params as Record<string, any> | undefined;\n return params?.[key] ?? defaultValue;\n }, [route.params]);\n\n return {\n navigateTo,\n goBack,\n getParam,\n currentRoute: String(route.name),\n // Route params come as unknown from React Navigation\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params: route.params as Record<string, any> | undefined,\n };\n}\n\n/**\n * Hook to access route params directly with type safety.\n * \n * @example\n * type ProfileParams = { userId: string; name?: string };\n * const { userId, name } = useParams<ProfileParams>();\n */\nexport function useParams<T extends Record<string, unknown>>(): T {\n const route = useRoute();\n // Route params from React Navigation are typed as object | undefined\n // Cast to consumer's expected type for type safety\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (route.params as any) || ({} as T);\n}\n","import { useEffect, useState, useCallback } from 'react';\nimport { Keyboard, KeyboardEvent, Platform } from 'react-native';\n\nexport interface KeyboardState {\n isVisible: boolean;\n height: number;\n}\n\nexport function useKeyboard() {\n const [keyboardState, setKeyboardState] = useState<KeyboardState>({\n isVisible: false,\n height: 0,\n });\n\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const onKeyboardShow = (event: KeyboardEvent) => {\n setKeyboardState({\n isVisible: true,\n height: event.endCoordinates.height,\n });\n };\n\n const onKeyboardHide = () => {\n setKeyboardState({\n isVisible: false,\n height: 0,\n });\n };\n\n const showSubscription = Keyboard.addListener(showEvent, onKeyboardShow);\n const hideSubscription = Keyboard.addListener(hideEvent, onKeyboardHide);\n\n return () => {\n showSubscription.remove();\n hideSubscription.remove();\n };\n }, []);\n\n const dismissKeyboard = useCallback(() => {\n Keyboard.dismiss();\n }, []);\n\n return {\n ...keyboardState,\n dismissKeyboard,\n };\n}\n\nexport function useKeyboardHeight() {\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const onKeyboardShow = (event: KeyboardEvent) => {\n setKeyboardHeight(event.endCoordinates.height);\n };\n\n const onKeyboardHide = () => {\n setKeyboardHeight(0);\n };\n\n const showSubscription = Keyboard.addListener(showEvent, onKeyboardShow);\n const hideSubscription = Keyboard.addListener(hideEvent, onKeyboardHide);\n\n return () => {\n showSubscription.remove();\n hideSubscription.remove();\n };\n }, []);\n\n return keyboardHeight;\n}\n","import { useMemo } from 'react';\nimport { StyleSheet, ViewStyle, TextStyle, ImageStyle } from 'react-native';\nimport { useTheme } from '../providers/ThemeContext';\n\n/**\n * Hook for creating theme-aware styles\n * \n * @example\n * const styles = useThemeStyles((theme) => ({\n * container: {\n * backgroundColor: theme.colors.background,\n * padding: theme.spacing[4],\n * },\n * text: {\n * color: theme.colors.foreground,\n * fontSize: theme.typography.sizes.base,\n * },\n * }));\n */\nexport function useThemeStyles<T extends Record<string, ViewStyle | TextStyle | ImageStyle>>(\n styleCreator: (theme: ReturnType<typeof useTheme>) => T\n): T {\n const theme = useTheme();\n \n return useMemo(() => {\n const styles = styleCreator(theme);\n return StyleSheet.create(styles) as T;\n }, [theme, styleCreator]);\n}\n\n/**\n * Get a single theme value\n * \n * @example\n * const bgColor = useThemeValue((t) => t.colors.background);\n */\nexport function useThemeValue<T>(selector: (theme: ReturnType<typeof useTheme>) => T): T {\n const theme = useTheme();\n return useMemo(() => selector(theme), [theme, selector]);\n}\n","import { useState, useCallback } from 'react';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport interface UseScrollHeaderOptions {\n threshold?: number;\n}\n\nexport interface UseScrollHeaderReturn {\n isCollapsed: boolean;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n}\n\n/**\n * Hook for creating collapsible header behavior on scroll.\n * \n * @example\n * ```tsx\n * const { isCollapsed, onScroll } = useScrollHeader({ threshold: 50 });\n * \n * return (\n * <>\n * <Header \n * title=\"My Page\" \n * style={{ \n * height: isCollapsed ? 40 : 56,\n * opacity: isCollapsed ? 0.9 : 1\n * }} \n * />\n * <ScrollView onScroll={onScroll} scrollEventThrottle={16}>\n * {content}\n * </ScrollView>\n * </>\n * );\n * ```\n */\nexport function useScrollHeader(\n options: UseScrollHeaderOptions = {}\n): UseScrollHeaderReturn {\n const { threshold = 50 } = options;\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offsetY = event.nativeEvent.contentOffset.y;\n const shouldCollapse = offsetY > threshold;\n \n if (shouldCollapse !== isCollapsed) {\n setIsCollapsed(shouldCollapse);\n }\n },\n [threshold, isCollapsed]\n );\n\n return { isCollapsed, onScroll };\n}\n","import { useState, useEffect } from 'react';\nimport { Dimensions, ScaledSize } from 'react-native';\n\nexport interface SafeAreaInsets {\n top: number;\n bottom: number;\n left: number;\n right: number;\n}\n\n/**\n * Hook to get safe area insets for handling notched devices.\n * Uses screen dimensions to estimate safe areas.\n * \n * Note: For production apps, consider using react-native-safe-area-context\n * which provides the actual safe area insets from the native platform.\n * \n * @example\n * ```tsx\n * const insets = useSafeAreaInsets();\n * \n * return (\n * <View style={{ \n * paddingTop: insets.top,\n * paddingBottom: insets.bottom \n * }}>\n * {children}\n * </View>\n * );\n * ```\n */\nexport function useSafeAreaInsets(): SafeAreaInsets {\n const [screen, setScreen] = useState<ScaledSize>(Dimensions.get('window'));\n\n useEffect(() => {\n const subscription = Dimensions.addEventListener('change', ({ window }) => {\n setScreen(window);\n });\n\n return () => subscription?.remove();\n }, []);\n\n // Estimate safe areas based on common device dimensions\n // iPhone X and later have 44pt top and 34pt bottom safe areas\n // Other devices typically have 20pt top (status bar) and 0 bottom\n const isIPhoneXOrLater = \n screen.height >= 812 || screen.width >= 812;\n\n return {\n top: isIPhoneXOrLater ? 44 : 20,\n bottom: isIPhoneXOrLater ? 34 : 0,\n left: 0,\n right: 0,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { RefreshControlProps } from 'react-native';\n\nexport interface UsePullToRefreshOptions {\n onRefresh: () => Promise<void> | void;\n}\n\nexport interface UsePullToRefreshReturn {\n refreshing: boolean;\n onRefresh: () => void;\n refreshControlProps: Pick<RefreshControlProps, 'refreshing' | 'onRefresh'>;\n}\n\n/**\n * Hook for implementing pull-to-refresh functionality.\n * \n * @example\n * ```tsx\n * const { refreshControlProps } = usePullToRefresh({\n * onRefresh: async () => {\n * await refetchData();\n * }\n * });\n * \n * return (\n * <ScrollView refreshControl={<RefreshControl {...refreshControlProps} />}>\n * {content}\n * </ScrollView>\n * );\n * ```\n */\nexport function usePullToRefresh(\n options: UsePullToRefreshOptions\n): UsePullToRefreshReturn {\n const { onRefresh } = options;\n const [refreshing, setRefreshing] = useState(false);\n\n const handleRefresh = useCallback(async () => {\n setRefreshing(true);\n try {\n await onRefresh();\n } finally {\n setRefreshing(false);\n }\n }, [onRefresh]);\n\n return {\n refreshing,\n onRefresh: handleRefresh,\n refreshControlProps: {\n refreshing,\n onRefresh: handleRefresh,\n },\n };\n}\n","import { useState, useCallback } from 'react';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport interface UseInfiniteScrollOptions {\n onLoadMore: () => Promise<void> | void;\n hasMore: boolean;\n threshold?: number;\n}\n\nexport interface UseInfiniteScrollReturn {\n loadingMore: boolean;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n}\n\n/**\n * Hook for implementing infinite scroll functionality.\n * \n * @example\n * ```tsx\n * const { loadingMore, onScroll } = useInfiniteScroll({\n * onLoadMore: async () => {\n * await loadNextPage();\n * },\n * hasMore: hasNextPage,\n * });\n * \n * return (\n * <ScrollView onScroll={onScroll} scrollEventThrottle={16}>\n * {items.map(renderItem)}\n * {loadingMore && <ActivityIndicator />}\n * </ScrollView>\n * );\n * ```\n */\nexport function useInfiniteScroll(\n options: UseInfiniteScrollOptions\n): UseInfiniteScrollReturn {\n const { onLoadMore, hasMore, threshold = 100 } = options;\n const [loadingMore, setLoadingMore] = useState(false);\n\n const onScroll = useCallback(\n async (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (loadingMore || !hasMore) return;\n\n const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;\n const isCloseToBottom = \n layoutMeasurement.height + contentOffset.y >= \n contentSize.height - threshold;\n\n if (isCloseToBottom) {\n setLoadingMore(true);\n try {\n await onLoadMore();\n } finally {\n setLoadingMore(false);\n }\n }\n },\n [loadingMore, hasMore, threshold, onLoadMore]\n );\n\n return {\n loadingMore,\n onScroll,\n };\n}\n"],"mappings":"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","names":["useCallback","useState","useCallback","useState","useCallback","useState","useEffect","useState","useCallback","useState","useCallback"]}
|