@almadar/mobile 1.1.0 → 1.2.1

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.
Files changed (103) hide show
  1. package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
  2. package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
  3. package/dist/chunk-5U5Z65ZO.js.map +1 -0
  4. package/dist/chunk-A56SRZKI.js +59 -0
  5. package/dist/chunk-A56SRZKI.js.map +1 -0
  6. package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
  7. package/dist/chunk-BFRVXKSP.js.map +1 -0
  8. package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
  9. package/dist/chunk-ETD72PHO.js.map +1 -0
  10. package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
  11. package/dist/chunk-GMR5FKKB.js.map +1 -0
  12. package/dist/chunk-K2JGK2QD.js +17 -0
  13. package/dist/chunk-K2JGK2QD.js.map +1 -0
  14. package/dist/chunk-MLTSQPVN.js +337 -0
  15. package/dist/chunk-MLTSQPVN.js.map +1 -0
  16. package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
  17. package/dist/chunk-PBO6ZN2M.js.map +1 -0
  18. package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
  19. package/dist/chunk-QUFLYKWA.js.map +1 -0
  20. package/dist/chunk-TRYFJDL3.js +7 -0
  21. package/dist/chunk-TRYFJDL3.js.map +1 -0
  22. package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
  23. package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
  24. package/dist/components/atoms/DayCell.d.ts +18 -0
  25. package/dist/components/atoms/DayCell.d.ts.map +1 -0
  26. package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
  27. package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
  28. package/dist/components/atoms/RangeSlider.d.ts +20 -0
  29. package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
  30. package/dist/components/atoms/StatusDot.d.ts +16 -0
  31. package/dist/components/atoms/StatusDot.d.ts.map +1 -0
  32. package/dist/components/atoms/TextHighlight.d.ts +17 -0
  33. package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
  34. package/dist/components/atoms/ThemeToggle.d.ts +13 -0
  35. package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
  36. package/dist/components/atoms/TrendIndicator.d.ts +16 -0
  37. package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
  38. package/dist/components/atoms/TypewriterText.d.ts +16 -0
  39. package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
  40. package/dist/components/atoms/index.d.ts +18 -0
  41. package/dist/components/atoms/index.d.ts.map +1 -1
  42. package/dist/components/atoms/index.js +30 -10
  43. package/dist/components/index.js +59 -18
  44. package/dist/components/molecules/Accordion.d.ts +20 -0
  45. package/dist/components/molecules/Accordion.d.ts.map +1 -0
  46. package/dist/components/molecules/CalendarGrid.d.ts +22 -0
  47. package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
  48. package/dist/components/molecules/Carousel.d.ts +17 -0
  49. package/dist/components/molecules/Carousel.d.ts.map +1 -0
  50. package/dist/components/molecules/DataGrid.d.ts +43 -0
  51. package/dist/components/molecules/DataGrid.d.ts.map +1 -0
  52. package/dist/components/molecules/DataList.d.ts +43 -0
  53. package/dist/components/molecules/DataList.d.ts.map +1 -0
  54. package/dist/components/molecules/FlipCard.d.ts +16 -0
  55. package/dist/components/molecules/FlipCard.d.ts.map +1 -0
  56. package/dist/components/molecules/Lightbox.d.ts +19 -0
  57. package/dist/components/molecules/Lightbox.d.ts.map +1 -0
  58. package/dist/components/molecules/NumberStepper.d.ts +19 -0
  59. package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
  60. package/dist/components/molecules/PullToRefresh.d.ts +14 -0
  61. package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
  62. package/dist/components/molecules/SortableList.d.ts +17 -0
  63. package/dist/components/molecules/SortableList.d.ts.map +1 -0
  64. package/dist/components/molecules/StarRating.d.ts +19 -0
  65. package/dist/components/molecules/StarRating.d.ts.map +1 -0
  66. package/dist/components/molecules/SwipeableRow.d.ts +20 -0
  67. package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
  68. package/dist/components/molecules/index.d.ts +24 -0
  69. package/dist/components/molecules/index.d.ts.map +1 -1
  70. package/dist/components/molecules/index.js +30 -5
  71. package/dist/components/organisms/FormSection.d.ts +7 -0
  72. package/dist/components/organisms/FormSection.d.ts.map +1 -1
  73. package/dist/components/organisms/index.d.ts +0 -4
  74. package/dist/components/organisms/index.d.ts.map +1 -1
  75. package/dist/components/organisms/index.js +4 -8
  76. package/dist/index.js +72 -26
  77. package/dist/index.js.map +1 -1
  78. package/dist/lib/getNestedValue.d.ts +5 -0
  79. package/dist/lib/getNestedValue.d.ts.map +1 -0
  80. package/dist/lib/index.d.ts +1 -0
  81. package/dist/lib/index.d.ts.map +1 -1
  82. package/dist/lib/index.js +6 -2
  83. package/dist/providers/ThemeProvider.d.ts +7 -0
  84. package/dist/providers/ThemeProvider.d.ts.map +1 -1
  85. package/dist/providers/index.d.ts +2 -2
  86. package/dist/providers/index.d.ts.map +1 -1
  87. package/dist/providers/index.js +8 -4
  88. package/package.json +30 -29
  89. package/dist/chunk-6RVITGGH.js +0 -167
  90. package/dist/chunk-6RVITGGH.js.map +0 -1
  91. package/dist/chunk-7C5JCLLY.js.map +0 -1
  92. package/dist/chunk-DMLYJFYQ.js.map +0 -1
  93. package/dist/chunk-DY52O4T3.js.map +0 -1
  94. package/dist/chunk-LFHVNHVA.js.map +0 -1
  95. package/dist/chunk-T77JPOTP.js.map +0 -1
  96. package/dist/chunk-VLUJ7BXN.js +0 -36
  97. package/dist/chunk-VLUJ7BXN.js.map +0 -1
  98. package/dist/chunk-YMJZLYLV.js.map +0 -1
  99. package/dist/components/organisms/EntityCard.d.ts +0 -11
  100. package/dist/components/organisms/EntityCard.d.ts.map +0 -1
  101. package/dist/components/organisms/EntityList.d.ts +0 -17
  102. package/dist/components/organisms/EntityList.d.ts.map +0 -1
  103. /package/dist/{chunk-S2IT7WZT.js.map → chunk-5JVEVV74.js.map} +0 -0
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAsBA,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,QAAM,UAAU,aAAa,aAAa;AAE1C,MAAI,WAAW;AACb,WACE,oCAAC,gBAAa,OAAO,CAAC,OAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACxF,cACC,oCAAC,UAAO,OAAO,aAAa,cAAc,eAAe,GAE3D,oCAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,oCAAC,gBAAa,OAAO,CAAC,OAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACxF,cACC,oCAAC,UAAO,OAAO,aAAa,cAAc,eAAe,GAE3D,oCAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,oCAAC,gBAAa,OAAO,CAAC,OAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACxF,cACC,oCAAC,UAAO,OAAO,aAAa,cAAc,eAAe,GAE3D;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,CAAC,OAAO,SAAS,YAAY;AAAA,MACpC,uBAAuB,aAAa,OAAO,gBAAgB;AAAA;AAAA,IAE1D;AAAA,EACH,CACF;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF,CAAC;AAED,gBAAgB,cAAc;;;AC9F9B,OAAOA,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAyBA,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,aAAa,MAAM;AACvB,QAAI,YAAY;AACd,eAAS,KAAK,MAAM,UAAU,EAAE;AAAA,IAClC;AACA,aAAS;AAAA,EACX;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,eAAA,EAAa,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACzF,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,eAAA,EAAa,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACzF,gBAAAF,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,gBAAAA,OAAA,cAACC,eAAA,EAAa,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACzF,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,SAAS,OAAO,QAAQ,YAAY;AAAA,MAC9C,OAAOE,QAAO;AAAA;AAAA,IAEd,gBAAAF,OAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,uBAAuBD,QAAO;AAAA,QAC9B,2BAA0B;AAAA;AAAA,MAE1B,gBAAAF,OAAA,cAAC,UAAO,SAAS,IAAI,OAAOE,QAAO,WAChC,kBACC,gBAAAF,OAAA,cAAC,oBAAiB,SAAS,YAAY,OAAOE,QAAO,cACnD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,QAAQ,KAAG,aAEjE,CACF,GAGF,gBAAAA,OAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACxB,gBAAAA,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,YAAY,WAAW,SAAS,KACnF,KACH,GACC,YACC,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,GAAG,WAAW,SAAS,KAC9F,QACH,CAEJ,GAEA,gBAAAA,OAAA,cAACI,OAAA,EAAK,OAAOF,QAAO,QACjB,QACH,GAEC,UACC,gBAAAF,OAAA,cAACI,OAAA,EAAK,OAAOF,QAAO,UACjB,MACH,CAEJ;AAAA,IACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAMA,UAASG,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,gBAAgB;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,EACb;AACF,CAAC;AAED,WAAW,cAAc;;;AClJzB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,gBAAAC;AAAA,EACA;AAAA,OACK;AAgCA,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,UAC9D;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,OAAA,cAAC,aAAU,UAAS,iBAAgB;AAAA,MACnC;AAAA,MACD,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,oBAClB,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,mBAAkB,CAC1C;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,UAC9D;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,OAAA,cAAC,aAAU,UAAS,iBAAgB;AAAA,MACnC;AAAA,MACD,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,oBAClB,gBAAAF,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM;AAAA,UACf,SAAS,MAAM,SAAS,KAAK,iBAAiB,CAAC,CAAC;AAAA;AAAA,MAClD,CACF;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,QAC9D;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA,cAAC,aAAU,UAAS,iBAAgB;AAAA,IAGnC,UAAU,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,UAAS,MAAO;AAAA,IAG/C,gBAAAF,OAAA,cAACG,OAAA,EAAK,OAAO,CAACD,QAAO,UAAU,aAAa,KACzC,UAGA,WAAW,OACV,gBAAAF,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,gBAClB,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,OAAO,EAAE,GAAGE,QAAO,KAAK,GAAG,IAAI,MAAM;AAAA;AAAA,IACvC,CACF,CAEJ;AAAA,IAGC,UAAU,gBAAAF,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,UAAS,MAAO;AAAA,EACjD;AAEJ;AAEA,IAAMA,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAAA,EACA,KAAK;AAAA,IACH,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AACF,CAAC;AAED,UAAU,cAAc;;;AC/JxB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAsCA,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,qBAAqB,CAAC,WAAmB;AAC7C,aAAS,KAAK,oBAAoB,EAAE,QAAQ,OAAO,CAAC;AACpD,qBAAiB,MAAM;AAAA,EACzB;AAEA,QAAM,kBAAkB,CAAC,WAAoC;AAC3D,aAAS,KAAK,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AACjD,kBAAc,MAAM;AAAA,EACtB;AAEA,QAAM,mBAAmB,CAAC,WAAuB;AAC/C,QAAI,OAAO,OAAO;AAChB,eAAS,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE,QAAQ,OAAO,CAAC;AAAA,IACxD;AACA,QAAI,OAAO,aAAa;AACtB,eAAS,KAAK,eAAe,EAAE,IAAI,OAAO,YAAY,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,qBAAoB,CAC5C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,SAAS,MAAM,SAAS,KAAK,mBAAmB,EAAE,OAAO,CAAC;AAAA;AAAA,IAC5D,CACF;AAAA,EAEJ;AAEA,QAAM,WAAW,YAAY,SAAS,YAAY,MAAM,SAAS;AAEjE,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,UAAU,GAAG,KAAK,KAElE,SACC,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,UAClB,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,OAAO,KAC7C,KACH,CACF,GAID,YAAY,SAAS,SAAS,KAC7B,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,gBAClB,gBAAAF,OAAA,cAAC,WAAQ,OAAO,UAAU,UAAS,WAAU,aAAW,MAAC,CAC3D,GAIF,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,kBACjB,WACC,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,UAAU;AAAA;AAAA,EACZ,IAEA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAM,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAK,cAAE;AAAA;AAAA,EACnC,CAEJ,GAGA,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,YAClB,gBAAAF,OAAA,cAAC,UAAO,SAAS,GAAG,SAAQ,YAC1B,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,OAAO;AAAA,MACxB,SAAS,MAAM,mBAAmB,QAAQ;AAAA;AAAA,IAC3C;AAAA,EAED,GACA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,OAAO;AAAA,MACxB,SAAS,MAAM,mBAAmB,QAAQ;AAAA;AAAA,IAC3C;AAAA,EAED,GACA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,OAAO;AAAA,MACxB,SAAS,MAAM,gBAAgB,MAAM;AAAA;AAAA,IACtC;AAAA,EAED,CACF,CACF,GAGC,YAAY,eACX,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,eAClB,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA;AAAA,EACZ,CACF,CAEJ;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF,CAAC;AAED,eAAe,cAAc;;;ACpN7B,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,cAAAC;AAAA,OACK;AAuCA,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,kBAAkB,CAAC,WAAmB;AAC1C,aAAS,KAAK,wBAAwB,EAAE,QAAQ,OAAO,CAAC;AACxD,kBAAc,MAAM;AAAA,EACtB;AAEA,QAAM,eAAe,CAAC,WAAmB;AACvC,aAAS,KAAK,oBAAoB,EAAE,QAAQ,OAAO,CAAC;AACpD,qBAAiB,MAAM;AAAA,EACzB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,qBAAoB,CAC5C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,SAAS,MAAM,SAAS,KAAK,mBAAmB,EAAE,OAAO,CAAC;AAAA;AAAA,IAC5D,CACF;AAAA,EAEJ;AAEA,QAAM,WAAW,YAAY,SAAS,YAAY,MAAM,SAAS;AAEjE,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,UAAU,GAAG,KAAK,KAElE,YAAY,SAAS,SAAS,KAC7B,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,gBAClB,gBAAAF,OAAA,cAAC,WAAQ,OAAO,UAAU,UAAS,OAAM,aAAW,MAAC,CACvD,GAGF,gBAAAA,OAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAOD,QAAO;AAAA,MACd,uBAAuBA,QAAO;AAAA,MAC9B,8BAA8B;AAAA;AAAA,IAG7B,SACC,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,UAClB,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,UAAU,KAChD,KACH,CACF;AAAA,IAIF,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,kBACjB,WACC,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,cAAc;AAAA;AAAA,IAChB,IAEA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAM,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAK,WAAE;AAAA;AAAA,IACnC,CAEJ;AAAA,IAGC,WAAW,QAAQ,SAAS,KAC3B,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,oBAClB,gBAAAF,OAAA,cAAC,UAAO,SAAS,GAAG,SAAQ,UAAS,OAAOE,QAAO,WAChD,QAAQ,IAAI,CAAC,QAAQ,UACpB,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,SAAS,OAAO,WAAW;AAAA,QAC3B,QAAQ,OAAO;AAAA,QACf,eAAe,EAAE,OAAO;AAAA,QACxB,SAAS,MAAM,aAAa,OAAO,KAAK;AAAA;AAAA,MAEvC,OAAO;AAAA,IACV,CACD,CACH,CACF;AAAA,EAEJ,CACF;AAEJ;AAEA,IAAME,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,EACZ;AACF,CAAC;AAED,eAAe,cAAc;;;ACzL7B,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA0CA,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,mBAAmB,CAAC,WAAmB;AAC3C,aAAS,KAAK,sBAAsB,EAAE,QAAQ,OAAO,CAAC;AACtD,mBAAe,MAAM;AAAA,EACvB;AAEA,QAAM,kBAAkB,CAAC,QAAgB,iBAA0B;AACjE,aAAS,KAAK,iBAAiB,EAAE,QAAQ,cAAc,OAAO,CAAC;AAC/D,kBAAc,QAAQ,YAAY;AAAA,EACpC;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,wBAAuB,CAC/C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,SAAS,MAAM,SAAS,KAAK,gBAAgB,EAAE,OAAO,CAAC;AAAA;AAAA,IACzD,CACF;AAAA,EAEJ;AAEA,QAAM,WAAW,cAAc,SAAS,cAAc,MAAM,SAAS;AAErE,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,UAAU,GAAG,KAAK,KAElE,YAAY,SAAS,SAAS,KAC7B,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,gBAClB,gBAAAF,OAAA,cAAC,WAAQ,OAAO,UAAU,UAAS,WAAU,aAAW,MAAC,CAC3D,IAIA,SAAS,QACT,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,UACjB,SACC,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,OAAO,KAC7C,KACH,GAED,OACC,gBAAAA,OAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,UAAU,KACrD,GACH,CAEJ,GAIF,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,gBACjB,WACC,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO,cAAc,SAAS;AAAA,MAC9B,KAAK,cAAc,OAAO;AAAA,MAC1B,cAAc;AAAA;AAAA,EAChB,IAEA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAM,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAK,iBAAG;AAAA;AAAA,EACpC,CAEJ,GAGC,qBAAqB,kBAAkB,SAAS,KAC/C,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,oBAClB,gBAAAF,OAAA,cAAC,UAAO,SAAS,GAAG,SAAQ,UAAS,OAAOE,QAAO,WAChD,kBAAkB,IAAI,CAAC,QAAQ,UAC9B,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAS,OAAO,WAAW;AAAA,MAC3B,QAAQ,OAAO;AAAA,MACf,eAAe,EAAE,QAAQ,cAAc,OAAO,aAAa;AAAA,MAC3D,SAAS,MAAM,gBAAgB,OAAO,OAAO,OAAO,YAAY;AAAA;AAAA,IAE/D,OAAO;AAAA,EACV,CACD,CACH,CACF,CAEJ;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,QAAQ;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,EACZ;AACF,CAAC;AAED,iBAAiB,cAAc;;;AC9L/B,OAAOC,UAAS,UAAU,mBAAmB;AAC7C;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAuCA,IAAM,kBAAkD,CAAC;AAAA,EAC9D,eAAe;AAAA,EACf,OAAO;AAAA,EACP,MAAM,OAAO;AAAA,EACb,MAAM,OAAO;AAAA,EACb,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,YAAY;AAEvD,QAAM,kBAAkB,YAAY,MAAM;AACxC,aAAS,CAAC,SAAS;AACjB,YAAM,WAAW,KAAK,IAAI,OAAO,MAAM,GAAG;AAC1C,eAAS,KAAK,wBAAwB,EAAE,OAAO,UAAU,OAAO,CAAC;AACjE,sBAAgB,QAAQ;AACxB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAE/C,QAAM,kBAAkB,YAAY,MAAM;AACxC,aAAS,CAAC,SAAS;AACjB,YAAM,WAAW,KAAK,IAAI,OAAO,MAAM,GAAG;AAC1C,eAAS,KAAK,wBAAwB,EAAE,OAAO,UAAU,OAAO,CAAC;AACjE,sBAAgB,QAAQ;AACxB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAE/C,QAAM,cAAc,YAAY,MAAM;AACpC,aAAS,YAAY;AACrB,aAAS,KAAK,oBAAoB,EAAE,OAAO,cAAc,OAAO,CAAC;AACjE,cAAU;AACV,oBAAgB,YAAY;AAAA,EAC9B,GAAG,CAAC,cAAc,QAAQ,SAAS,eAAe,QAAQ,CAAC;AAE3D,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,sBAAqB,CAC7C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,SAAS,MAAM,SAAS,KAAK,oBAAoB,EAAE,OAAO,CAAC;AAAA;AAAA,IAC7D,CACF;AAAA,EAEJ;AAEA,QAAM,UAAU,SAAS;AACzB,QAAM,UAAU,SAAS;AAEzB,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,iBAAiB,MAAM,OAAO,WAAW,GAAG,KAAK,KACjF,gBAAAF,OAAA,cAAC,QAAK,OAAO,CAACE,QAAO,MAAM,aAAa,CAAC,CAAC,KACxC,gBAAAF,OAAA,cAAC,UAAO,SAAS,IAAI,OAAM,YAEzB,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAM,KAAM,GAGhC,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,gBAClB,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO;AAAA,QACLE,QAAO;AAAA,QACP,EAAE,OAAO,QAAQ,IAAI,MAAM,OAAO,UAAU,QAAQ,IAAI,MAAM,OAAO,QAAQ,MAAM,OAAO,WAAW;AAAA,MACvG;AAAA;AAAA,IAEC;AAAA,EACH,CACF,GAGA,gBAAAF,OAAA,cAAC,UAAO,SAAS,IAAI,OAAM,YACzB,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,QAAQ,KAAK;AAAA,MAC9B,SAAS;AAAA,MACT,UAAU;AAAA;AAAA,IACX;AAAA,IACG;AAAA,EACJ,GAEC,aACC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,OAAO;AAAA,MACxB,SAAS;AAAA,MACT,UAAU,UAAU;AAAA;AAAA,IACrB;AAAA,EAED,GAGF,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,eAAe,EAAE,QAAQ,KAAK;AAAA,MAC9B,SAAS;AAAA,MACT,UAAU;AAAA;AAAA,IACX;AAAA,IACG;AAAA,EACJ,CACF,GAGA,gBAAAA,OAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KAAG,SAC/D,KAAI,YAAS,KAAI,aAAU,IACnC,CACF,CACF,CACF;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF,CAAC;AAED,gBAAgB,cAAc;;;ACxM9B,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,gBAAAC;AAAA,OACK;AA6DA,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,eAAe,CAAC,QAAgB,YAAsC;AAC1E,aAAS,KAAK,MAAM,MAAM,IAAI,EAAE,GAAG,SAAS,OAAO,CAAC;AACpD,eAAW,QAAQ,OAAO;AAAA,EAC5B;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,UAC9D;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,mBAAkB;AAAA,IAC1C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,UAC9D;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM;AAAA,UACf,SAAS,MAAM,aAAa,YAAY;AAAA;AAAA,MAC1C;AAAA,IACF;AAAA,EAEJ;AAGA,QAAM,iBAAiB,YAAa,CAAC,YAAY;AAEjD,MAAI,kBAAkB,MAAM;AAC1B,WACE,gBAAAA,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP,EAAE,iBAAiB,mBAAmB,UAAU;AAAA,UAChD;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,OAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,KAAK,SAAS,SAAS;AAAA,UAC9B,UAAU,KAAK,YAAY;AAAA,UAC3B,SAAS,KAAK,WAAW,KAAK,aAAa,CAAC;AAAA,UAC5C,UAAU,CAAC,WAAW;AACpB,gBAAI,OAAO,OAAO;AAChB,2BAAa,OAAO,OAAO,EAAE,OAAO,CAAC;AAAA,YACvC;AACA,gBAAI,OAAO,aAAa;AACtB,2BAAa,YAAY,EAAE,IAAI,OAAO,YAAY,CAAC;AAAA,YACrD;AACA,iBAAK,WAAW,MAAM;AAAA,UACxB;AAAA,UACA,YAAY,KAAK;AAAA,UACjB,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA;AAAA,MACd;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,aAAaA,OAAM,SAAS,MAAM,QAAQ,IAAI;AAEpD,SACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,iBAAiB,mBAAmB,MAAM,OAAO,WAAW;AAAA,QAC9D;AAAA,MACF;AAAA;AAAA,IAGC,WAAW,OACV,gBAAAF,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,cAClB,gBAAAF,OAAA,cAAC,WAAS,GAAG,KAAK,CACpB;AAAA,KAIA,SAAS,aACT,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,UACjB,SACC,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAOE,QAAO,SACpC,KACH,GAED,YACC,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,MAAM,OAAO,kBAAkB,KAC9D,QACH,CAEJ;AAAA,IAIF,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAO,CAACD,QAAO,SAAS,YAAY,KACvC,aACC,WAEA,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,MAAM,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAK,WAAE;AAAA;AAAA,IACnC,CAEJ;AAAA,IAGC,WAAW,QAAQ,SAAS,KAC3B,gBAAAA,OAAA,cAACG,OAAA,EAAK,OAAOD,QAAO,aAClB,gBAAAF,OAAA,cAAC,QAAK,SAAQ,YAAW,OAAOE,QAAO,cACrC,gBAAAF,OAAA,cAAC,UAAO,SAAS,GAAG,SAAQ,UAAS,OAAOE,QAAO,WAChD,QAAQ,IAAI,CAAC,QAAQ,UACpB,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,SAAS,OAAO,WAAW;AAAA,QAC3B,QAAQ,OAAO;AAAA,QACf,eAAe,EAAE,GAAG,OAAO,SAAS,OAAO;AAAA,QAC3C,SAAS,MAAM,aAAa,OAAO,OAAO,OAAO,OAAO;AAAA,QACxD,UAAU,OAAO;AAAA;AAAA,MAEhB,OAAO;AAAA,IACV,CACD,CACH,CACF,CACF;AAAA,EAEJ;AAEJ;AAEA,IAAME,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,EACZ;AACF,CAAC;AAED,aAAa,cAAc;","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":["../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"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Safely retrieves nested values from objects using dot-notation paths.
3
+ */
4
+ export declare function getNestedValue(obj: Record<string, unknown> | null | undefined, path: string): unknown;
5
+ //# sourceMappingURL=getNestedValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNestedValue.d.ts","sourceRoot":"","sources":["../../src/lib/getNestedValue.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/C,IAAI,EAAE,MAAM,GACX,OAAO,CAaT"}
@@ -1,4 +1,5 @@
1
1
  export { cn } from './cn';
2
+ export { getNestedValue } from './getNestedValue';
2
3
  export { convertThemeToRN, defaultRNTheme } from './theme';
3
4
  export type { WebTheme } from './theme';
4
5
  export { almadarLight, almadarDark, defaultTheme } from '../themes';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC"}
package/dist/lib/index.js CHANGED
@@ -2,17 +2,21 @@ import {
2
2
  cn,
3
3
  convertThemeToRN,
4
4
  defaultRNTheme
5
- } from "../chunk-S2IT7WZT.js";
5
+ } from "../chunk-5JVEVV74.js";
6
6
  import {
7
7
  almadarDark,
8
8
  almadarLight
9
9
  } from "../chunk-MFU7Q7LU.js";
10
+ import {
11
+ getNestedValue
12
+ } from "../chunk-K2JGK2QD.js";
10
13
  export {
11
14
  almadarDark,
12
15
  almadarLight,
13
16
  cn,
14
17
  convertThemeToRN,
15
18
  defaultRNTheme,
16
- almadarLight as defaultTheme
19
+ almadarLight as defaultTheme,
20
+ getNestedValue
17
21
  };
18
22
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,13 @@
1
1
  import React from 'react';
2
2
  import { RNTheme } from './ThemeContext';
3
3
  export { RNTheme } from './ThemeContext';
4
+ export interface ThemeModeContextValue {
5
+ mode: 'light' | 'dark' | 'system';
6
+ resolvedMode: 'light' | 'dark';
7
+ toggleMode: () => void;
8
+ setMode: (mode: 'light' | 'dark' | 'system') => void;
9
+ }
10
+ export declare const useThemeMode: () => ThemeModeContextValue;
4
11
  export interface ThemeProviderProps {
5
12
  children: React.ReactNode;
6
13
  theme?: 'light' | 'dark' | 'system';
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAgB,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6BtD,CAAC"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAEhF,OAAO,EAAgB,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC;CACtD;AASD,eAAO,MAAM,YAAY,6BAAqC,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2CtD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { EventBusProvider } from './EventBusProvider';
2
- export { ThemeProvider } from './ThemeProvider';
3
- export type { ThemeProviderProps } from './ThemeProvider';
2
+ export { ThemeProvider, useThemeMode } from './ThemeProvider';
3
+ export type { ThemeProviderProps, ThemeModeContextValue } from './ThemeProvider';
4
4
  export { useTheme } from './ThemeContext';
5
5
  export type { RNTheme } from './ThemeContext';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import {
2
- EventBusProvider,
3
- ThemeProvider
4
- } from "../chunk-VLUJ7BXN.js";
2
+ EventBusProvider
3
+ } from "../chunk-TRYFJDL3.js";
4
+ import {
5
+ ThemeProvider,
6
+ useThemeMode
7
+ } from "../chunk-A56SRZKI.js";
5
8
  import "../chunk-MFU7Q7LU.js";
6
9
  import {
7
10
  useTheme
@@ -9,6 +12,7 @@ import {
9
12
  export {
10
13
  EventBusProvider,
11
14
  ThemeProvider,
12
- useTheme
15
+ useTheme,
16
+ useThemeMode
13
17
  };
14
18
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/mobile",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "React Native UI components for Almadar - extends @almadar/ui",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -43,12 +43,34 @@
43
43
  "files": [
44
44
  "dist"
45
45
  ],
46
+ "scripts": {
47
+ "build": "tsup && tsc --declaration --emitDeclarationOnly --outDir dist --skipLibCheck",
48
+ "build:watch": "tsup --watch",
49
+ "typecheck": "tsc --noEmit",
50
+ "lint": "eslint src/",
51
+ "start": "expo start",
52
+ "start:storybook": "EXPO_PUBLIC_STORYBOOK=true expo start",
53
+ "android": "expo start --android",
54
+ "ios": "expo start --ios",
55
+ "web": "expo start --web",
56
+ "storybook": "EXPO_PUBLIC_STORYBOOK=true expo start",
57
+ "storybook:ios": "EXPO_PUBLIC_STORYBOOK=true expo start --ios",
58
+ "storybook:android": "EXPO_PUBLIC_STORYBOOK=true expo start --android",
59
+ "storybook:web": "EXPO_PUBLIC_STORYBOOK=true expo start --web",
60
+ "storybook-generate": "sb-rn-get-stories",
61
+ "test": "vitest run --passWithNoTests",
62
+ "test:web": "vitest run --passWithNoTests"
63
+ },
46
64
  "dependencies": {
47
- "@almadar/core": ">=2.1.0",
48
- "@almadar/patterns": ">=2.0.0",
49
- "@almadar/ui": ">=2.1.0",
65
+ "@almadar/core": ">=2.6.0",
66
+ "@almadar/patterns": ">=2.8.0",
67
+ "@almadar/ui": ">=2.15.0",
50
68
  "@react-native-async-storage/async-storage": "2.2.0",
51
- "expo-status-bar": "~2.2.3",
69
+ "expo": "^54.0.0",
70
+ "expo-status-bar": "~3.0.9",
71
+ "react": "^19.0.0",
72
+ "react-dom": "^19.0.0",
73
+ "react-native": ">=0.76.0",
52
74
  "react-native-is-edge-to-edge": "^1.1.6",
53
75
  "react-native-reanimated": "4.1.1",
54
76
  "react-native-web": "^0.21.0",
@@ -56,13 +78,10 @@
56
78
  },
57
79
  "peerDependencies": {
58
80
  "@react-navigation/native": "^6.0.0",
59
- "react": ">=18.0.0",
60
- "react-native": ">=0.76.0",
61
81
  "react-native-safe-area-context": "^4.0.0",
62
82
  "react-native-vector-icons": "^10.0.0"
63
83
  },
64
84
  "devDependencies": {
65
- "@expo/cli": "^54.0.23",
66
85
  "@storybook/addon-ondevice-actions": "8.6.2",
67
86
  "@storybook/addon-ondevice-backgrounds": "8.6.2",
68
87
  "@storybook/addon-ondevice-controls": "8.6.2",
@@ -74,9 +93,9 @@
74
93
  "babel-plugin-transform-inline-environment-variables": "0.4.4",
75
94
  "cross-env": "^7.0.0",
76
95
  "eslint": "^8.57.0",
77
- "expo": "^54.0.0",
78
96
  "tsup": "^8.0.0",
79
97
  "typescript": "^5.4.0",
98
+ "jsdom": "^24.0.0",
80
99
  "vitest": "^1.0.0"
81
100
  },
82
101
  "publishConfig": {
@@ -86,24 +105,6 @@
86
105
  "license": "MIT",
87
106
  "repository": {
88
107
  "type": "git",
89
- "url": "https://github.com/almadar-io/almadar-mobile.git",
90
- "directory": "packages/almadar-mobile"
91
- },
92
- "scripts": {
93
- "build": "tsup && tsc --declaration --emitDeclarationOnly --outDir dist --skipLibCheck",
94
- "build:watch": "tsup --watch",
95
- "typecheck": "tsc --noEmit",
96
- "lint": "eslint src/",
97
- "start": "expo start",
98
- "start:storybook": "EXPO_PUBLIC_STORYBOOK=true expo start",
99
- "android": "expo start --android",
100
- "ios": "expo start --ios",
101
- "web": "expo start --web",
102
- "storybook": "EXPO_PUBLIC_STORYBOOK=true expo start",
103
- "storybook:ios": "EXPO_PUBLIC_STORYBOOK=true expo start --ios",
104
- "storybook:android": "EXPO_PUBLIC_STORYBOOK=true expo start --android",
105
- "storybook:web": "EXPO_PUBLIC_STORYBOOK=true expo start --web",
106
- "storybook-generate": "sb-rn-get-stories",
107
- "test": "vitest run --passWithNoTests"
108
+ "url": "https://github.com/almadar-io/almadar-mobile.git"
108
109
  }
109
- }
110
+ }