@almadar/mobile 1.17.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-7JWBQIW4.js → chunk-AARPB3FY.js} +2 -2
- package/dist/chunk-AARPB3FY.js.map +1 -0
- package/dist/{chunk-O7H7L24S.js → chunk-PNP63ZFU.js} +123 -31
- package/dist/chunk-PNP63ZFU.js.map +1 -0
- package/dist/{chunk-76KEXEYS.js → chunk-RONRIAV4.js} +1 -1
- package/dist/chunk-RONRIAV4.js.map +1 -0
- package/dist/{chunk-B4JZIFI6.js → chunk-T33BAIMJ.js} +5 -5
- package/dist/chunk-T33BAIMJ.js.map +1 -0
- package/dist/components/atoms/index.js +1 -1
- package/dist/components/index.js +4 -4
- package/dist/components/molecules/RepeatableFormSection.d.ts.map +1 -1
- package/dist/components/molecules/SortableList.d.ts +3 -3
- package/dist/components/molecules/SortableList.d.ts.map +1 -1
- package/dist/components/molecules/index.js +1 -1
- package/dist/components/organisms/ComponentPatterns.d.ts.map +1 -1
- package/dist/components/organisms/ContentRenderer.d.ts +3 -1
- package/dist/components/organisms/ContentRenderer.d.ts.map +1 -1
- package/dist/components/organisms/DrawerSlot.d.ts.map +1 -1
- package/dist/components/organisms/LayoutPatterns.d.ts.map +1 -1
- package/dist/components/organisms/MasterDetail.d.ts.map +1 -1
- package/dist/components/organisms/ModalSlot.d.ts.map +1 -1
- package/dist/components/organisms/SignaturePad.d.ts.map +1 -1
- package/dist/components/organisms/StateMachineView.d.ts.map +1 -1
- package/dist/components/organisms/ToastSlot.d.ts.map +1 -1
- package/dist/components/organisms/UISlotRenderer.d.ts +3 -3
- package/dist/components/organisms/UISlotRenderer.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts +2 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts.map +1 -1
- package/dist/components/organisms/index.js +1 -1
- package/dist/components/templates/index.js +1 -1
- package/dist/index.js +12 -12
- package/package.json +4 -4
- package/dist/chunk-76KEXEYS.js.map +0 -1
- package/dist/chunk-7JWBQIW4.js.map +0 -1
- package/dist/chunk-B4JZIFI6.js.map +0 -1
- package/dist/chunk-O7H7L24S.js.map +0 -1
|
@@ -299,7 +299,7 @@ var BattleTemplate = ({
|
|
|
299
299
|
};
|
|
300
300
|
const handleMenuSelect = (option) => {
|
|
301
301
|
if (option.event) {
|
|
302
|
-
eventBus.emit(`UI:${option.event}`, { option, entity });
|
|
302
|
+
eventBus.emit(`UI:${option.event}`, { option: { ...option }, entity });
|
|
303
303
|
}
|
|
304
304
|
if (option.navigatesTo) {
|
|
305
305
|
eventBus.emit("UI:navigate", { to: option.navigatesTo });
|
|
@@ -921,4 +921,4 @@ export {
|
|
|
921
921
|
CounterTemplate,
|
|
922
922
|
GameTemplate
|
|
923
923
|
};
|
|
924
|
-
//# sourceMappingURL=chunk-
|
|
924
|
+
//# sourceMappingURL=chunk-AARPB3FY.js.map
|
|
@@ -0,0 +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 type { EventPayload } from '@almadar/core';\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 } as EventPayload);\n onBattleAction?.(action);\n };\n\n const handleBattleEnd = (result: 'win' | 'lose' | 'flee') => {\n eventBus.emit('UI:BATTLE_END', { result, entity } as EventPayload);\n onBattleEnd?.(result);\n };\n\n const handleMenuSelect = (option: MenuOption) => {\n if (option.event) {\n eventBus.emit(`UI:${option.event}`, { option: { ...option }, entity });\n }\n if (option.navigatesTo) {\n eventBus.emit('UI:navigate', { to: option.navigatesTo } as EventPayload);\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 } as EventPayload)}\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"]}
|
|
@@ -724,13 +724,13 @@ var MediaGallery = ({
|
|
|
724
724
|
const itemHeight = itemWidth / aspectRatio;
|
|
725
725
|
const handleItemPress = (item, index) => {
|
|
726
726
|
if (selectEvent) {
|
|
727
|
-
eventBus.emit(`UI:${selectEvent}`, { ...actionPayload, item, index });
|
|
727
|
+
eventBus.emit(`UI:${selectEvent}`, { ...actionPayload, item: { ...item }, index });
|
|
728
728
|
}
|
|
729
729
|
setSelectedIndex(index);
|
|
730
730
|
};
|
|
731
731
|
const handleItemLongPress = (item, index) => {
|
|
732
732
|
if (contextEvent) {
|
|
733
|
-
eventBus.emit(`UI:${contextEvent}`, { ...actionPayload, item, index });
|
|
733
|
+
eventBus.emit(`UI:${contextEvent}`, { ...actionPayload, item: { ...item }, index });
|
|
734
734
|
}
|
|
735
735
|
};
|
|
736
736
|
const handleCloseModal = () => {
|
|
@@ -1559,6 +1559,21 @@ Table.displayName = "Table";
|
|
|
1559
1559
|
// src/components/organisms/ModalSlot.tsx
|
|
1560
1560
|
import React14, { useState as useState3, useEffect, useCallback } from "react";
|
|
1561
1561
|
import { View as View14, StyleSheet as StyleSheet14 } from "react-native";
|
|
1562
|
+
function isModalWrapper(value) {
|
|
1563
|
+
return typeof value.modal === "object" && value.modal !== null && !Array.isArray(value.modal);
|
|
1564
|
+
}
|
|
1565
|
+
function toModalContent(value) {
|
|
1566
|
+
if (typeof value.id !== "string") return null;
|
|
1567
|
+
return {
|
|
1568
|
+
id: value.id,
|
|
1569
|
+
title: typeof value.title === "string" ? value.title : void 0,
|
|
1570
|
+
content: value.content,
|
|
1571
|
+
actions: Array.isArray(value.actions) ? value.actions : void 0,
|
|
1572
|
+
size: value.size === "sm" || value.size === "md" || value.size === "lg" ? value.size : void 0,
|
|
1573
|
+
closeOnBackdrop: typeof value.closeOnBackdrop === "boolean" ? value.closeOnBackdrop : void 0,
|
|
1574
|
+
showCloseButton: typeof value.showCloseButton === "boolean" ? value.showCloseButton : void 0
|
|
1575
|
+
};
|
|
1576
|
+
}
|
|
1562
1577
|
var ModalSlot = ({
|
|
1563
1578
|
style,
|
|
1564
1579
|
isLoading,
|
|
@@ -1599,8 +1614,9 @@ var ModalSlot = ({
|
|
|
1599
1614
|
const handleOpen = (event) => {
|
|
1600
1615
|
const payload = event.payload;
|
|
1601
1616
|
if (!payload) return;
|
|
1602
|
-
const modalPayload = payload;
|
|
1603
|
-
const modal =
|
|
1617
|
+
const modalPayload = isModalWrapper(payload) ? payload.modal : payload;
|
|
1618
|
+
const modal = toModalContent(modalPayload);
|
|
1619
|
+
if (!modal) return;
|
|
1604
1620
|
openModal({
|
|
1605
1621
|
...modal,
|
|
1606
1622
|
size: modal.size || defaultSize
|
|
@@ -1694,6 +1710,17 @@ ModalSlot.displayName = "ModalSlot";
|
|
|
1694
1710
|
// src/components/organisms/ToastSlot.tsx
|
|
1695
1711
|
import React15, { useState as useState4, useEffect as useEffect2, useCallback as useCallback2 } from "react";
|
|
1696
1712
|
import { View as View15, StyleSheet as StyleSheet15 } from "react-native";
|
|
1713
|
+
function isToastWrapper(value) {
|
|
1714
|
+
return typeof value.toast === "object" && value.toast !== null && !Array.isArray(value.toast);
|
|
1715
|
+
}
|
|
1716
|
+
function isToastPayload(value) {
|
|
1717
|
+
return typeof value.message === "string";
|
|
1718
|
+
}
|
|
1719
|
+
function extractDismissToastId(value) {
|
|
1720
|
+
if (typeof value.toastId === "string") return value.toastId;
|
|
1721
|
+
if (typeof value.payload === "string") return value.payload;
|
|
1722
|
+
return void 0;
|
|
1723
|
+
}
|
|
1697
1724
|
var ToastSlot = ({
|
|
1698
1725
|
style,
|
|
1699
1726
|
position = "top",
|
|
@@ -1728,14 +1755,15 @@ var ToastSlot = ({
|
|
|
1728
1755
|
const handleShow = (event) => {
|
|
1729
1756
|
const payload = event.payload;
|
|
1730
1757
|
if (!payload) return;
|
|
1731
|
-
const
|
|
1732
|
-
|
|
1758
|
+
const toastData = isToastWrapper(payload) ? payload.toast : payload;
|
|
1759
|
+
if (isToastPayload(toastData)) {
|
|
1760
|
+
showToast(toastData);
|
|
1761
|
+
}
|
|
1733
1762
|
};
|
|
1734
1763
|
const handleDismiss2 = (event) => {
|
|
1735
1764
|
const payload = event.payload;
|
|
1736
1765
|
if (!payload) return;
|
|
1737
|
-
const
|
|
1738
|
-
const toastId = "toastId" in dismissPayload ? dismissPayload.toastId : "payload" in dismissPayload ? dismissPayload.payload : void 0;
|
|
1766
|
+
const toastId = extractDismissToastId(payload);
|
|
1739
1767
|
if (typeof toastId === "string") {
|
|
1740
1768
|
dismissToast(toastId);
|
|
1741
1769
|
}
|
|
@@ -1811,6 +1839,22 @@ ToastSlot.displayName = "ToastSlot";
|
|
|
1811
1839
|
// src/components/organisms/DrawerSlot.tsx
|
|
1812
1840
|
import React16, { useState as useState5, useEffect as useEffect3, useCallback as useCallback3 } from "react";
|
|
1813
1841
|
import { View as View16, StyleSheet as StyleSheet16 } from "react-native";
|
|
1842
|
+
function isDrawerWrapper(value) {
|
|
1843
|
+
return typeof value.drawer === "object" && value.drawer !== null && !Array.isArray(value.drawer);
|
|
1844
|
+
}
|
|
1845
|
+
function toDrawerContent(value) {
|
|
1846
|
+
if (typeof value.id !== "string") return null;
|
|
1847
|
+
return {
|
|
1848
|
+
id: value.id,
|
|
1849
|
+
title: typeof value.title === "string" ? value.title : void 0,
|
|
1850
|
+
content: value.content,
|
|
1851
|
+
actions: Array.isArray(value.actions) ? value.actions : void 0,
|
|
1852
|
+
placement: value.placement === "left" || value.placement === "right" ? value.placement : void 0,
|
|
1853
|
+
width: typeof value.width === "number" ? value.width : void 0,
|
|
1854
|
+
closeOnBackdrop: typeof value.closeOnBackdrop === "boolean" ? value.closeOnBackdrop : void 0,
|
|
1855
|
+
showCloseButton: typeof value.showCloseButton === "boolean" ? value.showCloseButton : void 0
|
|
1856
|
+
};
|
|
1857
|
+
}
|
|
1814
1858
|
var DrawerSlot = ({
|
|
1815
1859
|
style,
|
|
1816
1860
|
isLoading,
|
|
@@ -1852,8 +1896,9 @@ var DrawerSlot = ({
|
|
|
1852
1896
|
const handleOpen = (event) => {
|
|
1853
1897
|
const payload = event.payload;
|
|
1854
1898
|
if (!payload) return;
|
|
1855
|
-
const drawerPayload = payload;
|
|
1856
|
-
const drawer =
|
|
1899
|
+
const drawerPayload = isDrawerWrapper(payload) ? payload.drawer : payload;
|
|
1900
|
+
const drawer = toDrawerContent(drawerPayload);
|
|
1901
|
+
if (!drawer) return;
|
|
1857
1902
|
openDrawer({
|
|
1858
1903
|
...drawer,
|
|
1859
1904
|
placement: drawer.placement || defaultPlacement,
|
|
@@ -1947,6 +1992,35 @@ DrawerSlot.displayName = "DrawerSlot";
|
|
|
1947
1992
|
// src/components/organisms/UISlotRenderer.tsx
|
|
1948
1993
|
import React17, { useState as useState6, useEffect as useEffect4, useCallback as useCallback4 } from "react";
|
|
1949
1994
|
import { View as View17, StyleSheet as StyleSheet17 } from "react-native";
|
|
1995
|
+
var UI_COMPONENT_TYPES = ["card", "text", "button", "input", "image", "list", "custom"];
|
|
1996
|
+
function asEventPayload(value) {
|
|
1997
|
+
if (value === null || value === void 0 || typeof value !== "object") return void 0;
|
|
1998
|
+
if (Array.isArray(value) || value instanceof Date) return void 0;
|
|
1999
|
+
return value;
|
|
2000
|
+
}
|
|
2001
|
+
function toUIComponentConfig(value) {
|
|
2002
|
+
if (typeof value.id !== "string") return null;
|
|
2003
|
+
if (typeof value.type !== "string" || !UI_COMPONENT_TYPES.includes(value.type)) return null;
|
|
2004
|
+
return {
|
|
2005
|
+
type: value.type,
|
|
2006
|
+
id: value.id,
|
|
2007
|
+
props: asEventPayload(value.props),
|
|
2008
|
+
children: Array.isArray(value.children) ? value.children.map((c) => typeof c === "object" && c !== null && !Array.isArray(c) ? toUIComponentConfig(c) : null).filter((c) => c !== null) : void 0,
|
|
2009
|
+
content: typeof value.content === "string" ? value.content : void 0
|
|
2010
|
+
};
|
|
2011
|
+
}
|
|
2012
|
+
function isUISlotWrapper(value) {
|
|
2013
|
+
return typeof value.slot === "object" && value.slot !== null && !Array.isArray(value.slot);
|
|
2014
|
+
}
|
|
2015
|
+
function toUISlot(value) {
|
|
2016
|
+
if (typeof value.id !== "string" || typeof value.name !== "string" || !Array.isArray(value.components)) return null;
|
|
2017
|
+
return {
|
|
2018
|
+
id: value.id,
|
|
2019
|
+
name: value.name,
|
|
2020
|
+
components: value.components.map((c) => typeof c === "object" && c !== null && !Array.isArray(c) ? toUIComponentConfig(c) : null).filter((c) => c !== null),
|
|
2021
|
+
metadata: asEventPayload(value.metadata)
|
|
2022
|
+
};
|
|
2023
|
+
}
|
|
1950
2024
|
var UISlotRenderer = ({
|
|
1951
2025
|
style,
|
|
1952
2026
|
isLoading,
|
|
@@ -1973,8 +2047,9 @@ var UISlotRenderer = ({
|
|
|
1973
2047
|
const handleUpdate = (event) => {
|
|
1974
2048
|
const payload = event.payload;
|
|
1975
2049
|
if (!payload) return;
|
|
1976
|
-
const
|
|
1977
|
-
|
|
2050
|
+
const rawSlot = isUISlotWrapper(payload) ? payload.slot : payload;
|
|
2051
|
+
const slotData = toUISlot(rawSlot);
|
|
2052
|
+
if (slotData) handleSlotUpdate(slotData);
|
|
1978
2053
|
};
|
|
1979
2054
|
const handleClear = () => {
|
|
1980
2055
|
handleClearSlot();
|
|
@@ -2134,7 +2209,10 @@ var SignaturePad = ({
|
|
|
2134
2209
|
};
|
|
2135
2210
|
eventBus.emit(`UI:${saveAction}`, {
|
|
2136
2211
|
entity,
|
|
2137
|
-
signature:
|
|
2212
|
+
signature: {
|
|
2213
|
+
timestamp: signatureData.timestamp,
|
|
2214
|
+
strokes: signatureData.strokes.map((s) => ({ points: s.points.map((p) => ({ ...p })) }))
|
|
2215
|
+
}
|
|
2138
2216
|
});
|
|
2139
2217
|
onSave?.(signatureData);
|
|
2140
2218
|
}, [strokes, currentStroke, entity, saveAction, onSave, eventBus]);
|
|
@@ -2887,7 +2965,7 @@ var MasterDetail = ({
|
|
|
2887
2965
|
const handleSelect = useCallback9(
|
|
2888
2966
|
(item) => {
|
|
2889
2967
|
if (selectEvent) {
|
|
2890
|
-
eventBus.emit(`UI:${selectEvent}`, { item, entity });
|
|
2968
|
+
eventBus.emit(`UI:${selectEvent}`, { item: { ...item }, entity });
|
|
2891
2969
|
}
|
|
2892
2970
|
onSelect?.(item);
|
|
2893
2971
|
if (selectedId === void 0) {
|
|
@@ -3889,7 +3967,7 @@ var DialogueBox = ({
|
|
|
3889
3967
|
}, [isTyping, skipTypewriter, dialogue.choices, onAdvance, advanceEvent, eventBus]);
|
|
3890
3968
|
const handleChoice = useCallback12((choice, index) => {
|
|
3891
3969
|
setSelectedChoice(index);
|
|
3892
|
-
if (choiceEvent) eventBus.emit(`UI:${choiceEvent}`, { choice });
|
|
3970
|
+
if (choiceEvent) eventBus.emit(`UI:${choiceEvent}`, { choice: { ...choice } });
|
|
3893
3971
|
onChoice?.(choice);
|
|
3894
3972
|
}, [onChoice, choiceEvent, eventBus]);
|
|
3895
3973
|
const enabledChoices = dialogue.choices?.filter((c) => !c.disabled) ?? [];
|
|
@@ -4580,7 +4658,7 @@ var InventoryPanel = ({
|
|
|
4580
4658
|
const now = Date.now();
|
|
4581
4659
|
const item = items.find((i) => i.id === String(index));
|
|
4582
4660
|
if (lastTap && now - lastTap < 300 && item) {
|
|
4583
|
-
if (useItemEvent) eventBus.emit(`UI:${useItemEvent}`, { item });
|
|
4661
|
+
if (useItemEvent) eventBus.emit(`UI:${useItemEvent}`, { item: { ...item } });
|
|
4584
4662
|
onUseItem?.(item);
|
|
4585
4663
|
setLastTap(null);
|
|
4586
4664
|
return;
|
|
@@ -6287,7 +6365,7 @@ var StateArchitectBoard = ({
|
|
|
6287
6365
|
setTransitions((prev) => [...prev, newTrans]);
|
|
6288
6366
|
setAddingTransition(false);
|
|
6289
6367
|
setSelectedTarget("");
|
|
6290
|
-
eventBus.emit("UI:STATE_ARCHITECT_ADD_TRANSITION", { transition: newTrans });
|
|
6368
|
+
eventBus.emit("UI:STATE_ARCHITECT_ADD_TRANSITION", { transition: { ...newTrans } });
|
|
6291
6369
|
}, [selectedState, selectedTarget, selectedEvent, eventBus]);
|
|
6292
6370
|
const handleRemoveTransition = useCallback19((transId) => {
|
|
6293
6371
|
setTransitions((prev) => prev.filter((t) => t.id !== transId));
|
|
@@ -7769,7 +7847,7 @@ var CodeView = ({
|
|
|
7769
7847
|
};
|
|
7770
7848
|
const handleRun = () => {
|
|
7771
7849
|
if (runEvent) {
|
|
7772
|
-
eventBus.emit(`UI:${runEvent}`, { sections, fullCode });
|
|
7850
|
+
eventBus.emit(`UI:${runEvent}`, { sections: sections.map((s) => ({ ...s })), fullCode });
|
|
7773
7851
|
}
|
|
7774
7852
|
};
|
|
7775
7853
|
const handleCopy = () => {
|
|
@@ -7943,7 +8021,7 @@ var ActionPalette = ({
|
|
|
7943
8021
|
onCategoryChange?.(category);
|
|
7944
8022
|
};
|
|
7945
8023
|
const handleActionPress = (action) => {
|
|
7946
|
-
eventBus.emit("UI:ACTION_SELECTED", { action });
|
|
8024
|
+
eventBus.emit("UI:ACTION_SELECTED", { action: { ...action } });
|
|
7947
8025
|
onActionSelect?.(action);
|
|
7948
8026
|
};
|
|
7949
8027
|
if (isLoading) {
|
|
@@ -8306,7 +8384,7 @@ var SequenceBar = ({
|
|
|
8306
8384
|
}
|
|
8307
8385
|
}, [currentStep]);
|
|
8308
8386
|
const handleStepPress = (step, index) => {
|
|
8309
|
-
eventBus.emit("UI:SEQUENCE_STEP_PRESSED", { step, index });
|
|
8387
|
+
eventBus.emit("UI:SEQUENCE_STEP_PRESSED", { step: { ...step }, index });
|
|
8310
8388
|
onStepPress?.(step, index);
|
|
8311
8389
|
};
|
|
8312
8390
|
const handleStepRemove = (stepId, index) => {
|
|
@@ -8314,7 +8392,7 @@ var SequenceBar = ({
|
|
|
8314
8392
|
onStepRemove?.(stepId, index);
|
|
8315
8393
|
};
|
|
8316
8394
|
const handlePlay = () => {
|
|
8317
|
-
eventBus.emit("UI:SEQUENCE_PLAY", { steps });
|
|
8395
|
+
eventBus.emit("UI:SEQUENCE_PLAY", { steps: steps.map((s) => ({ ...s })) });
|
|
8318
8396
|
onPlay?.();
|
|
8319
8397
|
};
|
|
8320
8398
|
const handlePause = () => {
|
|
@@ -8538,11 +8616,11 @@ var StateNode = ({
|
|
|
8538
8616
|
const colors = typeColors(theme);
|
|
8539
8617
|
const typeStyle = colors[node.type];
|
|
8540
8618
|
const handlePress = () => {
|
|
8541
|
-
eventBus.emit("UI:STATE_NODE_PRESSED", { node });
|
|
8619
|
+
eventBus.emit("UI:STATE_NODE_PRESSED", { node: { ...node } });
|
|
8542
8620
|
onPress?.(node);
|
|
8543
8621
|
};
|
|
8544
8622
|
const handleLongPress = () => {
|
|
8545
|
-
eventBus.emit("UI:STATE_NODE_LONG_PRESSED", { node });
|
|
8623
|
+
eventBus.emit("UI:STATE_NODE_LONG_PRESSED", { node: { ...node } });
|
|
8546
8624
|
onLongPress?.(node);
|
|
8547
8625
|
};
|
|
8548
8626
|
const handleDelete = () => {
|
|
@@ -8677,7 +8755,7 @@ var TransitionArrow = ({
|
|
|
8677
8755
|
const colors = typeColors2(theme);
|
|
8678
8756
|
const typeStyle = colors[transition.type];
|
|
8679
8757
|
const handlePress = () => {
|
|
8680
|
-
eventBus.emit("UI:TRANSITION_PRESSED", { transition });
|
|
8758
|
+
eventBus.emit("UI:TRANSITION_PRESSED", { transition: { ...transition } });
|
|
8681
8759
|
onPress?.(transition);
|
|
8682
8760
|
};
|
|
8683
8761
|
const handleDelete = () => {
|
|
@@ -8872,7 +8950,7 @@ var SimulationCanvas = ({
|
|
|
8872
8950
|
});
|
|
8873
8951
|
if (clickedBody) {
|
|
8874
8952
|
setSelectedBodyId(clickedBody.id);
|
|
8875
|
-
eventBus.emit("UI:PHYSICS_BODY_PRESSED", { body: clickedBody });
|
|
8953
|
+
eventBus.emit("UI:PHYSICS_BODY_PRESSED", { body: { ...clickedBody } });
|
|
8876
8954
|
onBodyPress?.(clickedBody);
|
|
8877
8955
|
} else {
|
|
8878
8956
|
eventBus.emit("UI:PHYSICS_CANVAS_PRESSED", { x, y });
|
|
@@ -10246,7 +10324,7 @@ var DocumentViewer = ({
|
|
|
10246
10324
|
};
|
|
10247
10325
|
const handleDownload = (document) => {
|
|
10248
10326
|
if (downloadEvent) {
|
|
10249
|
-
eventBus.emit(`UI:${downloadEvent}`, { document });
|
|
10327
|
+
eventBus.emit(`UI:${downloadEvent}`, { document: { ...document } });
|
|
10250
10328
|
}
|
|
10251
10329
|
};
|
|
10252
10330
|
if (isLoading) {
|
|
@@ -10366,7 +10444,7 @@ var ComponentPatterns = ({
|
|
|
10366
10444
|
};
|
|
10367
10445
|
const handleUsePattern = (pattern) => {
|
|
10368
10446
|
if (useEvent) {
|
|
10369
|
-
eventBus.emit(`UI:${useEvent}`, { pattern });
|
|
10447
|
+
eventBus.emit(`UI:${useEvent}`, { pattern: { ...pattern, preview: void 0 } });
|
|
10370
10448
|
}
|
|
10371
10449
|
};
|
|
10372
10450
|
if (isLoading) {
|
|
@@ -10559,12 +10637,26 @@ var StateMachineView = ({
|
|
|
10559
10637
|
const eventBus = useEventBus();
|
|
10560
10638
|
const handleStateClick = (stateId) => {
|
|
10561
10639
|
if (stateClickEvent) {
|
|
10562
|
-
eventBus.emit(`UI:${stateClickEvent}`, {
|
|
10640
|
+
eventBus.emit(`UI:${stateClickEvent}`, {
|
|
10641
|
+
stateId,
|
|
10642
|
+
stateMachine: {
|
|
10643
|
+
...stateMachine,
|
|
10644
|
+
states: stateMachine.states.map((s) => ({ ...s })),
|
|
10645
|
+
transitions: stateMachine.transitions.map((t) => ({ ...t }))
|
|
10646
|
+
}
|
|
10647
|
+
});
|
|
10563
10648
|
}
|
|
10564
10649
|
};
|
|
10565
10650
|
const handleTransitionClick = (transitionId) => {
|
|
10566
10651
|
if (transitionClickEvent) {
|
|
10567
|
-
eventBus.emit(`UI:${transitionClickEvent}`, {
|
|
10652
|
+
eventBus.emit(`UI:${transitionClickEvent}`, {
|
|
10653
|
+
transitionId,
|
|
10654
|
+
stateMachine: {
|
|
10655
|
+
...stateMachine,
|
|
10656
|
+
states: stateMachine.states.map((s) => ({ ...s })),
|
|
10657
|
+
transitions: stateMachine.transitions.map((t) => ({ ...t }))
|
|
10658
|
+
}
|
|
10659
|
+
});
|
|
10568
10660
|
}
|
|
10569
10661
|
};
|
|
10570
10662
|
if (isLoading) {
|
|
@@ -10678,7 +10770,7 @@ var LayoutPatterns = ({
|
|
|
10678
10770
|
};
|
|
10679
10771
|
const handleApplyPattern = (pattern) => {
|
|
10680
10772
|
if (applyEvent) {
|
|
10681
|
-
eventBus.emit(`UI:${applyEvent}`, { pattern });
|
|
10773
|
+
eventBus.emit(`UI:${applyEvent}`, { pattern: { ...pattern, preview: void 0 } });
|
|
10682
10774
|
}
|
|
10683
10775
|
};
|
|
10684
10776
|
if (isLoading) {
|
|
@@ -10840,4 +10932,4 @@ export {
|
|
|
10840
10932
|
StateMachineView,
|
|
10841
10933
|
LayoutPatterns
|
|
10842
10934
|
};
|
|
10843
|
-
//# sourceMappingURL=chunk-
|
|
10935
|
+
//# sourceMappingURL=chunk-PNP63ZFU.js.map
|