@almadar/mobile 1.2.6 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-4GLV4XIP.js +140 -0
- package/dist/chunk-4GLV4XIP.js.map +1 -0
- package/dist/{chunk-QUFLYKWA.js → chunk-A6AK75GP.js} +43 -554
- package/dist/chunk-A6AK75GP.js.map +1 -0
- package/dist/chunk-BUN5QD6C.js +525 -0
- package/dist/chunk-BUN5QD6C.js.map +1 -0
- package/dist/{chunk-PBO6ZN2M.js → chunk-C3USTXJ7.js} +1372 -2255
- package/dist/chunk-C3USTXJ7.js.map +1 -0
- package/dist/{chunk-5U5Z65ZO.js → chunk-DNC6CO6E.js} +58 -187
- package/dist/chunk-DNC6CO6E.js.map +1 -0
- package/dist/chunk-I6UYSB5R.js +935 -0
- package/dist/chunk-I6UYSB5R.js.map +1 -0
- package/dist/{chunk-ETD72PHO.js → chunk-SLYJ52HW.js} +30 -21
- package/dist/chunk-SLYJ52HW.js.map +1 -0
- package/dist/chunk-UIU7NWN2.js +924 -0
- package/dist/chunk-UIU7NWN2.js.map +1 -0
- package/dist/{chunk-BFRVXKSP.js → chunk-VNRKHWR7.js} +87 -4
- package/dist/chunk-VNRKHWR7.js.map +1 -0
- package/dist/{chunk-CA6Z3OTE.js → chunk-WHAG42QJ.js} +1 -1
- package/dist/chunk-WHAG42QJ.js.map +1 -0
- package/dist/{chunk-GMR5FKKB.js → chunk-XWPR5FXS.js} +2 -2
- package/dist/chunk-XWPR5FXS.js.map +1 -0
- package/dist/{chunk-MLTSQPVN.js → chunk-YWQRLHTP.js} +2 -2
- package/dist/chunk-YWQRLHTP.js.map +1 -0
- package/dist/components/atoms/Button.d.ts +3 -2
- package/dist/components/atoms/Button.d.ts.map +1 -1
- package/dist/components/atoms/Card.d.ts +3 -2
- package/dist/components/atoms/Card.d.ts.map +1 -1
- package/dist/components/atoms/Checkbox.d.ts +3 -2
- package/dist/components/atoms/Checkbox.d.ts.map +1 -1
- package/dist/components/atoms/DayCell.d.ts +3 -2
- package/dist/components/atoms/DayCell.d.ts.map +1 -1
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +3 -2
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -1
- package/dist/components/atoms/Radio.d.ts +3 -2
- package/dist/components/atoms/Radio.d.ts.map +1 -1
- package/dist/components/atoms/RangeSlider.d.ts +3 -2
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -1
- package/dist/components/atoms/Select.d.ts +3 -2
- package/dist/components/atoms/Select.d.ts.map +1 -1
- package/dist/components/atoms/Switch.d.ts +3 -2
- package/dist/components/atoms/Switch.d.ts.map +1 -1
- package/dist/components/atoms/TextHighlight.d.ts +3 -2
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -1
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts +25 -0
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts.map +1 -0
- package/dist/components/atoms/game/index.d.ts +2 -0
- package/dist/components/atoms/game/index.d.ts.map +1 -1
- package/dist/components/atoms/index.d.ts +4 -4
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +14 -9
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -20
- package/dist/components/molecules/Alert.d.ts +3 -2
- package/dist/components/molecules/Alert.d.ts.map +1 -1
- package/dist/components/molecules/DataGrid.d.ts +6 -5
- package/dist/components/molecules/DataGrid.d.ts.map +1 -1
- package/dist/components/molecules/DataList.d.ts +5 -4
- package/dist/components/molecules/DataList.d.ts.map +1 -1
- package/dist/components/molecules/NumberStepper.d.ts +3 -2
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -1
- package/dist/components/molecules/PullToRefresh.d.ts +3 -2
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -1
- package/dist/components/molecules/RelationSelect.d.ts +3 -2
- package/dist/components/molecules/RelationSelect.d.ts.map +1 -1
- package/dist/components/molecules/RepeatableFormSection.d.ts +6 -5
- package/dist/components/molecules/RepeatableFormSection.d.ts.map +1 -1
- package/dist/components/molecules/SortableList.d.ts +2 -1
- package/dist/components/molecules/SortableList.d.ts.map +1 -1
- package/dist/components/molecules/StarRating.d.ts +3 -2
- package/dist/components/molecules/StarRating.d.ts.map +1 -1
- package/dist/components/molecules/SwipeableRow.d.ts +3 -2
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -1
- package/dist/components/molecules/Toast.d.ts +3 -2
- package/dist/components/molecules/Toast.d.ts.map +1 -1
- package/dist/components/molecules/index.js +9 -6
- package/dist/components/organisms/CardGrid.d.ts +6 -5
- package/dist/components/organisms/CardGrid.d.ts.map +1 -1
- package/dist/components/organisms/ComponentPatterns.d.ts.map +1 -1
- package/dist/components/organisms/ContentRenderer.d.ts.map +1 -1
- package/dist/components/organisms/DataTable.d.ts +2 -4
- package/dist/components/organisms/DataTable.d.ts.map +1 -1
- package/dist/components/organisms/DocumentViewer.d.ts.map +1 -1
- package/dist/components/organisms/DrawerSlot.d.ts +5 -4
- package/dist/components/organisms/DrawerSlot.d.ts.map +1 -1
- package/dist/components/organisms/FormSection.d.ts +8 -1
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/Header.d.ts +3 -2
- package/dist/components/organisms/Header.d.ts.map +1 -1
- package/dist/components/organisms/LayoutPatterns.d.ts.map +1 -1
- package/dist/components/organisms/MasterDetail.d.ts.map +1 -1
- package/dist/components/organisms/MediaGallery.d.ts +2 -1
- package/dist/components/organisms/MediaGallery.d.ts.map +1 -1
- package/dist/components/organisms/ModalSlot.d.ts +5 -4
- package/dist/components/organisms/ModalSlot.d.ts.map +1 -1
- package/dist/components/organisms/PageHeader.d.ts +7 -0
- package/dist/components/organisms/PageHeader.d.ts.map +1 -1
- package/dist/components/organisms/SignaturePad.d.ts.map +1 -1
- package/dist/components/organisms/StatCard.d.ts +3 -2
- package/dist/components/organisms/StatCard.d.ts.map +1 -1
- package/dist/components/organisms/StateMachineView.d.ts.map +1 -1
- package/dist/components/organisms/Table.d.ts.map +1 -1
- package/dist/components/organisms/ToastSlot.d.ts +6 -5
- package/dist/components/organisms/ToastSlot.d.ts.map +1 -1
- package/dist/components/organisms/UISlotRenderer.d.ts +2 -1
- package/dist/components/organisms/UISlotRenderer.d.ts.map +1 -1
- package/dist/components/organisms/book/BookChapterView.d.ts +2 -1
- package/dist/components/organisms/book/BookChapterView.d.ts.map +1 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts +2 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts.map +1 -1
- package/dist/components/organisms/book/BookNavBar.d.ts +2 -1
- package/dist/components/organisms/book/BookNavBar.d.ts.map +1 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts +2 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts.map +1 -1
- package/dist/components/organisms/book/BookViewer.d.ts +2 -1
- package/dist/components/organisms/book/BookViewer.d.ts.map +1 -1
- package/dist/components/organisms/game/DialogueBox.d.ts.map +1 -1
- package/dist/components/organisms/game/InventoryPanel.d.ts.map +1 -1
- package/dist/components/organisms/game/physics-sim/SimulationCanvas.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionTile.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/CodeView.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateNode.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/TransitionArrow.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/VariablePanel.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +1 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +14 -10
- package/dist/components/organisms/layout/DashboardGrid.d.ts +3 -2
- package/dist/components/organisms/layout/DashboardGrid.d.ts.map +1 -1
- package/dist/components/templates/BattleTemplate.d.ts.map +1 -1
- package/dist/components/templates/index.js +26 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useTraitState.d.ts +3 -3
- package/dist/hooks/useTraitState.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -910
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +13 -6
- package/dist/chunk-5U5Z65ZO.js.map +0 -1
- package/dist/chunk-BFRVXKSP.js.map +0 -1
- package/dist/chunk-CA6Z3OTE.js.map +0 -1
- package/dist/chunk-ETD72PHO.js.map +0 -1
- package/dist/chunk-GMR5FKKB.js.map +0 -1
- package/dist/chunk-MLTSQPVN.js.map +0 -1
- package/dist/chunk-PBO6ZN2M.js.map +0 -1
- package/dist/chunk-QUFLYKWA.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/organisms/FormSection.tsx","../src/components/organisms/CardGrid.tsx","../src/components/organisms/DetailPanel.tsx","../src/components/organisms/PageHeader.tsx","../src/components/organisms/DataTable.tsx","../src/components/organisms/StatCard.tsx","../src/components/organisms/Timeline.tsx","../src/components/organisms/Chart.tsx","../src/components/organisms/MediaGallery.tsx","../src/components/organisms/WizardContainer.tsx","../src/components/organisms/Form.tsx","../src/components/organisms/ConfirmDialog.tsx","../src/components/organisms/Table.tsx","../src/components/organisms/ModalSlot.tsx","../src/components/organisms/ToastSlot.tsx","../src/components/organisms/DrawerSlot.tsx","../src/components/organisms/UISlotRenderer.tsx","../src/components/organisms/SignaturePad.tsx","../src/components/organisms/ContentRenderer.tsx","../src/components/organisms/layout/DashboardGrid.tsx","../src/components/organisms/layout/SplitPane.tsx","../src/components/organisms/layout/TabbedContainer.tsx","../src/components/organisms/MasterDetail.tsx","../src/components/organisms/Split.tsx","../src/components/organisms/Sidebar.tsx","../src/components/organisms/Section.tsx","../src/components/organisms/game/CanvasEffect.tsx","../src/components/organisms/game/CombatLog.tsx","../src/components/organisms/game/DialogueBox.tsx","../src/components/organisms/game/GameAudioProvider.tsx","../src/components/organisms/game/GameAudioToggle.tsx","../src/components/organisms/game/GameCanvas3D.tsx","../src/components/organisms/game/GameOverScreen.tsx","../src/components/organisms/game/InventoryPanel.tsx","../src/components/organisms/game/IsometricCanvas.tsx","../src/components/organisms/game/TraitSlot.tsx","../src/components/organisms/game/TraitStateViewer.tsx","../src/components/organisms/game/UncontrolledBattleBoard.tsx","../src/components/organisms/game/puzzles/negotiator/NegotiatorBoard.tsx","../src/components/organisms/game/puzzles/sequencer/SequencerBoard.tsx","../src/components/organisms/game/puzzles/simulator/SimulatorBoard.tsx","../src/components/organisms/game/puzzles/state-architect/StateArchitectBoard.tsx","../src/components/organisms/game/puzzles/event-handler/RuleEditor.tsx","../src/components/organisms/game/puzzles/event-handler/EventLog.tsx","../src/components/organisms/game/puzzles/event-handler/ObjectRulePanel.tsx","../src/components/organisms/game/puzzles/event-handler/EventHandlerBoard.tsx","../src/components/organisms/game/puzzles/builder/BuilderBoard.tsx","../src/components/organisms/game/puzzles/classifier/ClassifierBoard.tsx","../src/components/organisms/game/puzzles/debugger/DebuggerBoard.tsx","../src/components/organisms/game/puzzles/state-architect/VariablePanel.tsx","../src/components/organisms/game/puzzles/state-architect/CodeView.tsx","../src/components/organisms/game/puzzles/sequencer/ActionPalette.tsx","../src/components/organisms/game/puzzles/sequencer/ActionTile.tsx","../src/components/organisms/game/puzzles/sequencer/SequenceBar.tsx","../src/components/organisms/game/puzzles/state-architect/StateNode.tsx","../src/components/organisms/game/puzzles/state-architect/TransitionArrow.tsx","../src/components/organisms/game/physics-sim/SimulationCanvas.tsx","../src/components/organisms/game/physics-sim/SimulationControls.tsx","../src/components/organisms/game/physics-sim/SimulationGraph.tsx","../src/components/organisms/book/BookChapterView.tsx","../src/components/organisms/book/BookCoverPage.tsx","../src/components/organisms/book/BookNavBar.tsx","../src/components/organisms/book/BookTableOfContents.tsx","../src/components/organisms/book/BookViewer.tsx","../src/components/organisms/CodeViewer.tsx","../src/components/organisms/DocumentViewer.tsx","../src/components/organisms/ComponentPatterns.tsx","../src/components/organisms/CustomPattern.tsx","../src/components/organisms/StateMachineView.tsx","../src/components/organisms/LayoutPatterns.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { View, Pressable, LayoutAnimation, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport { Icon } from '../atoms/Icon';\nimport { Input } from '../atoms/Input';\nimport { Button } from '../atoms/Button';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { Card } from '../atoms/Card';\n\nexport interface FormSectionField {\n name: string;\n label?: string;\n}\n\nexport interface FormSectionProps {\n title?: string;\n description?: string;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n fields?: FormSectionField[];\n onSubmit?: () => void;\n onCancel?: () => void;\n}\n\nfunction fieldLabel(key: string): string {\n return key\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[_-]/g, ' ')\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nexport const FormSection: React.FC<FormSectionProps> = ({\n title,\n description,\n children,\n footer,\n collapsible = false,\n defaultOpen = true,\n style,\n fields,\n onSubmit,\n onCancel,\n}) => {\n const theme = useTheme();\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const handleToggle = () => {\n if (!collapsible) return;\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\n setIsOpen(prev => !prev);\n };\n\n const renderFields = () => {\n if (!fields || fields.length === 0) return children;\n return (\n <>\n {fields.map((field) => (\n <Input\n key={field.name}\n label={field.label ?? fieldLabel(field.name)}\n placeholder={field.label ?? fieldLabel(field.name)}\n />\n ))}\n </>\n );\n };\n\n const footerContent = footer ? (\n footer\n ) : onSubmit || onCancel ? (\n <HStack spacing={8}>\n {onSubmit && (\n <Button onPress={onSubmit} variant=\"primary\">\n Save\n </Button>\n )}\n {onCancel && (\n <Button onPress={onCancel} variant=\"ghost\">\n Cancel\n </Button>\n )}\n </HStack>\n ) : null;\n\n return (\n <Card padding=\"lg\" style={style}>\n <VStack spacing={24}>\n {(title || description) && (\n <Pressable onPress={collapsible ? handleToggle : undefined} disabled={!collapsible}>\n <HStack spacing={8} align=\"center\">\n <VStack spacing={4} style={styles.headerText}>\n {title && <Typography variant=\"h3\">{title}</Typography>}\n {description && (\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n {description}\n </Typography>\n )}\n </VStack>\n {collapsible && (\n <Icon\n name={isOpen ? 'chevron-up' : 'chevron-down'}\n size={20}\n color={theme.colors['muted-foreground']}\n />\n )}\n </HStack>\n </Pressable>\n )}\n\n {isOpen && (\n <VStack spacing={16}>\n {renderFields()}\n </VStack>\n )}\n\n {isOpen && footerContent && (\n <View style={styles.footer}>\n {footerContent}\n </View>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n headerText: {\n flex: 1,\n },\n footer: {\n borderTopWidth: 1,\n borderTopColor: '#e5e7eb',\n paddingTop: 16,\n },\n});\n\nFormSection.displayName = 'FormSection';\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { LoadingState } from '../molecules/LoadingState';\nimport type { EntityRow } from '../../types';\nimport { EmptyState } from '../molecules/EmptyState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CardGridProps {\n entity: readonly EntityRow[];\n renderItem: (item: EntityRow) => React.ReactElement;\n keyExtractor: (item: EntityRow) => string;\n isLoading?: boolean;\n isError?: boolean;\n onRetry?: () => void;\n emptyMessage?: string;\n columns?: number;\n}\n\nexport function CardGrid({\n entity,\n renderItem,\n keyExtractor,\n isLoading,\n isError,\n onRetry,\n emptyMessage = 'No items found',\n columns = 1,\n}: CardGridProps) {\n if (isLoading) {\n return <LoadingState />;\n }\n\n if (isError) {\n return <ErrorState onRetry={onRetry} />;\n }\n\n if (!entity || entity.length === 0) {\n return <EmptyState message={emptyMessage} />;\n }\n\n return (\n <View style={styles.container}>\n {entity.map((_item, _index) => (\n <View \n key={keyExtractor(_item)} \n style={[\n styles.item,\n columns > 1 && { width: `${100 / columns}%` }\n ]}\n >\n {renderItem(_item)}\n </View>\n ))}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n padding: 16,\n },\n item: {\n width: '100%',\n padding: 8,\n },\n});\n\nCardGrid.displayName = 'CardGrid';\n","import React from 'react';\nimport { View, StyleSheet, ScrollView } from 'react-native';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { Badge } from '../atoms/Badge';\n\nexport interface DetailField {\n label: string;\n value: string;\n variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\nexport interface DetailPanelProps {\n title: string;\n subtitle?: string;\n status?: {\n label: string;\n variant: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n };\n fields: DetailField[];\n}\n\nexport const DetailPanel: React.FC<DetailPanelProps> = ({\n title,\n subtitle,\n status,\n fields,\n}) => {\n return (\n <ScrollView style={styles.container}>\n <Card padding=\"lg\">\n <VStack spacing={24}>\n {/* Header */}\n <VStack spacing={8}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h2\" style={styles.title}>\n {title}\n </Typography>\n {status && (\n <Badge variant={status.variant} size=\"md\">\n {status.label}\n </Badge>\n )}\n </HStack>\n {subtitle && (\n <Typography variant=\"body\" color=\"#6b7280\">\n {subtitle}\n </Typography>\n )}\n </VStack>\n\n {/* Fields */}\n <VStack spacing={16}>\n {fields.map((field, index) => (\n <View \n key={index} \n style={[\n styles.field,\n index < fields.length - 1 && styles.fieldBorder\n ]}\n >\n <Typography variant=\"caption\" color=\"#6b7280\">\n {field.label}\n </Typography>\n <Badge variant={field.variant || 'default'} size=\"sm\">\n {field.value}\n </Badge>\n </View>\n ))}\n </VStack>\n </VStack>\n </Card>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n title: {\n flex: 1,\n },\n field: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: 12,\n },\n fieldBorder: {\n borderBottomWidth: 1,\n borderBottomColor: '#e5e7eb',\n },\n});\n\nDetailPanel.displayName = 'DetailPanel';\n","import React from 'react';\nimport { View, Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface PageHeaderAction {\n label: string;\n onPress: () => void;\n}\n\nexport interface PageHeaderProps {\n title: string;\n subtitle?: string;\n description?: string;\n actions?: PageHeaderAction[];\n showBack?: boolean;\n onBack?: () => void;\n children?: React.ReactNode;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n subtitle,\n description,\n actions,\n showBack,\n onBack,\n children,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <VStack spacing={8} style={[styles.container, style as ViewStyle]}>\n <HStack spacing={8} align=\"center\">\n {showBack && onBack && (\n <Pressable onPress={onBack} style={styles.backButton}>\n <Typography variant=\"h4\" style={{ color: theme.colors.primary }}>\n ←\n </Typography>\n </Pressable>\n )}\n <Typography variant=\"h2\" style={{ color: theme.colors.foreground, flex: 1 }}>\n {title}\n </Typography>\n </HStack>\n\n {subtitle && (\n <Typography variant=\"h4\" style={{ color: theme.colors['muted-foreground'] }}>\n {subtitle}\n </Typography>\n )}\n\n {description && (\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'] }}>\n {description}\n </Typography>\n )}\n\n {actions && actions.length > 0 && (\n <HStack spacing={8} style={styles.actions}>\n {actions.map((action, index) => (\n <Button key={index} onPress={action.onPress} size=\"sm\">\n {action.label}\n </Button>\n ))}\n </HStack>\n )}\n\n {children}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n paddingTop: 8,\n },\n backButton: {\n padding: 4,\n },\n actions: {\n flexWrap: 'wrap',\n },\n});\n\nPageHeader.displayName = 'PageHeader';\n","import React from 'react';\nimport { \n View, \n ScrollView,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport type { EntityRow } from '../../types';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\nimport { HStack } from '../atoms/Stack';\n\nexport interface DataColumn {\n key: string;\n header: string;\n width?: number;\n flex?: number;\n}\n\nexport interface DataTableProps {\n columns: DataColumn[];\n entity: readonly EntityRow[];\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const DataTable: React.FC<DataTableProps> = ({\n columns,\n entity,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (entity.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No data available\" />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n {/* Header */}\n <View style={[styles.headerRow, { backgroundColor: theme.colors.muted }]}>\n {columns.map((col) => (\n <View \n key={col.key} \n style={[\n styles.cell, \n { \n width: col.width, \n flex: col.flex,\n minWidth: col.width,\n }\n ]}\n >\n <Typography variant=\"label\" style={{ color: theme.colors.foreground }}>\n {col.header}\n </Typography>\n </View>\n ))}\n </View>\n\n {/* Rows */}\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n <View>\n {entity.map((row, rowIndex) => (\n <HStack \n key={rowIndex} \n style={[\n styles.dataRow,\n { \n backgroundColor: rowIndex % 2 === 0 ? theme.colors.card : theme.colors.background,\n borderBottomColor: theme.colors.border,\n },\n ]}\n >\n {columns.map((col) => (\n <View \n key={col.key} \n style={[\n styles.cell, \n { \n width: col.width, \n flex: col.flex,\n minWidth: col.width || 100,\n }\n ]}\n >\n {typeof row[col.key] === 'string' ? (\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n {row[col.key] as React.ReactNode}\n </Typography>\n ) : (\n (row[col.key] as React.ReactNode)\n )}\n </View>\n ))}\n </HStack>\n ))}\n </View>\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n borderRadius: 8,\n overflow: 'hidden',\n },\n headerRow: {\n flexDirection: 'row',\n paddingVertical: 12,\n paddingHorizontal: 16,\n },\n dataRow: {\n flexDirection: 'row',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n },\n cell: {\n paddingRight: 16,\n },\n});\n\nDataTable.displayName = 'DataTable';\n","import React from 'react';\nimport { \n View, \n TouchableOpacity,\n StyleSheet, \n ViewStyle \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';\nimport type { EventKey, EventPayload } from '../../types';\n\n\nexport interface StatCardProps {\n title: string;\n value: string | number;\n subtitle?: string;\n icon?: React.ReactNode;\n trend?: 'up' | 'down' | 'neutral';\n trendValue?: string;\n onPress?: () => void;\n action?: EventKey;\n actionPayload?: EventPayload;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const StatCard: React.FC<StatCardProps> = ({\n title,\n value,\n subtitle,\n icon,\n trend,\n trendValue,\n onPress,\n action,\n actionPayload,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, actionPayload);\n }\n onPress?.();\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.card }, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.card }, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const trendColors = {\n up: theme.colors.success,\n down: theme.colors.error,\n neutral: theme.colors['muted-foreground'],\n };\n\n const trendIcons = {\n up: '↑',\n down: '↓',\n neutral: '→',\n };\n\n const Content = (\n <VStack spacing={8} style={styles.content}>\n <View style={styles.header}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {title}\n </Typography>\n {icon && <View>{icon}</View>}\n </View>\n\n <Typography variant=\"h2\" style={{ color: theme.colors.foreground }}>\n {value}\n </Typography>\n\n {(subtitle || trend) && (\n <View style={styles.footer}>\n {subtitle && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {subtitle}\n </Typography>\n )}\n {trend && (\n <Typography \n variant=\"caption\" \n style={{ color: trendColors[trend] }}\n >\n {trendIcons[trend]} {trendValue}\n </Typography>\n )}\n </View>\n )}\n </VStack>\n );\n\n if (onPress || action) {\n return (\n <TouchableOpacity \n onPress={handlePress}\n style={[\n styles.container, \n { backgroundColor: theme.colors.card },\n theme.shadows.sm,\n style,\n ]}\n >\n {Content}\n </TouchableOpacity>\n );\n }\n\n return (\n <View \n style={[\n styles.container, \n { backgroundColor: theme.colors.card },\n theme.shadows.sm,\n style,\n ]}\n >\n {Content}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n padding: 16,\n },\n content: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n footer: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: 4,\n },\n});\n\nStatCard.displayName = 'StatCard';\n","import React from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n timestamp?: string;\n status?: 'completed' | 'current' | 'pending';\n}\n\nexport interface TimelineProps {\n entity: TimelineItem[];\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({\n entity,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <VStack spacing={0} style={[styles.container, style as ViewStyle]}>\n {entity.map((item, index) => {\n const isLast = index === entity.length - 1;\n const status = item.status || (index === 0 ? 'current' : 'pending');\n \n const statusColors = {\n completed: theme.colors.success,\n current: theme.colors.primary,\n pending: theme.colors['muted-foreground'],\n };\n\n const dotColor = statusColors[status];\n\n return (\n <HStack key={item.id} spacing={12} style={styles.item}>\n <VStack align=\"center\" style={styles.lineContainer}>\n <View \n style={[\n styles.dot, \n { \n backgroundColor: dotColor,\n borderColor: dotColor,\n } \n ]} \n />\n {!isLast && (\n <View \n style={[\n styles.line, \n { backgroundColor: theme.colors.border }\n ]} \n />\n )}\n </VStack>\n\n <VStack spacing={2} style={styles.content}>\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n {item.title}\n </Typography>\n {item.description && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {item.description}\n </Typography>\n )}\n {item.timestamp && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {item.timestamp}\n </Typography>\n )}\n </VStack>\n </HStack>\n );\n })}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n item: {\n paddingBottom: 16,\n },\n lineContainer: {\n width: 20,\n alignItems: 'center',\n },\n dot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n borderWidth: 2,\n },\n line: {\n width: 2,\n flex: 1,\n marginTop: 4,\n },\n content: {\n flex: 1,\n paddingTop: 2,\n },\n});\n\nTimeline.displayName = 'Timeline';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle, ScrollView } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface ChartDataPoint {\n label: string;\n value: number;\n color?: string;\n}\n\nexport type ChartType = 'bar' | 'line';\n\nexport interface ChartProps {\n entity: ChartDataPoint[];\n type?: ChartType;\n title?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Maximum value for Y-axis scaling (auto-calculated if not provided) */\n maxValue?: number;\n /** Height of the chart */\n height?: number;\n /** Show value labels on bars */\n showValues?: boolean;\n}\n\nexport const Chart: React.FC<ChartProps> = ({\n entity,\n type = 'bar',\n title,\n style,\n isLoading,\n error,\n maxValue: propMaxValue,\n height = 200,\n showValues = true,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading chart...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (entity.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No chart data available\" />\n </View>\n );\n }\n\n const maxValue = propMaxValue ?? Math.max(...entity.map((d) => d.value), 1);\n\n const renderBarChart = (): React.ReactNode => {\n return (\n <HStack spacing={8} align=\"flex-end\" style={[styles.chartContainer, { height }]}>\n {entity.map((item, index) => {\n const barHeight = (item.value / maxValue) * height * 0.8;\n const barColor = item.color || theme.colors.primary;\n\n return (\n <VStack\n key={index}\n align=\"center\"\n spacing={4}\n style={styles.barWrapper}\n >\n {showValues && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {item.value}\n </Typography>\n )}\n <View\n style={[\n styles.bar,\n {\n height: barHeight,\n backgroundColor: barColor,\n borderRadius: theme.borderRadius.sm,\n },\n ]}\n />\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors.foreground, textAlign: 'center' }}\n >\n {item.label}\n </Typography>\n </VStack>\n );\n })}\n </HStack>\n );\n };\n\n const renderLineChart = (): React.ReactNode => {\n const points = entity.map((item, index) => {\n const x = (index / (entity.length - 1 || 1)) * 100;\n const y = 100 - (item.value / maxValue) * 80;\n return { x, y, label: item.label, value: item.value };\n });\n\n // SVG path for line chart (for future SVG implementation)\n void points;\n // const pathD = points\n // .map((point, index) => {\n // return `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`;\n // })\n // .join(' ');\n\n return (\n <View style={[styles.chartContainer, { height }]}>\n <View style={styles.lineChartContainer}>\n {/* Grid lines */}\n {[0, 25, 50, 75, 100].map((percent) => (\n <View\n key={percent}\n style={[\n styles.gridLine,\n {\n bottom: `${percent}%`,\n backgroundColor: theme.colors.border,\n },\n ]}\n />\n ))}\n\n {/* Line */}\n <View style={styles.linePathContainer}>\n {points.map((point, index) => {\n if (index === points.length - 1) return null;\n const nextPoint = points[index + 1];\n const x1 = (point.x / 100) * styles.linePathContainer.width;\n const y1 = (point.y / 100) * height;\n const x2 = (nextPoint.x / 100) * styles.linePathContainer.width;\n const y2 = (nextPoint.y / 100) * height;\n\n return (\n <View\n key={index}\n style={[\n styles.lineSegment,\n {\n left: `${point.x}%`,\n bottom: `${point.y}%`,\n width: Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\n transform: [\n {\n rotate: `${Math.atan2(y1 - y2, x2 - x1)}rad`,\n },\n ],\n backgroundColor: theme.colors.primary,\n },\n ]}\n />\n );\n })}\n </View>\n\n {/* Data points */}\n {points.map((point, index) => (\n <View\n key={index}\n style={[\n styles.dataPoint,\n {\n left: `${point.x}%`,\n bottom: `${point.y}%`,\n backgroundColor: entity[index]?.color || theme.colors.primary,\n borderColor: theme.colors.card,\n },\n ]}\n />\n ))}\n </View>\n\n {/* X-axis labels */}\n <HStack justify=\"space-between\" style={styles.xAxisLabels}>\n {entity.map((item, index) => (\n <Typography\n key={index}\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'], fontSize: 10 }}\n >\n {item.label}\n </Typography>\n ))}\n </HStack>\n </View>\n );\n };\n\n return (\n <VStack spacing={12} style={[styles.container, style ?? {}]}>\n {title && (\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {title}\n </Typography>\n )}\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n {type === 'bar' ? renderBarChart() : renderLineChart()}\n </ScrollView>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n padding: 16,\n },\n chartContainer: {\n minWidth: 300,\n },\n barWrapper: {\n flex: 1,\n minWidth: 40,\n },\n bar: {\n width: '60%',\n minHeight: 4,\n },\n lineChartContainer: {\n flex: 1,\n position: 'relative',\n },\n gridLine: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: 1,\n opacity: 0.3,\n },\n linePathContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 100,\n },\n lineSegment: {\n position: 'absolute',\n height: 2,\n transformOrigin: 'left center',\n },\n dataPoint: {\n position: 'absolute',\n width: 10,\n height: 10,\n borderRadius: 5,\n borderWidth: 2,\n marginLeft: -5,\n marginBottom: -5,\n },\n xAxisLabels: {\n marginTop: 8,\n },\n});\n\nChart.displayName = 'Chart';\n","import React, { useState } from 'react';\nimport {\n View,\n Image,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n Modal,\n ScrollView,\n Dimensions,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\n\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\nimport type { EventPayload } from '@almadar/core';\n\n\nexport type MediaType = 'image' | 'video';\n\nexport interface MediaItem {\n id: string;\n uri: string;\n thumbnailUri?: string;\n type: MediaType;\n title?: string;\n caption?: string;\n}\n\nexport interface MediaGalleryProps {\n entity: MediaItem[];\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Number of columns in the grid */\n columns?: 2 | 3 | 4;\n /** Gap between items */\n gap?: number;\n /** Aspect ratio of items (width / height) */\n aspectRatio?: number;\n /** Maximum height of the gallery container */\n maxHeight?: number;\n /** Event emitted when an item is selected */\n selectEvent?: string;\n /** Event emitted when an item is long-pressed */\n contextEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nconst { width: screenWidth } = Dimensions.get('window');\n\nexport const MediaGallery: React.FC<MediaGalleryProps> = ({\n entity,\n style,\n isLoading,\n error,\n columns = 3,\n gap = 8,\n aspectRatio = 1,\n maxHeight,\n selectEvent,\n contextEvent,\n actionPayload,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading media...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (entity.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No media available\" icon={<Typography variant=\"h2\">🖼️</Typography>} />\n </View>\n );\n }\n\n const itemWidth = (screenWidth - 32 - gap * (columns - 1)) / columns;\n const itemHeight = itemWidth / aspectRatio;\n\n const handleItemPress = (item: MediaItem, index: number) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { ...actionPayload, item, index } as unknown as EventPayload);\n }\n setSelectedIndex(index);\n };\n\n const handleItemLongPress = (item: MediaItem, index: number) => {\n if (contextEvent) {\n eventBus.emit(`UI:${contextEvent}`, { ...actionPayload, item, index } as unknown as EventPayload);\n }\n };\n\n const handleCloseModal = () => {\n setSelectedIndex(null);\n };\n\n const renderItem = (item: MediaItem, index: number): React.ReactNode => {\n const isVideo = item.type === 'video';\n\n return (\n <TouchableOpacity\n key={item.id}\n onPress={() => handleItemPress(item, index)}\n onLongPress={() => handleItemLongPress(item, index)}\n delayLongPress={500}\n activeOpacity={0.8}\n style={[\n styles.item,\n {\n width: itemWidth,\n height: itemHeight,\n marginBottom: gap,\n },\n ]}\n >\n <Image\n source={{ uri: item.thumbnailUri || item.uri }}\n style={styles.image}\n resizeMode=\"cover\"\n />\n {isVideo && (\n <View style={styles.videoOverlay}>\n <Typography variant=\"h4\" style={{ color: '#ffffff' }}>\n ▶\n </Typography>\n </View>\n )}\n {item.title && (\n <View style={styles.titleOverlay}>\n <Typography\n variant=\"caption\"\n style={{ color: '#ffffff' }}\n numberOfLines={1}\n >\n {item.title}\n </Typography>\n </View>\n )}\n </TouchableOpacity>\n );\n };\n\n const renderGrid = (): React.ReactNode => {\n const rows: MediaItem[][] = [];\n for (let i = 0; i < entity.length; i += columns) {\n rows.push(entity.slice(i, i + columns));\n }\n\n return (\n <VStack spacing={0}>\n {rows.map((row, rowIndex) => (\n <HStack key={rowIndex} spacing={gap} justify=\"flex-start\">\n {row.map((item, colIndex) => renderItem(item, rowIndex * columns + colIndex))}\n </HStack>\n ))}\n </VStack>\n );\n };\n\n const selectedItem = selectedIndex !== null ? entity[selectedIndex] : null;\n\n return (\n <View style={[styles.container, style]}>\n <ScrollView\n showsVerticalScrollIndicator={true}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {renderGrid()}\n </ScrollView>\n\n {/* Full-screen viewer modal */}\n <Modal\n visible={selectedIndex !== null}\n transparent\n animationType=\"fade\"\n onRequestClose={handleCloseModal}\n >\n <View style={[styles.modalContainer, { backgroundColor: 'rgba(0,0,0,0.95)' }]}>\n <TouchableOpacity\n style={styles.closeButton}\n onPress={handleCloseModal}\n >\n <Typography variant=\"h4\" style={{ color: '#ffffff' }}>\n ✕\n </Typography>\n </TouchableOpacity>\n\n {selectedItem && (\n <VStack align=\"center\" spacing={16} style={styles.modalContent}>\n <Image\n source={{ uri: selectedItem.uri }}\n style={styles.fullImage}\n resizeMode=\"contain\"\n />\n {selectedItem.title && (\n <Typography variant=\"h4\" style={{ color: '#ffffff' }}>\n {selectedItem.title}\n </Typography>\n )}\n {selectedItem.caption && (\n <Typography variant=\"body\" style={{ color: '#cccccc' }}>\n {selectedItem.caption}\n </Typography>\n )}\n <Badge variant=\"secondary\">\n {selectedItem.type === 'video' ? '🎥 Video' : '📷 Image'}\n </Badge>\n </VStack>\n )}\n\n {/* Navigation arrows */}\n {selectedIndex !== null && selectedIndex > 0 && (\n <TouchableOpacity\n style={[styles.navButton, styles.prevButton]}\n onPress={() => setSelectedIndex(selectedIndex - 1)}\n >\n <Typography variant=\"h3\" style={{ color: '#ffffff' }}>\n ◀\n </Typography>\n </TouchableOpacity>\n )}\n {selectedIndex !== null && selectedIndex < entity.length - 1 && (\n <TouchableOpacity\n style={[styles.navButton, styles.nextButton]}\n onPress={() => setSelectedIndex(selectedIndex + 1)}\n >\n <Typography variant=\"h3\" style={{ color: '#ffffff' }}>\n ▶\n </Typography>\n </TouchableOpacity>\n )}\n </View>\n </Modal>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n item: {\n borderRadius: 8,\n overflow: 'hidden',\n backgroundColor: '#f1f5f9',\n },\n image: {\n width: '100%',\n height: '100%',\n },\n videoOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.4)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n titleOverlay: {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(0,0,0,0.6)',\n paddingHorizontal: 8,\n paddingVertical: 4,\n },\n modalContainer: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n closeButton: {\n position: 'absolute',\n top: 40,\n right: 20,\n zIndex: 10,\n padding: 12,\n },\n modalContent: {\n width: '100%',\n padding: 20,\n },\n fullImage: {\n width: '100%',\n height: 300,\n },\n navButton: {\n position: 'absolute',\n top: '50%',\n padding: 16,\n marginTop: -24,\n },\n prevButton: {\n left: 10,\n },\n nextButton: {\n right: 10,\n },\n});\n\nMediaGallery.displayName = 'MediaGallery';\n","import React from 'react';\nimport { \n View, \n TouchableOpacity,\n ScrollView,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface WizardStep {\n id: string;\n title: string;\n description?: string;\n content: React.ReactNode;\n isValid?: boolean;\n}\n\nexport interface WizardContainerProps {\n steps: WizardStep[];\n currentStep?: number;\n onStepChange?: (step: number) => void;\n onComplete?: () => void;\n onCancel?: () => void;\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 WizardContainer: React.FC<WizardContainerProps> = ({\n steps,\n currentStep: controlledStep,\n onStepChange,\n onComplete,\n onCancel,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalStep, setInternalStep] = React.useState(0);\n const currentStep = controlledStep ?? internalStep;\n\n const step = steps[currentStep];\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === steps.length - 1;\n const canProceed = step?.isValid !== false;\n\n const handleNext = () => {\n if (isLastStep) {\n eventBus.emit('UI:WIZARD_COMPLETE');\n onComplete?.();\n } else {\n const nextStep = currentStep + 1;\n eventBus.emit('UI:WIZARD_STEP_CHANGE', { step: nextStep });\n setInternalStep(nextStep);\n onStepChange?.(nextStep);\n }\n };\n\n const handleBack = () => {\n if (isFirstStep) {\n eventBus.emit('UI:WIZARD_CANCEL');\n onCancel?.();\n } else {\n const prevStep = currentStep - 1;\n eventBus.emit('UI:WIZARD_STEP_CHANGE', { step: prevStep });\n setInternalStep(prevStep);\n onStepChange?.(prevStep);\n }\n };\n\n const handleStepClick = (index: number) => {\n if (index <= currentStep) {\n eventBus.emit('UI:WIZARD_STEP_CHANGE', { step: index });\n setInternalStep(index);\n onStepChange?.(index);\n }\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <VStack spacing={16} style={[styles.container, style as ViewStyle]}>\n {/* Progress indicator */}\n <HStack spacing={8} style={styles.progress}>\n {steps.map((s, index) => {\n const isActive = index === currentStep;\n const isCompleted = index < currentStep;\n \n return (\n <TouchableOpacity\n key={s.id}\n onPress={() => handleStepClick(index)}\n style={[\n styles.stepIndicator,\n {\n backgroundColor: isActive \n ? theme.colors.primary \n : isCompleted \n ? theme.colors.success \n : theme.colors.muted,\n },\n ]}\n >\n <Typography \n variant=\"caption\" \n style={{ \n color: isActive || isCompleted \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground \n }}\n >\n {isCompleted ? '✓' : index + 1}\n </Typography>\n </TouchableOpacity>\n );\n })}\n </HStack>\n\n {/* Step title */}\n <VStack spacing={4} align=\"center\">\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {step?.title}\n </Typography>\n {step?.description && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {step.description}\n </Typography>\n )}\n </VStack>\n\n {/* Step content */}\n <ScrollView style={styles.content}>\n {step?.content}\n </ScrollView>\n\n {/* Navigation buttons */}\n <HStack spacing={12} justify=\"space-between\">\n <Button\n variant=\"ghost\"\n onPress={handleBack}\n action={isFirstStep ? 'WIZARD_CANCEL' : undefined}\n >\n {isFirstStep ? 'Cancel' : 'Back'}\n </Button>\n <Button\n variant=\"primary\"\n onPress={handleNext}\n disabled={!canProceed}\n action={isLastStep ? 'WIZARD_COMPLETE' : 'WIZARD_NEXT'}\n >\n {isLastStep ? 'Complete' : 'Next'}\n </Button>\n </HStack>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n padding: 16,\n },\n progress: {\n justifyContent: 'center',\n },\n stepIndicator: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flex: 1,\n },\n});\n\nWizardContainer.displayName = 'WizardContainer';\n","import React from 'react';\nimport {\n View,\n ScrollView,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { Card } from '../atoms/Card';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface FormFieldDefinition {\n name: string;\n label: string;\n type?: 'text' | 'email' | 'password' | 'number' | 'select' | 'textarea' | 'checkbox' | 'radio';\n required?: boolean;\n placeholder?: string;\n options?: Array<{ value: string; label: string }>;\n validation?: {\n pattern?: RegExp;\n minLength?: number;\n maxLength?: number;\n min?: number;\n max?: number;\n message?: string;\n };\n}\n\nexport interface FormAction {\n label: string;\n event?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n navigatesTo?: string;\n}\n\nexport interface FormProps {\n title?: string;\n description?: string;\n fields: FormFieldDefinition[];\n values?: Record<string, string | number | boolean>;\n errors?: Record<string, string>;\n onSubmit?: (values: Record<string, string | number | boolean>) => void;\n onChange?: (name: string, value: string | number | boolean) => void;\n submitLabel?: string;\n actions?: FormAction[];\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 /** Render prop for custom field rendering */\n renderField?: (field: FormFieldDefinition, value: unknown, error: string | undefined) => React.ReactNode;\n}\n\nexport const Form: React.FC<FormProps> = ({\n title,\n description,\n fields,\n values = {},\n errors = {},\n onSubmit,\n onChange,\n submitLabel = 'Submit',\n actions,\n style,\n isLoading,\n error,\n entity,\n renderField,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [formValues, setFormValues] = React.useState<Record<string, string | number | boolean>>(values);\n const [formErrors, setFormErrors] = React.useState<Record<string, string>>(errors);\n\n React.useEffect(() => {\n setFormValues(values);\n }, [values]);\n\n React.useEffect(() => {\n setFormErrors(errors);\n }, [errors]);\n\n const validateField = (field: FormFieldDefinition, value: unknown): string | undefined => {\n if (field.required && (value === undefined || value === '' || value === null)) {\n return `${field.label} is required`;\n }\n\n if (field.validation && value !== undefined && value !== '') {\n const stringValue = String(value);\n\n if (field.validation.minLength !== undefined && stringValue.length < field.validation.minLength) {\n return field.validation.message || `${field.label} must be at least ${field.validation.minLength} characters`;\n }\n\n if (field.validation.maxLength !== undefined && stringValue.length > field.validation.maxLength) {\n return field.validation.message || `${field.label} must be at most ${field.validation.maxLength} characters`;\n }\n\n if (field.validation.pattern && !field.validation.pattern.test(stringValue)) {\n return field.validation.message || `${field.label} format is invalid`;\n }\n\n if (field.type === 'number') {\n const numValue = Number(value);\n if (field.validation.min !== undefined && numValue < field.validation.min) {\n return field.validation.message || `${field.label} must be at least ${field.validation.min}`;\n }\n if (field.validation.max !== undefined && numValue > field.validation.max) {\n return field.validation.message || `${field.label} must be at most ${field.validation.max}`;\n }\n }\n }\n\n return undefined;\n };\n\n const validateForm = (): boolean => {\n const newErrors: Record<string, string> = {};\n let isValid = true;\n\n fields.forEach((field) => {\n const errorMessage = validateField(field, formValues[field.name]);\n if (errorMessage) {\n newErrors[field.name] = errorMessage;\n isValid = false;\n }\n });\n\n setFormErrors(newErrors);\n return isValid;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleChange = (name: string, value: string | number | boolean) => {\n const newValues = { ...formValues, [name]: value };\n setFormValues(newValues);\n\n // Clear error for this field when user changes it\n if (formErrors[name]) {\n const newErrors = { ...formErrors };\n delete newErrors[name];\n setFormErrors(newErrors);\n }\n\n eventBus.emit('UI:FORM_FIELD_CHANGE', { field: name, value, entity });\n onChange?.(name, value);\n };\n\n const handleSubmit = () => {\n if (!validateForm()) {\n eventBus.emit('UI:FORM_VALIDATION_ERROR', { errors: formErrors, entity });\n return;\n }\n\n eventBus.emit('UI:FORM_SUBMIT', { values: formValues, entity });\n onSubmit?.(formValues);\n };\n\n const handleAction = (action: FormAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, { values: formValues, entity, navigatesTo: action.navigatesTo });\n }\n };\n\n const renderDefaultField = (field: FormFieldDefinition): React.ReactNode => {\n const value = formValues[field.name];\n const fieldError = formErrors[field.name];\n\n if (renderField) {\n return renderField(field, value, fieldError);\n }\n\n const baseInputStyle = {\n borderWidth: 1,\n borderRadius: theme.borderRadius.md,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: theme.typography.sizes.base,\n backgroundColor: theme.colors.card,\n borderColor: fieldError ? theme.colors.error : theme.colors.border,\n color: theme.colors.foreground,\n };\n\n switch (field.type) {\n case 'select':\n return (\n <View style={styles.fieldContainer} key={field.name}>\n <Typography variant=\"label\" style={{ marginBottom: 4 }}>\n {field.label}\n {field.required && (\n <Typography variant=\"label\" style={{ color: theme.colors.error }}> *</Typography>\n )}\n </Typography>\n <View style={[baseInputStyle, { padding: 0 }]}>\n {/* Select implementation would go here - using native select or custom dropdown */}\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n Select placeholder\n </Typography>\n </View>\n {fieldError && (\n <Typography variant=\"caption\" style={{ color: theme.colors.error, marginTop: 4 }}>\n {fieldError}\n </Typography>\n )}\n </View>\n );\n\n case 'checkbox':\n return (\n <View style={styles.fieldContainer} key={field.name}>\n <HStack spacing={8} align=\"center\">\n <View\n style={{\n width: 20,\n height: 20,\n borderWidth: 1,\n borderRadius: 4,\n borderColor: fieldError ? theme.colors.error : theme.colors.border,\n backgroundColor: value ? theme.colors.primary : theme.colors.card,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {value && (\n <Typography variant=\"caption\" style={{ color: theme.colors['primary-foreground'] }}>\n ✓\n </Typography>\n )}\n </View>\n <Typography variant=\"body\">\n {field.label}\n {field.required && (\n <Typography variant=\"body\" style={{ color: theme.colors.error }}> *</Typography>\n )}\n </Typography>\n </HStack>\n {fieldError && (\n <Typography variant=\"caption\" style={{ color: theme.colors.error, marginTop: 4 }}>\n {fieldError}\n </Typography>\n )}\n </View>\n );\n\n case 'radio':\n return (\n <View style={styles.fieldContainer} key={field.name}>\n <Typography variant=\"label\" style={{ marginBottom: 4 }}>\n {field.label}\n {field.required && (\n <Typography variant=\"label\" style={{ color: theme.colors.error }}> *</Typography>\n )}\n </Typography>\n <VStack spacing={8}>\n {field.options?.map((option) => (\n <HStack key={option.value} spacing={8} align=\"center\">\n <View\n style={{\n width: 20,\n height: 20,\n borderWidth: 1,\n borderRadius: 10,\n borderColor: fieldError ? theme.colors.error : theme.colors.border,\n backgroundColor: value === option.value ? theme.colors.primary : theme.colors.card,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {value === option.value && (\n <View\n style={{\n width: 8,\n height: 8,\n borderRadius: 4,\n backgroundColor: theme.colors['primary-foreground'],\n }}\n />\n )}\n </View>\n <Typography variant=\"body\">{option.label}</Typography>\n </HStack>\n ))}\n </VStack>\n {fieldError && (\n <Typography variant=\"caption\" style={{ color: theme.colors.error, marginTop: 4 }}>\n {fieldError}\n </Typography>\n )}\n </View>\n );\n\n case 'textarea':\n return (\n <View style={styles.fieldContainer} key={field.name}>\n <Typography variant=\"label\" style={{ marginBottom: 4 }}>\n {field.label}\n {field.required && (\n <Typography variant=\"label\" style={{ color: theme.colors.error }}> *</Typography>\n )}\n </Typography>\n <View\n style={[\n baseInputStyle,\n { height: 100 },\n ]}\n >\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n {String(value || '')}\n </Typography>\n </View>\n {fieldError && (\n <Typography variant=\"caption\" style={{ color: theme.colors.error, marginTop: 4 }}>\n {fieldError}\n </Typography>\n )}\n </View>\n );\n\n default:\n return (\n <View style={styles.fieldContainer} key={field.name}>\n <Typography variant=\"label\" style={{ marginBottom: 4 }}>\n {field.label}\n {field.required && (\n <Typography variant=\"label\" style={{ color: theme.colors.error }}> *</Typography>\n )}\n </Typography>\n {/* Note: This is a placeholder representation. In a real implementation,\n use the Input component with onChangeText={(text) => handleChange(field.name, text)} */}\n <View style={baseInputStyle}>\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n {String(value || field.placeholder || '')}\n </Typography>\n </View>\n {fieldError && (\n <Typography variant=\"caption\" style={{ color: theme.colors.error, marginTop: 4 }}>\n {fieldError}\n </Typography>\n )}\n </View>\n );\n }\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading form...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (fields.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No form fields defined\" />\n </View>\n );\n }\n\n return (\n <Card style={[styles.container, style as ViewStyle]} padding=\"lg\">\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={24}>\n {(title || description) && (\n <VStack spacing={4}>\n {title && (\n <Typography variant=\"h3\" style={{ color: theme.colors.foreground }}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'] }}>\n {description}\n </Typography>\n )}\n </VStack>\n )}\n\n <VStack spacing={16}>\n {fields.map((field) => renderDefaultField(field))}\n </VStack>\n\n <HStack spacing={12} justify=\"flex-end\">\n {actions?.map((action, index) => (\n <Button\n key={`${action.label}-${index}`}\n variant={action.variant || 'default'}\n onPress={() => handleAction(action)}\n action={action.event}\n >\n {action.label}\n </Button>\n ))}\n <Button variant=\"primary\" onPress={handleSubmit} action=\"FORM_SUBMIT\">\n {submitLabel}\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n fieldContainer: {\n width: '100%',\n },\n});\n\nForm.displayName = 'Form';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Modal, ModalProps } from '../molecules/Modal';\nimport { Button } from '../atoms/Button';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { Card } from '../atoms/Card';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport type ConfirmDialogVariant = 'danger' | 'warning' | 'info' | 'default';\n\nexport interface ConfirmDialogProps {\n /** Whether the dialog is open */\n isOpen: boolean;\n\n /** Callback when dialog is closed */\n onClose: () => void;\n\n /** Callback when action is confirmed */\n onConfirm: () => void;\n\n /** Dialog title */\n title: string;\n\n /** Dialog message/description */\n message?: string;\n\n /** Alias for message (schema compatibility) */\n description?: string;\n\n /** Confirm button text */\n confirmText?: string;\n\n /** Alias for confirmText (schema compatibility) */\n confirmLabel?: string;\n\n /** Cancel button text */\n cancelText?: string;\n\n /** Alias for cancelText (schema compatibility) */\n cancelLabel?: string;\n\n /** Dialog variant */\n variant?: ConfirmDialogVariant;\n\n /** Modal size */\n size?: ModalProps['size'];\n\n /** Loading state for confirm button */\n isLoading?: boolean;\n\n /** Error state */\n error?: Error | null;\n\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n\n /** Additional style for the dialog */\n style?: ViewStyle;\n\n /** Declarative confirm event - emits UI:{confirmEvent} via eventBus when confirmed */\n confirmEvent?: string;\n\n /** Declarative cancel event - emits UI:{cancelEvent} via eventBus when cancelled */\n cancelEvent?: string;\n\n /** Declarative close event - emits UI:{closeEvent} via eventBus when closed */\n closeEvent?: string;\n}\n\nconst variantConfig = {\n danger: {\n icon: '⚠️',\n iconBg: '#fee2e2',\n iconColor: '#dc2626',\n confirmVariant: 'destructive' as const,\n },\n warning: {\n icon: '⚡',\n iconBg: '#fef3c7',\n iconColor: '#ca8a04',\n confirmVariant: 'primary' as const,\n },\n info: {\n icon: 'ℹ️',\n iconBg: '#dbeafe',\n iconColor: '#0ea5e9',\n confirmVariant: 'primary' as const,\n },\n default: {\n icon: '✓',\n iconBg: '#d1fae5',\n iconColor: '#16a34a',\n confirmVariant: 'primary' as const,\n },\n};\n\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n description,\n confirmText,\n confirmLabel,\n cancelText,\n cancelLabel,\n variant = 'default',\n size = 'sm',\n isLoading = false,\n error,\n style,\n confirmEvent,\n cancelEvent,\n closeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const config = variantConfig[variant];\n\n // Resolve aliases\n const resolvedMessage = message ?? description ?? 'Are you sure you want to proceed?';\n const resolvedConfirmText = confirmText ?? confirmLabel ?? 'Confirm';\n const resolvedCancelText = cancelText ?? cancelLabel ?? 'Cancel';\n\n const handleConfirm = () => {\n if (confirmEvent) {\n eventBus.emit(`UI:${confirmEvent}`, {});\n }\n onConfirm();\n };\n\n const handleCancel = () => {\n if (cancelEvent) {\n eventBus.emit(`UI:${cancelEvent}`, {});\n }\n onClose();\n };\n\n const handleClose = () => {\n if (closeEvent) {\n eventBus.emit(`UI:${closeEvent}`, {});\n }\n onClose();\n };\n\n const footer = (\n <HStack justify=\"flex-end\" spacing={12}>\n <Button\n variant=\"secondary\"\n onPress={handleCancel}\n disabled={isLoading}\n action={cancelEvent}\n >\n {resolvedCancelText}\n </Button>\n <Button\n variant={config.confirmVariant}\n onPress={handleConfirm}\n isLoading={isLoading}\n disabled={isLoading}\n action={confirmEvent}\n >\n {resolvedConfirmText}\n </Button>\n </HStack>\n );\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={handleClose}\n title={title}\n size={size}\n showCloseButton={false}\n closeOnBackdrop={!isLoading}\n footer={footer}\n >\n <View style={[styles.container, style]}>\n {isLoading ? (\n <LoadingState />\n ) : error ? (\n <ErrorState message={error.message} onRetry={handleConfirm} />\n ) : (\n <HStack spacing={16} align=\"flex-start\">\n {/* Icon */}\n <Card\n style={[\n styles.iconContainer,\n { backgroundColor: config.iconBg },\n ]}\n padding=\"md\"\n >\n <Typography variant=\"h4\" style={{ color: config.iconColor }}>\n {config.icon}\n </Typography>\n </Card>\n\n {/* Content */}\n <VStack spacing={4} style={styles.content}>\n <Typography variant=\"h4\">{title}</Typography>\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n {resolvedMessage}\n </Typography>\n </VStack>\n </HStack>\n )}\n </View>\n </Modal>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n paddingVertical: 8,\n },\n iconContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 48,\n minHeight: 48,\n },\n content: {\n flex: 1,\n },\n});\n\nConfirmDialog.displayName = 'ConfirmDialog';\n","/**\n * Table Organism Component\n *\n * A data table component with headers, rows, sorting, and selection.\n * Uses ScrollView for horizontal scrolling on mobile.\n * Emits events via useEventBus — never manages internal state for search, sort,\n * selection, or pagination. All state is owned by the trait state machine.\n */\n\nimport React from 'react';\nimport {\n View,\n ScrollView,\n TouchableOpacity,\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 { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Checkbox } from '../atoms/Checkbox';\nimport { Badge } from '../atoms/Badge';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface TableColumn<T = Record<string, unknown>> {\n /**\n * Column key\n */\n key: string;\n\n /**\n * Column header label\n */\n label: string;\n\n /**\n * Sortable column\n * @default false\n */\n sortable?: boolean;\n\n /**\n * Custom cell renderer\n */\n render?: (value: unknown, row: T, index: number) => React.ReactNode;\n\n /**\n * Column width\n */\n width?: number;\n\n /**\n * Column flex\n */\n flex?: number;\n}\n\nexport interface TableProps<T = Record<string, unknown>> {\n /**\n * Table columns\n */\n columns: TableColumn<T>[];\n\n /**\n * Entity data (array) or entity name\n */\n entity?: T[] | string;\n\n /**\n * Additional styles\n */\n style?: ViewStyle;\n\n /**\n * Enable row selection\n * @default false\n */\n selectable?: boolean;\n\n /**\n * Enable sorting\n * @default false\n */\n sortable?: boolean;\n\n /**\n * Current sort column (display hint, mapped from sortBy)\n */\n sortColumn?: string;\n\n /**\n * Current sort direction (display hint)\n */\n sortDirection?: SortDirection;\n\n /**\n * Current sort field (from EntityDisplayProps)\n */\n sortBy?: string;\n\n /**\n * Currently selected item IDs\n */\n selectedIds?: readonly (string | number)[];\n\n /**\n * Loading state\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Error state\n */\n error?: Error | null;\n\n /**\n * Empty state message\n */\n emptyMessage?: string;\n\n /**\n * Row actions\n */\n rowActions?: (row: T) => Array<{\n label: string;\n event?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n }>;\n}\n\nexport const Table = <T extends Record<string, unknown>>({\n columns,\n entity,\n style,\n selectable = false,\n sortable = false,\n sortColumn,\n sortDirection: sortDirectionProp,\n sortBy,\n selectedIds,\n isLoading = false,\n error,\n emptyMessage = 'No data available',\n rowActions,\n}: TableProps<T>) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n // Resolve data from entity prop\n const resolvedData: T[] = Array.isArray(entity) ? entity : [];\n\n // Resolve display hints\n const resolvedSortColumn = sortColumn ?? sortBy;\n const resolvedSortDirection = sortDirectionProp ?? 'asc';\n const selectedRows: string[] = selectedIds ? selectedIds.map(String) : [];\n\n const handleSort = (column: string) => {\n if (!sortable) return;\n\n const newDirection: SortDirection =\n resolvedSortColumn === column && resolvedSortDirection === 'asc'\n ? 'desc'\n : 'asc';\n\n eventBus.emit('UI:SORT', { field: column, direction: newDirection } as EventPayload);\n };\n\n const handleSelectAll = (checked: boolean) => {\n if (!selectable) return;\n if (checked) {\n const allIds = resolvedData.map((row) => String(row.id ?? ''));\n eventBus.emit('UI:SELECT', { ids: allIds } as EventPayload);\n } else {\n eventBus.emit('UI:DESELECT', { ids: selectedRows } as EventPayload);\n }\n };\n\n const handleSelectRow = (rowKey: string, checked: boolean) => {\n if (!selectable) return;\n if (checked) {\n eventBus.emit('UI:SELECT', { ids: [rowKey] } as EventPayload);\n } else {\n eventBus.emit('UI:DESELECT', { ids: [rowKey] } as EventPayload);\n }\n };\n\n const handleRowAction = (action: { event?: string }, row: T) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, { row } as EventPayload);\n }\n };\n\n const allSelected =\n selectable &&\n resolvedData.length > 0 &&\n resolvedData.every((row) => selectedRows.includes(String(row.id)));\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style ?? {}]}>\n <LoadingState message=\"Loading table...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, style ?? {}]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (resolvedData.length === 0) {\n return (\n <Card style={[styles.container, style ?? {}]}>\n <EmptyState message={emptyMessage} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, style ?? {}]}>\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n <View>\n {/* Header */}\n <View\n style={[\n styles.headerRow,\n { backgroundColor: theme.colors.muted },\n ]}\n >\n {selectable && (\n <View style={[styles.cell, styles.checkboxCell]}>\n <Checkbox\n checked={allSelected}\n onChange={handleSelectAll}\n />\n </View>\n )}\n {columns.map((column) => (\n <TouchableOpacity\n key={column.key}\n onPress={() => column.sortable && handleSort(column.key)}\n disabled={!sortable || !column.sortable}\n style={[\n styles.cell,\n { width: column.width, flex: column.flex },\n ]}\n >\n <HStack spacing={4} align=\"center\">\n <Typography\n variant=\"label\"\n style={{\n color: theme.colors.foreground,\n fontWeight: sortable && column.sortable ? '600' : '500',\n }}\n >\n {column.label}\n </Typography>\n {sortable &&\n column.sortable &&\n resolvedSortColumn === column.key && (\n <Typography variant=\"caption\" color={theme.colors.primary}>\n {resolvedSortDirection === 'asc' ? '▲' : '▼'}\n </Typography>\n )}\n </HStack>\n </TouchableOpacity>\n ))}\n {rowActions && <View style={[styles.cell, styles.actionsCell]} />}\n </View>\n\n {/* Rows */}\n <VStack spacing={0}>\n {resolvedData.map((row, index) => {\n const rowKey = String(row.id ?? index);\n const isSelected = selectedRows.includes(rowKey);\n const actions = rowActions ? rowActions(row) : [];\n\n return (\n <HStack\n key={rowKey}\n style={[\n styles.dataRow,\n {\n backgroundColor:\n index % 2 === 0\n ? theme.colors.card\n : theme.colors.background,\n borderBottomColor: theme.colors.border,\n },\n isSelected ? { backgroundColor: theme.colors['primary-hover'] } : {},\n ]}\n >\n {selectable && (\n <View style={[styles.cell, styles.checkboxCell]}>\n <Checkbox\n checked={isSelected}\n onChange={(checked: boolean) =>\n handleSelectRow(rowKey, checked)\n }\n />\n </View>\n )}\n {columns.map((column) => (\n <View\n key={column.key}\n style={[\n styles.cell,\n { width: column.width, flex: column.flex },\n ]}\n >\n {column.render ? (\n column.render(row[column.key], row, index)\n ) : (\n <Typography\n variant=\"body\"\n style={{ color: theme.colors.foreground }}\n >\n {row[column.key]?.toString() || '-'}\n </Typography>\n )}\n </View>\n ))}\n {rowActions && actions.length > 0 && (\n <View style={[styles.cell, styles.actionsCell]}>\n <HStack spacing={4}>\n {actions.map((action, actionIndex) => (\n <TouchableOpacity\n key={actionIndex}\n onPress={() => handleRowAction(action, row)}\n >\n <Badge\n variant={action.variant ?? 'default'}\n size=\"sm\"\n >\n {action.label}\n </Badge>\n </TouchableOpacity>\n ))}\n </HStack>\n </View>\n )}\n </HStack>\n );\n })}\n </VStack>\n </View>\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n overflow: 'hidden',\n },\n headerRow: {\n flexDirection: 'row',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n },\n dataRow: {\n flexDirection: 'row',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n },\n cell: {\n paddingRight: 16,\n minWidth: 80,\n justifyContent: 'center',\n },\n checkboxCell: {\n width: 48,\n minWidth: 48,\n paddingRight: 8,\n },\n actionsCell: {\n minWidth: 120,\n },\n});\n\nTable.displayName = 'Table';\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Modal } from '../molecules/Modal';\nimport { Button } from '../atoms/Button';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport type { BusEventListener, EventKey, EventPayload } from '../../types';\n\nexport interface ModalAction {\n label: string;\n event?: EventKey;\n navigatesTo?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n payload?: EventPayload;\n}\n\nexport interface ModalContent {\n id: string;\n title?: string;\n content: React.ReactNode;\n actions?: ModalAction[];\n size?: 'sm' | 'md' | 'lg';\n closeOnBackdrop?: boolean;\n showCloseButton?: boolean;\n}\n\nexport interface ModalSlotProps {\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 /** Default size for modals */\n defaultSize?: 'sm' | 'md' | 'lg';\n /** Event name to listen for open commands */\n openEvent?: EventKey;\n /** Event name to listen for close commands */\n closeEvent?: EventKey;\n}\n\nexport const ModalSlot: React.FC<ModalSlotProps> = ({\n style,\n isLoading,\n error,\n entity,\n defaultSize = 'md',\n openEvent = 'UI:MODAL_OPEN',\n closeEvent = 'UI:MODAL_CLOSE',\n}) => {\n const eventBus = useEventBus();\n const [, setModalQueue] = useState<ModalContent[]>([]);\n const [currentModal, setCurrentModal] = useState<ModalContent | null>(null);\n\n const openModal = useCallback((modalContent: ModalContent) => {\n setModalQueue((prev) => [...prev, modalContent]);\n if (!currentModal) {\n setCurrentModal(modalContent);\n }\n }, [currentModal]);\n\n const closeModal = useCallback(() => {\n setCurrentModal((prev) => {\n if (prev) {\n setModalQueue((queue) => {\n const newQueue = queue.filter((m) => m.id !== prev.id);\n if (newQueue.length > 0) {\n setTimeout(() => setCurrentModal(newQueue[0]), 0);\n }\n return newQueue;\n });\n }\n return null;\n });\n }, []);\n\n const closeAllModals = useCallback(() => {\n setModalQueue([]);\n setCurrentModal(null);\n }, []);\n\n useEffect(() => {\n const handleOpen: BusEventListener = (event) => {\n const payload = event.payload;\n if (!payload) return;\n const modalPayload = payload as unknown as ModalContent | { modal: ModalContent };\n const modal = 'modal' in modalPayload ? modalPayload.modal : modalPayload;\n openModal({\n ...modal,\n size: modal.size || defaultSize,\n });\n };\n\n const handleClose: BusEventListener = (event) => {\n const payload = event.payload;\n const closePayload = payload as { modalId?: string; all?: boolean } | undefined;\n if (closePayload?.all) {\n closeAllModals();\n } else if (closePayload?.modalId) {\n setModalQueue((prev) => prev.filter((m) => m.id !== closePayload.modalId));\n if (currentModal?.id === closePayload.modalId) {\n closeModal();\n }\n } else {\n closeModal();\n }\n };\n\n const unsubscribeOpen = eventBus.on(openEvent, handleOpen);\n const unsubscribeClose = eventBus.on(closeEvent, handleClose);\n\n return () => {\n unsubscribeOpen();\n unsubscribeClose();\n };\n }, [eventBus, openEvent, closeEvent, openModal, closeModal, closeAllModals, currentModal, defaultSize]);\n\n const handleAction = useCallback((action: ModalAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, {\n modalId: currentModal?.id,\n entity,\n ...action.payload,\n });\n }\n if (action.navigatesTo) {\n eventBus.emit('UI:NAVIGATE', {\n to: action.navigatesTo,\n modalId: currentModal?.id,\n entity,\n ...action.payload,\n });\n }\n }, [currentModal, entity, eventBus]);\n\n const renderFooter = () => {\n if (!currentModal?.actions || currentModal.actions.length === 0) {\n return undefined;\n }\n\n return (\n <HStack spacing={12} justify=\"flex-end\">\n {currentModal.actions.map((action, index) => (\n <Button\n key={`${action.label}-${index}`}\n variant={action.variant || 'default'}\n action={action.event}\n actionPayload={{\n modalId: currentModal.id,\n entity,\n ...action.payload,\n }}\n onPress={() => handleAction(action)}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n );\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={style}>\n <Modal\n isOpen={!!currentModal}\n onClose={closeModal}\n title={currentModal?.title}\n size={currentModal?.size || defaultSize}\n closeOnBackdrop={currentModal?.closeOnBackdrop !== false}\n showCloseButton={currentModal?.showCloseButton !== false}\n footer={renderFooter()}\n >\n {currentModal?.content}\n </Modal>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n\nModalSlot.displayName = 'ModalSlot';\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Toast, ToastVariant } from '../molecules/Toast';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport type { BusEventListener, EventKey, EventPayload } from '../../types';\n\nexport interface ToastItem {\n id: string;\n message: string;\n variant?: ToastVariant;\n duration?: number;\n dismissAction?: EventKey;\n actionPayload?: EventPayload;\n}\n\nexport interface ToastSlotProps {\n style?: ViewStyle;\n position?: 'top' | 'bottom' | 'center';\n maxToasts?: number;\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 name to listen for show commands */\n showEvent?: EventKey;\n /** Event name to listen for dismiss commands */\n dismissEvent?: EventKey;\n /** Event name to listen for clear all commands */\n clearEvent?: EventKey;\n}\n\nexport const ToastSlot: React.FC<ToastSlotProps> = ({\n style,\n position = 'top',\n maxToasts = 5,\n isLoading,\n error,\n entity,\n showEvent = 'UI:TOAST_SHOW',\n dismissEvent = 'UI:TOAST_DISMISS',\n clearEvent = 'UI:TOAST_CLEAR',\n}) => {\n const eventBus = useEventBus();\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const showToast = useCallback((toast: ToastItem | { toast: ToastItem }) => {\n const toastItem = 'toast' in toast ? toast.toast : toast;\n const newToast: ToastItem = {\n ...toastItem,\n id: toastItem.id || `toast-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n };\n\n setToasts((prev) => {\n const updated = [newToast, ...prev];\n return updated.slice(0, maxToasts);\n });\n }, [maxToasts]);\n\n const dismissToast = useCallback((toastId: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== toastId));\n }, []);\n\n const clearAllToasts = useCallback(() => {\n setToasts([]);\n }, []);\n\n useEffect(() => {\n const handleShow: BusEventListener = (event) => {\n const payload = event.payload;\n if (!payload) return;\n const showPayload = payload as unknown as ToastItem | { toast: ToastItem };\n showToast(showPayload);\n };\n\n const handleDismiss: BusEventListener = (event) => {\n const payload = event.payload;\n if (!payload) return;\n const dismissPayload = payload as unknown as { toastId: string } | { payload: string };\n const toastId = 'toastId' in dismissPayload \n ? dismissPayload.toastId \n : ('payload' in dismissPayload ? dismissPayload.payload : undefined);\n if (typeof toastId === 'string') {\n dismissToast(toastId);\n }\n };\n\n const handleClear = () => {\n clearAllToasts();\n };\n\n const unsubscribeShow = eventBus.on(showEvent, handleShow);\n const unsubscribeDismiss = eventBus.on(dismissEvent, handleDismiss);\n const unsubscribeClear = eventBus.on(clearEvent, handleClear);\n\n return () => {\n unsubscribeShow();\n unsubscribeDismiss();\n unsubscribeClear();\n };\n }, [eventBus, showEvent, dismissEvent, clearEvent, showToast, dismissToast, clearAllToasts]);\n\n const handleDismiss = useCallback((id: string) => {\n dismissToast(id);\n }, [dismissToast]);\n\n if (isLoading) {\n return (\n <View style={[styles.container, styles[position], style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, styles[position], style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (toasts.length === 0) {\n return null;\n }\n\n return (\n <View style={[styles.container, styles[position], style]} pointerEvents=\"box-none\">\n {toasts.map((toast) => (\n <Toast\n key={toast.id}\n id={toast.id}\n message={toast.message}\n variant={toast.variant}\n duration={toast.duration}\n onDismiss={handleDismiss}\n dismissAction={toast.dismissAction}\n actionPayload={{\n entity,\n ...toast.actionPayload,\n }}\n />\n ))}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n left: 0,\n right: 0,\n zIndex: 1000,\n paddingHorizontal: 16,\n pointerEvents: 'box-none',\n },\n top: {\n top: 0,\n paddingTop: 44, // iOS status bar height\n },\n bottom: {\n bottom: 0,\n paddingBottom: 34, // iOS home indicator height\n },\n center: {\n top: '40%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nToastSlot.displayName = 'ToastSlot';\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Drawer } from '../molecules/Drawer';\nimport { Button } from '../atoms/Button';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport type { BusEventListener, EventKey, EventPayload } from '../../types';\n\nexport interface DrawerAction {\n label: string;\n event?: EventKey;\n navigatesTo?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n payload?: EventPayload;\n}\n\nexport interface DrawerContent {\n id: string;\n title?: string;\n content: React.ReactNode;\n actions?: DrawerAction[];\n placement?: 'left' | 'right';\n width?: number;\n closeOnBackdrop?: boolean;\n showCloseButton?: boolean;\n}\n\nexport interface DrawerSlotProps {\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 /** Default placement for drawers */\n defaultPlacement?: 'left' | 'right';\n /** Default width for drawers */\n defaultWidth?: number;\n /** Event name to listen for open commands */\n openEvent?: EventKey;\n /** Event name to listen for close commands */\n closeEvent?: EventKey;\n}\n\nexport const DrawerSlot: React.FC<DrawerSlotProps> = ({\n style,\n isLoading,\n error,\n entity,\n defaultPlacement = 'right',\n defaultWidth = 320,\n openEvent = 'UI:DRAWER_OPEN',\n closeEvent = 'UI:DRAWER_CLOSE',\n}) => {\n const eventBus = useEventBus();\n const [, setDrawerQueue] = useState<DrawerContent[]>([]);\n const [currentDrawer, setCurrentDrawer] = useState<DrawerContent | null>(null);\n\n const openDrawer = useCallback((drawerContent: DrawerContent) => {\n setDrawerQueue((prev) => [...prev, drawerContent]);\n if (!currentDrawer) {\n setCurrentDrawer(drawerContent);\n }\n }, [currentDrawer]);\n\n const closeDrawer = useCallback(() => {\n setCurrentDrawer((prev) => {\n if (prev) {\n setDrawerQueue((queue) => {\n const newQueue = queue.filter((d) => d.id !== prev.id);\n if (newQueue.length > 0) {\n setTimeout(() => setCurrentDrawer(newQueue[0]), 0);\n }\n return newQueue;\n });\n }\n return null;\n });\n }, []);\n\n const closeAllDrawers = useCallback(() => {\n setDrawerQueue([]);\n setCurrentDrawer(null);\n }, []);\n\n useEffect(() => {\n const handleOpen: BusEventListener = (event) => {\n const payload = event.payload;\n if (!payload) return;\n const drawerPayload = payload as unknown as DrawerContent | { drawer: DrawerContent };\n const drawer = 'drawer' in drawerPayload ? drawerPayload.drawer : drawerPayload;\n openDrawer({\n ...drawer,\n placement: drawer.placement || defaultPlacement,\n width: drawer.width || defaultWidth,\n });\n };\n\n const handleClose: BusEventListener = (event) => {\n const payload = event.payload;\n const closePayload = payload as { drawerId?: string; all?: boolean } | undefined;\n if (closePayload?.all) {\n closeAllDrawers();\n } else if (closePayload?.drawerId) {\n setDrawerQueue((prev) => prev.filter((d) => d.id !== closePayload.drawerId));\n if (currentDrawer?.id === closePayload.drawerId) {\n closeDrawer();\n }\n } else {\n closeDrawer();\n }\n };\n\n const unsubscribeOpen = eventBus.on(openEvent, handleOpen);\n const unsubscribeClose = eventBus.on(closeEvent, handleClose);\n\n return () => {\n unsubscribeOpen();\n unsubscribeClose();\n };\n }, [eventBus, openEvent, closeEvent, openDrawer, closeDrawer, closeAllDrawers, currentDrawer, defaultPlacement, defaultWidth]);\n\n const handleAction = useCallback((action: DrawerAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, {\n drawerId: currentDrawer?.id,\n entity,\n ...action.payload,\n });\n }\n if (action.navigatesTo) {\n eventBus.emit('UI:NAVIGATE', {\n to: action.navigatesTo,\n drawerId: currentDrawer?.id,\n entity,\n ...action.payload,\n });\n }\n }, [currentDrawer, entity, eventBus]);\n\n const renderFooter = () => {\n if (!currentDrawer?.actions || currentDrawer.actions.length === 0) {\n return undefined;\n }\n\n return (\n <HStack spacing={12} justify=\"flex-end\">\n {currentDrawer.actions.map((action, index) => (\n <Button\n key={`${action.label}-${index}`}\n variant={action.variant || 'default'}\n action={action.event}\n actionPayload={{\n drawerId: currentDrawer.id,\n entity,\n ...action.payload,\n }}\n onPress={() => handleAction(action)}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n );\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={style}>\n <Drawer\n isOpen={!!currentDrawer}\n onClose={closeDrawer}\n title={currentDrawer?.title}\n placement={currentDrawer?.placement || defaultPlacement}\n width={currentDrawer?.width || defaultWidth}\n >\n {currentDrawer?.content}\n {renderFooter()}\n </Drawer>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n\nDrawerSlot.displayName = 'DrawerSlot';\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\nimport type { BusEventListener, EventKey, EventPayload } from '../../types';\n\nexport type UIComponentType = \n | 'card'\n | 'text'\n | 'button'\n | 'input'\n | 'image'\n | 'list'\n | 'custom';\n\nexport interface UIComponentConfig {\n type: UIComponentType;\n id: string;\n props?: Record<string, unknown>;\n children?: UIComponentConfig[];\n content?: string;\n}\n\nexport interface UISlot {\n id: string;\n name: string;\n components: UIComponentConfig[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface UISlotRendererProps {\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 /** Slot ID to listen for */\n slotId?: string;\n /** Default slot content */\n defaultSlot?: UISlot;\n /** Event name to listen for slot updates */\n slotEvent?: EventKey;\n /** Custom component renderers */\n customRenderers?: Record<string, React.FC<Record<string, unknown>>>;\n}\n\nexport const UISlotRenderer: React.FC<UISlotRendererProps> = ({\n style,\n isLoading,\n error,\n entity,\n slotId,\n defaultSlot,\n slotEvent = 'UI:SLOT_UPDATE',\n customRenderers = {},\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [slot, setSlot] = useState<UISlot | null>(defaultSlot || null);\n\n const handleSlotUpdate = useCallback((newSlot: UISlot | { slot: UISlot }) => {\n const slotData = 'slot' in newSlot ? newSlot.slot : newSlot;\n if (!slotId || slotData.id === slotId) {\n setSlot(slotData);\n }\n }, [slotId]);\n\n const handleClearSlot = useCallback(() => {\n setSlot(null);\n }, []);\n\n useEffect(() => {\n const handleUpdate: BusEventListener = (event) => {\n const payload = event.payload;\n if (!payload) return;\n const slotPayload = payload as unknown as UISlot | { slot: UISlot };\n handleSlotUpdate(slotPayload);\n };\n\n const handleClear = () => {\n handleClearSlot();\n };\n\n const unsubscribeUpdate = eventBus.on(slotEvent, handleUpdate);\n const unsubscribeClear = eventBus.on(`${slotEvent}_CLEAR`, handleClear);\n\n return () => {\n unsubscribeUpdate();\n unsubscribeClear();\n };\n }, [eventBus, slotEvent, handleSlotUpdate, handleClearSlot]);\n\n const handleComponentEvent = useCallback((componentId: string, eventName: EventKey, payload?: EventPayload) => {\n const emitPayload: EventPayload = {\n slotId: slot?.id,\n componentId,\n entity,\n ...payload,\n };\n eventBus.emit(`UI:${eventName}`, emitPayload);\n }, [slot, entity, eventBus]);\n\n const renderComponent = useCallback((config: UIComponentConfig): React.ReactNode => {\n // Check for custom renderer first\n if (customRenderers[config.type]) {\n const CustomRenderer = customRenderers[config.type];\n return (\n <CustomRenderer\n key={config.id}\n {...config.props}\n onEvent={(eventName: EventKey, payload: EventPayload) => handleComponentEvent(config.id, eventName, payload)}\n />\n );\n }\n\n switch (config.type) {\n case 'card':\n return (\n <Card\n key={config.id}\n style={config.props?.style as ViewStyle}\n padding={(config.props?.padding as 'none' | 'sm' | 'md' | 'lg') || 'md'}\n >\n {config.content && (\n <Typography variant=\"body\">{config.content}</Typography>\n )}\n {config.children?.map((child) => renderComponent(child))}\n </Card>\n );\n\n case 'text':\n return (\n <Typography\n key={config.id}\n variant={(config.props?.variant as 'h1' | 'h2' | 'h3' | 'h4' | 'body' | 'caption' | 'label') || 'body'}\n color={config.props?.color as string}\n >\n {config.content || ''}\n </Typography>\n );\n\n case 'button':\n return (\n <Button\n key={config.id}\n variant={(config.props?.variant as 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive') || 'default'}\n action={config.props?.action as string}\n actionPayload={{\n componentId: config.id,\n entity,\n ...(config.props?.payload as Record<string, unknown> || {}),\n }}\n onPress={() => handleComponentEvent(config.id, config.props?.onClick as string || 'BUTTON_CLICK')}\n >\n {config.content || 'Button'}\n </Button>\n );\n\n case 'list':\n return (\n <VStack key={config.id} spacing={8} style={styles.list}>\n {config.children?.map((child) => renderComponent(child))}\n </VStack>\n );\n\n case 'custom':\n default:\n return (\n <View key={config.id} style={config.props?.style as ViewStyle}>\n {config.content && (\n <Typography variant=\"body\">{config.content}</Typography>\n )}\n {config.children?.map((child) => renderComponent(child))}\n </View>\n );\n }\n }, [customRenderers, entity, handleComponentEvent]);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading slot...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (!slot || slot.components.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No content in slot\" />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n <VStack spacing={16}>\n {slot.name && (\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {slot.name}\n </Typography>\n )}\n <VStack spacing={12}>\n {slot.components.map((component) => renderComponent(component))}\n </VStack>\n </VStack>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n list: {\n width: '100%',\n },\n});\n\nUISlotRenderer.displayName = 'UISlotRenderer';\n","import React, { useRef, useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n PanResponder,\n GestureResponderEvent,\n} from 'react-native';\n\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface SignaturePoint {\n x: number;\n y: number;\n}\n\nexport interface SignatureStroke {\n points: SignaturePoint[];\n}\n\nexport interface SignatureData {\n strokes: SignatureStroke[];\n timestamp: number;\n}\n\nexport interface SignaturePadProps {\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 /** Width of the signature pad */\n width?: number;\n /** Height of the signature pad */\n height?: number;\n /** Stroke color for the signature */\n strokeColor?: string;\n /** Stroke width for the signature */\n strokeWidth?: number;\n /** Background color for the pad */\n backgroundColor?: string;\n /** Label displayed above the pad */\n label?: string;\n /** Clear button label */\n clearLabel?: string;\n /** Save button label */\n saveLabel?: string;\n /** Event emitted when signature is saved */\n onSave?: (data: SignatureData) => void;\n /** Event name for save action */\n saveAction?: string;\n}\n\nexport const SignaturePad: React.FC<SignaturePadProps> = ({\n style,\n isLoading,\n error,\n entity,\n width = 350,\n height = 200,\n strokeColor = '#000000',\n strokeWidth = 2,\n backgroundColor = '#ffffff',\n label = 'Sign here',\n clearLabel = 'Clear',\n saveLabel = 'Save',\n onSave,\n saveAction = 'SIGNATURE_SAVE',\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [strokes, setStrokes] = useState<SignatureStroke[]>([]);\n const [currentStroke, setCurrentStroke] = useState<SignaturePoint[]>([]);\n const canvasRef = useRef<View>(null);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderGrant: (event: GestureResponderEvent) => {\n const { locationX, locationY } = event.nativeEvent;\n setCurrentStroke([{ x: locationX, y: locationY }]);\n },\n onPanResponderMove: (event: GestureResponderEvent) => {\n const { locationX, locationY } = event.nativeEvent;\n setCurrentStroke((prev) => [...prev, { x: locationX, y: locationY }]);\n },\n onPanResponderRelease: () => {\n setStrokes((prev) => [...prev, { points: currentStroke }]);\n setCurrentStroke([]);\n },\n })\n ).current;\n\n const handleClear = useCallback(() => {\n setStrokes([]);\n setCurrentStroke([]);\n eventBus.emit('UI:SIGNATURE_CLEAR', { entity } as EventPayload);\n }, [entity, eventBus]);\n\n const handleSave = useCallback(() => {\n if (strokes.length === 0 && currentStroke.length === 0) {\n return;\n }\n\n const signatureData: SignatureData = {\n strokes: currentStroke.length > 0 \n ? [...strokes, { points: currentStroke }]\n : strokes,\n timestamp: Date.now(),\n };\n\n eventBus.emit(`UI:${saveAction}`, {\n entity,\n signature: signatureData,\n } as unknown as EventPayload);\n\n onSave?.(signatureData);\n }, [strokes, currentStroke, entity, saveAction, onSave, eventBus]);\n\n const renderStroke = (stroke: SignatureStroke, index: number): React.ReactNode => {\n if (stroke.points.length < 2) return null;\n\n // Create a path-like representation using multiple small Views\n return stroke.points.map((point, pointIndex) => {\n if (pointIndex === 0) return null;\n const prevPoint = stroke.points[pointIndex - 1];\n const dx = point.x - prevPoint.x;\n const dy = point.y - prevPoint.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n const angle = Math.atan2(dy, dx) * (180 / Math.PI);\n\n return (\n <View\n key={`stroke-${index}-segment-${pointIndex}`}\n style={{\n position: 'absolute',\n left: prevPoint.x,\n top: prevPoint.y,\n width: distance,\n height: strokeWidth,\n backgroundColor: strokeColor,\n transform: [{ rotate: `${angle}deg` }],\n transformOrigin: '0 50%',\n }}\n />\n );\n });\n };\n\n const renderCurrentStroke = (): React.ReactNode => {\n if (currentStroke.length < 2) return null;\n\n return currentStroke.map((point, index) => {\n if (index === 0) return null;\n const prevPoint = currentStroke[index - 1];\n const dx = point.x - prevPoint.x;\n const dy = point.y - prevPoint.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n const angle = Math.atan2(dy, dx) * (180 / Math.PI);\n\n return (\n <View\n key={`current-segment-${index}`}\n style={{\n position: 'absolute',\n left: prevPoint.x,\n top: prevPoint.y,\n width: distance,\n height: strokeWidth,\n backgroundColor: strokeColor,\n transform: [{ rotate: `${angle}deg` }],\n transformOrigin: '0 50%',\n }}\n />\n );\n });\n };\n\n if (isLoading) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <LoadingState message=\"Loading signature pad...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const hasSignature = strokes.length > 0 || currentStroke.length > 0;\n\n return (\n <Card style={{ ...styles.container, ...(style || {}) }} padding=\"md\">\n <VStack spacing={12}>\n {label && (\n <Typography variant=\"label\" style={{ color: theme.colors['muted-foreground'] }}>\n {label}\n </Typography>\n )}\n\n <View\n ref={canvasRef}\n style={{\n ...styles.canvas,\n width,\n height,\n backgroundColor,\n borderColor: theme.colors.border,\n }}\n {...panResponder.panHandlers}\n >\n {/* Render completed strokes */}\n {strokes.map((stroke, index) => renderStroke(stroke, index))}\n\n {/* Render current stroke being drawn */}\n {renderCurrentStroke()}\n\n {/* Empty state indicator */}\n {!hasSignature && (\n <View style={styles.emptyState} pointerEvents=\"none\">\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n Draw signature here\n </Typography>\n </View>\n )}\n </View>\n\n <HStack spacing={8} justify=\"flex-end\">\n <Button\n variant=\"ghost\"\n onPress={handleClear}\n disabled={!hasSignature}\n >\n {clearLabel}\n </Button>\n <Button\n variant=\"primary\"\n onPress={handleSave}\n disabled={!hasSignature}\n action={saveAction}\n actionPayload={{\n entity,\n hasSignature,\n }}\n >\n {saveLabel}\n </Button>\n </HStack>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n canvas: {\n borderWidth: 1,\n borderRadius: 8,\n overflow: 'hidden',\n },\n emptyState: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nSignaturePad.displayName = 'SignaturePad';\n","import React, { useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n Image,\n ScrollView,\n Linking,\n} from 'react-native';\n\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport type ContentType =\n | 'text'\n | 'heading'\n | 'paragraph'\n | 'image'\n | 'video'\n | 'link'\n | 'button'\n | 'list'\n | 'quote'\n | 'code'\n | 'divider'\n | 'card'\n | 'custom';\n\nexport interface ContentItem {\n id: string;\n type: ContentType;\n content?: string;\n src?: string;\n href?: string;\n title?: string;\n alt?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n items?: ContentItem[];\n metadata?: Record<string, unknown>;\n style?: ViewStyle;\n}\n\nexport interface ContentRendererProps {\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 /** Content items to render */\n items?: ContentItem[];\n /** Gap between content items */\n gap?: number;\n /** Whether to render in a scroll view */\n scrollable?: boolean;\n /** Custom renderer for specific content types */\n customRenderers?: Partial<Record<ContentType, (item: ContentItem) => React.ReactNode>>;\n /** Event prefix for content interactions */\n eventPrefix?: string;\n}\n\nexport const ContentRenderer: React.FC<ContentRendererProps> = ({\n style,\n isLoading,\n error,\n entity,\n items = [],\n gap = 16,\n scrollable = false,\n customRenderers = {},\n eventPrefix = 'CONTENT',\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleLinkPress = useCallback((href: string, itemId: string) => {\n // Try to open the link\n Linking.canOpenURL(href).then((supported) => {\n if (supported) {\n Linking.openURL(href);\n }\n });\n\n eventBus.emit(`UI:${eventPrefix}_LINK_CLICK`, {\n entity,\n itemId,\n href,\n } as EventPayload);\n }, [entity, eventPrefix, eventBus]);\n\n const handleButtonPress = useCallback((item: ContentItem) => {\n eventBus.emit(`UI:${eventPrefix}_BUTTON_CLICK`, {\n entity,\n itemId: item.id,\n action: item.href,\n metadata: item.metadata,\n } as unknown as EventPayload);\n\n if (item.href) {\n handleLinkPress(item.href, item.id);\n }\n }, [entity, eventPrefix, handleLinkPress, eventBus]);\n\n const renderText = (item: ContentItem): React.ReactNode => {\n const variant = item.type === 'heading' \n ? (item.metadata?.level as 'h1' | 'h2' | 'h3' | 'h4' | 'body' | 'caption' | 'label') || 'h3'\n : 'body';\n\n return (\n <Typography\n key={item.id}\n variant={variant}\n style={item.style}\n color={item.metadata?.color as string}\n >\n {item.content}\n </Typography>\n );\n };\n\n const renderParagraph = (item: ContentItem): React.ReactNode => {\n return (\n <Typography\n key={item.id}\n variant=\"body\"\n style={[{ lineHeight: theme.typography.lineHeight * theme.typography.sizes.base * 1.5 }, item.style]}\n color={theme.colors['muted-foreground']}\n >\n {item.content}\n </Typography>\n );\n };\n\n const renderImage = (item: ContentItem): React.ReactNode => {\n return (\n <View key={item.id} style={[styles.imageContainer, item.style]}>\n {item.src ? (\n <Image\n source={{ uri: item.src }}\n style={styles.image}\n resizeMode=\"cover\"\n accessibilityLabel={item.alt}\n />\n ) : (\n <View style={[styles.image, styles.imagePlaceholder]}>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {item.alt || 'Image'}\n </Typography>\n </View>\n )}\n {item.title && (\n <Typography variant=\"caption\" style={styles.imageCaption}>\n {item.title}\n </Typography>\n )}\n </View>\n );\n };\n\n const renderLink = (item: ContentItem): React.ReactNode => {\n return (\n <Typography\n key={item.id}\n variant=\"body\"\n color={theme.colors.primary}\n style={[{ textDecorationLine: 'underline' }, item.style]}\n onPress={() => item.href && handleLinkPress(item.href, item.id)}\n >\n {item.content || item.title || item.href}\n </Typography>\n );\n };\n\n const renderButton = (item: ContentItem): React.ReactNode => {\n return (\n <Button\n key={item.id}\n variant={item.variant || 'default'}\n onPress={() => handleButtonPress(item)}\n action={`${eventPrefix}_BUTTON_CLICK`}\n actionPayload={{\n entity,\n itemId: item.id,\n action: item.href,\n metadata: item.metadata,\n } as unknown as EventPayload}\n >\n {item.content || item.title || 'Button'}\n </Button>\n );\n };\n\n const renderList = (item: ContentItem): React.ReactNode => {\n const listItems = item.items || [];\n const isOrdered = item.metadata?.ordered === true;\n\n return (\n <VStack key={item.id} spacing={8} style={item.style}>\n {listItems.map((listItem, index) => (\n <HStack key={listItem.id} spacing={8} align=\"flex-start\">\n <Typography variant=\"body\" color={theme.colors.foreground}>\n {isOrdered ? `${index + 1}.` : '•'}\n </Typography>\n <View style={{ flex: 1 }}>\n {renderContentItem(listItem)}\n </View>\n </HStack>\n ))}\n </VStack>\n );\n };\n\n const renderQuote = (item: ContentItem): React.ReactNode => {\n return (\n <View\n key={item.id}\n style={[\n styles.quote,\n {\n borderLeftColor: theme.colors.primary,\n backgroundColor: theme.colors.muted,\n },\n item.style,\n ]}\n >\n <Typography variant=\"body\" style={{ fontStyle: 'italic' }}>\n \"{item.content}\"\n </Typography>\n {item.title && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']} style={{ marginTop: 8 }}>\n — {item.title}\n </Typography>\n )}\n </View>\n );\n };\n\n const renderCode = (item: ContentItem): React.ReactNode => {\n return (\n <View\n key={item.id}\n style={[\n styles.code,\n {\n backgroundColor: theme.colors.muted,\n },\n item.style,\n ]}\n >\n <Typography\n variant=\"caption\"\n style={{ fontFamily: 'monospace' }}\n color={theme.colors.foreground}\n >\n {item.content}\n </Typography>\n </View>\n );\n };\n\n const renderDivider = (item: ContentItem): React.ReactNode => {\n return (\n <View\n key={item.id}\n style={[\n styles.divider,\n { backgroundColor: theme.colors.border },\n item.style,\n ]}\n />\n );\n };\n\n const renderCard = (item: ContentItem): React.ReactNode => {\n const cardItems = item.items || [];\n\n return (\n <Card\n key={item.id}\n style={item.style || undefined}\n padding=\"md\"\n >\n {item.title && (\n <Typography variant=\"h4\" style={{ marginBottom: 12 }}>\n {item.title}\n </Typography>\n )}\n <VStack spacing={12}>\n {cardItems.map((childItem) => renderContentItem(childItem))}\n </VStack>\n </Card>\n );\n };\n\n const renderContentItem = (item: ContentItem): React.ReactNode => {\n // Check for custom renderer first\n if (customRenderers[item.type]) {\n return customRenderers[item.type]?.(item);\n }\n\n switch (item.type) {\n case 'text':\n case 'heading':\n return renderText(item);\n case 'paragraph':\n return renderParagraph(item);\n case 'image':\n return renderImage(item);\n case 'link':\n return renderLink(item);\n case 'button':\n return renderButton(item);\n case 'list':\n return renderList(item);\n case 'quote':\n return renderQuote(item);\n case 'code':\n return renderCode(item);\n case 'divider':\n return renderDivider(item);\n case 'card':\n return renderCard(item);\n case 'custom':\n default:\n return (\n <View key={item.id} style={item.style}>\n {item.content && (\n <Typography variant=\"body\">{item.content}</Typography>\n )}\n {item.items?.map((childItem) => renderContentItem(childItem))}\n </View>\n );\n }\n };\n\n if (isLoading) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <LoadingState message=\"Loading content...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (items.length === 0) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <EmptyState message=\"No content to display\" />\n </View>\n );\n }\n\n const content = (\n <VStack spacing={gap} style={{ ...styles.container, ...(style || {}) }}>\n {items.map((item) => renderContentItem(item))}\n </VStack>\n );\n\n if (scrollable) {\n return (\n <ScrollView style={{ ...styles.container, ...(style || {}) }} showsVerticalScrollIndicator={false}>\n {content}\n </ScrollView>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n imageContainer: {\n width: '100%',\n borderRadius: 8,\n overflow: 'hidden',\n },\n image: {\n width: '100%',\n height: 200,\n },\n imagePlaceholder: {\n backgroundColor: '#e5e7eb',\n justifyContent: 'center',\n alignItems: 'center',\n },\n imageCaption: {\n marginTop: 8,\n textAlign: 'center',\n },\n quote: {\n padding: 16,\n paddingLeft: 20,\n borderLeftWidth: 4,\n borderRadius: 4,\n },\n code: {\n padding: 12,\n borderRadius: 4,\n },\n divider: {\n height: 1,\n width: '100%',\n },\n});\n\nContentRenderer.displayName = 'ContentRenderer';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle, ScrollView } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack } from '../../atoms/Stack';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport { EmptyState } from '../../molecules/EmptyState';\nimport type { EventKey, EventPayload } from '../../../types';\n\n\nexport interface Widget {\n id: string;\n title: string;\n component: React.ReactNode;\n span?: '1' | '2' | '3' | 'full';\n action?: EventKey;\n actionPayload?: EventPayload;\n}\n\nexport interface DashboardGridProps {\n widgets: Widget[];\n title?: string;\n columns?: 1 | 2 | 3 | 4;\n style?: ViewStyle;\n contentContainerStyle?: 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 DashboardGrid: React.FC<DashboardGridProps> = ({\n widgets,\n title,\n columns: _columns = 2,\n style,\n contentContainerStyle,\n isLoading,\n error,\n entity,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading dashboard...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (!widgets || widgets.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No widgets available\" />\n </View>\n );\n }\n\n const getWidgetWidth = (span: Widget['span']): ViewStyle => {\n switch (span) {\n case '2':\n return { flex: 2 };\n case '3':\n return { flex: 3 };\n case 'full':\n return { width: '100%' as const };\n case '1':\n default:\n return { flex: 1 };\n }\n };\n\n return (\n <ScrollView style={[styles.container, style]} contentContainerStyle={contentContainerStyle}>\n <VStack spacing={16}>\n {title && (\n <Typography variant=\"h3\">{title}</Typography>\n )}\n <View style={styles.grid}>\n {widgets.map((widget) => (\n <View\n key={widget.id}\n style={[\n styles.widgetContainer,\n getWidgetWidth(widget.span),\n ]}\n >\n <Card\n style={styles.widgetCard}\n action={widget.action}\n actionPayload={{\n widgetId: widget.id,\n entity,\n ...widget.actionPayload,\n }}\n >\n <VStack spacing={12}>\n <Typography variant=\"h4\" color={theme.colors['muted-foreground']}>\n {widget.title}\n </Typography>\n <View>{widget.component}</View>\n </VStack>\n </Card>\n </View>\n ))}\n </View>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n grid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n padding: 8,\n },\n widgetContainer: {\n padding: 8,\n },\n widgetCard: {\n flex: 1,\n },\n});\n\nDashboardGrid.displayName = 'DashboardGrid';\n","import React, { useRef, useCallback, useState } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n PanResponder,\n Animated,\n LayoutChangeEvent,\n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\n\nexport type SplitDirection = 'horizontal' | 'vertical';\n\nexport interface SplitPaneProps {\n left?: React.ReactNode;\n right?: React.ReactNode;\n top?: React.ReactNode;\n bottom?: React.ReactNode;\n direction?: SplitDirection;\n initialSplit?: number;\n minSize?: number;\n maxSize?: number;\n style?: ViewStyle;\n splitterStyle?: 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 name emitted when split changes */\n changeEvent?: string;\n}\n\n\n\nexport const SplitPane: React.FC<SplitPaneProps> = ({\n left,\n right,\n top,\n bottom,\n direction = 'horizontal',\n initialSplit = 50,\n minSize = 20,\n maxSize = 80,\n style,\n splitterStyle,\n isLoading,\n error,\n entity,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [containerSize, setContainerSize] = useState(0);\n const splitPercentRef = useRef(new Animated.Value(initialSplit)).current;\n const currentSplitRef = useRef(initialSplit);\n\n const validatePaneContent = () => {\n if (direction === 'horizontal') {\n return left !== undefined || right !== undefined;\n }\n return top !== undefined || bottom !== undefined;\n };\n\n const handleLayout = useCallback((event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setContainerSize(direction === 'horizontal' ? width : height);\n }, [direction]);\n\n const calculateSplitFromPosition = useCallback((position: number): number => {\n if (containerSize === 0) return initialSplit;\n const percent = (position / containerSize) * 100;\n return Math.max(minSize, Math.min(maxSize, percent));\n }, [containerSize, initialSplit, minSize, maxSize]);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderGrant: () => {\n splitPercentRef.setOffset(currentSplitRef.current);\n splitPercentRef.setValue(0);\n },\n onPanResponderMove: (_, gestureState) => {\n const { moveX, moveY } = gestureState;\n let newPosition: number;\n\n if (direction === 'horizontal') {\n newPosition = moveX;\n } else {\n newPosition = moveY;\n }\n\n const newSplit = calculateSplitFromPosition(newPosition);\n currentSplitRef.current = newSplit;\n splitPercentRef.setValue(0);\n splitPercentRef.setOffset(newSplit);\n\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, {\n split: newSplit,\n entity,\n });\n }\n },\n onPanResponderRelease: () => {\n splitPercentRef.flattenOffset();\n },\n })\n ).current;\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (!validatePaneContent()) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message=\"SplitPane requires content for both panes\" />\n </View>\n );\n }\n\n const firstPaneStyle: ViewStyle = {\n flex: currentSplitRef.current,\n };\n\n const secondPaneStyle: ViewStyle = {\n flex: 100 - currentSplitRef.current,\n };\n\n const isHorizontal = direction === 'horizontal';\n\n return (\n <View\n style={[styles.container, isHorizontal ? styles.horizontal : styles.vertical, style]}\n onLayout={handleLayout}\n >\n {/* First Pane */}\n <View style={[styles.pane, firstPaneStyle]}>\n {isHorizontal ? left : top}\n </View>\n\n {/* Splitter */}\n <View\n style={[\n styles.splitter,\n isHorizontal ? styles.splitterHorizontal : styles.splitterVertical,\n { backgroundColor: theme.colors.border },\n splitterStyle,\n ]}\n {...panResponder.panHandlers}\n >\n <View\n style={[\n styles.splitterHandle,\n isHorizontal\n ? styles.splitterHandleHorizontal\n : styles.splitterHandleVertical,\n { backgroundColor: theme.colors['muted-foreground'] },\n ]}\n />\n </View>\n\n {/* Second Pane */}\n <View style={[styles.pane, secondPaneStyle]}>\n {isHorizontal ? right : bottom}\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n horizontal: {\n flexDirection: 'row',\n },\n vertical: {\n flexDirection: 'column',\n },\n pane: {\n overflow: 'hidden',\n },\n splitter: {\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n },\n splitterHorizontal: {\n width: 16,\n },\n splitterVertical: {\n height: 16,\n },\n splitterHandle: {\n borderRadius: 2,\n },\n splitterHandleHorizontal: {\n width: 4,\n height: 32,\n },\n splitterHandleVertical: {\n width: 32,\n height: 4,\n },\n});\n\nSplitPane.displayName = 'SplitPane';\n","import React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle, ScrollView } from 'react-native';\n\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Card } from '../../atoms/Card';\nimport { VStack } from '../../atoms/Stack';\nimport { Tabs, Tab } from '../../molecules/Tabs';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport { EmptyState } from '../../molecules/EmptyState';\n\nexport interface TabbedContainerTab extends Tab {\n content: React.ReactNode;\n badge?: number;\n}\n\nexport interface TabbedContainerProps {\n tabs: TabbedContainerTab[];\n activeTab?: string;\n onChange?: (tabId: string) => void;\n style?: ViewStyle;\n contentStyle?: ViewStyle | undefined;\n variant?: 'default' | 'pills' | 'underlined';\n showCards?: 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 /** Event name emitted when tab changes */\n changeEvent?: string;\n}\n\nexport const TabbedContainer: React.FC<TabbedContainerProps> = ({\n tabs,\n activeTab: controlledActiveTab,\n onChange,\n style,\n contentStyle,\n variant = 'default',\n showCards = true,\n isLoading,\n error,\n entity,\n changeEvent,\n}) => {\n const eventBus = useEventBus();\n const [internalActiveTab, setInternalActiveTab] = useState(tabs[0]?.id);\n const currentTabId = controlledActiveTab ?? internalActiveTab;\n\n const handleTabChange = useCallback((tabId: string) => {\n setInternalActiveTab(tabId);\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, {\n tabId,\n entity,\n previousTab: currentTabId,\n });\n }\n onChange?.(tabId);\n }, [changeEvent, currentTabId, entity, eventBus, onChange]);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading tabs...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (!tabs || tabs.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No tabs available\" />\n </View>\n );\n }\n\n const activeTabData = tabs.find((tab) => tab.id === currentTabId);\n const displayTabs: Tab[] = tabs.map(({ id, label, icon, badge }) => ({\n id,\n label,\n icon,\n badge,\n }));\n\n const ContentWrapper = showCards ? Card : View;\n const contentWrapperProps: { style: ViewStyle } = showCards\n ? { style: styles.cardContent }\n : { style: styles.plainContent };\n\n return (\n <VStack style={style ? [styles.container, style] : styles.container} spacing={0}>\n <Tabs\n tabs={displayTabs}\n activeTab={currentTabId}\n onChange={handleTabChange}\n variant={variant}\n />\n <ContentWrapper {...contentWrapperProps}>\n <ScrollView style={styles.scrollView} contentContainerStyle={contentStyle || styles.emptyContent}>\n {activeTabData?.content || (\n <EmptyState message=\"No content available\" />\n )}\n </ScrollView>\n </ContentWrapper>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n cardContent: {\n flex: 1,\n marginTop: 8,\n },\n plainContent: {\n flex: 1,\n marginTop: 8,\n },\n scrollView: {\n flex: 1,\n },\n emptyContent: {},\n});\n\nTabbedContainer.displayName = 'TabbedContainer';\n","import React, { useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n ScrollView,\n Dimensions,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { Divider } from '../atoms/Divider';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface MasterItem {\n id: string;\n title: string;\n subtitle?: string;\n}\n\nexport interface MasterDetailProps {\n /** Master list items */\n items: MasterItem[];\n /** Selected item ID */\n selectedId?: string | null;\n /** Callback when an item is selected */\n onSelect?: (item: MasterItem) => void;\n /** Detail content renderer */\n renderDetail: (item: MasterItem | null) => React.ReactNode;\n /** Master list title */\n masterTitle?: string;\n /** Custom master item renderer */\n renderMasterItem?: (item: MasterItem, isSelected: boolean) => React.ReactNode;\n /** Key extractor for items */\n keyExtractor?: (item: MasterItem) => string;\n /** Container style */\n style?: ViewStyle;\n /** Master pane width (only used on tablets/desktop) */\n masterWidth?: number;\n /** Whether to show as split on mobile */\n splitOnMobile?: 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 /** Event to emit on item select */\n selectEvent?: string;\n}\n\nexport const MasterDetail: React.FC<MasterDetailProps> = ({\n items,\n selectedId,\n onSelect,\n renderDetail,\n masterTitle,\n renderMasterItem,\n keyExtractor = (item) => item.id,\n style,\n masterWidth = 280,\n splitOnMobile = false,\n isLoading,\n error,\n entity,\n selectEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalSelectedId, setInternalSelectedId] = useState<string | null>(\n selectedId || null\n );\n const [showDetailOnMobile, setShowDetailOnMobile] = useState(false);\n\n const currentSelectedId = selectedId !== undefined ? selectedId : internalSelectedId;\n const selectedItem = items.find((item) => keyExtractor(item) === currentSelectedId) || null;\n\n const isTabletOrLarger = SCREEN_WIDTH >= 768;\n const shouldShowSplit = isTabletOrLarger || splitOnMobile;\n\n const handleSelect = useCallback(\n (item: MasterItem) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { item, entity } as unknown as EventPayload);\n }\n onSelect?.(item);\n if (selectedId === undefined) {\n setInternalSelectedId(keyExtractor(item));\n }\n if (!shouldShowSplit) {\n setShowDetailOnMobile(true);\n }\n },\n [onSelect, selectEvent, entity, keyExtractor, selectedId, shouldShowSplit, eventBus]\n );\n\n const handleBack = useCallback(() => {\n setShowDetailOnMobile(false);\n }, []);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message={`Loading ${entity || 'items'}...`} />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (items.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message={`No ${entity || 'items'} available`} />\n </View>\n );\n }\n\n const defaultRenderMasterItem = (item: MasterItem, isSelected: boolean) => {\n const cardStyle: ViewStyle[] = [styles.masterItem];\n if (isSelected) {\n cardStyle.push({ backgroundColor: theme.colors.primary + '15' });\n }\n\n return (\n <Card\n onPress={() => handleSelect(item)}\n padding=\"md\"\n style={cardStyle}\n >\n <VStack spacing={4}>\n <Typography variant=\"body\" style={isSelected ? { color: theme.colors.primary } : undefined}>\n {item.title}\n </Typography>\n {item.subtitle && (\n <Typography variant=\"caption\">{item.subtitle}</Typography>\n )}\n </VStack>\n </Card>\n );\n };\n\n const renderMasterContent = () => (\n <VStack style={styles.masterPane}>\n {masterTitle && (\n <>\n <Typography variant=\"h4\" style={styles.masterTitle}>\n {masterTitle}\n </Typography>\n <Divider />\n </>\n )}\n <ScrollView style={styles.masterList} showsVerticalScrollIndicator={false}>\n <VStack spacing={8} style={styles.masterListContent}>\n {items.map((item) => {\n const itemKey = keyExtractor(item);\n const isSelected = currentSelectedId === itemKey;\n return (\n <View key={itemKey}>\n {renderMasterItem\n ? renderMasterItem(item, isSelected)\n : defaultRenderMasterItem(item, isSelected)}\n </View>\n );\n })}\n </VStack>\n </ScrollView>\n </VStack>\n );\n\n const renderDetailContent = () => (\n <View style={styles.detailPane}>\n {!shouldShowSplit && showDetailOnMobile && (\n <HStack style={styles.mobileBackHeader}>\n <Button variant=\"ghost\" onPress={handleBack} size=\"sm\">\n ← Back\n </Button>\n </HStack>\n )}\n <ScrollView style={styles.detailScroll} showsVerticalScrollIndicator={false}>\n {renderDetail(selectedItem)}\n </ScrollView>\n </View>\n );\n\n // Mobile view: show either master or detail\n if (!shouldShowSplit) {\n return (\n <View style={[styles.container, style]}>\n {showDetailOnMobile ? renderDetailContent() : renderMasterContent()}\n </View>\n );\n }\n\n // Split view: show both panes\n return (\n <HStack style={style}>\n <View style={[styles.masterPane, { width: masterWidth }]}>{renderMasterContent()}</View>\n <Divider orientation=\"vertical\" />\n <View style={styles.detailPane}>{renderDetailContent()}</View>\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n masterPane: {\n flex: 1,\n },\n masterTitle: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n masterList: {\n flex: 1,\n },\n masterListContent: {\n padding: 12,\n },\n masterItem: {\n marginBottom: 4,\n },\n detailPane: {\n flex: 1,\n },\n mobileBackHeader: {\n padding: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n },\n detailScroll: {\n flex: 1,\n },\n});\n\nMasterDetail.displayName = 'MasterDetail';\n","import React, { useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n PanResponder,\n Dimensions,\n PanResponderGestureState,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface SplitProps {\n /** Primary pane content (left/top) */\n primary: React.ReactNode;\n /** Secondary pane content (right/bottom) */\n secondary: React.ReactNode;\n /** Initial split percentage (0-100) */\n initialSplit?: number;\n /** Minimum split percentage for primary pane */\n minSplit?: number;\n /** Maximum split percentage for primary pane */\n maxSplit?: number;\n /** Split direction */\n direction?: 'horizontal' | 'vertical';\n /** Whether split is resizable */\n resizable?: boolean;\n /** Container style */\n style?: ViewStyle;\n /** Primary pane style */\n primaryStyle?: ViewStyle;\n /** Secondary pane style */\n secondaryStyle?: ViewStyle;\n /** Callback when split changes */\n onSplitChange?: (percentage: number) => void;\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 Split: React.FC<SplitProps> = ({\n primary,\n secondary,\n initialSplit = 50,\n minSplit = 20,\n maxSplit = 80,\n direction = 'horizontal',\n resizable = true,\n style,\n primaryStyle,\n secondaryStyle,\n onSplitChange,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const [splitPercentage, setSplitPercentage] = useState(initialSplit);\n\n const isHorizontal = direction === 'horizontal';\n\n const handleSplitChange = useCallback(\n (percentage: number) => {\n const clampedPercentage = Math.max(minSplit, Math.min(maxSplit, percentage));\n setSplitPercentage(clampedPercentage);\n onSplitChange?.(clampedPercentage);\n },\n [minSplit, maxSplit, onSplitChange]\n );\n\n const panResponder = React.useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => resizable,\n onMoveShouldSetPanResponder: () => resizable,\n onPanResponderMove: (_, gestureState: PanResponderGestureState) => {\n if (!resizable) return;\n\n const totalSize = isHorizontal ? SCREEN_WIDTH : 400;\n const delta = isHorizontal ? gestureState.dx : gestureState.dy;\n const deltaPercentage = (delta / totalSize) * 100;\n const newPercentage = splitPercentage + deltaPercentage;\n handleSplitChange(newPercentage);\n },\n }),\n [resizable, isHorizontal, splitPercentage, handleSplitChange]\n );\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const primaryFlex = splitPercentage / 100;\n const secondaryFlex = (100 - splitPercentage) / 100;\n\n const renderResizer = () => {\n if (!resizable) return null;\n\n return (\n <View\n style={[\n styles.resizer,\n isHorizontal ? styles.resizerHorizontal : styles.resizerVertical,\n { backgroundColor: theme.colors.border },\n ]}\n {...panResponder.panHandlers}\n >\n <View\n style={[\n styles.resizerHandle,\n isHorizontal ? styles.resizerHandleHorizontal : styles.resizerHandleVertical,\n { backgroundColor: theme.colors['muted-foreground'] },\n ]}\n />\n </View>\n );\n };\n\n if (isHorizontal) {\n const hStackStyles: ViewStyle[] = [styles.container];\n if (style) {\n hStackStyles.push(style);\n }\n\n return (\n <HStack style={hStackStyles}>\n <View style={[{ flex: primaryFlex }, primaryStyle]}>{primary}</View>\n {renderResizer()}\n <View style={[{ flex: secondaryFlex }, secondaryStyle]}>{secondary}</View>\n </HStack>\n );\n }\n\n const vStackStyles: ViewStyle[] = [styles.container];\n if (style) {\n vStackStyles.push(style);\n }\n\n return (\n <VStack style={vStackStyles}>\n <View style={[{ flex: primaryFlex }, primaryStyle]}>{primary}</View>\n {renderResizer()}\n <View style={[{ flex: secondaryFlex }, secondaryStyle]}>{secondary}</View>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n resizer: {\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1,\n },\n resizerHorizontal: {\n width: 12,\n height: '100%',\n },\n resizerVertical: {\n height: 12,\n width: '100%',\n },\n resizerHandle: {\n borderRadius: 2,\n },\n resizerHandleHorizontal: {\n width: 4,\n height: 32,\n },\n resizerHandleVertical: {\n width: 32,\n height: 4,\n },\n});\n\nSplit.displayName = 'Split';\n","import React, { useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n TouchableOpacity,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { VStack } from '../atoms/Stack';\n\nimport { Typography } from '../atoms/Typography';\nimport { Divider } from '../atoms/Divider';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\n\n\nexport interface SidebarSection {\n id: string;\n title: string;\n items: SidebarItem[];\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n}\n\nexport interface SidebarItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n event?: string;\n payload?: Record<string, unknown>;\n active?: boolean;\n badge?: string | number;\n disabled?: boolean;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n /** Sidebar sections containing navigation items */\n sections: SidebarSection[];\n /** Currently active item ID */\n activeItemId?: string;\n /** Callback when an item is pressed */\n onItemPress?: (item: SidebarItem) => void;\n /** Sidebar header content */\n header?: React.ReactNode;\n /** Sidebar footer content */\n footer?: React.ReactNode;\n /** Whether sidebar is collapsible to icon-only mode */\n collapsible?: boolean;\n /** Collapsed state (controlled) */\n collapsed?: boolean;\n /** Default collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Sidebar width when expanded */\n expandedWidth?: number;\n /** Sidebar width when collapsed */\n collapsedWidth?: number;\n /** Container style */\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 Sidebar: React.FC<SidebarProps> = ({\n sections,\n activeItemId,\n onItemPress,\n header,\n footer,\n collapsible = false,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n expandedWidth = 260,\n collapsedWidth = 72,\n style,\n isLoading,\n error,\n entity,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(() => {\n const initial = new Set<string>();\n sections.forEach((section) => {\n if (section.defaultCollapsed && section.collapsible !== false) {\n initial.add(section.id);\n }\n });\n return initial;\n });\n\n const isCollapsed =\n controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n\n const toggleCollapsed = useCallback(() => {\n const newCollapsed = !isCollapsed;\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(newCollapsed);\n }\n onCollapsedChange?.(newCollapsed);\n }, [isCollapsed, controlledCollapsed, onCollapsedChange]);\n\n const toggleSection = useCallback((sectionId: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(sectionId)) {\n next.delete(sectionId);\n } else {\n next.add(sectionId);\n }\n return next;\n });\n }, []);\n\n const handleItemPress = useCallback(\n (item: SidebarItem) => {\n if (item.disabled) return;\n\n if (item.event) {\n eventBus.emit(`UI:${item.event}`, { ...item.payload, entity });\n }\n onItemPress?.(item);\n },\n [onItemPress, entity, eventBus]\n );\n\n if (isLoading) {\n return (\n <View style={[styles.container, { width: expandedWidth }, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { width: expandedWidth }, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const currentWidth = isCollapsed ? collapsedWidth : expandedWidth;\n\n const renderItem = (item: SidebarItem, level: number = 0) => {\n const isActive = activeItemId === item.id;\n const hasChildren = item.children && item.children.length > 0;\n const paddingLeft = isCollapsed ? 0 : 12 + level * 16;\n\n return (\n <View key={item.id}>\n <TouchableOpacity\n onPress={() => handleItemPress(item)}\n disabled={item.disabled}\n style={[\n styles.item,\n { paddingLeft },\n isCollapsed && styles.itemCollapsed,\n isActive && [\n styles.itemActive,\n { backgroundColor: theme.colors.primary + '15' },\n ],\n item.disabled && styles.itemDisabled,\n ]}\n >\n {item.icon && (\n <View style={[styles.itemIcon, isCollapsed && styles.itemIconCollapsed]}>\n {item.icon}\n </View>\n )}\n {!isCollapsed && (\n <>\n <Typography\n variant=\"body\"\n style={[\n styles.itemLabel,\n isActive ? { color: theme.colors.primary, fontWeight: '600' } : undefined,\n item.disabled ? { color: theme.colors['muted-foreground'] } : undefined,\n ]}\n >\n {item.label}\n </Typography>\n {item.badge !== undefined && (\n <View\n style={[\n styles.badge,\n { backgroundColor: theme.colors.primary },\n ]}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors['primary-foreground'] }}>\n {String(item.badge)}\n </Typography>\n </View>\n )}\n </>\n )}\n </TouchableOpacity>\n {!isCollapsed && hasChildren && (\n <VStack style={styles.children}>\n {item.children?.map((child) => renderItem(child, level + 1))}\n </VStack>\n )}\n </View>\n );\n };\n\n const renderSection = (section: SidebarSection) => {\n const isSectionCollapsed = collapsedSections.has(section.id);\n const canCollapse = section.collapsible !== false;\n\n return (\n <View key={section.id} style={styles.section}>\n {!isCollapsed && (\n <TouchableOpacity\n onPress={() => canCollapse && toggleSection(section.id)}\n style={[styles.sectionHeader, !canCollapse && styles.sectionHeaderNonCollapsible]}\n disabled={!canCollapse}\n >\n <Typography variant=\"label\" style={styles.sectionTitle}>\n {section.title}\n </Typography>\n {canCollapse && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {isSectionCollapsed ? '▶' : '▼'}\n </Typography>\n )}\n </TouchableOpacity>\n )}\n {(!isSectionCollapsed || isCollapsed) && (\n <VStack spacing={2}>\n {section.items.map((item) => renderItem(item))}\n </VStack>\n )}\n </View>\n );\n };\n\n return (\n <View\n style={[\n styles.container,\n { width: currentWidth, backgroundColor: theme.colors.card },\n style,\n ]}\n >\n {/* Header */}\n {header && (\n <View style={[styles.header, isCollapsed && styles.headerCollapsed]}>{header}</View>\n )}\n\n {/* Collapse toggle */}\n {collapsible && (\n <>\n <TouchableOpacity\n onPress={toggleCollapsed}\n style={[styles.collapseButton, isCollapsed && styles.collapseButtonCollapsed]}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {isCollapsed ? '→' : '←'}\n </Typography>\n </TouchableOpacity>\n <Divider />\n </>\n )}\n\n {/* Navigation */}\n <ScrollView style={styles.scroll} showsVerticalScrollIndicator={false}>\n <VStack spacing={16} style={styles.content}>\n {sections.map(renderSection)}\n </VStack>\n </ScrollView>\n\n {/* Footer */}\n {footer && (\n <>\n <Divider />\n <View style={[styles.footer, isCollapsed && styles.footerCollapsed]}>{footer}</View>\n </>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'column',\n },\n header: {\n padding: 16,\n },\n headerCollapsed: {\n padding: 12,\n alignItems: 'center',\n },\n collapseButton: {\n padding: 8,\n paddingHorizontal: 16,\n alignItems: 'flex-end',\n },\n collapseButtonCollapsed: {\n alignItems: 'center',\n paddingHorizontal: 8,\n },\n scroll: {\n flex: 1,\n },\n content: {\n padding: 12,\n },\n section: {\n marginBottom: 8,\n },\n sectionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n sectionHeaderNonCollapsible: {\n paddingRight: 12,\n },\n sectionTitle: {\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n },\n item: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 10,\n paddingRight: 12,\n borderRadius: 8,\n },\n itemCollapsed: {\n justifyContent: 'center',\n paddingHorizontal: 0,\n },\n itemActive: {\n borderRadius: 8,\n },\n itemDisabled: {\n opacity: 0.5,\n },\n itemIcon: {\n marginRight: 12,\n },\n itemIconCollapsed: {\n marginRight: 0,\n },\n itemLabel: {\n flex: 1,\n },\n badge: {\n minWidth: 20,\n height: 20,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 6,\n },\n children: {\n marginLeft: 12,\n },\n footer: {\n padding: 16,\n },\n footerCollapsed: {\n padding: 12,\n alignItems: 'center',\n },\n});\n\nSidebar.displayName = 'Sidebar';\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 { VStack, HStack } from '../atoms/Stack';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { Divider } from '../atoms/Divider';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface SectionAction {\n /** Action label */\n label: string;\n /** Declarative event name - emits UI:${event} via eventBus on press */\n event?: string;\n /** Payload to include with the event */\n payload?: Record<string, unknown>;\n /** Callback for onPress */\n onPress?: () => void;\n /** Button variant */\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n /** Icon element */\n icon?: React.ReactNode;\n /** Whether the action is disabled */\n disabled?: boolean;\n}\n\nexport interface SectionProps {\n /** Section title */\n title?: string;\n /** Section subtitle/description */\n subtitle?: string;\n /** Content to render inside the section */\n children: React.ReactNode;\n /** Actions to display in the section header */\n actions?: SectionAction[];\n /** Whether to wrap content in a Card */\n card?: boolean;\n /** Whether to show a divider at the bottom */\n showDivider?: boolean;\n /** Custom header element (replaces default title/subtitle/actions) */\n customHeader?: React.ReactNode;\n /** Container style */\n style?: ViewStyle;\n /** Content container style */\n contentStyle?: ViewStyle;\n /** Header style */\n headerStyle?: 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 /** Empty state message */\n emptyMessage?: string;\n /** Whether to show empty state when children is empty */\n showEmptyState?: boolean;\n}\n\nexport const Section: React.FC<SectionProps> = ({\n title,\n subtitle,\n children,\n actions = [],\n card = false,\n showDivider = false,\n customHeader,\n style,\n contentStyle,\n headerStyle,\n isLoading,\n error,\n entity,\n emptyMessage = 'No content available',\n showEmptyState = false,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleActionPress = (action: SectionAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, { ...action.payload, entity });\n }\n action.onPress?.();\n };\n\n const renderHeader = () => {\n if (customHeader) {\n return <View style={[styles.header, headerStyle]}>{customHeader}</View>;\n }\n\n if (!title && actions.length === 0) {\n return null;\n }\n\n const headerStyles: ViewStyle[] = [styles.header];\n if (headerStyle) {\n headerStyles.push(headerStyle);\n }\n\n return (\n <HStack style={headerStyles} align=\"center\" justify=\"space-between\">\n <VStack spacing={4} style={styles.titleContainer}>\n {title && (\n <Typography variant=\"h4\" style={styles.title}>\n {title}\n </Typography>\n )}\n {subtitle && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {subtitle}\n </Typography>\n )}\n </VStack>\n\n {actions.length > 0 && (\n <HStack spacing={8} style={styles.actions}>\n {actions.map((action, index) => (\n <Button\n key={index}\n onPress={() => handleActionPress(action)}\n variant={action.variant || 'ghost'}\n size=\"sm\"\n disabled={action.disabled}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n )}\n </HStack>\n );\n };\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <View style={[styles.content, contentStyle]}>\n <LoadingState message={`Loading ${entity || 'content'}...`} />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.content, contentStyle]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const isEmpty =\n showEmptyState &&\n (!children ||\n (Array.isArray(children) && children.length === 0));\n\n if (isEmpty) {\n return (\n <View style={[styles.content, contentStyle]}>\n <EmptyState message={emptyMessage} />\n </View>\n );\n }\n\n return <View style={[styles.content, contentStyle]}>{children}</View>;\n };\n\n const contentStyles: ViewStyle[] = [styles.container];\n if (style) {\n contentStyles.push(style);\n }\n\n const content = (\n <VStack style={contentStyles} spacing={0}>\n {renderHeader()}\n {renderContent()}\n {showDivider && <Divider style={styles.bottomDivider} />}\n </VStack>\n );\n\n if (card) {\n const cardStyles: ViewStyle[] = [styles.card];\n if (style) {\n cardStyles.push(style);\n }\n\n return (\n <Card style={cardStyles} padding=\"md\">\n {renderHeader()}\n {renderContent()}\n {showDivider && <Divider style={styles.bottomDivider} />}\n </Card>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n card: {\n width: '100%',\n },\n header: {\n paddingBottom: 12,\n },\n titleContainer: {\n flex: 1,\n },\n title: {\n fontWeight: '600',\n },\n actions: {\n flexShrink: 0,\n },\n content: {\n flex: 1,\n },\n bottomDivider: {\n marginTop: 16,\n },\n});\n\nSection.displayName = 'Section';\n","import React, { useEffect, useRef } from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle,\n Animated\n} from 'react-native';\n\n// Canvas dimensions for future use\n// const { width, height } = Dimensions.get('window');\n\nexport type EffectType = \n | 'shake' \n | 'flash' \n | 'fade' \n | 'particle' \n | 'glow'\n | 'dissolve'\n | 'portal'\n | 'explosion';\n\nexport interface CanvasEffectProps {\n /** Type of visual effect */\n type: EffectType;\n /** Whether effect is active */\n active: boolean;\n /** Effect duration in ms */\n duration?: number;\n /** Effect intensity (0-1) */\n intensity?: number;\n /** Effect color */\n color?: string;\n /** Position for centered effects */\n position?: { x: number; y: number };\n /** Callback when effect completes */\n onComplete?: () => void;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const CanvasEffect: React.FC<CanvasEffectProps> = ({\n type,\n active,\n duration = 500,\n intensity = 0.5,\n color = '#fff',\n position,\n onComplete,\n style,\n}) => {\n const animValue = useRef(new Animated.Value(0)).current;\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n if (!active || hasTriggered.current) return;\n \n hasTriggered.current = true;\n \n // Reset animation\n animValue.setValue(0);\n \n // Create animation based on type\n const animation = Animated.timing(animValue, {\n toValue: 1,\n duration,\n useNativeDriver: true,\n });\n \n animation.start(({ finished }) => {\n if (finished) {\n hasTriggered.current = false;\n onComplete?.();\n }\n });\n \n return () => {\n animation.stop();\n };\n }, [active, duration, type]);\n\n // Reset trigger when active becomes false\n useEffect(() => {\n if (!active) {\n hasTriggered.current = false;\n }\n }, [active]);\n\n if (!active && type !== 'glow') return null;\n\n const getEffectStyle = () => {\n switch (type) {\n case 'shake':\n return {\n transform: [{\n translateX: animValue.interpolate({\n inputRange: [0, 0.25, 0.5, 0.75, 1],\n outputRange: [0, -10 * intensity, 10 * intensity, -10 * intensity, 0],\n }),\n }],\n };\n case 'flash':\n return {\n opacity: animValue.interpolate({\n inputRange: [0, 0.1, 0.9, 1],\n outputRange: [0, 1, 1, 0],\n }),\n };\n case 'fade':\n return {\n opacity: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [1, 0],\n }),\n };\n case 'glow':\n return {\n opacity: active \n ? 0.3 + (0.4 * intensity)\n : animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0.3, 0],\n }),\n };\n case 'explosion':\n return {\n transform: [{\n scale: animValue.interpolate({\n inputRange: [0, 0.3, 1],\n outputRange: [0.5, 1.5, 2],\n }),\n }],\n opacity: animValue.interpolate({\n inputRange: [0, 0.3, 1],\n outputRange: [1, 0.8, 0],\n }),\n };\n case 'portal':\n return {\n transform: [{\n rotate: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '360deg'],\n }),\n }],\n opacity: animValue.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [0, 1, 0],\n }),\n };\n default:\n return {};\n }\n };\n\n const getEffectContent = () => {\n switch (type) {\n case 'flash':\n return (\n <View style={[styles.overlay, { backgroundColor: color }]} />\n );\n case 'glow':\n return (\n <View \n style={[\n styles.glow, \n { \n backgroundColor: color,\n shadowColor: color,\n shadowRadius: 20 * intensity,\n }\n ]} \n />\n );\n case 'explosion':\n return (\n <View style={[styles.explosion, { backgroundColor: color }]} />\n );\n case 'portal':\n return (\n <View style={styles.portalContainer}>\n <View style={[styles.portal, { borderColor: color }]} />\n <View style={[styles.portalInner, { borderColor: color }]} />\n </View>\n );\n case 'particle':\n return (\n <View style={styles.particles}>\n {Array.from({ length: 8 }).map((_, i) => (\n <Animated.View\n key={i}\n style={[\n styles.particle,\n {\n backgroundColor: color,\n transform: [{\n translateX: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, Math.cos(i * Math.PI / 4) * 50 * intensity],\n }),\n }, {\n translateY: animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, Math.sin(i * Math.PI / 4) * 50 * intensity],\n }),\n }],\n opacity: animValue.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [1, 1, 0],\n }),\n },\n ]}\n />\n ))}\n </View>\n );\n default:\n return null;\n }\n };\n\n return (\n <Animated.View\n style={[\n styles.container,\n position ? {\n position: 'absolute',\n left: position.x,\n top: position.y,\n } : null,\n getEffectStyle(),\n ...(style ? [style] : []),\n ]}\n pointerEvents=\"none\"\n >\n {getEffectContent()}\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n },\n glow: {\n width: 200,\n height: 200,\n borderRadius: 100,\n shadowOpacity: 1,\n shadowOffset: { width: 0, height: 0 },\n },\n explosion: {\n width: 150,\n height: 150,\n borderRadius: 75,\n },\n portalContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n },\n portal: {\n width: 120,\n height: 120,\n borderRadius: 60,\n borderWidth: 4,\n position: 'absolute',\n },\n portalInner: {\n width: 80,\n height: 80,\n borderRadius: 40,\n borderWidth: 3,\n },\n particles: {\n position: 'absolute',\n width: 0,\n height: 0,\n },\n particle: {\n position: 'absolute',\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n});\n\nCanvasEffect.displayName = 'CanvasEffect';\n","import React, { useRef, useEffect } from 'react';\nimport { \n View, \n Text, \n ScrollView, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { Card } from '../../atoms/Card';\nimport { Badge } from '../../atoms/Badge';\nimport { Typography } from '../../atoms/Typography';\nimport { HStack, VStack } from '../../atoms/Stack';\n\nexport type CombatLogEventType = 'attack' | 'defend' | 'heal' | 'move' | 'special' | 'death' | 'spawn';\n\nexport interface CombatEvent {\n id: string;\n type: CombatLogEventType;\n message: string;\n timestamp: number;\n actorName?: string;\n targetName?: string;\n value?: number;\n turn?: number;\n}\n\nexport interface CombatLogProps {\n events: CombatEvent[];\n maxVisible?: number;\n autoScroll?: boolean;\n showTimestamps?: boolean;\n title?: string;\n style?: ViewStyle;\n}\n\nconst eventIcons: Record<CombatLogEventType, string> = {\n attack: '⚔️',\n defend: '🛡️',\n heal: '❤️',\n move: '🏃',\n special: '⚡',\n death: '💀',\n spawn: '✨',\n};\n\nconst eventColors: Record<CombatLogEventType, string> = {\n attack: '#ef4444',\n defend: '#3b82f6',\n heal: '#22c55e',\n move: '#14b8a6',\n special: '#eab308',\n death: '#6b7280',\n spawn: '#a855f7',\n};\n\nconst eventBadgeVariants: Record<CombatLogEventType, 'default' | 'primary' | 'success' | 'warning' | 'error'> = {\n attack: 'error',\n defend: 'primary',\n heal: 'success',\n move: 'warning',\n special: 'default',\n death: 'default',\n spawn: 'default',\n};\n\nexport const CombatLog: React.FC<CombatLogProps> = ({\n events,\n maxVisible = 50,\n autoScroll = true,\n showTimestamps = false,\n title = 'Combat Log',\n style,\n}) => {\n const theme = useTheme();\n const scrollRef = useRef<ScrollView>(null);\n\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollToEnd({ animated: true });\n }\n }, [events, autoScroll]);\n\n const visibleEvents = events.slice(-maxVisible);\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={[styles.header, { borderBottomColor: theme.colors.border }]}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"body\" style={{ fontWeight: '700' }}>\n {title}\n </Typography>\n <Badge variant=\"default\" size=\"sm\">\n {events.length} events\n </Badge>\n </HStack>\n </View>\n \n <ScrollView \n ref={scrollRef}\n style={styles.scrollView}\n contentContainerStyle={styles.content}\n >\n {visibleEvents.length === 0 ? (\n <View style={styles.emptyState}>\n <Typography variant=\"caption\" style={{ opacity: 0.5 }}>\n No events yet\n </Typography>\n </View>\n ) : (\n <VStack spacing={4}>\n {visibleEvents.map((event) => (\n <HStack \n key={event.id} \n spacing={8} \n align=\"flex-start\"\n style={[\n styles.eventRow,\n ...(event.type === 'death' ? [{ opacity: 0.6 }] : []),\n ]}\n >\n <Text style={{ \n fontSize: 16, \n color: eventColors[event.type],\n marginTop: 2,\n }}>\n {eventIcons[event.type]}\n </Text>\n \n <VStack spacing={4} style={styles.eventContent}>\n <Typography variant=\"caption\">\n {event.message}\n </Typography>\n \n {event.value !== undefined && (\n <Badge \n variant={eventBadgeVariants[event.type]} \n size=\"sm\"\n >\n {event.type === 'heal' ? '+' : event.type === 'attack' ? '-' : ''}{event.value}\n </Badge>\n )}\n </VStack>\n\n {(event.turn || showTimestamps) && (\n <Typography \n variant=\"caption\" \n style={{ opacity: 0.4 }}\n >\n {event.turn ? `T${event.turn}` : ''}\n </Typography>\n )}\n </HStack>\n ))}\n </VStack>\n )}\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'column',\n },\n header: {\n padding: 12,\n borderBottomWidth: 1,\n },\n scrollView: {\n maxHeight: 256,\n },\n content: {\n padding: 8,\n },\n emptyState: {\n padding: 16,\n alignItems: 'center',\n },\n eventRow: {\n padding: 8,\n borderRadius: 4,\n },\n eventContent: {\n flex: 1,\n },\n});\n\nCombatLog.displayName = 'CombatLog';\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { \n View, \n Text, \n TouchableOpacity,\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 { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack } from '../../atoms/Stack';\n\nexport interface DialogueChoice {\n text: string;\n action?: string;\n next?: string;\n disabled?: boolean;\n}\n\nexport interface DialogueNode {\n id?: string;\n speaker: string;\n text: string;\n portrait?: string;\n choices?: DialogueChoice[];\n autoAdvance?: number; // ms to auto-advance, undefined = wait for input\n}\n\nexport interface DialogueBoxProps {\n /** Current dialogue node to display */\n dialogue: DialogueNode;\n /** Typewriter speed in ms per character (0 = instant) */\n typewriterSpeed?: number;\n /** Position of dialogue box */\n position?: 'top' | 'bottom';\n /** Called when text animation completes */\n onComplete?: () => void;\n /** Called when a choice is selected */\n onChoice?: (choice: DialogueChoice) => void;\n /** Called when dialogue is advanced (no choices) */\n onAdvance?: () => void;\n /** Declarative event: emits UI:{completeEvent} when text animation completes */\n completeEvent?: string;\n /** Declarative event: emits UI:{choiceEvent} with { choice } when a choice is selected */\n choiceEvent?: string;\n /** Declarative event: emits UI:{advanceEvent} when dialogue is advanced */\n advanceEvent?: string;\n /** Optional style */\n style?: ViewStyle;\n}\n\nexport const DialogueBox: React.FC<DialogueBoxProps> = ({\n dialogue,\n typewriterSpeed = 30,\n position = 'bottom',\n onComplete,\n onChoice,\n onAdvance,\n completeEvent,\n choiceEvent,\n advanceEvent,\n style,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n const [displayedText, setDisplayedText] = useState('');\n const [isTyping, setIsTyping] = useState(false);\n const [selectedChoice, setSelectedChoice] = useState(0);\n const textRef = useRef(dialogue.text);\n const charIndexRef = useRef(0);\n const autoAdvanceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Reset when dialogue changes\n useEffect(() => {\n textRef.current = dialogue.text;\n charIndexRef.current = 0;\n setDisplayedText('');\n setSelectedChoice(0);\n\n if (typewriterSpeed === 0) {\n // Instant display\n setDisplayedText(dialogue.text);\n setIsTyping(false);\n if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {} as EventPayload);\n onComplete?.();\n } else {\n setIsTyping(true);\n }\n\n return () => {\n if (autoAdvanceTimerRef.current) {\n clearTimeout(autoAdvanceTimerRef.current);\n }\n };\n }, [dialogue, typewriterSpeed, onComplete, completeEvent, eventBus]);\n\n // Typewriter effect\n useEffect(() => {\n if (!isTyping || typewriterSpeed === 0) return;\n\n const interval = setInterval(() => {\n if (charIndexRef.current < textRef.current.length) {\n charIndexRef.current++;\n setDisplayedText(textRef.current.slice(0, charIndexRef.current));\n } else {\n setIsTyping(false);\n clearInterval(interval);\n if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {} as EventPayload);\n onComplete?.();\n\n // Auto-advance if configured\n if (dialogue.autoAdvance && !dialogue.choices?.length) {\n autoAdvanceTimerRef.current = setTimeout(() => {\n if (advanceEvent) eventBus.emit(`UI:${advanceEvent}`, {} as EventPayload);\n onAdvance?.();\n }, dialogue.autoAdvance);\n }\n }\n }, typewriterSpeed);\n\n return () => clearInterval(interval);\n }, [isTyping, typewriterSpeed, dialogue.autoAdvance, dialogue.choices, onComplete, onAdvance, completeEvent, advanceEvent, eventBus]);\n\n // Skip to end of text\n const skipTypewriter = useCallback(() => {\n if (isTyping) {\n charIndexRef.current = textRef.current.length;\n setDisplayedText(textRef.current);\n setIsTyping(false);\n if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {} as EventPayload);\n onComplete?.();\n }\n }, [isTyping, onComplete, completeEvent, eventBus]);\n\n // Handle tap\n const handlePress = useCallback(() => {\n if (isTyping) {\n skipTypewriter();\n } else if (!dialogue.choices?.length) {\n if (advanceEvent) eventBus.emit(`UI:${advanceEvent}`, {} as EventPayload);\n onAdvance?.();\n }\n }, [isTyping, skipTypewriter, dialogue.choices, onAdvance, advanceEvent, eventBus]);\n\n // Handle choice selection\n const handleChoice = useCallback((choice: DialogueChoice, index: number) => {\n setSelectedChoice(index);\n if (choiceEvent) eventBus.emit(`UI:${choiceEvent}`, { choice } as unknown as EventPayload);\n onChoice?.(choice);\n }, [onChoice, choiceEvent, eventBus]);\n\n const enabledChoices = dialogue.choices?.filter(c => !c.disabled) ?? [];\n\n return (\n <TouchableOpacity\n activeOpacity={1}\n onPress={handlePress}\n style={[\n styles.container,\n position === 'top' ? styles.topPosition : styles.bottomPosition,\n ...(style ? [style] : []),\n ]}\n >\n <Card style={styles.card}>\n <View style={styles.content}>\n {/* Speaker name */}\n <Typography \n variant=\"h4\" \n style={{ color: '#eab308', marginBottom: 8 }}\n >\n {dialogue.speaker}\n </Typography>\n\n {/* Dialogue text */}\n <View style={styles.textContainer}>\n <Typography variant=\"body\" style={{ lineHeight: 24 }}>\n {displayedText}\n {isTyping && (\n <Text style={styles.cursor}>▌</Text>\n )}\n </Typography>\n </View>\n\n {/* Choices */}\n {!isTyping && enabledChoices.length > 0 && (\n <VStack spacing={8} style={styles.choices}>\n {enabledChoices.map((choice, index) => (\n <TouchableOpacity\n key={index}\n onPress={() => handleChoice(choice, index)}\n style={[\n styles.choiceButton,\n selectedChoice === index && styles.choiceSelected,\n ]}\n >\n <Text style={selectedChoice === index ? styles.choiceTextSelected : styles.choiceText}>\n <Text style={{ color: '#6b7280', marginRight: 8 }}>{index + 1}. </Text>\n {choice.text}\n </Text>\n </TouchableOpacity>\n ))}\n </VStack>\n )}\n\n {/* Continue indicator */}\n {!isTyping && !dialogue.choices?.length && (\n <Text style={styles.continueText}>\n Tap to continue...\n </Text>\n )}\n </View>\n </Card>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n left: 0,\n right: 0,\n padding: 16,\n zIndex: 40,\n },\n topPosition: {\n top: 0,\n },\n bottomPosition: {\n bottom: 0,\n },\n card: {\n backgroundColor: 'rgba(17, 24, 39, 0.95)',\n borderWidth: 2,\n borderColor: '#4b5563',\n },\n content: {\n padding: 16,\n },\n textContainer: {\n minHeight: 60,\n },\n cursor: {\n opacity: 0.7,\n },\n choices: {\n marginTop: 16,\n },\n choiceButton: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderRadius: 8,\n backgroundColor: '#1f2937',\n },\n choiceSelected: {\n backgroundColor: '#374151',\n },\n choiceText: {\n color: '#ffffff',\n },\n choiceTextSelected: {\n color: '#eab308',\n },\n continueText: {\n marginTop: 16,\n color: '#6b7280',\n fontSize: 12,\n textAlign: 'center',\n },\n});\n\nDialogueBox.displayName = 'DialogueBox';\n","import React, { \n createContext, \n useContext, \n useState, \n useCallback,\n useRef,\n ReactNode \n} from 'react';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface AudioTrack {\n id: string;\n src: string;\n volume?: number;\n loop?: boolean;\n}\n\nexport interface GameAudioContextValue {\n /** Whether audio is globally enabled */\n isEnabled: boolean;\n /** Current master volume (0-1) */\n masterVolume: number;\n /** Currently playing music track ID */\n currentMusic: string | null;\n /** Toggle all audio on/off */\n toggle: () => void;\n /** Set master volume */\n setVolume: (volume: number) => void;\n /** Play a music track */\n playMusic: (trackId: string, options?: { loop?: boolean; fadeIn?: number }) => void;\n /** Stop current music */\n stopMusic: (options?: { fadeOut?: number }) => void;\n /** Play a sound effect */\n playSfx: (soundId: string, options?: { volume?: number }) => void;\n /** Register a track for later use */\n registerTrack: (track: AudioTrack) => void;\n /** Mute/unmute a specific category */\n setCategoryMuted: (category: 'music' | 'sfx', muted: boolean) => void;\n}\n\nconst GameAudioContext = createContext<GameAudioContextValue | null>(null);\n\nexport interface GameAudioProviderProps {\n children: ReactNode;\n /** Initial enabled state */\n defaultEnabled?: boolean;\n /** Initial master volume */\n defaultVolume?: number;\n /** Available tracks */\n tracks?: AudioTrack[];\n /** Event name for toggle events */\n toggleEvent?: string;\n}\n\nexport const GameAudioProvider: React.FC<GameAudioProviderProps> = ({\n children,\n defaultEnabled = true,\n defaultVolume = 0.7,\n tracks = [],\n toggleEvent,\n}) => {\n const eventBus = useEventBus();\n const [isEnabled, setIsEnabled] = useState(defaultEnabled);\n const [masterVolume, setMasterVolume] = useState(defaultVolume);\n const [currentMusic, setCurrentMusic] = useState<string | null>(null);\n const [categoryMuted, setCategoryMuted] = useState({\n music: false,\n sfx: false,\n });\n \n // Track registry\n const trackRegistry = useRef<Map<string, AudioTrack>>(new Map());\n \n // Register initial tracks\n React.useEffect(() => {\n tracks.forEach(track => {\n trackRegistry.current.set(track.id, track);\n });\n }, [tracks]);\n\n const toggle = useCallback(() => {\n setIsEnabled(prev => {\n const newValue = !prev;\n if (toggleEvent) {\n eventBus.emit(`UI:${toggleEvent}`, { enabled: newValue });\n }\n return newValue;\n });\n }, [toggleEvent, eventBus]);\n\n const setVolume = useCallback((volume: number) => {\n const clamped = Math.max(0, Math.min(1, volume));\n setMasterVolume(clamped);\n }, []);\n\n const playMusic = useCallback((trackId: string, _options?: { loop?: boolean; fadeIn?: number }) => {\n if (!isEnabled || categoryMuted.music) return;\n \n const track = trackRegistry.current.get(trackId);\n if (!track) {\n console.warn(`Track \"${trackId}\" not found in registry`);\n return;\n }\n \n setCurrentMusic(trackId);\n // In a real implementation, this would use react-native-sound or expo-av\n console.log(`[Audio] Playing music: ${trackId}`);\n }, [isEnabled, categoryMuted.music]);\n\n const stopMusic = useCallback((_options?: { fadeOut?: number }) => {\n setCurrentMusic(null);\n console.log('[Audio] Stopping music');\n }, []);\n\n const playSfx = useCallback((soundId: string, _options?: { volume?: number }) => {\n if (!isEnabled || categoryMuted.sfx) return;\n console.log(`[Audio] Playing SFX: ${soundId}`);\n }, [isEnabled, categoryMuted.sfx]);\n\n const registerTrack = useCallback((track: AudioTrack) => {\n trackRegistry.current.set(track.id, track);\n }, []);\n\n const handleCategoryMute = useCallback((category: 'music' | 'sfx', muted: boolean) => {\n setCategoryMuted(prev => ({ ...prev, [category]: muted }));\n }, []);\n\n const value: GameAudioContextValue = {\n isEnabled,\n masterVolume,\n currentMusic,\n toggle,\n setVolume,\n playMusic,\n stopMusic,\n playSfx,\n registerTrack,\n setCategoryMuted: handleCategoryMute,\n };\n\n return (\n <GameAudioContext.Provider value={value}>\n {children}\n </GameAudioContext.Provider>\n );\n};\n\nexport const useGameAudio = (): GameAudioContextValue => {\n const context = useContext(GameAudioContext);\n if (!context) {\n throw new Error('useGameAudio must be used within a GameAudioProvider');\n }\n return context;\n};\n\nGameAudioProvider.displayName = 'GameAudioProvider';\n","import React from 'react';\nimport { \n View, \n Text, \n TouchableOpacity,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useGameAudio } from './GameAudioProvider';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Card } from '../../atoms/Card';\nimport { VStack } from '../../atoms/Stack';\n\nexport interface GameAudioToggleProps {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Show volume slider */\n showVolume?: boolean;\n /** Show category toggles */\n showCategories?: boolean;\n /** Callback when toggled */\n onToggle?: (enabled: boolean) => void;\n /** Declarative event name */\n toggleEvent?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const GameAudioToggle: React.FC<GameAudioToggleProps> = ({\n size = 'md',\n showVolume = false,\n showCategories = false,\n onToggle,\n toggleEvent,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n \n // Try to use game audio context, fallback to local state if not available\n let audio: ReturnType<typeof useGameAudio> | null = null;\n try {\n audio = useGameAudio();\n } catch {\n // Provider not available\n }\n\n const isEnabled = audio?.isEnabled ?? true;\n const masterVolume = audio?.masterVolume ?? 0.7;\n\n const handleToggle = () => {\n const newValue = !isEnabled;\n \n if (toggleEvent) {\n eventBus.emit(`UI:${toggleEvent}`, { enabled: newValue });\n }\n \n audio?.toggle();\n onToggle?.(newValue);\n };\n\n const getIconSize = () => {\n switch (size) {\n case 'sm': return 20;\n case 'lg': return 32;\n default: return 24;\n }\n };\n\n const iconSize = getIconSize();\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <TouchableOpacity onPress={handleToggle} style={styles.button}>\n <Text style={{ fontSize: iconSize }}>\n {isEnabled ? '🔊' : '🔇'}\n </Text>\n <Text style={[\n styles.label,\n { fontSize: size === 'sm' ? 12 : size === 'lg' ? 16 : 14 }\n ]}>\n {isEnabled ? 'ON' : 'OFF'}\n </Text>\n </TouchableOpacity>\n\n {showVolume && audio && (\n <View style={styles.volumeContainer}>\n <Text style={styles.volumeIcon}>🔉</Text>\n <View style={styles.volumeBar}>\n <View \n style={[\n styles.volumeFill,\n { width: `${masterVolume * 100}%` }\n ]} \n />\n </View>\n <Text style={styles.volumeText}>{Math.round(masterVolume * 100)}%</Text>\n </View>\n )}\n\n {showCategories && audio && (\n <VStack spacing={8} style={styles.categories}>\n <TouchableOpacity\n onPress={() => audio?.setCategoryMuted('music', !audio.currentMusic)}\n style={styles.categoryRow}\n >\n <Text>🎵 Music</Text>\n <Text style={{ color: audio.currentMusic ? theme.colors.primary : '#666' }}>\n {audio.currentMusic ? 'ON' : 'OFF'}\n </Text>\n </TouchableOpacity>\n <TouchableOpacity\n onPress={() => {}}\n style={styles.categoryRow}\n >\n <Text>🔊 SFX</Text>\n <Text style={{ color: '#666' }}>ON</Text>\n </TouchableOpacity>\n </VStack>\n )}\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 12,\n alignItems: 'center',\n },\n button: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n padding: 8,\n },\n label: {\n color: '#fff',\n fontWeight: '600',\n },\n volumeContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginTop: 12,\n width: '100%',\n },\n volumeIcon: {\n fontSize: 14,\n },\n volumeBar: {\n flex: 1,\n height: 4,\n backgroundColor: '#374151',\n borderRadius: 2,\n overflow: 'hidden',\n },\n volumeFill: {\n height: '100%',\n backgroundColor: '#3b82f6',\n },\n volumeText: {\n color: '#9ca3af',\n fontSize: 12,\n minWidth: 35,\n textAlign: 'right',\n },\n categories: {\n marginTop: 12,\n width: '100%',\n },\n categoryRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: 8,\n paddingHorizontal: 12,\n backgroundColor: '#1f2937',\n borderRadius: 6,\n },\n});\n\nGameAudioToggle.displayName = 'GameAudioToggle';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Dimensions,\n ActivityIndicator \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nconst { width } = Dimensions.get('window');\n\nexport interface GameCanvas3DProps {\n /** Scene to render (simplified for native) */\n scene?: string;\n /** Camera position */\n cameraPosition?: { x: number; y: number; z: number };\n /** Camera target */\n cameraTarget?: { x: number; y: number; z: number };\n /** Field of view */\n fov?: number;\n /** Background color */\n backgroundColor?: string;\n /** Auto-rotate camera */\n autoRotate?: boolean;\n /** Render quality */\n quality?: 'low' | 'medium' | 'high';\n /** Loading state */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/**\n * GameCanvas3D - 3D game canvas component\n * \n * Note: This is a placeholder implementation. Full 3D rendering in React Native\n * requires either:\n * - WebView with Three.js\n * - @react-three/fiber with expo-three\n * - react-native-gl-model-view\n * - Unity WebView export\n * \n * @example\n * ```tsx\n * <GameCanvas3D\n * scene=\"dungeon\"\n * cameraPosition={{ x: 0, y: 5, z: 10 }}\n * autoRotate={true}\n * />\n * ```\n */\nexport const GameCanvas3D: React.FC<GameCanvas3DProps> = ({\n scene = 'default',\n cameraPosition = { x: 0, y: 5, z: 10 },\n cameraTarget = { x: 0, y: 0, z: 0 },\n fov = 60,\n backgroundColor = '#0f172a',\n autoRotate = false,\n quality = 'medium',\n isLoading = false,\n error = null,\n style,\n}) => {\n const theme = useTheme();\n \n const canvasWidth = width - 32;\n const canvasHeight = canvasWidth * 0.6;\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor }, ...(style ? [style] : [])]}>\n <ActivityIndicator size=\"large\" color={theme.colors.primary} />\n <Text style={styles.loadingText}>Loading 3D Scene...</Text>\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor }, style]}>\n <Text style={styles.errorText}>Error: {error.message}</Text>\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor }, style]}>\n <View style={[styles.canvas, { width: canvasWidth, height: canvasHeight }]}>\n {/* 3D View placeholder */}\n <View style={styles.placeholder3D}>\n <Text style={styles.title}>3D Canvas</Text>\n <Text style={styles.sceneName}>Scene: {scene}</Text>\n \n {/* Camera info */}\n <View style={styles.cameraInfo}>\n <Text style={styles.cameraLabel}>Camera</Text>\n <Text style={styles.cameraValue}>\n pos: ({cameraPosition.x}, {cameraPosition.y}, {cameraPosition.z})\n </Text>\n <Text style={styles.cameraValue}>\n target: ({cameraTarget.x}, {cameraTarget.y}, {cameraTarget.z})\n </Text>\n <Text style={styles.cameraValue}>FOV: {fov}°</Text>\n </View>\n \n {/* Settings */}\n <View style={styles.settings}>\n <View style={styles.settingRow}>\n <Text style={styles.settingLabel}>Auto Rotate:</Text>\n <Text style={styles.settingValue}>{autoRotate ? 'ON' : 'OFF'}</Text>\n </View>\n <View style={styles.settingRow}>\n <Text style={styles.settingLabel}>Quality:</Text>\n <Text style={styles.settingValue}>{quality.toUpperCase()}</Text>\n </View>\n </View>\n \n {/* 3D indicator */}\n <View style={styles.indicator3D}>\n <Text style={styles.indicatorText}>3D</Text>\n </View>\n </View>\n </View>\n \n {/* Implementation note */}\n <View style={styles.noteContainer}>\n <Text style={styles.noteTitle}>Implementation Required</Text>\n <Text style={styles.note}>\n Full 3D support requires one of:{'\\n'}\n • WebView with Three.js{'\\n'}\n • @react-three/fiber + expo-three{'\\n'}\n • Unity WebView export\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n },\n canvas: {\n borderRadius: 8,\n borderWidth: 2,\n borderColor: '#374151',\n overflow: 'hidden',\n },\n placeholder3D: {\n flex: 1,\n backgroundColor: '#1f2937',\n justifyContent: 'center',\n alignItems: 'center',\n padding: 16,\n },\n title: {\n color: '#fff',\n fontSize: 24,\n fontWeight: '700',\n },\n sceneName: {\n color: '#3b82f6',\n fontSize: 16,\n marginTop: 8,\n },\n cameraInfo: {\n marginTop: 24,\n padding: 12,\n backgroundColor: '#111827',\n borderRadius: 8,\n width: '100%',\n },\n cameraLabel: {\n color: '#6b7280',\n fontSize: 10,\n fontWeight: '700',\n textTransform: 'uppercase',\n marginBottom: 4,\n },\n cameraValue: {\n color: '#9ca3af',\n fontSize: 12,\n fontFamily: 'monospace',\n },\n settings: {\n marginTop: 16,\n width: '100%',\n },\n settingRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingVertical: 4,\n },\n settingLabel: {\n color: '#6b7280',\n fontSize: 12,\n },\n settingValue: {\n color: '#fff',\n fontSize: 12,\n fontWeight: '600',\n },\n indicator3D: {\n position: 'absolute',\n top: 12,\n right: 12,\n backgroundColor: '#3b82f6',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 4,\n },\n indicatorText: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '700',\n },\n loadingText: {\n color: '#9ca3af',\n marginTop: 12,\n },\n errorText: {\n color: '#ef4444',\n textAlign: 'center',\n },\n noteContainer: {\n marginTop: 16,\n padding: 12,\n backgroundColor: '#1f2937',\n borderRadius: 8,\n width: '100%',\n },\n noteTitle: {\n color: '#fbbf24',\n fontSize: 12,\n fontWeight: '700',\n marginBottom: 8,\n },\n note: {\n color: '#9ca3af',\n fontSize: 11,\n lineHeight: 18,\n },\n});\n\nGameCanvas3D.displayName = 'GameCanvas3D';\n","import React, { useEffect } from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Animated\n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack } from '../../atoms/Stack';\nimport { Button } from '../../atoms/Button';\n\n\n\nexport interface GameOverStats {\n label: string;\n value: string | number;\n highlighted?: boolean;\n}\n\nexport interface GameOverScreenProps {\n /** Win or lose state */\n victory?: boolean;\n /** Final score */\n score?: number;\n /** High score */\n highScore?: number;\n /** Stats to display */\n stats?: GameOverStats[];\n /** Time spent in run */\n timeElapsed?: string;\n /** Wave/enemy stats */\n wavesCompleted?: number;\n totalWaves?: number;\n /** Event names for declarative actions */\n retryEvent?: string;\n menuEvent?: string;\n shareEvent?: string;\n /** Callbacks */\n onRetry?: () => void;\n onMenu?: () => void;\n onShare?: () => void;\n /** Whether buttons are loading */\n isLoading?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const GameOverScreen: React.FC<GameOverScreenProps> = ({\n victory = false,\n score = 0,\n highScore,\n stats = [],\n timeElapsed,\n wavesCompleted,\n totalWaves,\n retryEvent,\n menuEvent,\n shareEvent,\n onRetry,\n onMenu,\n onShare,\n isLoading = false,\n style,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n const fadeAnim = React.useRef(new Animated.Value(0)).current;\n const scaleAnim = React.useRef(new Animated.Value(0.8)).current;\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 500,\n useNativeDriver: true,\n }),\n Animated.spring(scaleAnim, {\n toValue: 1,\n friction: 8,\n tension: 40,\n useNativeDriver: true,\n }),\n ]).start();\n }, []);\n\n const handleRetry = () => {\n if (retryEvent) eventBus.emit(`UI:${retryEvent}`, {});\n onRetry?.();\n };\n\n const handleMenu = () => {\n if (menuEvent) eventBus.emit(`UI:${menuEvent}`, {});\n onMenu?.();\n };\n\n const handleShare = () => {\n if (shareEvent) eventBus.emit(`UI:${shareEvent}`, { score, victory });\n onShare?.();\n };\n\n const newHighScore = highScore !== undefined && score > highScore;\n\n return (\n <View style={[styles.container, ...(style ? [style] : [])]}>\n {/* Background overlay */}\n <View style={styles.overlay} />\n \n <Animated.View\n style={[\n styles.content,\n {\n opacity: fadeAnim,\n transform: [{ scale: scaleAnim }],\n },\n ]}\n >\n <Card style={styles.card}>\n <VStack spacing={24} align=\"center\">\n {/* Victory/Defeat Header */}\n <View style={[\n styles.headerBadge,\n { backgroundColor: victory ? '#22c55e' : '#ef4444' }\n ]}>\n <Typography \n variant=\"h2\" \n style={{ color: '#fff', fontWeight: '800' }}\n >\n {victory ? 'VICTORY!' : 'DEFEAT'}\n </Typography>\n </View>\n\n {/* Score Section */}\n <VStack spacing={8} align=\"center\">\n <Typography variant=\"caption\" style={{ color: '#9ca3af' }}>\n FINAL SCORE\n </Typography>\n <Typography \n variant=\"h1\" \n style={{ \n fontSize: 48, \n color: newHighScore ? '#fbbf24' : '#fff',\n }}\n >\n {score.toLocaleString()}\n </Typography>\n {newHighScore && (\n <Text style={styles.newHighScoreBadge}>NEW HIGH SCORE!</Text>\n )}\n {highScore !== undefined && !newHighScore && (\n <Typography variant=\"caption\" style={{ color: '#6b7280' }}>\n High Score: {highScore.toLocaleString()}\n </Typography>\n )}\n </VStack>\n\n {/* Stats Grid */}\n {stats.length > 0 && (\n <View style={styles.statsGrid}>\n {stats.map((stat, index) => (\n <View \n key={index} \n style={[\n styles.statItem,\n stat.highlighted && styles.statHighlighted\n ]}\n >\n <Typography \n variant=\"caption\" \n style={{ color: '#6b7280' }}\n >\n {stat.label}\n </Typography>\n <Typography variant=\"h4\">\n {stat.value}\n </Typography>\n </View>\n ))}\n {timeElapsed && (\n <View style={styles.statItem}>\n <Typography variant=\"caption\" style={{ color: '#6b7280' }}>\n TIME\n </Typography>\n <Typography variant=\"h4\">\n {timeElapsed}\n </Typography>\n </View>\n )}\n {wavesCompleted !== undefined && (\n <View style={styles.statItem}>\n <Typography variant=\"caption\" style={{ color: '#6b7280' }}>\n WAVES\n </Typography>\n <Typography variant=\"h4\">\n {wavesCompleted}{totalWaves ? `/${totalWaves}` : ''}\n </Typography>\n </View>\n )}\n </View>\n )}\n\n {/* Action Buttons */}\n <VStack spacing={12} style={styles.actions}>\n <Button\n variant=\"primary\"\n size=\"lg\"\n onPress={handleRetry}\n disabled={isLoading}\n style={{ minWidth: 200 }}\n >\n {victory ? 'PLAY AGAIN' : 'TRY AGAIN'}\n </Button>\n \n <Button\n variant=\"secondary\"\n size=\"md\"\n onPress={handleMenu}\n disabled={isLoading}\n style={{ minWidth: 200 }}\n >\n MAIN MENU\n </Button>\n\n {onShare && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleShare}\n disabled={isLoading}\n >\n SHARE RESULT\n </Button>\n )}\n </VStack>\n </VStack>\n </Card>\n </Animated.View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 50,\n },\n overlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.85)',\n },\n content: {\n width: '90%',\n maxWidth: 400,\n },\n card: {\n backgroundColor: '#1f2937',\n borderWidth: 2,\n borderColor: '#374151',\n },\n headerBadge: {\n paddingHorizontal: 24,\n paddingVertical: 12,\n borderRadius: 8,\n },\n newHighScoreBadge: {\n backgroundColor: '#fbbf24',\n color: '#000',\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderRadius: 12,\n fontSize: 12,\n fontWeight: '700',\n },\n statsGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: 16,\n },\n statItem: {\n alignItems: 'center',\n minWidth: 80,\n },\n statHighlighted: {\n backgroundColor: 'rgba(251, 191, 36, 0.1)',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n },\n actions: {\n width: '100%',\n alignItems: 'center',\n },\n});\n\nGameOverScreen.displayName = 'GameOverScreen';\n","import React, { useState, useCallback } from 'react';\nimport { \n View, \n Text, \n TouchableOpacity,\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 { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\n\n\nexport interface InventoryItem {\n id: string;\n type: string;\n quantity: number;\n sprite?: string;\n name?: string;\n description?: string;\n}\n\nexport interface InventoryPanelProps {\n /** Array of items in inventory */\n items: InventoryItem[];\n /** Total number of slots */\n slots: number;\n /** Number of columns in grid */\n columns: number;\n /** Currently selected slot index */\n selectedSlot?: number;\n /** Called when a slot is selected */\n onSelectSlot?: (index: number) => void;\n /** Called when an item is used (double-tap or confirm) */\n onUseItem?: (item: InventoryItem) => void;\n /** Called when an item is dropped */\n onDropItem?: (item: InventoryItem) => void;\n /** Declarative event: emits UI:{selectSlotEvent} with { index } when a slot is selected */\n selectSlotEvent?: string;\n /** Declarative event: emits UI:{useItemEvent} with { item } when an item is used */\n useItemEvent?: string;\n /** Declarative event: emits UI:{dropItemEvent} with { item } when an item is dropped */\n dropItemEvent?: string;\n /** Show item tooltips on long press */\n showTooltips?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const InventoryPanel: React.FC<InventoryPanelProps> = ({\n items,\n slots,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columns,\n selectedSlot,\n onSelectSlot,\n onUseItem,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDropItem,\n selectSlotEvent,\n useItemEvent,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropItemEvent,\n showTooltips = true,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [lastTap, setLastTap] = useState<number | null>(null);\n const [showTooltip, setShowTooltip] = useState<number | null>(null);\n\n const handleSlotPress = useCallback((index: number) => {\n const now = Date.now();\n const item = items.find(i => i.id === String(index));\n \n // Double tap detection\n if (lastTap && now - lastTap < 300 && item) {\n // Double tap - use item\n if (useItemEvent) eventBus.emit(`UI:${useItemEvent}`, { item } as unknown as EventPayload);\n onUseItem?.(item);\n setLastTap(null);\n return;\n }\n \n setLastTap(now);\n \n // Single tap - select slot\n if (selectSlotEvent) eventBus.emit(`UI:${selectSlotEvent}`, { index } as EventPayload);\n onSelectSlot?.(index);\n }, [lastTap, items, onSelectSlot, onUseItem, selectSlotEvent, useItemEvent, eventBus]);\n\n const handleLongPress = useCallback((index: number) => {\n if (!showTooltips) return;\n setShowTooltip(index);\n }, [showTooltips]);\n\n // Drop handler - preserved for future use\n // const handleDrop = useCallback((item: InventoryItem) => {\n // if (dropItemEvent) eventBus.emit(`UI:${dropItemEvent}`, { item });\n // onDropItem?.(item);\n // }, [onDropItem, dropItemEvent, eventBus]);\n\n // Generate slots array\n const slotsArray = Array.from({ length: slots }, (_, i) => {\n const item = items.find(item => item.id === String(i));\n return { index: i, item };\n });\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={styles.grid}>\n {slotsArray.map(({ index, item }) => (\n <TouchableOpacity\n key={index}\n onPress={() => handleSlotPress(index)}\n onLongPress={() => handleLongPress(index)}\n onPressOut={() => setShowTooltip(null)}\n style={[\n styles.slot,\n {\n borderColor: theme.colors.border,\n backgroundColor: theme.colors.card,\n },\n selectedSlot === index && {\n borderColor: theme.colors.primary,\n borderWidth: 2,\n },\n ]}\n >\n {item ? (\n <>\n <Text style={styles.itemIcon}>\n {item.sprite || '📦'}\n </Text>\n {item.quantity > 1 && (\n <View style={styles.quantityBadge}>\n <Text style={styles.quantityText}>{item.quantity}</Text>\n </View>\n )}\n \n {/* Tooltip */}\n {showTooltip === index && item.name && (\n <View style={styles.tooltip}>\n <Typography variant=\"caption\" style={{ color: '#fff' }}>\n {item.name}\n </Typography>\n {item.description && (\n <Typography variant=\"caption\" style={{ color: '#aaa', fontSize: 10 }}>\n {item.description}\n </Typography>\n )}\n </View>\n )}\n </>\n ) : null}\n </TouchableOpacity>\n ))}\n </View>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n grid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n slot: {\n width: 64,\n height: 64,\n borderWidth: 1,\n borderRadius: 8,\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n },\n itemIcon: {\n fontSize: 32,\n },\n quantityBadge: {\n position: 'absolute',\n bottom: 4,\n right: 4,\n backgroundColor: '#374151',\n borderRadius: 10,\n minWidth: 18,\n height: 18,\n justifyContent: 'center',\n alignItems: 'center',\n },\n quantityText: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '700',\n },\n tooltip: {\n position: 'absolute',\n bottom: '100%',\n left: 0,\n backgroundColor: 'rgba(0,0,0,0.9)',\n padding: 8,\n borderRadius: 4,\n minWidth: 120,\n zIndex: 100,\n },\n});\n\nInventoryPanel.displayName = 'InventoryPanel';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Dimensions,\n ActivityIndicator \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nconst { width } = Dimensions.get('window');\n\nexport interface IsometricTile {\n x: number;\n y: number;\n z?: number;\n type?: string;\n color?: string;\n height?: number;\n}\n\nexport interface IsometricCanvasProps {\n /** Tiles to render */\n tiles?: IsometricTile[];\n /** Grid dimensions */\n gridWidth?: number;\n gridHeight?: number;\n /** Tile size in pixels */\n tileSize?: number;\n /** Camera offset */\n offsetX?: number;\n offsetY?: number;\n /** Zoom level */\n zoom?: number;\n /** Whether to show grid lines */\n showGrid?: boolean;\n /** Background color */\n backgroundColor?: string;\n /** Loading state */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/**\n * IsometricCanvas - 2.5D isometric tile renderer\n * \n * Note: This is a simplified implementation. For full 3D isometric rendering,\n * consider using react-native-game-engine or a WebView with Three.js/Phaser.\n * \n * @example\n * ```tsx\n * <IsometricCanvas\n * tiles={[\n * { x: 0, y: 0, type: 'grass', color: '#22c55e' },\n * { x: 1, y: 0, type: 'water', color: '#3b82f6' },\n * ]}\n * gridWidth={10}\n * gridHeight={10}\n * />\n * ```\n */\nexport const IsometricCanvas: React.FC<IsometricCanvasProps> = ({\n tiles = [],\n gridWidth = 10,\n gridHeight = 10,\n tileSize = 32,\n offsetX = 0,\n offsetY = 0,\n zoom = 1,\n showGrid = true,\n backgroundColor = '#0f172a',\n isLoading = false,\n error = null,\n style,\n}) => {\n const theme = useTheme();\n \n const canvasWidth = width - 32;\n const canvasHeight = canvasWidth * 0.75;\n\n // Convert isometric coordinates to screen coordinates\n const isoToScreen = (x: number, y: number, z: number = 0) => {\n const isoX = (x - y) * (tileSize * zoom * 0.866);\n const isoY = (x + y) * (tileSize * zoom * 0.5) - (z * tileSize * zoom * 0.5);\n return {\n x: isoX + canvasWidth / 2 + offsetX,\n y: isoY + canvasHeight / 3 + offsetY,\n };\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, { backgroundColor }, ...(style ? [style] : [])]}>\n <ActivityIndicator size=\"large\" color={theme.colors.primary} />\n <Text style={styles.loadingText}>Loading isometric view...</Text>\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { backgroundColor }, style]}>\n <Text style={styles.errorText}>Error: {error.message}</Text>\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor }, style]}>\n {/* Canvas placeholder showing grid info */}\n <View style={[styles.canvas, { width: canvasWidth, height: canvasHeight }]}>\n {/* Grid info overlay */}\n <View style={styles.infoOverlay}>\n <Text style={styles.infoText}>Isometric View</Text>\n <Text style={styles.infoSubtext}>\n Grid: {gridWidth}x{gridHeight}\n </Text>\n <Text style={styles.infoSubtext}>\n Tiles: {tiles.length}\n </Text>\n <Text style={styles.infoSubtext}>\n Zoom: {Math.round(zoom * 100)}%\n </Text>\n </View>\n \n {/* Tile preview */}\n <View style={styles.tilePreview}>\n {tiles.slice(0, 5).map((tile, index) => {\n const pos = isoToScreen(tile.x, tile.y, tile.z || 0);\n return (\n <View\n key={index}\n style={[\n styles.tile,\n {\n left: pos.x,\n top: pos.y,\n backgroundColor: tile.color || '#4b5563',\n width: tileSize * zoom,\n height: tileSize * zoom * 0.5,\n },\n ]}\n >\n <Text style={styles.tileType}>{tile.type?.[0] || '?'}</Text>\n </View>\n );\n })}\n </View>\n \n {/* Grid lines representation */}\n {showGrid && (\n <View style={styles.gridIndicator}>\n <Text style={styles.gridText}>Grid: {gridWidth}×{gridHeight}</Text>\n </View>\n )}\n </View>\n \n {/* Note about WebView implementation */}\n <Text style={styles.note}>\n Note: Full isometric rendering requires WebView with Three.js or{' '}\n react-native-game-engine for production use.\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n },\n canvas: {\n borderRadius: 8,\n borderWidth: 2,\n borderColor: '#374151',\n backgroundColor: '#1f2937',\n overflow: 'hidden',\n },\n infoOverlay: {\n position: 'absolute',\n top: 12,\n left: 12,\n backgroundColor: 'rgba(0,0,0,0.7)',\n padding: 8,\n borderRadius: 6,\n },\n infoText: {\n color: '#fff',\n fontWeight: '700',\n fontSize: 14,\n },\n infoSubtext: {\n color: '#9ca3af',\n fontSize: 11,\n marginTop: 2,\n },\n tilePreview: {\n ...StyleSheet.absoluteFillObject,\n },\n tile: {\n position: 'absolute',\n borderRadius: 2,\n justifyContent: 'center',\n alignItems: 'center',\n transform: [{ rotateX: '60deg' }],\n },\n tileType: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '700',\n },\n gridIndicator: {\n position: 'absolute',\n bottom: 12,\n right: 12,\n backgroundColor: 'rgba(0,0,0,0.5)',\n padding: 6,\n borderRadius: 4,\n },\n gridText: {\n color: '#6b7280',\n fontSize: 10,\n },\n loadingText: {\n color: '#9ca3af',\n marginTop: 12,\n },\n errorText: {\n color: '#ef4444',\n textAlign: 'center',\n },\n note: {\n color: '#6b7280',\n fontSize: 11,\n textAlign: 'center',\n marginTop: 12,\n paddingHorizontal: 16,\n },\n});\n\nIsometricCanvas.displayName = 'IsometricCanvas';\n","import React from 'react';\nimport { \n Text, \n TouchableOpacity,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface TraitSlotProps {\n /** Slot position/index */\n slotIndex: number;\n /** Whether slot is filled */\n filled?: boolean;\n /** Trait name if filled */\n traitName?: string;\n /** Trait icon/emoji */\n traitIcon?: string;\n /** Whether this slot is locked (needs level unlock) */\n locked?: boolean;\n /** Level required to unlock */\n unlockLevel?: number;\n /** Whether slot is active/selected */\n active?: boolean;\n /** Callback when slot is pressed */\n onPress?: (slotIndex: number) => void;\n /** Callback when slot is long pressed (for unequip) */\n onLongPress?: (slotIndex: number) => void;\n /** Event names */\n equipEvent?: string;\n unequipEvent?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const TraitSlot: React.FC<TraitSlotProps> = ({\n slotIndex,\n filled = false,\n traitName,\n traitIcon,\n locked = false,\n unlockLevel,\n active = false,\n onPress,\n onLongPress,\n equipEvent,\n unequipEvent,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (locked) return;\n \n if (filled && unequipEvent) {\n eventBus.emit(`UI:${unequipEvent}`, { slotIndex });\n } else if (!filled && equipEvent) {\n eventBus.emit(`UI:${equipEvent}`, { slotIndex });\n }\n \n onPress?.(slotIndex);\n };\n\n const handleLongPress = () => {\n if (!filled || locked) return;\n \n if (unequipEvent) {\n eventBus.emit(`UI:${unequipEvent}`, { slotIndex, traitName });\n }\n onLongPress?.(slotIndex);\n };\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n onLongPress={handleLongPress}\n disabled={locked}\n style={[\n styles.container,\n {\n borderColor: active \n ? theme.colors.primary \n : filled \n ? '#22c55e' \n : locked \n ? '#374151' \n : '#4b5563',\n backgroundColor: filled \n ? 'rgba(34, 197, 94, 0.1)' \n : locked \n ? '#1f2937' \n : '#111827',\n opacity: locked ? 0.5 : 1,\n },\n ...(style ? [style] : []),\n ]}\n >\n {locked ? (\n <>\n <Text style={styles.lockIcon}>🔒</Text>\n {unlockLevel && (\n <Text style={styles.unlockText}>Lv.{unlockLevel}</Text>\n )}\n </>\n ) : filled ? (\n <>\n <Text style={styles.traitIcon}>{traitIcon || '✦'}</Text>\n <Text style={styles.traitName} numberOfLines={1}>\n {traitName}\n </Text>\n <Text style={styles.hint}>Long press to remove</Text>\n </>\n ) : (\n <>\n <Text style={styles.emptyIcon}>+</Text>\n <Text style={styles.emptyText}>Empty Slot</Text>\n <Text style={styles.slotNumber}>Slot {slotIndex + 1}</Text>\n </>\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: 80,\n height: 100,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderRadius: 12,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 8,\n },\n lockIcon: {\n fontSize: 24,\n opacity: 0.5,\n },\n unlockText: {\n fontSize: 10,\n color: '#6b7280',\n marginTop: 4,\n },\n traitIcon: {\n fontSize: 28,\n },\n traitName: {\n fontSize: 11,\n color: '#fff',\n fontWeight: '600',\n textAlign: 'center',\n marginTop: 4,\n maxWidth: 70,\n },\n hint: {\n fontSize: 8,\n color: '#6b7280',\n marginTop: 4,\n },\n emptyIcon: {\n fontSize: 32,\n color: '#4b5563',\n },\n emptyText: {\n fontSize: 10,\n color: '#6b7280',\n marginTop: 4,\n },\n slotNumber: {\n fontSize: 9,\n color: '#374151',\n marginTop: 2,\n },\n});\n\nTraitSlot.displayName = 'TraitSlot';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle\n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack, HStack } from '../../atoms/Stack';\n\nexport interface TraitState {\n id: string;\n name: string;\n icon?: string;\n description: string;\n active: boolean;\n cooldown?: number;\n maxCooldown?: number;\n charges?: number;\n maxCharges?: number;\n duration?: number;\n maxDuration?: number;\n tags?: string[];\n}\n\nexport interface TraitStateViewerProps {\n /** Active traits to display */\n traits: TraitState[];\n /** Whether to show inactive traits */\n showInactive?: boolean;\n /** Group by category/tag */\n groupBy?: 'none' | 'tag' | 'active';\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const TraitStateViewer: React.FC<TraitStateViewerProps> = ({\n traits,\n showInactive = true,\n groupBy = 'active',\n style,\n}) => {\n const theme = useTheme();\n\n const filteredTraits = showInactive \n ? traits \n : traits.filter(t => t.active);\n\n const groupedTraits = React.useMemo(() => {\n if (groupBy === 'none') return { All: filteredTraits };\n \n if (groupBy === 'active') {\n return {\n Active: filteredTraits.filter(t => t.active),\n Inactive: filteredTraits.filter(t => !t.active),\n };\n }\n \n // Group by tag\n return filteredTraits.reduce((acc, trait) => {\n const tag = trait.tags?.[0] || 'Other';\n if (!acc[tag]) acc[tag] = [];\n acc[tag].push(trait);\n return acc;\n }, {} as Record<string, TraitState[]>);\n }, [filteredTraits, groupBy]);\n\n const renderTrait = (trait: TraitState) => {\n const cooldownPercent = trait.maxCooldown \n ? ((trait.maxCooldown - (trait.cooldown || 0)) / trait.maxCooldown) * 100 \n : 100;\n const durationPercent = trait.maxDuration \n ? ((trait.duration || 0) / trait.maxDuration) * 100 \n : 100;\n\n return (\n <View \n key={trait.id} \n style={[\n styles.traitCard,\n { \n opacity: trait.active ? 1 : 0.5,\n borderColor: trait.active ? theme.colors.primary : '#374151',\n }\n ]}\n >\n <HStack spacing={12} align=\"center\">\n <View style={[\n styles.iconContainer,\n { backgroundColor: trait.active ? 'rgba(59, 130, 246, 0.2)' : '#374151' }\n ]}>\n <Text style={styles.traitIcon}>\n {trait.icon || '✦'}\n </Text>\n </View>\n \n <VStack spacing={4} style={styles.traitInfo}>\n <HStack spacing={8} align=\"center\">\n <Text style={styles.traitName}>{trait.name}</Text>\n {trait.charges !== undefined && trait.maxCharges && (\n <View style={styles.chargeBadge}>\n <Text style={styles.chargeText}>\n {trait.charges}/{trait.maxCharges}\n </Text>\n </View>\n )}\n </HStack>\n \n <Text style={styles.traitDesc} numberOfLines={2}>\n {trait.description}\n </Text>\n \n {/* Cooldown bar */}\n {trait.cooldown !== undefined && trait.cooldown > 0 && (\n <View style={styles.barContainer}>\n <View \n style={[\n styles.cooldownBar, \n { width: `${cooldownPercent}%` }\n ]} \n />\n <Text style={styles.barLabel}>{trait.cooldown}s</Text>\n </View>\n )}\n \n {/* Duration bar */}\n {trait.duration !== undefined && trait.duration > 0 && (\n <View style={styles.barContainer}>\n <View \n style={[\n styles.durationBar, \n { width: `${durationPercent}%` }\n ]} \n />\n <Text style={styles.barLabel}>{trait.duration}s</Text>\n </View>\n )}\n \n {/* Tags */}\n {trait.tags && trait.tags.length > 0 && (\n <HStack spacing={4} style={styles.tags}>\n {trait.tags.map(tag => (\n <View key={tag} style={styles.tag}>\n <Text style={styles.tagText}>{tag}</Text>\n </View>\n ))}\n </HStack>\n )}\n </VStack>\n </HStack>\n </View>\n );\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n Active Traits\n </Typography>\n \n {Object.entries(groupedTraits).map(([group, groupTraits]) => (\n groupTraits.length > 0 && (\n <VStack key={group} spacing={8}>\n {groupBy !== 'none' && (\n <Text style={styles.groupLabel}>{group}</Text>\n )}\n <VStack spacing={8}>\n {groupTraits.map(renderTrait)}\n </VStack>\n </VStack>\n )\n ))}\n \n {filteredTraits.length === 0 && (\n <Text style={styles.emptyText}>No active traits</Text>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n groupLabel: {\n fontSize: 12,\n color: '#6b7280',\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n traitCard: {\n padding: 12,\n backgroundColor: '#1f2937',\n borderRadius: 8,\n borderLeftWidth: 3,\n },\n iconContainer: {\n width: 48,\n height: 48,\n borderRadius: 8,\n justifyContent: 'center',\n alignItems: 'center',\n },\n traitIcon: {\n fontSize: 24,\n },\n traitInfo: {\n flex: 1,\n },\n traitName: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '600',\n },\n chargeBadge: {\n backgroundColor: '#374151',\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 10,\n },\n chargeText: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '600',\n },\n traitDesc: {\n color: '#9ca3af',\n fontSize: 12,\n lineHeight: 18,\n },\n barContainer: {\n height: 16,\n backgroundColor: '#374151',\n borderRadius: 8,\n overflow: 'hidden',\n marginTop: 4,\n },\n cooldownBar: {\n height: '100%',\n backgroundColor: '#6b7280',\n },\n durationBar: {\n height: '100%',\n backgroundColor: '#22c55e',\n },\n barLabel: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n textAlign: 'center',\n color: '#fff',\n fontSize: 10,\n lineHeight: 16,\n },\n tags: {\n flexWrap: 'wrap',\n marginTop: 4,\n },\n tag: {\n backgroundColor: '#374151',\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n tagText: {\n color: '#9ca3af',\n fontSize: 10,\n },\n emptyText: {\n color: '#6b7280',\n textAlign: 'center',\n padding: 24,\n },\n});\n\nTraitStateViewer.displayName = 'TraitStateViewer';\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle\n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Card } from '../../atoms/Card';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack, HStack } from '../../atoms/Stack';\nimport { Button } from '../../atoms/Button';\n\nexport interface UncontrolledUnit {\n id: string;\n name: string;\n hp: number;\n maxHp: number;\n isPlayer: boolean;\n isDead?: boolean;\n}\n\nexport interface UncontrolledBattleBoardProps {\n /** Initial player units */\n initialPlayerUnits: UncontrolledUnit[];\n /** Initial enemy units */\n initialEnemyUnits: UncontrolledUnit[];\n /** Auto-battle mode */\n autoBattle?: boolean;\n /** Turn delay in ms */\n turnDelay?: number;\n /** Called when battle ends */\n onBattleEnd?: (victory: boolean) => void;\n /** Called each turn */\n onTurn?: (turn: number) => void;\n /** Event name for battle end */\n battleEndEvent?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const UncontrolledBattleBoard: React.FC<UncontrolledBattleBoardProps> = ({\n initialPlayerUnits,\n initialEnemyUnits,\n autoBattle = false,\n turnDelay = 1000,\n onBattleEnd,\n onTurn,\n battleEndEvent,\n style,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n \n const [playerUnits, setPlayerUnits] = useState(initialPlayerUnits);\n const [enemyUnits, setEnemyUnits] = useState(initialEnemyUnits);\n const [turn, setTurn] = useState(1);\n const [isAuto, setIsAuto] = useState(autoBattle);\n const [battleLog, setBattleLog] = useState<string[]>([]);\n const [isBattleOver, setIsBattleOver] = useState(false);\n\n const livingPlayers = playerUnits.filter(u => !u.isDead && u.hp > 0);\n const livingEnemies = enemyUnits.filter(u => !u.isDead && u.hp > 0);\n\n // Check battle end conditions\n useEffect(() => {\n if (isBattleOver) return;\n \n if (livingEnemies.length === 0) {\n setIsBattleOver(true);\n if (battleEndEvent) eventBus.emit(`UI:${battleEndEvent}`, { victory: true });\n onBattleEnd?.(true);\n } else if (livingPlayers.length === 0) {\n setIsBattleOver(true);\n if (battleEndEvent) eventBus.emit(`UI:${battleEndEvent}`, { victory: false });\n onBattleEnd?.(false);\n }\n }, [livingPlayers.length, livingEnemies.length, isBattleOver, onBattleEnd, battleEndEvent, eventBus]);\n\n // Auto-battle logic\n useEffect(() => {\n if (!isAuto || isBattleOver) return;\n\n const timer = setTimeout(() => {\n processTurn();\n }, turnDelay);\n\n return () => clearTimeout(timer);\n }, [isAuto, turn, isBattleOver, turnDelay]);\n\n const addLog = (message: string) => {\n setBattleLog(prev => [message, ...prev].slice(0, 5));\n };\n\n const processTurn = useCallback(() => {\n if (isBattleOver) return;\n\n // Simple turn logic: player attacks enemy, enemy attacks player\n const attacker = turn % 2 === 1 ? livingPlayers[0] : livingEnemies[0];\n const targets = turn % 2 === 1 ? livingEnemies : livingPlayers;\n const target = targets[0];\n\n if (!attacker || !target) return;\n\n // Calculate damage\n const damage = Math.floor(Math.random() * 10) + 5;\n \n if (turn % 2 === 1) {\n // Player attacks\n setEnemyUnits(prev => prev.map(u => \n u.id === target.id \n ? { ...u, hp: Math.max(0, u.hp - damage), isDead: u.hp - damage <= 0 }\n : u\n ));\n addLog(`${attacker.name} attacks ${target.name} for ${damage} damage!`);\n } else {\n // Enemy attacks\n setPlayerUnits(prev => prev.map(u => \n u.id === target.id \n ? { ...u, hp: Math.max(0, u.hp - damage), isDead: u.hp - damage <= 0 }\n : u\n ));\n addLog(`${attacker.name} attacks ${target.name} for ${damage} damage!`);\n }\n\n const newTurn = turn + 1;\n setTurn(newTurn);\n onTurn?.(newTurn);\n }, [turn, livingPlayers, livingEnemies, isBattleOver, onTurn]);\n\n const renderUnit = (unit: UncontrolledUnit) => {\n const hpPercent = (unit.hp / unit.maxHp) * 100;\n\n return (\n <View \n key={unit.id}\n style={[\n styles.unitCard,\n {\n opacity: unit.isDead || unit.hp <= 0 ? 0.4 : 1,\n borderColor: unit.isPlayer ? '#3b82f6' : '#ef4444',\n }\n ]}\n >\n <Text style={styles.unitName}>{unit.name}</Text>\n <View style={styles.hpBar}>\n <View \n style={[\n styles.hpFill,\n { \n width: `${hpPercent}%`,\n backgroundColor: hpPercent > 50 ? '#22c55e' : hpPercent > 25 ? '#fbbf24' : '#ef4444',\n }\n ]} \n />\n </View>\n <Text style={styles.hpText}>{unit.hp}/{unit.maxHp} HP</Text>\n </View>\n );\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n {/* Header */}\n <View style={styles.header}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n Battle - Turn {turn}\n </Typography>\n <View style={[\n styles.statusBadge,\n { backgroundColor: isBattleOver ? '#6b7280' : isAuto ? '#22c55e' : '#3b82f6' }\n ]}>\n <Text style={styles.statusText}>\n {isBattleOver ? 'ENDED' : isAuto ? 'AUTO' : 'MANUAL'}\n </Text>\n </View>\n </View>\n\n {/* Battlefield */}\n <View style={styles.battlefield}>\n {/* Player side */}\n <VStack spacing={8} style={styles.side}>\n <Text style={[styles.sideLabel, { color: '#3b82f6' }]}>PLAYERS</Text>\n {playerUnits.map(renderUnit)}\n </VStack>\n\n <View style={styles.vsDivider}>\n <Text style={styles.vsText}>VS</Text>\n </View>\n\n {/* Enemy side */}\n <VStack spacing={8} style={styles.side}>\n <Text style={[styles.sideLabel, { color: '#ef4444' }]}>ENEMIES</Text>\n {enemyUnits.map(renderUnit)}\n </VStack>\n </View>\n\n {/* Battle log */}\n <View style={styles.logContainer}>\n <Text style={styles.logTitle}>Battle Log</Text>\n {battleLog.length === 0 ? (\n <Text style={styles.emptyLog}>Battle has not started...</Text>\n ) : (\n battleLog.map((log, index) => (\n <Text key={index} style={styles.logEntry}>{log}</Text>\n ))\n )}\n </View>\n\n {/* Controls */}\n {!isBattleOver && (\n <HStack spacing={8} justify=\"center\">\n {!isAuto && (\n <Button \n variant=\"primary\" \n onPress={processTurn}\n style={styles.controlButton}\n >\n Next Turn\n </Button>\n )}\n <Button \n variant=\"secondary\" \n onPress={() => setIsAuto(!isAuto)}\n style={styles.controlButton}\n >\n {isAuto ? 'Pause' : 'Auto'}\n </Button>\n </HStack>\n )}\n\n {/* Battle result */}\n {isBattleOver && (\n <View style={[\n styles.resultBanner,\n { backgroundColor: livingEnemies.length === 0 ? 'rgba(34, 197, 94, 0.2)' : 'rgba(239, 68, 68, 0.2)' }\n ]}>\n <Typography \n variant=\"h3\" \n style={{ color: livingEnemies.length === 0 ? '#22c55e' : '#ef4444' }}\n >\n {livingEnemies.length === 0 ? 'VICTORY!' : 'DEFEAT'}\n </Typography>\n </View>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n statusBadge: {\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderRadius: 12,\n },\n statusText: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '700',\n },\n battlefield: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n gap: 16,\n paddingVertical: 16,\n },\n side: {\n flex: 1,\n },\n sideLabel: {\n fontSize: 12,\n fontWeight: '700',\n textAlign: 'center',\n marginBottom: 8,\n },\n vsDivider: {\n justifyContent: 'center',\n },\n vsText: {\n color: '#6b7280',\n fontSize: 14,\n fontWeight: '700',\n },\n unitCard: {\n padding: 12,\n backgroundColor: '#1f2937',\n borderRadius: 8,\n borderLeftWidth: 3,\n gap: 4,\n },\n unitName: {\n color: '#fff',\n fontSize: 12,\n fontWeight: '600',\n },\n hpBar: {\n height: 6,\n backgroundColor: '#374151',\n borderRadius: 3,\n overflow: 'hidden',\n },\n hpFill: {\n height: '100%',\n },\n hpText: {\n color: '#9ca3af',\n fontSize: 10,\n },\n logContainer: {\n padding: 12,\n backgroundColor: '#111827',\n borderRadius: 8,\n minHeight: 100,\n },\n logTitle: {\n color: '#6b7280',\n fontSize: 10,\n fontWeight: '700',\n marginBottom: 8,\n },\n emptyLog: {\n color: '#4b5563',\n fontStyle: 'italic',\n },\n logEntry: {\n color: '#9ca3af',\n fontSize: 12,\n paddingVertical: 2,\n },\n controlButton: {\n minWidth: 100,\n },\n resultBanner: {\n padding: 16,\n borderRadius: 8,\n alignItems: 'center',\n },\n});\n\nUncontrolledBattleBoard.displayName = 'UncontrolledBattleBoard';\n","/**\n * NegotiatorBoard\n *\n * Turn-based decision matrix game for React Native. The player makes choices\n * over multiple rounds against an AI opponent. Each round both sides pick\n * an action, and payoffs are determined by the combination.\n *\n * Good for: ethics, business, game theory, economics stories.\n *\n * Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).\n */\n\nimport React, { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Badge } from '../../../../atoms/Badge';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface NegotiatorAction {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface PayoffEntry {\n playerAction: string;\n opponentAction: string;\n playerPayoff: number;\n opponentPayoff: number;\n}\n\nexport interface NegotiatorPuzzleEntity {\n id: string;\n title: string;\n description: string;\n actions: NegotiatorAction[];\n payoffMatrix: PayoffEntry[];\n totalRounds: number;\n /** AI strategy: 'tit-for-tat' | 'always-cooperate' | 'always-defect' | 'random' */\n opponentStrategy: string;\n targetScore: number;\n successMessage?: string;\n failMessage?: string;\n hint?: string;\n}\n\nexport interface NegotiatorBoardProps {\n /** Puzzle data */\n entity: NegotiatorPuzzleEntity;\n /** Event name emitted on completion */\n completeEvent?: string;\n /** Additional 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 entityName?: string;\n}\n\ninterface RoundResult {\n round: number;\n playerAction: string;\n opponentAction: string;\n playerPayoff: number;\n opponentPayoff: number;\n}\n\nfunction getOpponentAction(\n strategy: string,\n actions: NegotiatorAction[],\n history: RoundResult[],\n): string {\n const actionIds = actions.map((a) => a.id);\n switch (strategy) {\n case 'always-cooperate':\n return actionIds[0];\n case 'always-defect':\n return actionIds[actionIds.length - 1];\n case 'tit-for-tat':\n if (history.length === 0) return actionIds[0];\n return history[history.length - 1].playerAction;\n case 'random':\n default:\n return actionIds[Math.floor(Math.random() * actionIds.length)];\n }\n}\n\nexport const NegotiatorBoard: React.FC<NegotiatorBoardProps> = ({\n entity,\n completeEvent = 'PUZZLE_COMPLETE',\n style,\n isLoading,\n error,\n}) => {\n useTheme();\n const eventBus = useEventBus();\n\n const [history, setHistory] = useState<RoundResult[]>([]);\n const [showHint, setShowHint] = useState(false);\n\n const currentRound = history.length;\n const isComplete = currentRound >= entity.totalRounds;\n const playerTotal = history.reduce((s, r) => s + r.playerPayoff, 0);\n const opponentTotal = history.reduce((s, r) => s + r.opponentPayoff, 0);\n const won = isComplete && playerTotal >= entity.targetScore;\n\n const handleAction = useCallback((actionId: string) => {\n if (isComplete) return;\n const opponentAction = getOpponentAction(entity.opponentStrategy, entity.actions, history);\n const payoff = entity.payoffMatrix.find(\n (p) => p.playerAction === actionId && p.opponentAction === opponentAction,\n );\n const result: RoundResult = {\n round: currentRound + 1,\n playerAction: actionId,\n opponentAction,\n playerPayoff: payoff?.playerPayoff ?? 0,\n opponentPayoff: payoff?.opponentPayoff ?? 0,\n };\n const newHistory = [...history, result];\n setHistory(newHistory);\n\n if (newHistory.length >= entity.totalRounds) {\n const total = newHistory.reduce((s, r) => s + r.playerPayoff, 0);\n if (total >= entity.targetScore) {\n eventBus.emit(`UI:${completeEvent}`, { success: true, score: total });\n }\n if (newHistory.length >= 3 && entity.hint) {\n setShowHint(true);\n }\n }\n }, [isComplete, entity, history, currentRound, completeEvent, eventBus]);\n\n const handleReset = () => {\n setHistory([]);\n setShowHint(false);\n eventBus.emit('UI:NEGOTIATOR_RESET');\n };\n\n const getActionLabel = (id: string) =>\n entity.actions.find((a) => a.id === id)?.label ?? id;\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading puzzle...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {/* Header */}\n <View style={styles.header}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n {entity.title}\n </Typography>\n <Text style={styles.description}>{entity.description}</Text>\n <HStack spacing={8}>\n <Badge size=\"sm\" variant=\"secondary\">\n Round {currentRound}/{entity.totalRounds}\n </Badge>\n <Badge size=\"sm\" variant=\"primary\">\n Target: {entity.targetScore}\n </Badge>\n </HStack>\n </View>\n\n {/* Score Board */}\n <HStack spacing={12}>\n <View style={[styles.scoreCard, styles.playerScore]}>\n <VStack spacing={4} align=\"center\">\n <Text style={styles.scoreLabel}>You</Text>\n <Text style={styles.scoreValue}>{playerTotal}</Text>\n </VStack>\n </View>\n <View style={[styles.scoreCard, styles.opponentScore]}>\n <VStack spacing={4} align=\"center\">\n <Text style={styles.scoreLabel}>Opponent</Text>\n <Text style={styles.scoreValue}>{opponentTotal}</Text>\n </VStack>\n </View>\n </HStack>\n\n {/* Action buttons */}\n {!isComplete && (\n <View style={styles.actionsSection}>\n <Text style={styles.sectionLabel}>Choose your action:</Text>\n <HStack spacing={8} style={styles.actionsRow}>\n {entity.actions.map((action) => (\n <TouchableOpacity\n key={action.id}\n onPress={() => handleAction(action.id)}\n style={styles.actionButton}\n >\n <Text style={styles.actionLabel}>{action.label}</Text>\n {action.description && (\n <Text style={styles.actionDesc} numberOfLines={2}>\n {action.description}\n </Text>\n )}\n </TouchableOpacity>\n ))}\n </HStack>\n </View>\n )}\n\n {/* History */}\n {history.length > 0 && (\n <View style={styles.historySection}>\n <Text style={styles.sectionLabel}>History</Text>\n <VStack spacing={8}>\n {history.map((round) => (\n <HStack\n key={round.round}\n spacing={8}\n align=\"center\"\n style={styles.historyRow}\n >\n <Badge size=\"sm\" variant=\"secondary\">\n R{round.round}\n </Badge>\n <Text style={styles.historyText}>\n {getActionLabel(round.playerAction)}\n </Text>\n <Text style={styles.historyVs}>vs</Text>\n <Text style={styles.historyText}>\n {getActionLabel(round.opponentAction)}\n </Text>\n <Text style={styles.payoffArrow}>→</Text>\n <Text style={styles.playerPayoff}>+{round.playerPayoff}</Text>\n <Text style={styles.opponentPayoff}>/+{round.opponentPayoff}</Text>\n </HStack>\n ))}\n </VStack>\n </View>\n )}\n\n {/* Result */}\n {isComplete && (\n <View\n style={[\n styles.resultCard,\n won ? styles.successResult : styles.failResult,\n ]}\n >\n <VStack spacing={8} align=\"center\">\n <Text style={styles.resultIcon}>{won ? '✅' : '❌'}</Text>\n <Text style={styles.resultText}>\n {won\n ? entity.successMessage ?? 'Success!'\n : entity.failMessage ?? 'Failed!'}\n </Text>\n <Text style={styles.finalScore}>\n Final Score: {playerTotal}/{entity.targetScore}\n </Text>\n </VStack>\n </View>\n )}\n\n {/* Hint */}\n {showHint && entity.hint && !won && (\n <View style={styles.hintCard}>\n <Text style={styles.hintText}>💡 {entity.hint}</Text>\n </View>\n )}\n\n {/* Reset button on failure */}\n {isComplete && !won && (\n <Button variant=\"primary\" onPress={handleReset}>\n Play Again\n </Button>\n )}\n </VStack>\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n maxHeight: 600,\n },\n header: {\n gap: 8,\n },\n description: {\n color: '#9ca3af',\n fontSize: 14,\n lineHeight: 20,\n },\n scoreCard: {\n flex: 1,\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n },\n playerScore: {\n backgroundColor: 'rgba(34, 197, 94, 0.2)',\n },\n opponentScore: {\n backgroundColor: 'rgba(239, 68, 68, 0.2)',\n },\n scoreLabel: {\n color: '#9ca3af',\n fontSize: 12,\n fontWeight: '600',\n textTransform: 'uppercase',\n },\n scoreValue: {\n color: '#fff',\n fontSize: 28,\n fontWeight: 'bold',\n },\n actionsSection: {\n gap: 12,\n },\n sectionLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n actionsRow: {\n flexWrap: 'wrap',\n justifyContent: 'center',\n },\n actionButton: {\n backgroundColor: '#374151',\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderRadius: 8,\n minWidth: 100,\n alignItems: 'center',\n },\n actionLabel: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '600',\n },\n actionDesc: {\n color: '#9ca3af',\n fontSize: 10,\n marginTop: 4,\n textAlign: 'center',\n },\n historySection: {\n gap: 8,\n },\n historyRow: {\n backgroundColor: '#1f2937',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n },\n historyText: {\n color: '#fff',\n fontSize: 12,\n },\n historyVs: {\n color: '#6b7280',\n fontSize: 12,\n },\n payoffArrow: {\n color: '#6b7280',\n fontSize: 12,\n },\n playerPayoff: {\n color: '#22c55e',\n fontSize: 12,\n fontWeight: 'bold',\n },\n opponentPayoff: {\n color: '#6b7280',\n fontSize: 12,\n },\n resultCard: {\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n },\n successResult: {\n backgroundColor: 'rgba(34, 197, 94, 0.2)',\n borderWidth: 1,\n borderColor: '#22c55e',\n },\n failResult: {\n backgroundColor: 'rgba(239, 68, 68, 0.2)',\n borderWidth: 1,\n borderColor: '#ef4444',\n },\n resultIcon: {\n fontSize: 32,\n },\n resultText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: 'bold',\n },\n finalScore: {\n color: '#9ca3af',\n fontSize: 14,\n },\n hintCard: {\n backgroundColor: 'rgba(234, 179, 8, 0.2)',\n borderLeftWidth: 4,\n borderLeftColor: '#eab308',\n padding: 12,\n borderRadius: 8,\n },\n hintText: {\n color: '#fff',\n fontSize: 14,\n },\n});\n\nNegotiatorBoard.displayName = 'NegotiatorBoard';\n","/**\n * SequencerBoard\n *\n * Sequence puzzle for React Native (ages 5-8).\n * Kids tap actions to build a sequence, then play to see if it's correct.\n *\n * Feedback-first UX:\n * - On failure: slots stay in place, each slot gets a green or red\n * indicator showing exactly which steps are correct and which need to change.\n * - Modifying a slot clears its individual feedback so the kid can re-try.\n * - After 3 failures a persistent hint appears.\n * - \"Reset\" clears everything including attempts / hint.\n *\n * Events emitted via playEvent and completeEvent.\n */\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\n\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SequencerAction {\n id: string;\n name: string;\n category: string;\n description?: string;\n iconEmoji?: string;\n}\n\nexport interface SequencerPuzzleEntity {\n id: string;\n title: string;\n description: string;\n /** Available actions the kid can use */\n availableActions: SequencerAction[];\n /** How many slots in the sequence bar */\n maxSlots: number;\n /** Whether actions can be reused */\n allowDuplicates?: boolean;\n /** The correct sequence(s) — list of action IDs. First match wins. */\n solutions: string[][];\n /** Feedback messages */\n successMessage?: string;\n failMessage?: string;\n /** Progressive hint shown after 3 failures */\n hint?: string;\n}\n\nexport interface SequencerBoardProps {\n /** Puzzle data */\n entity: SequencerPuzzleEntity;\n /** Category → color mapping */\n categoryColors?: Record<string, { bg: string; border: string }>;\n /** Playback speed in ms per step */\n stepDurationMs?: number;\n /** Emits UI:{playEvent} with { sequence: string[] } */\n playEvent?: string;\n /** Emits UI:{completeEvent} with { success: boolean } */\n completeEvent?: string;\n /** Additional 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 entityName?: string;\n}\n\ntype PlayState = 'idle' | 'playing' | 'success';\n\n/** Encouraging messages shown on failure, cycled through */\nconst ENCOURAGEMENT_MESSAGES = [\n 'Keep trying! You can do it!',\n 'Almost there! Try again!',\n 'Don\\'t give up! One more time!',\n];\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Returns per-slot feedback by comparing playerSeq against the best-matching\n * solution (the one with the most positionally-correct slots).\n */\nfunction computeSlotFeedback(\n playerSeq: Array<string | undefined>,\n solutions: string[][],\n): Array<'correct' | 'wrong'> {\n let bestSolution = solutions[0];\n let bestMatches = -1;\n for (const sol of solutions) {\n const matches = sol.filter((id, i) => id === playerSeq[i]).length;\n if (matches > bestMatches) {\n bestMatches = matches;\n bestSolution = sol;\n }\n }\n return playerSeq.map((id, i) =>\n id !== undefined && id === bestSolution[i] ? 'correct' : 'wrong',\n );\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const SequencerBoard: React.FC<SequencerBoardProps> = ({\n entity,\n categoryColors,\n stepDurationMs = 1000,\n playEvent,\n completeEvent,\n style,\n isLoading,\n error,\n}) => {\n useTheme();\n const eventBus = useEventBus();\n\n const [slots, setSlots] = useState<Array<SequencerAction | undefined>>(\n () => Array.from({ length: entity.maxSlots }, () => undefined),\n );\n const [playState, setPlayState] = useState<PlayState>('idle');\n const [currentStep, setCurrentStep] = useState(-1);\n const [attempts, setAttempts] = useState(0);\n /** Per-slot green/red indicator after a failed attempt */\n const [slotFeedback, setSlotFeedback] = useState<Array<'correct' | 'wrong' | null>>(\n () => Array.from({ length: entity.maxSlots }, () => null),\n );\n const [selectedSlotIndex, setSelectedSlotIndex] = useState<number | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n }, []);\n\n // -- Slot handlers --------------------------------------------------------\n\n const handleSlotPress = useCallback((index: number) => {\n if (playState === 'playing') return;\n setSelectedSlotIndex(index);\n // Clear feedback for this slot\n setSlotFeedback((prev) => {\n const next = [...prev];\n next[index] = null;\n return next;\n });\n }, [playState]);\n\n const handleActionSelect = useCallback((action: SequencerAction) => {\n if (selectedSlotIndex === null || playState === 'playing') return;\n\n setSlots((prev) => {\n const next = [...prev];\n next[selectedSlotIndex] = action;\n return next;\n });\n setSlotFeedback((prev) => {\n const next = [...prev];\n next[selectedSlotIndex] = null;\n return next;\n });\n setSelectedSlotIndex(null);\n eventBus.emit('UI:PLAY_SOUND', { key: 'drop_slot' });\n }, [selectedSlotIndex, playState, eventBus]);\n\n const handleSlotRemove = useCallback((index: number) => {\n if (playState === 'playing') return;\n setSlots((prev) => {\n const next = [...prev];\n next[index] = undefined;\n return next;\n });\n setSlotFeedback((prev) => {\n const next = [...prev];\n next[index] = null;\n return next;\n });\n eventBus.emit('UI:PLAY_SOUND', { key: 'back' });\n }, [playState, eventBus]);\n\n // -- Reset ----------------------------------------------------------------\n\n const handleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setSlots(Array.from({ length: entity.maxSlots }, () => undefined));\n setPlayState('idle');\n setCurrentStep(-1);\n setAttempts(0);\n setSlotFeedback(Array.from({ length: entity.maxSlots }, () => null));\n setSelectedSlotIndex(null);\n eventBus.emit('UI:SEQUENCER_RESET');\n }, [entity.maxSlots, eventBus]);\n\n // -- Playback -------------------------------------------------------------\n\n const filledSlots = slots.filter((s): s is SequencerAction => !!s);\n const canPlay = filledSlots.length > 0 && playState === 'idle';\n\n const handlePlay = useCallback(() => {\n if (!canPlay) return;\n\n setSlotFeedback(Array.from({ length: entity.maxSlots }, () => null));\n eventBus.emit('UI:PLAY_SOUND', { key: 'confirm' });\n\n const sequence = slots.map((s) => s?.id || '');\n\n if (playEvent) {\n eventBus.emit(`UI:${playEvent}`, { sequence });\n }\n\n setPlayState('playing');\n setCurrentStep(0);\n\n let step = 0;\n const advance = () => {\n step++;\n if (step >= entity.maxSlots) {\n const playerSeq = slots.map((s) => s?.id);\n const playerIds = slots.filter(Boolean).map((s) => s?.id || '');\n const success = entity.solutions.some(\n (sol) =>\n sol.length === playerIds.length &&\n sol.every((id, i) => id === playerIds[i]),\n );\n\n if (success) {\n setPlayState('success');\n setCurrentStep(-1);\n eventBus.emit('UI:PLAY_SOUND', { key: 'levelComplete' });\n if (completeEvent) {\n eventBus.emit(`UI:${completeEvent}`, { success: true, sequence: playerIds });\n }\n } else {\n setAttempts((prev) => prev + 1);\n const feedback = computeSlotFeedback(playerSeq, entity.solutions);\n setSlotFeedback(feedback);\n setPlayState('idle');\n setCurrentStep(-1);\n eventBus.emit('UI:PLAY_SOUND', { key: 'fail' });\n }\n } else {\n setCurrentStep(step);\n timerRef.current = setTimeout(advance, stepDurationMs);\n }\n };\n timerRef.current = setTimeout(advance, stepDurationMs);\n }, [canPlay, slots, entity.maxSlots, entity.solutions, stepDurationMs, playEvent, completeEvent, eventBus]);\n\n // -- Derived display state ------------------------------------------------\n\n const usedIds = entity.allowDuplicates === false\n ? slots.filter(Boolean).map((s) => s?.id || '')\n : [];\n\n const showHint = attempts >= 3 && !!entity.hint;\n const hasFeedback = slotFeedback.some((f) => f !== null);\n const correctCount = slotFeedback.filter((f) => f === 'correct').length;\n const encourageMessage = ENCOURAGEMENT_MESSAGES[Math.min(attempts - 1, ENCOURAGEMENT_MESSAGES.length - 1)]\n ?? ENCOURAGEMENT_MESSAGES[0];\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading puzzle...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {/* Title + description */}\n <VStack spacing={4}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n {entity.title}\n </Typography>\n <Text style={styles.description}>{entity.description}</Text>\n </VStack>\n\n {/* Persistent hint after 3 failures */}\n {showHint && (\n <View style={styles.hintBox}>\n <HStack spacing={8} align=\"flex-start\">\n <Text style={styles.hintLabel}>💡 Hint:</Text>\n <Text style={styles.hintText}>{entity.hint}</Text>\n </HStack>\n </View>\n )}\n\n {/* Current step indicator during playback */}\n {playState === 'playing' && currentStep >= 0 && (\n <View style={styles.playingIndicator}>\n <Text style={styles.playingText}>\n ▶ Executing step {currentStep + 1}...\n </Text>\n </View>\n )}\n\n {/* Sequence bar */}\n <VStack spacing={8}>\n <HStack align=\"center\" justify=\"space-between\">\n <Text style={styles.sectionLabel}>Your Sequence:</Text>\n {hasFeedback && playState === 'idle' && (\n <Text style={styles.scoreText}>\n {correctCount}/{entity.maxSlots} ✅\n </Text>\n )}\n </HStack>\n <HStack spacing={8} style={styles.sequenceRow}>\n {slots.map((slot, i) => (\n <React.Fragment key={i}>\n {i > 0 && (\n <Text\n style={[\n styles.arrow,\n currentStep >= 0 && i <= currentStep\n ? styles.activeArrow\n : null,\n ]}\n >\n →\n </Text>\n )}\n <TouchableOpacity\n onPress={() => handleSlotPress(i)}\n style={[\n styles.slot,\n selectedSlotIndex === i && styles.selectedSlot,\n slot && styles.filledSlot,\n slotFeedback[i] === 'correct' && styles.correctSlot,\n slotFeedback[i] === 'wrong' && styles.wrongSlot,\n playState === 'playing' && currentStep === i && styles.activeSlot,\n ]}\n >\n {slot ? (\n <>\n <Text style={styles.slotIcon}>\n {slot.iconEmoji || '✦'}\n </Text>\n <Text style={styles.slotName} numberOfLines={1}>\n {slot.name}\n </Text>\n {playState !== 'playing' && (\n <TouchableOpacity\n onPress={() => handleSlotRemove(i)}\n style={styles.removeButton}\n >\n <Text style={styles.removeText}>×</Text>\n </TouchableOpacity>\n )}\n </>\n ) : (\n <Text style={styles.emptySlotText}>+</Text>\n )}\n <View style={styles.slotNumber}>\n <Text style={styles.slotNumberText}>{i + 1}</Text>\n </View>\n </TouchableOpacity>\n </React.Fragment>\n ))}\n </HStack>\n </VStack>\n\n {/* Action palette */}\n {playState !== 'playing' && (\n <VStack spacing={8}>\n <Text style={styles.sectionLabel}>\n {selectedSlotIndex !== null\n ? `Select action for slot ${selectedSlotIndex + 1}:`\n : 'Tap a slot above, then select an action:'}\n </Text>\n <HStack spacing={8} style={styles.paletteRow}>\n {entity.availableActions.map((action) => {\n const isUsed = usedIds.includes(action.id);\n const catColor = categoryColors?.[action.category];\n return (\n <TouchableOpacity\n key={action.id}\n onPress={() => handleActionSelect(action)}\n disabled={isUsed}\n style={[\n styles.actionTile,\n isUsed && styles.usedTile,\n catColor && { backgroundColor: catColor.bg, borderColor: catColor.border },\n ]}\n >\n <Text style={styles.actionIcon}>\n {action.iconEmoji || '✦'}\n </Text>\n <Text style={[styles.actionName, isUsed && styles.usedText]}>\n {action.name}\n </Text>\n </TouchableOpacity>\n );\n })}\n </HStack>\n </VStack>\n )}\n\n {/* Encouraging message after failure */}\n {hasFeedback && playState === 'idle' && attempts > 0 && (\n <View style={styles.encourageBox}>\n <Text style={styles.encourageText}>{encourageMessage}</Text>\n </View>\n )}\n\n {/* Success message */}\n {playState === 'success' && (\n <View style={styles.successBox}>\n <Text style={styles.successText}>\n {entity.successMessage || '🎉 Level Complete!'}\n </Text>\n </View>\n )}\n\n {/* Controls */}\n <HStack spacing={8}>\n <Button\n variant=\"primary\"\n onPress={handlePlay}\n isLoading={playState === 'playing'}\n disabled={!canPlay}\n >\n {playState === 'playing' ? 'Playing...' : '▶ Play'}\n </Button>\n <Button variant=\"secondary\" onPress={handleReset}>\n ↺ Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n maxHeight: 700,\n },\n description: {\n color: '#9ca3af',\n fontSize: 14,\n lineHeight: 20,\n },\n hintBox: {\n backgroundColor: 'rgba(6, 182, 212, 0.2)',\n borderWidth: 1,\n borderColor: 'rgba(6, 182, 212, 0.3)',\n padding: 12,\n borderRadius: 8,\n },\n hintLabel: {\n color: '#06b6d4',\n fontWeight: 'bold',\n fontSize: 14,\n },\n hintText: {\n color: '#fff',\n fontSize: 14,\n flex: 1,\n },\n playingIndicator: {\n backgroundColor: 'rgba(20, 184, 166, 0.2)',\n padding: 12,\n borderRadius: 8,\n alignItems: 'center',\n },\n playingText: {\n color: '#14b8a6',\n fontWeight: '600',\n },\n sectionLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n },\n scoreText: {\n color: '#9ca3af',\n fontSize: 12,\n },\n sequenceRow: {\n flexWrap: 'wrap',\n alignItems: 'center',\n },\n arrow: {\n color: '#6b7280',\n fontSize: 16,\n },\n activeArrow: {\n color: '#14b8a6',\n },\n slot: {\n width: 64,\n height: 64,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderColor: '#4b5563',\n borderRadius: 8,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#111827',\n },\n selectedSlot: {\n borderColor: '#14b8a6',\n borderStyle: 'solid',\n backgroundColor: 'rgba(20, 184, 166, 0.1)',\n },\n filledSlot: {\n borderStyle: 'solid',\n backgroundColor: 'rgba(59, 130, 246, 0.2)',\n },\n correctSlot: {\n borderColor: '#22c55e',\n backgroundColor: 'rgba(34, 197, 94, 0.2)',\n },\n wrongSlot: {\n borderColor: '#ef4444',\n backgroundColor: 'rgba(239, 68, 68, 0.2)',\n },\n activeSlot: {\n borderColor: '#fbbf24',\n backgroundColor: 'rgba(251, 191, 36, 0.2)',\n },\n slotIcon: {\n fontSize: 20,\n },\n slotName: {\n color: '#fff',\n fontSize: 10,\n marginTop: 4,\n maxWidth: 56,\n },\n emptySlotText: {\n color: '#4b5563',\n fontSize: 24,\n },\n slotNumber: {\n position: 'absolute',\n bottom: -6,\n left: -6,\n width: 16,\n height: 16,\n borderRadius: 8,\n backgroundColor: '#374151',\n justifyContent: 'center',\n alignItems: 'center',\n },\n slotNumberText: {\n color: '#9ca3af',\n fontSize: 10,\n },\n removeButton: {\n position: 'absolute',\n top: -6,\n right: -6,\n width: 18,\n height: 18,\n borderRadius: 9,\n backgroundColor: '#ef4444',\n justifyContent: 'center',\n alignItems: 'center',\n },\n removeText: {\n color: '#fff',\n fontSize: 12,\n fontWeight: 'bold',\n lineHeight: 16,\n },\n paletteRow: {\n flexWrap: 'wrap',\n },\n actionTile: {\n width: 72,\n paddingVertical: 8,\n paddingHorizontal: 4,\n borderRadius: 8,\n borderWidth: 2,\n borderColor: '#374151',\n backgroundColor: '#1f2937',\n alignItems: 'center',\n },\n usedTile: {\n opacity: 0.4,\n },\n actionIcon: {\n fontSize: 24,\n },\n actionName: {\n color: '#fff',\n fontSize: 11,\n marginTop: 4,\n fontWeight: '500',\n },\n usedText: {\n color: '#6b7280',\n },\n encourageBox: {\n backgroundColor: 'rgba(202, 138, 4, 0.2)',\n borderWidth: 1,\n borderColor: 'rgba(202, 138, 4, 0.3)',\n padding: 12,\n borderRadius: 8,\n alignItems: 'center',\n },\n encourageText: {\n color: '#fff',\n fontSize: 14,\n },\n successBox: {\n backgroundColor: 'rgba(34, 197, 94, 0.2)',\n borderWidth: 1,\n borderColor: '#22c55e',\n padding: 16,\n borderRadius: 8,\n alignItems: 'center',\n },\n successText: {\n color: '#22c55e',\n fontSize: 16,\n fontWeight: 'bold',\n },\n});\n\nSequencerBoard.displayName = 'SequencerBoard';\n","/**\n * SimulatorBoard\n *\n * Parameter-slider simulation puzzle for React Native.\n * The player adjusts parameters and observes real-time output.\n * Correct parameter values must bring the output within a target range to win.\n *\n * Good for: physics, economics, system design stories.\n *\n * Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).\n */\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Badge } from '../../../../atoms/Badge';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface SimulatorParameter {\n id: string;\n label: string;\n unit: string;\n min: number;\n max: number;\n step: number;\n initial: number;\n correct: number;\n tolerance: number;\n}\n\nexport interface SimulatorPuzzleEntity {\n id: string;\n title: string;\n description: string;\n parameters: SimulatorParameter[];\n outputLabel: string;\n outputUnit: string;\n /** Pure function body as string: receives params object, returns number */\n computeExpression: string;\n targetValue: number;\n targetTolerance: number;\n successMessage?: string;\n failMessage?: string;\n hint?: string;\n}\n\nexport interface SimulatorBoardProps {\n /** Puzzle data */\n entity: SimulatorPuzzleEntity;\n /** Event name emitted on completion */\n completeEvent?: string;\n /** Additional 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 entityName?: string;\n}\n\nexport const SimulatorBoard: React.FC<SimulatorBoardProps> = ({\n entity,\n completeEvent = 'PUZZLE_COMPLETE',\n style,\n isLoading,\n error,\n}) => {\n useTheme();\n const eventBus = useEventBus();\n\n const [values, setValues] = useState<Record<string, number>>(() => {\n const init: Record<string, number> = {};\n for (const p of entity.parameters) {\n init[p.id] = p.initial;\n }\n return init;\n });\n const [submitted, setSubmitted] = useState(false);\n const [attempts, setAttempts] = useState(0);\n const [showHint, setShowHint] = useState(false);\n\n const computeOutput = useCallback(\n (params: Record<string, number>): number => {\n try {\n const fn = new Function('params', `return (${entity.computeExpression})`);\n return fn(params) as number;\n } catch {\n return 0;\n }\n },\n [entity.computeExpression],\n );\n\n const output = useMemo(() => computeOutput(values), [computeOutput, values]);\n const isCorrect = Math.abs(output - entity.targetValue) <= entity.targetTolerance;\n\n const handleParameterChange = (id: string, value: number) => {\n if (submitted) return;\n setValues((prev) => ({ ...prev, [id]: value }));\n };\n\n const handleSubmit = () => {\n setSubmitted(true);\n setAttempts((a) => a + 1);\n if (isCorrect) {\n eventBus.emit(`UI:${completeEvent}`, {\n success: true,\n attempts: attempts + 1,\n output,\n });\n }\n };\n\n const handleReset = () => {\n setSubmitted(false);\n if (attempts >= 2 && entity.hint) {\n setShowHint(true);\n }\n };\n\n const handleFullReset = () => {\n const init: Record<string, number> = {};\n for (const p of entity.parameters) {\n init[p.id] = p.initial;\n }\n setValues(init);\n setSubmitted(false);\n setAttempts(0);\n setShowHint(false);\n eventBus.emit('UI:SIMULATOR_RESET');\n };\n\n // Calculate slider track percentage\n const getSliderPercent = (param: SimulatorParameter) => {\n const value = values[param.id];\n return ((value - param.min) / (param.max - param.min)) * 100;\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading simulation...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {/* Header */}\n <VStack spacing={4}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n {entity.title}\n </Typography>\n <Text style={styles.description}>{entity.description}</Text>\n </VStack>\n\n {/* Parameter sliders */}\n <View style={styles.parametersCard}>\n <Text style={styles.sectionLabel}>Parameters</Text>\n <VStack spacing={16}>\n {entity.parameters.map((param) => (\n <VStack key={param.id} spacing={8}>\n <HStack align=\"center\" justify=\"space-between\">\n <Text style={styles.paramLabel}>{param.label}</Text>\n <Badge size=\"sm\" variant=\"primary\">\n {values[param.id]} {param.unit}\n </Badge>\n </HStack>\n\n {/* Custom slider visualization */}\n <View style={styles.sliderContainer}>\n <View style={styles.sliderTrack}>\n <View\n style={[\n styles.sliderFill,\n { width: `${getSliderPercent(param)}%` },\n ]}\n />\n </View>\n\n {/* Step buttons for discrete control */}\n <HStack spacing={4} style={styles.stepButtons}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={() =>\n handleParameterChange(\n param.id,\n Math.max(param.min, values[param.id] - param.step),\n )\n }\n disabled={submitted || values[param.id] <= param.min}\n >\n -\n </Button>\n\n {/* Value indicator buttons */}\n {Array.from(\n { length: Math.floor((param.max - param.min) / param.step) + 1 },\n (_, i) => param.min + i * param.step,\n ).map((stepValue) => (\n <TouchableOpacity\n key={stepValue}\n onPress={() => handleParameterChange(param.id, stepValue)}\n disabled={submitted}\n style={[\n styles.stepDot,\n values[param.id] === stepValue && styles.activeStepDot,\n ]}\n />\n ))}\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={() =>\n handleParameterChange(\n param.id,\n Math.min(param.max, values[param.id] + param.step),\n )\n }\n disabled={submitted || values[param.id] >= param.max}\n >\n +\n </Button>\n </HStack>\n </View>\n\n <HStack justify=\"space-between\">\n <Text style={styles.rangeLabel}>\n {param.min} {param.unit}\n </Text>\n <Text style={styles.rangeLabel}>\n {param.max} {param.unit}\n </Text>\n </HStack>\n </VStack>\n ))}\n </VStack>\n </View>\n\n {/* Output display */}\n <View style={styles.outputCard}>\n <VStack spacing={8} align=\"center\">\n <Text style={styles.outputLabel}>{entity.outputLabel}</Text>\n <Text\n style={[\n styles.outputValue,\n submitted && isCorrect && styles.correctOutput,\n submitted && !isCorrect && styles.wrongOutput,\n ]}\n >\n {output.toFixed(2)} {entity.outputUnit}\n </Text>\n {submitted && (\n <HStack spacing={4} align=\"center\">\n <Text style={isCorrect ? styles.correctText : styles.wrongText}>\n {isCorrect ? '✅ ' : '❌ '}\n </Text>\n <Text style={isCorrect ? styles.correctText : styles.wrongText}>\n {isCorrect\n ? entity.successMessage ?? 'Correct!'\n : entity.failMessage ?? 'Incorrect'}\n </Text>\n </HStack>\n )}\n <Text style={styles.targetText}>\n Target: {entity.targetValue} {entity.outputUnit} (±\n {entity.targetTolerance})\n </Text>\n </VStack>\n </View>\n\n {/* Hint */}\n {showHint && entity.hint && (\n <View style={styles.hintCard}>\n <Text style={styles.hintText}>💡 {entity.hint}</Text>\n </View>\n )}\n\n {/* Attempts counter */}\n {attempts > 0 && (\n <Text style={styles.attemptsText}>Attempts: {attempts}</Text>\n )}\n\n {/* Actions */}\n <HStack spacing={8}>\n {!submitted ? (\n <Button variant=\"primary\" onPress={handleSubmit}>\n ▶ Simulate\n </Button>\n ) : !isCorrect ? (\n <Button variant=\"primary\" onPress={handleReset}>\n Try Again\n </Button>\n ) : null}\n <Button variant=\"secondary\" onPress={handleFullReset}>\n ↺ Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n </Card>\n );\n};\n\n\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n maxHeight: 700,\n },\n description: {\n color: '#9ca3af',\n fontSize: 14,\n lineHeight: 20,\n },\n parametersCard: {\n backgroundColor: '#1f2937',\n padding: 16,\n borderRadius: 12,\n gap: 12,\n },\n sectionLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n paramLabel: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '500',\n },\n sliderContainer: {\n gap: 8,\n },\n sliderTrack: {\n height: 8,\n backgroundColor: '#374151',\n borderRadius: 4,\n overflow: 'hidden',\n },\n sliderFill: {\n height: '100%',\n backgroundColor: '#14b8a6',\n },\n stepButtons: {\n justifyContent: 'center',\n alignItems: 'center',\n flexWrap: 'wrap',\n },\n stepDot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n backgroundColor: '#4b5563',\n marginHorizontal: 4,\n },\n activeStepDot: {\n backgroundColor: '#14b8a6',\n transform: [{ scale: 1.2 }],\n },\n rangeLabel: {\n color: '#6b7280',\n fontSize: 12,\n },\n outputCard: {\n backgroundColor: '#111827',\n padding: 20,\n borderRadius: 12,\n },\n outputLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n outputValue: {\n color: '#fff',\n fontSize: 36,\n fontWeight: 'bold',\n },\n correctOutput: {\n color: '#22c55e',\n },\n wrongOutput: {\n color: '#ef4444',\n },\n correctText: {\n color: '#22c55e',\n fontSize: 14,\n fontWeight: '600',\n },\n wrongText: {\n color: '#ef4444',\n fontSize: 14,\n fontWeight: '600',\n },\n targetText: {\n color: '#6b7280',\n fontSize: 12,\n },\n hintCard: {\n backgroundColor: 'rgba(234, 179, 8, 0.2)',\n borderLeftWidth: 4,\n borderLeftColor: '#eab308',\n padding: 12,\n borderRadius: 8,\n },\n hintText: {\n color: '#fff',\n fontSize: 14,\n },\n attemptsText: {\n color: '#6b7280',\n fontSize: 12,\n textAlign: 'center',\n },\n});\n\nSimulatorBoard.displayName = 'SimulatorBoard';\n","/**\n * StateArchitectBoard\n *\n * State machine architect puzzle for React Native (ages 13+).\n * Kids design state machines by adding transitions between states,\n * then run tests to see if the behavior matches the puzzle goal.\n *\n * Events emitted via testEvent and completeEvent.\n */\n\nimport React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Select } from '../../../../atoms/Select';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface StateArchitectTransition {\n id: string;\n from: string;\n to: string;\n event: string;\n guardHint?: string;\n}\n\nexport interface TestCase {\n /** Sequence of events to fire */\n events: string[];\n /** Expected final state */\n expectedState: string;\n /** Description */\n label: string;\n}\n\nexport interface VariableDef {\n name: string;\n value: number | string | boolean;\n type: 'number' | 'string' | 'boolean';\n}\n\nexport interface StateArchitectPuzzleEntity {\n id: string;\n title: string;\n description: string;\n hint: string;\n /** Entity being designed */\n entityName: string;\n /** Variables with initial values */\n variables: VariableDef[];\n /** States provided (kid may need to add more) */\n states: string[];\n /** Initial state */\n initialState: string;\n /** Pre-existing transitions (puzzle may have some already) */\n transitions: StateArchitectTransition[];\n /** Events available to use */\n availableEvents: string[];\n /** States available to add */\n availableStates?: string[];\n /** Test cases to validate against */\n testCases: TestCase[];\n /** Show code view toggle */\n showCodeView?: boolean;\n /** Feedback */\n successMessage?: string;\n failMessage?: string;\n}\n\nexport interface StateArchitectBoardProps {\n /** Puzzle data */\n entity: StateArchitectPuzzleEntity;\n /** Playback speed */\n stepDurationMs?: number;\n /** Emits UI:{testEvent} */\n testEvent?: string;\n /** Emits UI:{completeEvent} with { success, passedTests } */\n completeEvent?: string;\n /** Additional 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 entityName?: string;\n}\n\ntype PlayState = 'editing' | 'testing' | 'success' | 'fail';\n\ninterface TestResult {\n label: string;\n passed: boolean;\n actualState: string;\n expectedState: string;\n}\n\nconst ENCOURAGEMENT_MESSAGES = [\n 'Keep trying! Check your transitions.',\n 'Almost there! Review the event flow.',\n 'Don\\'t give up! Trace through the events.',\n];\n\nlet nextTransId = 100;\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const StateArchitectBoard: React.FC<StateArchitectBoardProps> = ({\n entity,\n stepDurationMs = 600,\n testEvent,\n completeEvent,\n style,\n isLoading,\n error,\n}) => {\n useTheme();\n const eventBus = useEventBus();\n\n const [transitions, setTransitions] = useState<StateArchitectTransition[]>(\n entity.transitions,\n );\n const [playState, setPlayState] = useState<PlayState>('editing');\n const [currentState, setCurrentState] = useState(entity.initialState);\n const [selectedState, setSelectedState] = useState<string | null>(null);\n const [addingTransition, setAddingTransition] = useState(false);\n const [selectedEvent, setSelectedEvent] = useState<string>(\n entity.availableEvents[0] || '',\n );\n const [selectedTarget, setSelectedTarget] = useState<string>('');\n const [testResults, setTestResults] = useState<TestResult[]>([]);\n const [attempts, setAttempts] = useState(0);\n const [showCode, setShowCode] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n }, []);\n\n // -- Add transition -------------------------------------------------------\n\n const handleAddTransition = useCallback(() => {\n if (!selectedState || !selectedTarget || !selectedEvent) return;\n if (selectedState === selectedTarget) return;\n\n const newTrans: StateArchitectTransition = {\n id: `t-${nextTransId++}`,\n from: selectedState,\n to: selectedTarget,\n event: selectedEvent,\n };\n setTransitions((prev) => [...prev, newTrans]);\n setAddingTransition(false);\n setSelectedTarget('');\n eventBus.emit('UI:STATE_ARCHITECT_ADD_TRANSITION', { transition: newTrans } as unknown as EventPayload);\n }, [selectedState, selectedTarget, selectedEvent, eventBus]);\n\n const handleRemoveTransition = useCallback((transId: string) => {\n setTransitions((prev) => prev.filter((t) => t.id !== transId));\n eventBus.emit('UI:STATE_ARCHITECT_REMOVE_TRANSITION', { id: transId } as EventPayload);\n }, [eventBus]);\n\n // -- Test runner ----------------------------------------------------------\n\n const handleTest = useCallback(() => {\n if (playState !== 'editing') return;\n if (testEvent) eventBus.emit(`UI:${testEvent}`, {} as EventPayload);\n\n setPlayState('testing');\n setTestResults([]);\n\n const results: TestResult[] = [];\n let testIdx = 0;\n\n const runNextTest = () => {\n if (testIdx >= entity.testCases.length) {\n const allPassed = results.every((r) => r.passed);\n setPlayState(allPassed ? 'success' : 'fail');\n setTestResults(results);\n if (allPassed && completeEvent) {\n eventBus.emit(`UI:${completeEvent}`, {\n success: true,\n passedTests: results.filter((r) => r.passed).length,\n } as EventPayload);\n }\n if (!allPassed) {\n setAttempts((prev) => prev + 1);\n }\n return;\n }\n\n const testCase = entity.testCases[testIdx];\n let state = entity.initialState;\n\n // Simulate events\n for (const evt of testCase.events) {\n const trans = transitions.find((t) => t.from === state && t.event === evt);\n if (trans) {\n state = trans.to;\n }\n }\n\n setCurrentState(state);\n results.push({\n label: testCase.label,\n passed: state === testCase.expectedState,\n actualState: state,\n expectedState: testCase.expectedState,\n });\n\n testIdx++;\n timerRef.current = setTimeout(runNextTest, stepDurationMs);\n };\n\n timerRef.current = setTimeout(runNextTest, stepDurationMs);\n }, [playState, transitions, entity, stepDurationMs, testEvent, completeEvent, eventBus]);\n\n const handleTryAgain = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setPlayState('editing');\n setCurrentState(entity.initialState);\n setTestResults([]);\n eventBus.emit('UI:STATE_ARCHITECT_TRY_AGAIN');\n }, [entity.initialState, eventBus]);\n\n const handleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setTransitions(entity.transitions);\n setPlayState('editing');\n setCurrentState(entity.initialState);\n setTestResults([]);\n setSelectedState(null);\n setAddingTransition(false);\n setAttempts(0);\n eventBus.emit('UI:STATE_ARCHITECT_RESET');\n }, [entity, eventBus]);\n\n // -- Event options for Select ---------------------------------------------\n\n const eventOptions = useMemo(\n () =>\n entity.availableEvents.map((evt) => ({\n label: evt,\n value: evt,\n })),\n [entity.availableEvents],\n );\n\n const stateOptions = useMemo(\n () =>\n entity.states\n .filter((s) => s !== selectedState)\n .map((s) => ({\n label: s,\n value: s,\n })),\n [entity.states, selectedState],\n );\n\n // -- Code view data -------------------------------------------------------\n\n const codeRepresentation = useMemo(() => {\n return `machine ${entity.entityName} {\n initial: ${entity.initialState}\n \n states: ${entity.states.join(', ')}\n \n transitions:\n${transitions.map((t) => ` ${t.from} --[${t.event}]--> ${t.to}`).join('\\n')}\n}`;\n }, [entity, transitions]);\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading puzzle...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {/* Title */}\n <VStack spacing={4}>\n <Typography variant=\"h4\" style={{ color: '#fff' }}>\n {entity.title}\n </Typography>\n <Text style={styles.description}>{entity.description}</Text>\n <View style={styles.hintBox}>\n <HStack spacing={4} align=\"flex-start\">\n <Text style={styles.hintLabel}>Hint:</Text>\n <Text style={styles.hintText}>{entity.hint}</Text>\n </HStack>\n </View>\n </VStack>\n\n {/* Current State Display */}\n <View style={styles.currentStateCard}>\n <Text style={styles.currentStateLabel}>Current State</Text>\n <Text style={styles.currentStateValue}>{currentState}</Text>\n {entity.initialState === currentState && (\n <Badge size=\"sm\" variant=\"secondary\">\n Initial\n </Badge>\n )}\n </View>\n\n {/* State selector for adding transitions */}\n {playState === 'editing' && (\n <View style={styles.addTransitionCard}>\n <Text style={styles.sectionLabel}>Add Transition</Text>\n\n {/* Select source state */}\n <HStack spacing={8} style={styles.stateSelector}>\n {entity.states.map((state) => (\n <TouchableOpacity\n key={state}\n onPress={() => {\n setSelectedState(state);\n setAddingTransition(true);\n }}\n style={[\n styles.stateButton,\n selectedState === state && styles.selectedStateButton,\n currentState === state && styles.activeStateButton,\n entity.initialState === state && styles.initialStateButton,\n ]}\n >\n <Text\n style={[\n styles.stateButtonText,\n selectedState === state && styles.selectedStateButtonText,\n ]}\n >\n {state}\n {entity.initialState === state ? ' (initial)' : ''}\n </Text>\n </TouchableOpacity>\n ))}\n </HStack>\n\n {/* Transition builder */}\n {addingTransition && selectedState && (\n <VStack spacing={12} style={styles.transitionBuilder}>\n <Text style={styles.transitionFrom}>\n From: <Text style={styles.transitionFromState}>{selectedState}</Text>\n </Text>\n\n <HStack spacing={8} align=\"center\">\n <Text style={styles.transitionLabel}>Event:</Text>\n <View style={styles.selectWrapper}>\n <Select\n options={eventOptions}\n value={selectedEvent}\n onChange={setSelectedEvent}\n />\n </View>\n </HStack>\n\n <HStack spacing={8} align=\"center\">\n <Text style={styles.transitionLabel}>To:</Text>\n <View style={styles.selectWrapper}>\n <Select\n options={stateOptions}\n value={selectedTarget}\n onChange={setSelectedTarget}\n placeholder=\"Select target state\"\n />\n </View>\n </HStack>\n\n <Button\n variant=\"primary\"\n onPress={handleAddTransition}\n disabled={!selectedTarget}\n >\n Add Transition\n </Button>\n </VStack>\n )}\n </View>\n )}\n\n {/* Transition list */}\n {transitions.length > 0 && (\n <View style={styles.transitionsCard}>\n <Text style={styles.sectionLabel}>\n Transitions ({transitions.length})\n </Text>\n <VStack spacing={8}>\n {transitions.map((t) => (\n <HStack\n key={t.id}\n align=\"center\"\n style={[\n styles.transitionRow,\n ...(t.from === currentState ? [styles.activeTransitionRow] : []),\n ]}\n >\n <Text style={styles.transitionFromText}>{t.from}</Text>\n <Text style={styles.transitionArrow}>→</Text>\n <View style={styles.eventBadge}>\n <Text style={styles.eventBadgeText}>{t.event}</Text>\n </View>\n <Text style={styles.transitionArrow}>→</Text>\n <Text style={styles.transitionToText}>{t.to}</Text>\n {playState === 'editing' && (\n <TouchableOpacity\n onPress={() => handleRemoveTransition(t.id)}\n style={styles.removeButton}\n >\n <Text style={styles.removeText}>×</Text>\n </TouchableOpacity>\n )}\n </HStack>\n ))}\n </VStack>\n </View>\n )}\n\n {/* Test Results */}\n {testResults.length > 0 && (\n <View style={styles.testResultsCard}>\n <Text style={styles.sectionLabel}>Test Results</Text>\n <VStack spacing={8}>\n {testResults.map((r, i) => (\n <HStack key={i} align=\"center\" style={styles.testResultRow}>\n <Text style={r.passed ? styles.passIcon : styles.failIcon}>\n {r.passed ? '✓' : '✗'}\n </Text>\n <Text style={styles.testLabel}>{r.label}</Text>\n {!r.passed && (\n <Text style={styles.testFailDetail}>\n Got: {r.actualState} (expected: {r.expectedState})\n </Text>\n )}\n </HStack>\n ))}\n </VStack>\n </View>\n )}\n\n {/* Code view toggle */}\n {entity.showCodeView !== false && (\n <TouchableOpacity onPress={() => setShowCode(!showCode)}>\n <Text style={styles.codeToggle}>\n {showCode ? '▼ Hide Code' : '▶ Show Code'}\n </Text>\n </TouchableOpacity>\n )}\n\n {showCode && entity.showCodeView !== false && (\n <View style={styles.codeCard}>\n <Text style={styles.codeText}>{codeRepresentation}</Text>\n </View>\n )}\n\n {/* Result feedback */}\n {playState === 'success' && (\n <View style={styles.successBox}>\n <Text style={styles.successText}>\n {entity.successMessage || '🎉 All Tests Passed!'}\n </Text>\n </View>\n )}\n {playState === 'fail' && (\n <VStack spacing={8}>\n <View style={styles.failBox}>\n <Text style={styles.failText}>\n {ENCOURAGEMENT_MESSAGES[Math.min(attempts - 1, ENCOURAGEMENT_MESSAGES.length - 1)]}\n </Text>\n </View>\n {attempts >= 3 && entity.hint && (\n <View style={styles.hintReminder}>\n <Text style={styles.hintReminderText}>\n 💡 Hint: {entity.hint}\n </Text>\n </View>\n )}\n </VStack>\n )}\n\n {/* Controls */}\n <HStack spacing={8}>\n {playState === 'fail' ? (\n <Button variant=\"primary\" onPress={handleTryAgain}>\n 🔄 Try Again\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n onPress={handleTest}\n isLoading={playState === 'testing'}\n disabled={playState !== 'editing'}\n >\n {playState === 'testing' ? 'Testing...' : '▶ Run Tests'}\n </Button>\n )}\n <Button variant=\"secondary\" onPress={handleReset}>\n ↺ Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n maxHeight: 800,\n },\n description: {\n color: '#9ca3af',\n fontSize: 14,\n lineHeight: 20,\n },\n hintBox: {\n backgroundColor: 'rgba(202, 138, 4, 0.2)',\n padding: 12,\n borderRadius: 8,\n marginTop: 8,\n },\n hintLabel: {\n color: '#eab308',\n fontWeight: 'bold',\n fontSize: 12,\n },\n hintText: {\n color: '#fff',\n fontSize: 12,\n flex: 1,\n },\n currentStateCard: {\n backgroundColor: '#1f2937',\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n gap: 8,\n },\n currentStateLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n currentStateValue: {\n color: '#14b8a6',\n fontSize: 24,\n fontWeight: 'bold',\n },\n sectionLabel: {\n color: '#6b7280',\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n addTransitionCard: {\n backgroundColor: '#111827',\n padding: 16,\n borderRadius: 12,\n gap: 12,\n },\n stateSelector: {\n flexWrap: 'wrap',\n },\n stateButton: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n backgroundColor: '#374151',\n borderWidth: 2,\n borderColor: 'transparent',\n },\n selectedStateButton: {\n borderColor: '#14b8a6',\n backgroundColor: 'rgba(20, 184, 166, 0.2)',\n },\n activeStateButton: {\n borderColor: '#fbbf24',\n },\n initialStateButton: {\n borderStyle: 'dashed',\n borderColor: '#6b7280',\n },\n stateButtonText: {\n color: '#fff',\n fontSize: 12,\n fontWeight: '500',\n },\n selectedStateButtonText: {\n fontWeight: 'bold',\n },\n transitionBuilder: {\n backgroundColor: '#1f2937',\n padding: 12,\n borderRadius: 8,\n },\n transitionFrom: {\n color: '#9ca3af',\n fontSize: 14,\n },\n transitionFromState: {\n color: '#fff',\n fontWeight: 'bold',\n },\n transitionLabel: {\n color: '#9ca3af',\n fontSize: 14,\n width: 50,\n },\n selectWrapper: {\n flex: 1,\n },\n transitionsCard: {\n backgroundColor: '#1f2937',\n padding: 16,\n borderRadius: 12,\n gap: 12,\n },\n transitionRow: {\n backgroundColor: '#111827',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n gap: 8,\n },\n activeTransitionRow: {\n borderWidth: 1,\n borderColor: '#fbbf24',\n },\n transitionFromText: {\n color: '#fff',\n fontSize: 12,\n fontWeight: '500',\n },\n transitionToText: {\n color: '#22c55e',\n fontSize: 12,\n fontWeight: '500',\n },\n transitionArrow: {\n color: '#6b7280',\n fontSize: 12,\n },\n eventBadge: {\n backgroundColor: '#14b8a6',\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 4,\n },\n eventBadgeText: {\n color: '#fff',\n fontSize: 10,\n fontWeight: '600',\n },\n removeButton: {\n marginLeft: 'auto',\n width: 24,\n height: 24,\n borderRadius: 12,\n backgroundColor: '#ef4444',\n justifyContent: 'center',\n alignItems: 'center',\n },\n removeText: {\n color: '#fff',\n fontSize: 14,\n fontWeight: 'bold',\n },\n testResultsCard: {\n backgroundColor: '#1f2937',\n padding: 16,\n borderRadius: 12,\n gap: 12,\n },\n testResultRow: {\n backgroundColor: '#111827',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n gap: 8,\n },\n passIcon: {\n color: '#22c55e',\n fontSize: 16,\n fontWeight: 'bold',\n },\n failIcon: {\n color: '#ef4444',\n fontSize: 16,\n fontWeight: 'bold',\n },\n testLabel: {\n color: '#fff',\n fontSize: 12,\n flex: 1,\n },\n testFailDetail: {\n color: '#ef4444',\n fontSize: 10,\n },\n codeToggle: {\n color: '#14b8a6',\n fontSize: 14,\n fontWeight: '500',\n },\n codeCard: {\n backgroundColor: '#111827',\n padding: 16,\n borderRadius: 8,\n },\n codeText: {\n color: '#9ca3af',\n fontSize: 12,\n fontFamily: 'monospace',\n },\n successBox: {\n backgroundColor: 'rgba(34, 197, 94, 0.2)',\n borderWidth: 1,\n borderColor: '#22c55e',\n padding: 16,\n borderRadius: 8,\n alignItems: 'center',\n },\n successText: {\n color: '#22c55e',\n fontSize: 16,\n fontWeight: 'bold',\n },\n failBox: {\n backgroundColor: 'rgba(202, 138, 4, 0.2)',\n borderWidth: 1,\n borderColor: 'rgba(202, 138, 4, 0.3)',\n padding: 16,\n borderRadius: 8,\n alignItems: 'center',\n },\n failText: {\n color: '#fff',\n fontSize: 14,\n },\n hintReminder: {\n backgroundColor: 'rgba(6, 182, 212, 0.2)',\n borderWidth: 1,\n borderColor: 'rgba(6, 182, 212, 0.3)',\n padding: 12,\n borderRadius: 8,\n },\n hintReminderText: {\n color: '#fff',\n fontSize: 12,\n },\n});\n\nStateArchitectBoard.displayName = 'StateArchitectBoard';\n","/**\n * RuleEditor Component\n *\n * A single WHEN/THEN rule row for the Event Handler tier (ages 9-12) on React Native.\n * Kid picks an event trigger and an action from dropdowns.\n *\n * @packageDocumentation\n */\n\nimport React, { useCallback } from 'react';\nimport {\n View,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { HStack } from '../../../../atoms/Stack';\nimport { Select } from '../../../../atoms/Select';\nimport { Typography } from '../../../../atoms/Typography';\n\nexport interface RuleDefinition {\n id: string;\n whenEvent: string;\n thenAction: string;\n}\n\nexport interface RuleEditorProps {\n /** The current rule */\n rule: RuleDefinition;\n /** Available event triggers to listen for */\n availableEvents: Array<{ value: string; label: string }>;\n /** Available actions to perform */\n availableActions: Array<{ value: string; label: string }>;\n /** Called when rule changes */\n onChange: (rule: RuleDefinition) => void;\n /** Called when rule is removed */\n onRemove?: () => void;\n /** Whether editing is disabled (during playback) */\n disabled?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const RuleEditor: React.FC<RuleEditorProps> = ({\n rule,\n availableEvents,\n availableActions,\n onChange,\n onRemove,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n\n const handleWhenChange = useCallback((value: string) => {\n onChange({ ...rule, whenEvent: value });\n }, [rule, onChange]);\n\n const handleThenChange = useCallback((value: string) => {\n onChange({ ...rule, thenAction: value });\n }, [rule, onChange]);\n\n return (\n <View style={[styles.container, style]}>\n <HStack spacing={8} align=\"center\" style={styles.row}>\n <Typography variant=\"caption\" style={[styles.label, { color: theme.colors.primary }]}>\n WHEN\n </Typography>\n <View style={styles.selectContainer}>\n <Select\n value={rule.whenEvent}\n onChange={handleWhenChange}\n options={availableEvents}\n disabled={disabled}\n />\n </View>\n <Typography variant=\"caption\" style={[styles.label, { color: theme.colors.accent }]}>\n → THEN\n </Typography>\n <View style={styles.selectContainer}>\n <Select\n value={rule.thenAction}\n onChange={handleThenChange}\n options={availableActions}\n disabled={disabled}\n />\n </View>\n {onRemove && (\n <TouchableOpacity onPress={onRemove} disabled={disabled}>\n <Typography variant=\"body\" style={{ color: theme.colors.error }}>\n ✕\n </Typography>\n </TouchableOpacity>\n )}\n </HStack>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 8,\n borderRadius: 8,\n backgroundColor: '#f1f5f9',\n borderWidth: 1,\n borderColor: '#e2e8f0',\n },\n row: {\n flexWrap: 'wrap',\n },\n label: {\n fontWeight: '600',\n },\n selectContainer: {\n flex: 1,\n minWidth: 100,\n },\n});\n\nRuleEditor.displayName = 'RuleEditor';\n","/**\n * EventLog Component\n *\n * Scrolling log of events during playback in the Event Handler tier.\n * Shows the chain reaction as events cascade through objects.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport {\n StyleSheet,\n ViewStyle,\n ScrollView,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { Typography } from '../../../../atoms/Typography';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { Card } from '../../../../atoms/Card';\n\nexport interface EventLogEntry {\n id: string;\n timestamp: number;\n icon: string;\n message: string;\n status: 'pending' | 'active' | 'done' | 'error';\n}\n\nexport interface EventLogProps {\n /** Log entries */\n entries: EventLogEntry[];\n /** Max visible height before scroll */\n maxHeight?: number;\n /** Title label */\n label?: string;\n /** Additional 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}\n\nconst STATUS_STYLES = {\n pending: 'muted-foreground',\n active: 'primary',\n done: 'success',\n error: 'error',\n} as const;\n\nconst STATUS_DOTS: Record<string, string> = {\n pending: '○',\n active: '●',\n done: '✓',\n error: '✗',\n};\n\nexport const EventLog: React.FC<EventLogProps> = ({\n entries,\n maxHeight = 200,\n label = 'Event Log',\n style,\n}) => {\n const theme = useTheme();\n const scrollRef = useRef<ScrollView>(null);\n\n // Auto-scroll to bottom on new entries\n useEffect(() => {\n if (scrollRef.current && entries.length > 0) {\n setTimeout(() => {\n scrollRef.current?.scrollToEnd({ animated: true });\n }, 100);\n }\n }, [entries.length]);\n\n const getStatusColor = (status: EventLogEntry['status']): string => {\n const colorKey = STATUS_STYLES[status];\n return theme.colors[colorKey] || theme.colors.foreground;\n };\n\n return (\n <Card style={style ? [styles.container, style] : styles.container}>\n <VStack spacing={8}>\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'], fontWeight: '500' }}>\n {label}\n </Typography>\n <ScrollView\n ref={scrollRef}\n style={[styles.scrollView, { maxHeight }]}\n contentContainerStyle={styles.scrollContent}\n >\n <VStack spacing={8}>\n {entries.length === 0 && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'], fontStyle: 'italic' }}>\n No events yet...\n </Typography>\n )}\n {entries.map((entry) => (\n <HStack key={entry.id} spacing={8} align=\"flex-start\">\n <Typography\n variant=\"caption\"\n style={{ color: getStatusColor(entry.status) }}\n >\n {STATUS_DOTS[entry.status]}\n </Typography>\n <Typography variant=\"caption\">\n {entry.icon}\n </Typography>\n <Typography\n variant=\"caption\"\n style={[styles.message, { color: getStatusColor(entry.status) }]}\n >\n {entry.message}\n </Typography>\n </HStack>\n ))}\n </VStack>\n </ScrollView>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 12,\n },\n scrollView: {\n flexGrow: 0,\n },\n scrollContent: {\n paddingVertical: 4,\n },\n message: {\n flex: 1,\n } as ViewStyle,\n});\n\nEventLog.displayName = 'EventLog';\n","/**\n * ObjectRulePanel Component\n *\n * Shows the rules panel for a selected world object in the Event Handler tier.\n * Displays object info, its current state (via TraitStateViewer), and\n * a list of WHEN/THEN rules the kid has set.\n */\n\nimport React, { useCallback } from 'react';\nimport {\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Button } from '../../../../atoms/Button';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { Card } from '../../../../atoms/Card';\nimport { RuleEditor, RuleDefinition } from './RuleEditor';\n\nexport interface PuzzleObjectDef {\n id: string;\n name: string;\n icon: string;\n states: string[];\n initialState: string;\n currentState: string;\n availableEvents: Array<{ value: string; label: string }>;\n availableActions: Array<{ value: string; label: string }>;\n rules: RuleDefinition[];\n /** Max rules allowed on this object */\n maxRules?: number;\n}\n\nexport interface ObjectRulePanelProps {\n /** The selected object */\n object: PuzzleObjectDef;\n /** Called when rules change */\n onRulesChange: (objectId: string, rules: RuleDefinition[]) => void;\n /** Whether editing is disabled */\n disabled?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nlet nextRuleId = 1;\n\nexport const ObjectRulePanel: React.FC<ObjectRulePanelProps> = ({\n object,\n onRulesChange,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n const maxRules = object.maxRules || 3;\n const canAdd = object.rules.length < maxRules;\n\n const handleRuleChange = useCallback((index: number, updatedRule: RuleDefinition) => {\n const newRules = [...object.rules];\n newRules[index] = updatedRule;\n onRulesChange(object.id, newRules);\n }, [object.id, object.rules, onRulesChange]);\n\n const handleRuleRemove = useCallback((index: number) => {\n const newRules = object.rules.filter((_, i) => i !== index);\n onRulesChange(object.id, newRules);\n }, [object.id, object.rules, onRulesChange]);\n\n const handleAddRule = useCallback(() => {\n if (!canAdd || disabled) return;\n const firstEvent = object.availableEvents[0]?.value || '';\n const firstAction = object.availableActions[0]?.value || '';\n const newRule: RuleDefinition = {\n id: `rule-${nextRuleId++}`,\n whenEvent: firstEvent,\n thenAction: firstAction,\n };\n onRulesChange(object.id, [...object.rules, newRule]);\n }, [canAdd, disabled, object, onRulesChange]);\n\n return (\n <Card style={style ? [styles.container, style] : styles.container}>\n <VStack spacing={16}>\n {/* Object header */}\n <HStack spacing={12} align=\"center\">\n <Typography variant=\"h4\">{object.icon}</Typography>\n <VStack spacing={4}>\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {object.name}\n </Typography>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n State: {object.currentState}\n </Typography>\n </VStack>\n </HStack>\n\n {/* Rules */}\n <VStack spacing={8}>\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'], fontWeight: '500' }}>\n Rules ({object.rules.length}/{maxRules}):\n </Typography>\n {object.rules.map((rule, index) => (\n <RuleEditor\n key={rule.id}\n rule={rule}\n availableEvents={object.availableEvents}\n availableActions={object.availableActions}\n onChange={(r) => handleRuleChange(index, r)}\n onRemove={() => handleRuleRemove(index)}\n disabled={disabled}\n />\n ))}\n {canAdd && !disabled && (\n <Button variant=\"ghost\" onPress={handleAddRule} style={styles.addButton}>\n + Add Rule\n </Button>\n )}\n </VStack>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n addButton: {\n alignSelf: 'flex-start' as const,\n },\n});\n\nObjectRulePanel.displayName = 'ObjectRulePanel';\n","/**\n * EventHandlerBoard Organism\n *\n * Contains ALL game logic for the Event Handler tier (ages 9-12).\n * Kids click on world objects, set WHEN/THEN rules, and watch\n * event chains cascade during playback.\n *\n * Encourages experimentation: on failure, resets to editing so the kid\n * can try different rules. After 3 failures, shows a progressive hint.\n */\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n ScrollView,\n TouchableOpacity,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Button } from '../../../../atoms/Button';\nimport { VStack, HStack } from '../../../../atoms/Stack';\n\nimport { Badge } from '../../../../atoms/Badge';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\nimport { ObjectRulePanel, PuzzleObjectDef } from './ObjectRulePanel';\nimport { EventLog, EventLogEntry } from './EventLog';\nimport { RuleDefinition } from './RuleEditor';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface EventHandlerPuzzleEntity {\n id: string;\n title: string;\n description: string;\n /** Objects the kid can configure */\n objects: PuzzleObjectDef[];\n /** Goal condition description */\n goalCondition: string;\n /** Event that represents goal completion */\n goalEvent: string;\n /** Sequence of events that auto-fire to start the simulation */\n triggerEvents?: string[];\n /** Feedback */\n successMessage?: string;\n failMessage?: string;\n /** Progressive hint shown after 3 failures */\n hint?: string;\n /** Header image URL displayed above the title */\n headerImage?: string;\n /** Visual theme overrides */\n theme?: { background?: string; accentColor?: string };\n}\n\nexport interface EventHandlerBoardProps {\n /** Puzzle data */\n entity: EventHandlerPuzzleEntity;\n /** Playback speed in ms per event */\n stepDurationMs?: number;\n /** Emits UI:{playEvent} */\n playEvent?: string;\n /** Emits UI:{completeEvent} with { success } */\n completeEvent?: string;\n /** Additional styles */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\ntype PlayState = 'editing' | 'playing' | 'success' | 'fail';\n\nconst ENCOURAGEMENT_MESSAGES = [\n 'Not quite! Try a different combination.',\n 'Keep experimenting! You\\'re getting closer.',\n 'Don\\'t give up! Think about the event chain.',\n];\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const EventHandlerBoard: React.FC<EventHandlerBoardProps> = ({\n entity,\n stepDurationMs = 800,\n playEvent,\n completeEvent,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const [objects, setObjects] = useState<PuzzleObjectDef[]>(entity.objects);\n const [selectedObjectId, setSelectedObjectId] = useState<string | null>(\n entity.objects[0]?.id || null,\n );\n const [playState, setPlayState] = useState<PlayState>('editing');\n const [eventLog, setEventLog] = useState<EventLogEntry[]>([]);\n const [attempts, setAttempts] = useState(0);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const logIdCounter = useRef(0);\n\n useEffect(() => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n }, []);\n\n const selectedObject = objects.find((o) => o.id === selectedObjectId) || null;\n\n // -- Rule changes ---------------------------------------------------------\n\n const handleRulesChange = useCallback((objectId: string, rules: RuleDefinition[]) => {\n setObjects((prev) =>\n prev.map((o) => (o.id === objectId ? { ...o, rules } : o)),\n );\n }, []);\n\n // -- Add log entry --------------------------------------------------------\n\n const addLogEntry = useCallback((icon: string, message: string, status: EventLogEntry['status'] = 'done') => {\n const id = `log-${logIdCounter.current++}`;\n setEventLog((prev) => [...prev, { id, timestamp: Date.now(), icon, message, status }]);\n }, []);\n\n // -- Playback: simulate event chain ---------------------------------------\n\n const handlePlay = useCallback(() => {\n if (playState !== 'editing') return;\n if (playEvent) eventBus.emit(`UI:${playEvent}`, {});\n\n setPlayState('playing');\n setEventLog([]);\n\n const allRules: Array<{ object: PuzzleObjectDef; rule: RuleDefinition }> = [];\n objects.forEach((obj) => {\n obj.rules.forEach((rule) => {\n allRules.push({ object: obj, rule });\n });\n });\n\n const triggers = entity.triggerEvents || [];\n const eventQueue = [...triggers];\n const firedEvents = new Set<string>();\n let stepIdx = 0;\n let goalReached = false;\n\n const processNext = () => {\n if (eventQueue.length === 0 || stepIdx > 20) {\n if (goalReached) {\n setPlayState('success');\n if (completeEvent) {\n eventBus.emit(`UI:${completeEvent}`, { success: true });\n }\n } else {\n setAttempts((prev) => prev + 1);\n setPlayState('fail');\n // Do NOT emit PUZZLE_COMPLETE on failure — kid keeps trying\n }\n return;\n }\n\n const currentEvent = eventQueue.shift();\n if (!currentEvent) return;\n\n if (firedEvents.has(currentEvent)) {\n timerRef.current = setTimeout(processNext, 100);\n return;\n }\n firedEvents.add(currentEvent);\n\n const matching = allRules.filter((r) => r.rule.whenEvent === currentEvent);\n\n if (matching.length === 0) {\n addLogEntry('⚡', `No listeners for \"${currentEvent}\"`, 'done');\n } else {\n matching.forEach(({ object, rule }) => {\n addLogEntry(\n object.icon,\n `${object.name} heard \"${currentEvent}\" → ${rule.thenAction}`,\n 'done',\n );\n eventQueue.push(rule.thenAction);\n if (rule.thenAction === entity.goalEvent) {\n goalReached = true;\n }\n });\n }\n\n if (currentEvent === entity.goalEvent) {\n goalReached = true;\n }\n\n stepIdx++;\n timerRef.current = setTimeout(processNext, stepDurationMs);\n };\n\n if (triggers.length > 0) {\n addLogEntry(\n '🎬',\n `Simulation started with: ${triggers.join(', ')}`,\n 'active',\n );\n }\n timerRef.current = setTimeout(processNext, stepDurationMs);\n }, [playState, objects, entity, stepDurationMs, playEvent, completeEvent, eventBus, addLogEntry]);\n\n const handleTryAgain = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n // Keep the rules the kid set — just reset play state so they can tweak\n setPlayState('editing');\n setEventLog([]);\n }, []);\n\n const handleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setObjects(entity.objects);\n setPlayState('editing');\n setEventLog([]);\n setSelectedObjectId(entity.objects[0]?.id || null);\n setAttempts(0);\n }, [entity.objects]);\n\n const showHint = attempts >= 3 && entity.hint;\n const encourageMessage = ENCOURAGEMENT_MESSAGES[Math.min(attempts - 1, ENCOURAGEMENT_MESSAGES.length - 1)]\n ?? ENCOURAGEMENT_MESSAGES[0];\n\n if (isLoading) {\n return <LoadingState message=\"Loading puzzle...\" />;\n }\n\n if (error) {\n return <ErrorState message={error.message} />;\n }\n\n return (\n <ScrollView style={[styles.container, style]}>\n <VStack spacing={16} style={styles.content}>\n {/* Title + goal */}\n <VStack spacing={8}>\n <Typography variant=\"h4\">{entity.title}</Typography>\n <Typography variant=\"body\">{entity.description}</Typography>\n <View style={[styles.goalBox, { backgroundColor: `${theme.colors.primary}10`, borderColor: `${theme.colors.primary}30` }]}>\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"caption\" style={{ color: theme.colors.primary, fontWeight: '700' }}>\n GOAL:\n </Typography>\n <Typography variant=\"caption\">{entity.goalCondition}</Typography>\n </HStack>\n </View>\n </VStack>\n\n {/* Object selectors */}\n <VStack spacing={8}>\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'], fontWeight: '500' }}>\n Click an object to configure:\n </Typography>\n <HStack spacing={8} style={styles.wrap}>\n {objects.map((obj) => (\n <TouchableOpacity\n key={obj.id}\n onPress={() => setSelectedObjectId(obj.id)}\n style={[\n styles.objectButton,\n {\n borderColor:\n selectedObjectId === obj.id\n ? theme.colors.primary\n : theme.colors.border,\n backgroundColor:\n selectedObjectId === obj.id\n ? `${theme.colors.primary}10`\n : theme.colors.card,\n },\n ]}\n >\n <VStack spacing={4} align=\"center\" style={styles.objectContent}>\n <Typography variant=\"h4\">{obj.icon}</Typography>\n <Typography variant=\"body\" style={{ fontWeight: '500' }}>\n {obj.name}\n </Typography>\n <Badge variant=\"default\" size=\"sm\">\n {obj.currentState}\n </Badge>\n </VStack>\n </TouchableOpacity>\n ))}\n </HStack>\n </VStack>\n\n {/* Selected object rule panel */}\n {selectedObject && (\n <ObjectRulePanel\n object={selectedObject}\n onRulesChange={handleRulesChange}\n disabled={playState !== 'editing'}\n />\n )}\n\n {/* Event log during playback */}\n {eventLog.length > 0 && <EventLog entries={eventLog} />}\n\n {/* Result feedback */}\n {playState === 'success' && (\n <View style={[styles.resultBox, { backgroundColor: `${theme.colors.success}20`, borderColor: theme.colors.success }]}>\n <Typography variant=\"h4\" style={{ color: theme.colors.success, textAlign: 'center' }}>\n ✅ {entity.successMessage || 'Event chain complete!'}\n </Typography>\n </View>\n )}\n\n {playState === 'fail' && (\n <VStack spacing={12}>\n <View style={[styles.resultBox, { backgroundColor: `${theme.colors.warning}10`, borderColor: `${theme.colors.warning}30` }]}>\n <Typography variant=\"body\" style={{ fontWeight: '500', textAlign: 'center' }}>\n {encourageMessage}\n </Typography>\n </View>\n {showHint && (\n <View style={[styles.hintBox, { backgroundColor: `${theme.colors.accent}10`, borderColor: `${theme.colors.accent}30` }]}>\n <HStack spacing={8} align=\"flex-start\">\n <Typography variant=\"body\" style={{ color: theme.colors.accent, fontWeight: '700' }}>\n 💡 HINT:\n </Typography>\n <Typography variant=\"body\">{entity.hint}</Typography>\n </HStack>\n </View>\n )}\n </VStack>\n )}\n\n {/* Controls */}\n <HStack spacing={8}>\n {playState === 'fail' ? (\n <Button variant=\"primary\" onPress={handleTryAgain}>\n 🔄 Try Again\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n onPress={handlePlay}\n disabled={playState !== 'editing'}\n >\n ▶ Play\n </Button>\n )}\n <Button variant=\"ghost\" onPress={handleReset}>\n ↺ Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n padding: 16,\n },\n goalBox: {\n padding: 8,\n borderRadius: 8,\n borderWidth: 1,\n },\n wrap: {\n flexWrap: 'wrap',\n },\n objectButton: {\n padding: 12,\n borderRadius: 8,\n borderWidth: 2,\n },\n objectContent: {\n minWidth: 100,\n },\n resultBox: {\n padding: 16,\n borderRadius: 8,\n borderWidth: 1,\n },\n hintBox: {\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n },\n});\n\nEventHandlerBoard.displayName = 'EventHandlerBoard';\n","/**\n * BuilderBoard\n *\n * Component-snapping game board. The player places components\n * onto slots in a blueprint. Correct placement completes the build.\n *\n * Good for: architecture, circuits, molecules, system design stories.\n *\n * Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).\n */\n\nimport React, { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n StyleSheet,\n ViewStyle,\n ScrollView,\n TouchableOpacity,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Badge } from '../../../../atoms/Badge';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface BuilderComponent {\n id: string;\n label: string;\n description?: string;\n iconEmoji?: string;\n /** Image URL icon (takes precedence over iconEmoji) */\n iconUrl?: string;\n category?: string;\n}\n\nexport interface BuilderSlot {\n id: string;\n label: string;\n description?: string;\n acceptsComponentId: string;\n}\n\nexport interface BuilderPuzzleEntity {\n id: string;\n title: string;\n description: string;\n components: BuilderComponent[];\n slots: BuilderSlot[];\n successMessage?: string;\n failMessage?: string;\n hint?: string;\n /** Header image URL displayed above the title */\n headerImage?: string;\n /** Visual theme overrides */\n theme?: { background?: string; accentColor?: string };\n}\n\nexport interface BuilderBoardProps {\n entity: BuilderPuzzleEntity;\n completeEvent?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const BuilderBoard: React.FC<BuilderBoardProps> = ({\n entity,\n completeEvent = 'PUZZLE_COMPLETE',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const [placements, setPlacements] = useState<Record<string, string>>({});\n const [submitted, setSubmitted] = useState(false);\n const [attempts, setAttempts] = useState(0);\n const [showHint, setShowHint] = useState(false);\n const [selectedComponent, setSelectedComponent] = useState<string | null>(null);\n\n const usedComponentIds = new Set(Object.values(placements));\n const availableComponents = entity.components.filter((c) => !usedComponentIds.has(c.id));\n const allPlaced = Object.keys(placements).length === entity.slots.length;\n\n const results = submitted\n ? entity.slots.map((slot) => ({\n slot,\n placed: placements[slot.id],\n correct: placements[slot.id] === slot.acceptsComponentId,\n }))\n : [];\n\n const allCorrect = results.length > 0 && results.every((r) => r.correct);\n\n const handlePlaceComponent = (slotId: string) => {\n if (submitted || !selectedComponent) return;\n setPlacements((prev) => ({ ...prev, [slotId]: selectedComponent }));\n setSelectedComponent(null);\n };\n\n const handleRemoveFromSlot = (slotId: string) => {\n if (submitted) return;\n setPlacements((prev) => {\n const next = { ...prev };\n delete next[slotId];\n return next;\n });\n };\n\n const handleSubmit = useCallback(() => {\n setSubmitted(true);\n setAttempts((a) => a + 1);\n const correct = entity.slots.every((slot) => placements[slot.id] === slot.acceptsComponentId);\n if (correct) {\n eventBus.emit(`UI:${completeEvent}`, { success: true, attempts: attempts + 1 });\n }\n }, [entity.slots, placements, attempts, completeEvent, eventBus]);\n\n const handleReset = () => {\n setSubmitted(false);\n if (attempts >= 2 && entity.hint) {\n setShowHint(true);\n }\n };\n\n const handleFullReset = () => {\n setPlacements({});\n setSubmitted(false);\n setSelectedComponent(null);\n setAttempts(0);\n setShowHint(false);\n };\n\n const getComponentById = (id: string): BuilderComponent | undefined =>\n entity.components.find((c) => c.id === id);\n\n if (isLoading) {\n return <LoadingState message=\"Loading puzzle...\" />;\n }\n\n if (error) {\n return <ErrorState message={error.message} />;\n }\n\n return (\n <ScrollView style={[styles.container, style]}>\n <VStack spacing={16} style={styles.content}>\n {/* Title Card */}\n <Card>\n <VStack spacing={8}>\n <Typography variant=\"h4\">{entity.title}</Typography>\n <Typography variant=\"body\">{entity.description}</Typography>\n </VStack>\n </Card>\n\n {/* Available components */}\n <Card>\n <VStack spacing={12}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n COMPONENTS\n </Typography>\n <HStack spacing={8} style={styles.wrap}>\n {availableComponents.map((comp) => (\n <TouchableOpacity\n key={comp.id}\n onPress={() => setSelectedComponent(selectedComponent === comp.id ? null : comp.id)}\n disabled={submitted}\n >\n <View\n style={[\n styles.componentButton,\n {\n backgroundColor:\n selectedComponent === comp.id\n ? theme.colors.primary\n : theme.colors.secondary,\n },\n ]}\n >\n <Text style={{ color: selectedComponent === comp.id ? theme.colors['primary-foreground'] : theme.colors['secondary-foreground'] }}>\n {comp.iconEmoji ? `${comp.iconEmoji} ` : ''}\n {comp.label}\n </Text>\n </View>\n </TouchableOpacity>\n ))}\n {availableComponents.length === 0 && !submitted && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n All components placed\n </Typography>\n )}\n </HStack>\n </VStack>\n </Card>\n\n {/* Blueprint slots */}\n <Card>\n <VStack spacing={12}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n BLUEPRINT\n </Typography>\n <VStack spacing={8}>\n {entity.slots.map((slot) => {\n const placedComp = placements[slot.id] ? getComponentById(placements[slot.id]) : null;\n const result = results.find((r) => r.slot.id === slot.id);\n\n let borderColor = theme.colors.border;\n if (result) {\n borderColor = result.correct ? theme.colors.success : theme.colors.error;\n } else if (selectedComponent) {\n borderColor = theme.colors.primary;\n }\n\n return (\n <TouchableOpacity\n key={slot.id}\n onPress={() => handlePlaceComponent(slot.id)}\n disabled={submitted || !selectedComponent}\n style={[\n styles.slotRow,\n { borderColor },\n result && !result.correct && { backgroundColor: `${theme.colors.error}10` },\n result && result.correct && { backgroundColor: `${theme.colors.success}10` },\n ]}\n >\n <VStack spacing={4} style={styles.slotInfo}>\n <Typography variant=\"body\" style={{ fontWeight: '500' }}>\n {slot.label}\n </Typography>\n {slot.description && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {slot.description}\n </Typography>\n )}\n </VStack>\n {placedComp ? (\n <HStack spacing={8} align=\"center\">\n <TouchableOpacity onPress={() => handleRemoveFromSlot(slot.id)} disabled={submitted}>\n <Badge variant={result ? (result.correct ? 'success' : 'error') : 'default'} size=\"sm\">\n {placedComp.iconEmoji ? `${placedComp.iconEmoji} ` : ''}\n {placedComp.label}\n </Badge>\n </TouchableOpacity>\n {result && (\n <Text style={{ fontSize: 16 }}>\n {result.correct ? '✓' : '✗'}\n </Text>\n )}\n </HStack>\n ) : (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n Empty\n </Typography>\n )}\n </TouchableOpacity>\n );\n })}\n </VStack>\n </VStack>\n </Card>\n\n {/* Result */}\n {submitted && (\n <Card>\n <VStack spacing={12} align=\"center\">\n <Text style={{ fontSize: 32 }}>{allCorrect ? '✅' : '❌'}</Text>\n <Typography variant=\"body\" style={{ fontWeight: '600', textAlign: 'center' }}>\n {allCorrect\n ? (entity.successMessage ?? 'Build successful!')\n : (entity.failMessage ?? 'Some placements are incorrect.')}\n </Typography>\n </VStack>\n </Card>\n )}\n\n {showHint && entity.hint && (\n <Card style={{ borderLeftWidth: 4, borderLeftColor: theme.colors.warning }}>\n <Typography variant=\"body\">💡 {entity.hint}</Typography>\n </Card>\n )}\n\n <HStack spacing={8} justify=\"center\">\n {!submitted ? (\n <Button\n variant=\"primary\"\n onPress={handleSubmit}\n disabled={!allPlaced}\n >\n 🔧 Build\n </Button>\n ) : !allCorrect ? (\n <Button variant=\"primary\" onPress={handleReset}>\n Try Again\n </Button>\n ) : null}\n <Button variant=\"secondary\" onPress={handleFullReset}>\n 🔄 Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n padding: 16,\n },\n wrap: {\n flexWrap: 'wrap',\n },\n componentButton: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 8,\n },\n slotRow: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 12,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderRadius: 8,\n },\n slotInfo: {\n flex: 1,\n },\n});\n\nBuilderBoard.displayName = 'BuilderBoard';\n","/**\n * ClassifierBoard\n *\n * Drag-and-drop classification game. The player sorts items\n * into the correct category buckets. All items must be correctly\n * classified to win.\n *\n * Good for: taxonomy, pattern recognition, sorting stories.\n *\n * Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).\n */\n\nimport React, { useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n ScrollView,\n TouchableOpacity,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { Badge } from '../../../../atoms/Badge';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface ClassifierItem {\n id: string;\n label: string;\n description?: string;\n correctCategory: string;\n /** Image URL icon for story-specific visual skin */\n iconUrl?: string;\n}\n\nexport interface ClassifierCategory {\n id: string;\n label: string;\n color?: string;\n /** Image URL for story-specific category header */\n imageUrl?: string;\n}\n\nexport interface ClassifierPuzzleEntity {\n id: string;\n title: string;\n description: string;\n items: ClassifierItem[];\n categories: ClassifierCategory[];\n successMessage?: string;\n failMessage?: string;\n hint?: string;\n /** Header image URL displayed above the title */\n headerImage?: string;\n /** Visual theme overrides */\n theme?: { background?: string; accentColor?: string };\n}\n\nexport interface ClassifierBoardProps {\n entity: ClassifierPuzzleEntity;\n completeEvent?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const ClassifierBoard: React.FC<ClassifierBoardProps> = ({\n entity,\n completeEvent = 'PUZZLE_COMPLETE',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const [assignments, setAssignments] = useState<Record<string, string>>({});\n const [submitted, setSubmitted] = useState(false);\n const [attempts, setAttempts] = useState(0);\n const [showHint, setShowHint] = useState(false);\n\n const unassignedItems = entity.items.filter((item) => !assignments[item.id]);\n const allAssigned = Object.keys(assignments).length === entity.items.length;\n\n const results = submitted\n ? entity.items.map((item) => ({\n item,\n assigned: assignments[item.id],\n correct: assignments[item.id] === item.correctCategory,\n }))\n : [];\n\n const allCorrect = results.length > 0 && results.every((r) => r.correct);\n const correctCount = results.filter((r) => r.correct).length;\n\n const handleAssign = (itemId: string, categoryId: string) => {\n if (submitted) return;\n setAssignments((prev) => ({ ...prev, [itemId]: categoryId }));\n };\n\n const handleUnassign = (itemId: string) => {\n if (submitted) return;\n setAssignments((prev) => {\n const next = { ...prev };\n delete next[itemId];\n return next;\n });\n };\n\n const handleSubmit = useCallback(() => {\n setSubmitted(true);\n setAttempts((a) => a + 1);\n const correct = entity.items.every((item) => assignments[item.id] === item.correctCategory);\n if (correct) {\n eventBus.emit(`UI:${completeEvent}`, { success: true, attempts: attempts + 1 });\n }\n }, [entity.items, assignments, attempts, completeEvent, eventBus]);\n\n const handleReset = () => {\n setSubmitted(false);\n if (attempts >= 2 && entity.hint) {\n setShowHint(true);\n }\n };\n\n const handleFullReset = () => {\n setAssignments({});\n setSubmitted(false);\n setAttempts(0);\n setShowHint(false);\n };\n\n if (isLoading) {\n return <LoadingState message=\"Loading puzzle...\" />;\n }\n\n if (error) {\n return <ErrorState message={error.message} />;\n }\n\n return (\n <ScrollView style={[styles.container, style]}>\n <VStack spacing={16} style={styles.content}>\n {/* Title Card */}\n <Card>\n <VStack spacing={8}>\n <Typography variant=\"h4\">{entity.title}</Typography>\n <Typography variant=\"body\">{entity.description}</Typography>\n </VStack>\n </Card>\n\n {/* Unassigned items */}\n {unassignedItems.length > 0 && (\n <Card>\n <VStack spacing={12}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n ITEMS TO SORT\n </Typography>\n <HStack spacing={8} style={styles.wrap}>\n {unassignedItems.map((item) => (\n <Badge key={item.id} size=\"md\">\n {item.label}\n </Badge>\n ))}\n </HStack>\n </VStack>\n </Card>\n )}\n\n {/* Category buckets */}\n <VStack spacing={16}>\n {entity.categories.map((cat) => {\n const catItems = entity.items.filter((item) => assignments[item.id] === cat.id);\n return (\n <Card key={cat.id}>\n <VStack spacing={12}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {cat.label}\n </Typography>\n <Badge size=\"sm\">{catItems.length}</Badge>\n </HStack>\n <HStack spacing={8} style={styles.wrap}>\n {catItems.map((item) => {\n const result = results.find((r) => r.item.id === item.id);\n return (\n <TouchableOpacity\n key={item.id}\n onPress={() => handleUnassign(item.id)}\n disabled={submitted}\n >\n <View\n style={[\n styles.assignedBadge,\n result && {\n backgroundColor: result.correct\n ? `${theme.colors.success}20`\n : `${theme.colors.error}20`,\n borderColor: result.correct ? theme.colors.success : theme.colors.error,\n borderWidth: 1,\n },\n ]}\n >\n <Typography variant=\"caption\">{item.label}</Typography>\n {result && (\n <Typography variant=\"caption\">\n {result.correct ? ' ✓' : ' ✗'}\n </Typography>\n )}\n </View>\n </TouchableOpacity>\n );\n })}\n </HStack>\n {/* Assignment buttons for unassigned items */}\n {!submitted && unassignedItems.length > 0 && (\n <HStack spacing={8} style={styles.wrap}>\n {unassignedItems.map((item) => (\n <TouchableOpacity\n key={item.id}\n onPress={() => handleAssign(item.id, cat.id)}\n style={styles.assignButton}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n + {item.label}\n </Typography>\n </TouchableOpacity>\n ))}\n </HStack>\n )}\n </VStack>\n </Card>\n );\n })}\n </VStack>\n\n {/* Result */}\n {submitted && (\n <Card>\n <VStack spacing={12} align=\"center\">\n <Typography variant=\"h4\">{allCorrect ? '✅' : '❌'}</Typography>\n <Typography variant=\"body\" style={{ fontWeight: '600', textAlign: 'center' }}>\n {allCorrect\n ? (entity.successMessage ?? 'All items correctly classified!')\n : `${correctCount}/${entity.items.length} correct`}\n </Typography>\n {!allCorrect && entity.failMessage && (\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'], textAlign: 'center' }}>\n {entity.failMessage}\n </Typography>\n )}\n </VStack>\n </Card>\n )}\n\n {/* Hint */}\n {showHint && entity.hint && (\n <Card style={{ borderLeftWidth: 4, borderLeftColor: theme.colors.warning }}>\n <Typography variant=\"body\">💡 {entity.hint}</Typography>\n </Card>\n )}\n\n {/* Actions */}\n <HStack spacing={8} justify=\"center\">\n {!submitted ? (\n <Button variant=\"primary\" onPress={handleSubmit} disabled={!allAssigned}>\n 📤 Check\n </Button>\n ) : !allCorrect ? (\n <Button variant=\"primary\" onPress={handleReset}>\n Try Again\n </Button>\n ) : null}\n <Button variant=\"secondary\" onPress={handleFullReset}>\n 🔄 Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n padding: 16,\n },\n wrap: {\n flexWrap: 'wrap',\n },\n assignedBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n backgroundColor: '#f1f5f9',\n },\n assignButton: {\n paddingHorizontal: 8,\n paddingVertical: 4,\n },\n});\n\nClassifierBoard.displayName = 'ClassifierBoard';\n","/**\n * DebuggerBoard\n *\n * Error-finding game board. The player reviews a code/system\n * listing and identifies lines or elements that contain bugs.\n *\n * Good for: programming, logic, troubleshooting stories.\n *\n * Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).\n */\n\nimport React, { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n StyleSheet,\n ViewStyle,\n ScrollView,\n TouchableOpacity,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport { Card } from '../../../../atoms/Card';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { VStack, HStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface DebuggerLine {\n id: string;\n content: string;\n isBug: boolean;\n explanation?: string;\n}\n\nexport interface DebuggerPuzzleEntity {\n id: string;\n title: string;\n description: string;\n language?: string;\n lines: DebuggerLine[];\n /** How many bugs the player should find */\n bugCount: number;\n successMessage?: string;\n failMessage?: string;\n hint?: string;\n /** Header image URL displayed above the title */\n headerImage?: string;\n /** Visual theme overrides */\n theme?: { background?: string; accentColor?: string };\n}\n\nexport interface DebuggerBoardProps {\n entity: DebuggerPuzzleEntity;\n completeEvent?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n}\n\nexport const DebuggerBoard: React.FC<DebuggerBoardProps> = ({\n entity,\n completeEvent = 'PUZZLE_COMPLETE',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const [flaggedLines, setFlaggedLines] = useState<Set<string>>(new Set());\n const [submitted, setSubmitted] = useState(false);\n const [attempts, setAttempts] = useState(0);\n const [showHint, setShowHint] = useState(false);\n\n const toggleLine = (lineId: string) => {\n if (submitted) return;\n setFlaggedLines((prev) => {\n const next = new Set(prev);\n if (next.has(lineId)) {\n next.delete(lineId);\n } else {\n next.add(lineId);\n }\n return next;\n });\n };\n\n const bugLines = entity.lines.filter((l) => l.isBug);\n const correctFlags = entity.lines.filter((l) => l.isBug && flaggedLines.has(l.id));\n const falseFlags = entity.lines.filter((l) => !l.isBug && flaggedLines.has(l.id));\n const allCorrect = submitted && correctFlags.length === bugLines.length && falseFlags.length === 0;\n\n const handleSubmit = useCallback(() => {\n setSubmitted(true);\n setAttempts((a) => a + 1);\n const correct = correctFlags.length === bugLines.length && falseFlags.length === 0;\n if (correct) {\n eventBus.emit(`UI:${completeEvent}`, { success: true, attempts: attempts + 1 });\n }\n }, [correctFlags.length, bugLines.length, falseFlags.length, attempts, completeEvent, eventBus]);\n\n const handleReset = () => {\n setSubmitted(false);\n if (attempts >= 2 && entity.hint) {\n setShowHint(true);\n }\n };\n\n const handleFullReset = () => {\n setFlaggedLines(new Set());\n setSubmitted(false);\n setAttempts(0);\n setShowHint(false);\n };\n\n const getLineBackgroundColor = (line: DebuggerLine, isFlagged: boolean): string | undefined => {\n if (submitted) {\n if (line.isBug && isFlagged) return `${theme.colors.success}20`;\n if (line.isBug && !isFlagged) return `${theme.colors.warning}20`;\n if (!line.isBug && isFlagged) return `${theme.colors.error}20`;\n } else if (isFlagged) {\n return `${theme.colors.error}20`;\n }\n return undefined;\n };\n\n if (isLoading) {\n return <LoadingState message=\"Loading puzzle...\" />;\n }\n\n if (error) {\n return <ErrorState message={error.message} />;\n }\n\n return (\n <ScrollView style={[styles.container, style]}>\n <VStack spacing={16} style={styles.content}>\n {/* Title Card */}\n <Card>\n <VStack spacing={8}>\n <HStack spacing={8} align=\"center\">\n <Text style={{ fontSize: 20 }}>🐛</Text>\n <Typography variant=\"h4\">{entity.title}</Typography>\n </HStack>\n <Typography variant=\"body\">{entity.description}</Typography>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n Find {entity.bugCount} bug{entity.bugCount !== 1 ? 's' : ''} in the code below\n </Typography>\n </VStack>\n </Card>\n\n {/* Code listing */}\n <Card style={{ padding: 0, overflow: 'hidden' }}>\n <VStack spacing={0}>\n {entity.lines.map((line, index) => {\n const isFlagged = flaggedLines.has(line.id);\n const bgColor = getLineBackgroundColor(line, isFlagged);\n\n return (\n <TouchableOpacity\n key={line.id}\n onPress={() => toggleLine(line.id)}\n disabled={submitted}\n style={[\n styles.lineRow,\n { backgroundColor: bgColor },\n index < entity.lines.length - 1 && { borderBottomWidth: 1, borderBottomColor: theme.colors.border },\n ]}\n >\n <View style={[styles.lineNumber, { borderRightColor: theme.colors.border }]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {index + 1}\n </Typography>\n </View>\n <View style={styles.lineContent}>\n <Typography variant=\"body\" style={styles.codeText}>\n {line.content}\n </Typography>\n </View>\n <View style={styles.lineIndicator}>\n {isFlagged && <Text style={{ color: theme.colors.error }}>🐛</Text>}\n {submitted && line.isBug && !isFlagged && (\n <Text style={{ color: theme.colors.warning }}>🐛</Text>\n )}\n </View>\n </TouchableOpacity>\n );\n })}\n </VStack>\n </Card>\n\n {/* Explanations after submit */}\n {submitted && (\n <Card>\n <VStack spacing={12}>\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {allCorrect\n ? (entity.successMessage ?? 'All bugs found!')\n : `${correctFlags.length}/${bugLines.length} bugs found`}\n </Typography>\n {bugLines.map((line) => (\n <HStack key={line.id} spacing={8} align=\"flex-start\">\n <Text style={{ marginTop: 2 }}>\n {flaggedLines.has(line.id) ? '✅' : '⚠️'}\n </Text>\n <VStack spacing={4}>\n <Typography variant=\"caption\" style={{ fontWeight: '600', fontFamily: 'monospace' }}>\n {line.content.trim()}\n </Typography>\n {line.explanation && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {line.explanation}\n </Typography>\n )}\n </VStack>\n </HStack>\n ))}\n </VStack>\n </Card>\n )}\n\n {showHint && entity.hint && (\n <Card style={{ borderLeftWidth: 4, borderLeftColor: theme.colors.warning }}>\n <Typography variant=\"body\">💡 {entity.hint}</Typography>\n </Card>\n )}\n\n <HStack spacing={8} justify=\"center\">\n {!submitted ? (\n <Button variant=\"primary\" onPress={handleSubmit} disabled={flaggedLines.size === 0}>\n 📤 Submit\n </Button>\n ) : !allCorrect ? (\n <Button variant=\"primary\" onPress={handleReset}>\n Try Again\n </Button>\n ) : null}\n <Button variant=\"secondary\" onPress={handleFullReset}>\n 🔄 Reset\n </Button>\n </HStack>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n content: {\n padding: 16,\n },\n lineRow: {\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n lineNumber: {\n width: 40,\n paddingVertical: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRightWidth: 1,\n },\n lineContent: {\n flex: 1,\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n codeText: {\n fontFamily: 'monospace',\n fontSize: 14,\n },\n lineIndicator: {\n width: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nDebuggerBoard.displayName = 'DebuggerBoard';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../../../../atoms/Card';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { Button } from '../../../../atoms/Button';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Input } from '../../../../atoms/Input';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\nimport { EmptyState } from '../../../../molecules/EmptyState';\n\nexport type VariableType = 'string' | 'number' | 'boolean' | 'array' | 'object';\n\nexport interface Variable {\n id: string;\n name: string;\n type: VariableType;\n value: unknown;\n description?: string;\n isConstant?: boolean;\n scope?: 'local' | 'global' | 'component';\n}\n\nexport interface VariablePanelProps {\n /** Variables to display */\n variables: Variable[];\n /** Callback when variable value changes */\n onVariableChange?: (id: string, value: unknown) => void;\n /** Callback when variable is added */\n onVariableAdd?: (variable: Omit<Variable, 'id'>) => void;\n /** Callback when variable is deleted */\n onVariableDelete?: (id: string) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event - emits UI:VARIABLE_CHANGE via eventBus */\n changeEvent?: string;\n /** Declarative add event - emits UI:VARIABLE_ADD via eventBus */\n addEvent?: string;\n /** Declarative delete event - emits UI:VARIABLE_DELETE via eventBus */\n deleteEvent?: string;\n}\n\nexport const VariablePanel: React.FC<VariablePanelProps> = ({\n variables,\n onVariableChange,\n onVariableAdd,\n onVariableDelete,\n style,\n isLoading,\n error,\n changeEvent,\n addEvent,\n deleteEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [newVariableName, setNewVariableName] = React.useState('');\n const [newVariableType, setNewVariableType] = React.useState<VariableType>('string');\n\n const handleVariableChange = (id: string, value: unknown) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { id, value } as EventPayload);\n }\n onVariableChange?.(id, value);\n };\n\n const handleAddVariable = () => {\n if (!newVariableName.trim()) return;\n\n const newVar: Omit<Variable, 'id'> = {\n name: newVariableName,\n type: newVariableType,\n value: getDefaultValueForType(newVariableType),\n scope: 'local',\n };\n\n if (addEvent) {\n eventBus.emit(`UI:${addEvent}`, { variable: newVar } as EventPayload);\n }\n onVariableAdd?.(newVar);\n setNewVariableName('');\n };\n\n const handleDeleteVariable = (id: string) => {\n if (deleteEvent) {\n eventBus.emit(`UI:${deleteEvent}`, { id } as EventPayload);\n }\n onVariableDelete?.(id);\n };\n\n const getDefaultValueForType = (type: VariableType): unknown => {\n switch (type) {\n case 'string':\n return '';\n case 'number':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n return {};\n default:\n return null;\n }\n };\n\n const getTypeVariant = (\n type: VariableType\n ): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' => {\n switch (type) {\n case 'string':\n return 'primary';\n case 'number':\n return 'success';\n case 'boolean':\n return 'warning';\n case 'array':\n return 'secondary';\n case 'object':\n return 'error';\n default:\n return 'default';\n }\n };\n\n const renderVariableValue = (variable: Variable) => {\n if (variable.isConstant) {\n return (\n <Typography variant=\"body\" style={styles.constantValue}>\n {formatValue(variable.value)}\n </Typography>\n );\n }\n\n switch (variable.type) {\n case 'boolean':\n return (\n <Button\n variant={variable.value ? 'primary' : 'secondary'}\n size=\"sm\"\n onPress={() => handleVariableChange(variable.id, !variable.value)}\n >\n {variable.value ? 'true' : 'false'}\n </Button>\n );\n case 'string':\n return (\n <Input\n value={String(variable.value)}\n onChangeText={text => handleVariableChange(variable.id, text)}\n placeholder=\"Enter value...\"\n style={styles.valueInput}\n />\n );\n case 'number':\n return (\n <Input\n value={String(variable.value)}\n onChangeText={text => {\n const num = parseFloat(text);\n handleVariableChange(variable.id, isNaN(num) ? 0 : num);\n }}\n keyboardType=\"numeric\"\n placeholder=\"0\"\n style={styles.valueInput}\n />\n );\n default:\n return (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {formatValue(variable.value)}\n </Typography>\n );\n }\n };\n\n const formatValue = (value: unknown): string => {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading variables...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <Typography variant=\"h4\">Variables</Typography>\n\n {/* Add new variable */}\n {(addEvent || onVariableAdd) && (\n <VStack spacing={8}>\n <Typography variant=\"label\">Add Variable</Typography>\n <HStack spacing={8}>\n <Input\n value={newVariableName}\n onChangeText={setNewVariableName}\n placeholder=\"Variable name\"\n style={styles.nameInput}\n />\n <Button\n variant={newVariableType === 'string' ? 'primary' : 'secondary'}\n size=\"sm\"\n onPress={() => setNewVariableType('string')}\n >\n str\n </Button>\n <Button\n variant={newVariableType === 'number' ? 'primary' : 'secondary'}\n size=\"sm\"\n onPress={() => setNewVariableType('number')}\n >\n num\n </Button>\n <Button\n variant={newVariableType === 'boolean' ? 'primary' : 'secondary'}\n size=\"sm\"\n onPress={() => setNewVariableType('boolean')}\n >\n bool\n </Button>\n </HStack>\n <Button variant=\"primary\" size=\"sm\" onPress={handleAddVariable}>\n Add Variable\n </Button>\n </VStack>\n )}\n\n {/* Variable list */}\n {variables.length === 0 ? (\n <EmptyState message=\"No variables defined\" />\n ) : (\n <ScrollView showsVerticalScrollIndicator={false} style={styles.variableList}>\n <VStack spacing={8}>\n {variables.map(variable => (\n <View\n key={variable.id}\n style={[styles.variableItem, { borderBottomColor: theme.colors.border }]}\n >\n <HStack justify=\"space-between\" align=\"center\">\n <VStack spacing={4} style={styles.variableInfo}>\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"body\" style={styles.variableName}>\n {variable.isConstant && '🔒 '}\n {variable.name}\n </Typography>\n <Badge variant={getTypeVariant(variable.type)} size=\"sm\">\n {variable.type}\n </Badge>\n {variable.scope && variable.scope !== 'local' && (\n <Badge variant=\"secondary\" size=\"sm\">\n {variable.scope}\n </Badge>\n )}\n </HStack>\n {variable.description && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {variable.description}\n </Typography>\n )}\n </VStack>\n <HStack spacing={8} align=\"center\">\n {renderVariableValue(variable)}\n {(deleteEvent || onVariableDelete) && !variable.isConstant && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={() => handleDeleteVariable(variable.id)}\n >\n 🗑️\n </Button>\n )}\n </HStack>\n </HStack>\n </View>\n ))}\n </VStack>\n </ScrollView>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxHeight: 500,\n },\n nameInput: {\n flex: 1,\n },\n valueInput: {\n width: 120,\n },\n variableList: {\n maxHeight: 350,\n },\n variableItem: {\n paddingVertical: 8,\n borderBottomWidth: 1,\n },\n variableInfo: {\n flex: 1,\n },\n variableName: {\n fontFamily: 'monospace',\n },\n constantValue: {\n fontFamily: 'monospace',\n opacity: 0.7,\n },\n});\n\nVariablePanel.displayName = 'VariablePanel';\n","import React from 'react';\nimport { ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../../../../atoms/Card';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { Button } from '../../../../atoms/Button';\nimport { Badge } from '../../../../atoms/Badge';\nimport { CodeBlock } from '../../../../molecules/CodeBlock';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\nimport { EmptyState } from '../../../../molecules/EmptyState';\n\nexport interface CodeSection {\n id: string;\n name: string;\n code: string;\n language: string;\n lineStart?: number;\n highlights?: number[];\n}\n\nexport interface CodeViewProps {\n /** Code sections to display */\n sections: CodeSection[];\n /** Currently selected section ID */\n selectedSectionId?: string;\n /** Full generated code (if available) */\n fullCode?: string;\n /** Language of the code */\n language?: string;\n /** Component name */\n componentName?: string;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative section select event - emits UI:SECTION_SELECT via eventBus */\n sectionSelectEvent?: string;\n /** Declarative run event - emits UI:CODE_RUN via eventBus */\n runEvent?: string;\n /** Declarative copy event - emits UI:CODE_COPY via eventBus */\n copyEvent?: string;\n /** Declarative export event - emits UI:CODE_EXPORT via eventBus */\n exportEvent?: string;\n}\n\nexport const CodeView: React.FC<CodeViewProps> = ({\n sections,\n selectedSectionId,\n fullCode,\n language = 'typescript',\n componentName,\n style,\n isLoading,\n error,\n sectionSelectEvent,\n runEvent,\n copyEvent,\n exportEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [activeTab, setActiveTab] = React.useState<'sections' | 'full'>('sections');\n\n const handleSectionSelect = (sectionId: string) => {\n if (sectionSelectEvent) {\n eventBus.emit(`UI:${sectionSelectEvent}`, { sectionId } as EventPayload);\n }\n };\n\n const handleRun = () => {\n if (runEvent) {\n eventBus.emit(`UI:${runEvent}`, { sections, fullCode } as unknown as EventPayload);\n }\n };\n\n const handleCopy = () => {\n const codeToCopy = activeTab === 'full' && fullCode ? fullCode : getAllSectionsCode();\n if (copyEvent) {\n eventBus.emit(`UI:${copyEvent}`, { code: codeToCopy, language } as EventPayload);\n }\n };\n\n const handleExport = () => {\n const codeToExport = activeTab === 'full' && fullCode ? fullCode : getAllSectionsCode();\n if (exportEvent) {\n eventBus.emit(`UI:${exportEvent}`, { code: codeToExport, language, componentName } as EventPayload);\n }\n };\n\n const getAllSectionsCode = (): string => {\n return sections.map(s => `// ${s.name}\\n${s.code}`).join('\\n\\n');\n };\n\n const selectedSection = sections.find(s => s.id === selectedSectionId) || sections[0];\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading code...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (sections.length === 0 && !fullCode) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No code available\" />\n </Card>\n );\n }\n\n const displayCode =\n activeTab === 'full' && fullCode ? fullCode : selectedSection?.code || '';\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]} padding=\"none\">\n <VStack spacing={0}>\n {/* Header */}\n <HStack\n justify=\"space-between\"\n align=\"center\"\n style={[styles.header, { backgroundColor: theme.colors.muted }]}\n >\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"h4\">\n {componentName ? `${componentName}.tsx` : 'Code'}\n </Typography>\n <Badge variant=\"secondary\">{language}</Badge>\n </HStack>\n <HStack spacing={8}>\n {runEvent && (\n <Button variant=\"primary\" size=\"sm\" onPress={handleRun}>\n ▶ Run\n </Button>\n )}\n {copyEvent && (\n <Button variant=\"secondary\" size=\"sm\" onPress={handleCopy}>\n 📋 Copy\n </Button>\n )}\n {exportEvent && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleExport}>\n 💾 Export\n </Button>\n )}\n </HStack>\n </HStack>\n\n {/* Tabs */}\n {fullCode && (\n <HStack spacing={0} style={[styles.tabs, { borderBottomColor: theme.colors.border }]}>\n <Button\n variant={activeTab === 'sections' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setActiveTab('sections')}\n style={styles.tabButton}\n >\n Sections\n </Button>\n <Button\n variant={activeTab === 'full' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setActiveTab('full')}\n style={styles.tabButton}\n >\n Full Code\n </Button>\n </HStack>\n )}\n\n {/* Section tabs (when in sections mode) */}\n {activeTab === 'sections' && sections.length > 1 && (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={4} style={styles.sectionTabs}>\n {sections.map(section => (\n <Button\n key={section.id}\n variant={selectedSection?.id === section.id ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => handleSectionSelect(section.id)}\n >\n {section.name}\n </Button>\n ))}\n </HStack>\n </ScrollView>\n )}\n\n {/* Section info */}\n {activeTab === 'sections' && selectedSection && (\n <HStack\n spacing={8}\n align=\"center\"\n style={[styles.sectionInfo, { borderBottomColor: theme.colors.border }]}\n >\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {selectedSection.name}\n </Typography>\n {selectedSection.lineStart !== undefined && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n Line {selectedSection.lineStart}\n </Typography>\n )}\n {selectedSection.highlights && selectedSection.highlights.length > 0 && (\n <Badge variant=\"warning\" size=\"sm\">\n {selectedSection.highlights.length} highlights\n </Badge>\n )}\n </HStack>\n )}\n\n {/* Code content */}\n <CodeBlock\n code={displayCode}\n language={language}\n showLineNumbers\n showCopyButton={false}\n scrollable\n />\n\n {/* Stats */}\n <HStack\n spacing={16}\n style={[styles.stats, { borderTopColor: theme.colors.border, backgroundColor: theme.colors.muted }]}\n >\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {sections.length} section{sections.length !== 1 ? 's' : ''}\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {displayCode.split('\\n').length} lines\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {displayCode.length} chars\n </Typography>\n </HStack>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n padding: 16,\n },\n tabs: {\n borderBottomWidth: 1,\n },\n tabButton: {\n flex: 1,\n borderRadius: 0,\n },\n sectionTabs: {\n padding: 12,\n },\n sectionInfo: {\n padding: 12,\n borderBottomWidth: 1,\n },\n stats: {\n padding: 12,\n borderTopWidth: 1,\n justifyContent: 'flex-end',\n },\n});\n\nCodeView.displayName = 'CodeView';\n","import React from 'react';\nimport {\n View,\n ScrollView,\n TouchableOpacity,\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 { Card } from '../../../../atoms/Card';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport type ActionCategory = 'movement' | 'logic' | 'interaction' | 'control' | 'custom';\n\nexport interface ActionDefinition {\n id: string;\n name: string;\n category: ActionCategory;\n icon?: string;\n description?: string;\n color?: string;\n params?: Array<{\n name: string;\n type: 'string' | 'number' | 'boolean' | 'select';\n options?: string[];\n default?: unknown;\n }>;\n}\n\nexport interface ActionPaletteProps {\n actions: ActionDefinition[];\n selectedCategory?: ActionCategory | 'all';\n onActionSelect?: (action: ActionDefinition) => void;\n onCategoryChange?: (category: ActionCategory | 'all') => void;\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\nconst categoryLabels: Record<ActionCategory | 'all', string> = {\n all: 'All',\n movement: 'Move',\n logic: 'Logic',\n interaction: 'Interact',\n control: 'Control',\n custom: 'Custom',\n};\n\nconst categoryBadgeVariants: Record<ActionCategory | 'all', 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error'> = {\n all: 'default',\n movement: 'primary',\n logic: 'secondary',\n interaction: 'success',\n control: 'warning',\n custom: 'error',\n};\n\nconst categoryIcons: Record<ActionCategory, string> = {\n movement: '➡️',\n logic: '🔀',\n interaction: '👆',\n control: '⚙️',\n custom: '✨',\n};\n\nexport const ActionPalette: React.FC<ActionPaletteProps> = ({\n actions,\n selectedCategory = 'all',\n onActionSelect,\n onCategoryChange,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const categories: Array<ActionCategory | 'all'> = ['all', 'movement', 'logic', 'interaction', 'control', 'custom'];\n\n const filteredActions = selectedCategory === 'all'\n ? actions\n : actions.filter((action) => action.category === selectedCategory);\n\n const handleCategoryPress = (category: ActionCategory | 'all') => {\n eventBus.emit('UI:ACTION_CATEGORY_CHANGED', { category } as EventPayload);\n onCategoryChange?.(category);\n };\n\n const handleActionPress = (action: ActionDefinition) => {\n eventBus.emit('UI:ACTION_SELECTED', { action } as unknown as EventPayload);\n onActionSelect?.(action);\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading actions...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={styles.header}>\n <Typography variant=\"h4\">Action Palette</Typography>\n </View>\n\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.categoryScroll}\n contentContainerStyle={styles.categoryContainer}\n >\n <HStack spacing={8}>\n {categories.map((category) => (\n <TouchableOpacity\n key={category}\n onPress={() => handleCategoryPress(category)}\n activeOpacity={0.8}\n >\n <Badge\n variant={selectedCategory === category ? 'primary' : categoryBadgeVariants[category]}\n size=\"md\"\n >\n {categoryLabels[category]}\n </Badge>\n </TouchableOpacity>\n ))}\n </HStack>\n </ScrollView>\n\n <ScrollView\n style={styles.actionsScroll}\n contentContainerStyle={styles.actionsContainer}\n >\n {filteredActions.length === 0 ? (\n <View style={styles.emptyState}>\n <Typography variant=\"caption\" style={{ opacity: 0.5 }}>\n No actions in this category\n </Typography>\n </View>\n ) : (\n <VStack spacing={8}>\n {filteredActions.map((action) => (\n <TouchableOpacity\n key={action.id}\n onPress={() => handleActionPress(action)}\n activeOpacity={0.8}\n >\n <View\n style={[\n styles.actionItem,\n {\n backgroundColor: theme.colors.surface,\n borderColor: theme.colors.border,\n },\n ]}\n >\n <HStack spacing={12} align=\"center\">\n <View\n style={[\n styles.iconContainer,\n {\n backgroundColor: action.color || theme.colors.primary + '20',\n },\n ]}\n >\n <Typography variant=\"body\">\n {action.icon || categoryIcons[action.category]}\n </Typography>\n </View>\n\n <VStack spacing={2} style={styles.actionContent}>\n <Typography variant=\"caption\" style={{ fontWeight: '600' }}>\n {action.name}\n </Typography>\n {action.description && (\n <Typography variant=\"caption\" style={{ opacity: 0.6 }}>\n {action.description}\n </Typography>\n )}\n </VStack>\n\n <Badge\n variant={categoryBadgeVariants[action.category]}\n size=\"sm\"\n >\n {categoryLabels[action.category]}\n </Badge>\n </HStack>\n </View>\n </TouchableOpacity>\n ))}\n </VStack>\n )}\n </ScrollView>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'column',\n maxHeight: 400,\n },\n header: {\n padding: 12,\n borderBottomWidth: 1,\n borderBottomColor: 'transparent',\n },\n categoryScroll: {\n maxHeight: 50,\n borderBottomWidth: 1,\n borderBottomColor: 'transparent',\n },\n categoryContainer: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n actionsScroll: {\n maxHeight: 300,\n },\n actionsContainer: {\n padding: 12,\n },\n emptyState: {\n padding: 32,\n alignItems: 'center',\n },\n actionItem: {\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n },\n iconContainer: {\n width: 40,\n height: 40,\n borderRadius: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n actionContent: {\n flex: 1,\n },\n});\n\nActionPalette.displayName = 'ActionPalette';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\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 { Card } from '../../../../atoms/Card';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport type ActionTileSize = 'sm' | 'md' | 'lg';\nexport type ActionTileVariant = 'default' | 'selected' | 'disabled' | 'error';\n\nexport interface ActionTileProps {\n id: string;\n name: string;\n icon?: string;\n description?: string;\n category?: string;\n size?: ActionTileSize;\n variant?: ActionTileVariant;\n isDraggable?: boolean;\n params?: Record<string, unknown>;\n onPress?: () => void;\n onLongPress?: () => void;\n onDelete?: () => void;\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\nconst sizeStyles: Record<ActionTileSize, { container: ViewStyle; icon: ViewStyle }> = {\n sm: {\n container: {\n padding: 8,\n minHeight: 60,\n },\n icon: {\n width: 28,\n height: 28,\n borderRadius: 6,\n },\n },\n md: {\n container: {\n padding: 12,\n minHeight: 80,\n },\n icon: {\n width: 36,\n height: 36,\n borderRadius: 8,\n },\n },\n lg: {\n container: {\n padding: 16,\n minHeight: 100,\n },\n icon: {\n width: 44,\n height: 44,\n borderRadius: 10,\n },\n },\n};\n\nconst variantStyles = (\n theme: ReturnType<typeof useTheme>\n): Record<ActionTileVariant, { backgroundColor: string; borderColor: string; opacity: number }> => ({\n default: {\n backgroundColor: theme.colors.surface,\n borderColor: theme.colors.border,\n opacity: 1,\n },\n selected: {\n backgroundColor: theme.colors.primary + '15',\n borderColor: theme.colors.primary,\n opacity: 1,\n },\n disabled: {\n backgroundColor: theme.colors.muted,\n borderColor: theme.colors.border,\n opacity: 0.5,\n },\n error: {\n backgroundColor: theme.colors.error + '15',\n borderColor: theme.colors.error,\n opacity: 1,\n },\n});\n\nexport const ActionTile: React.FC<ActionTileProps> = ({\n id,\n name,\n icon,\n description,\n category,\n size = 'md',\n variant = 'default',\n isDraggable = false,\n params,\n onPress,\n onLongPress,\n onDelete,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const variants = variantStyles(theme);\n const currentVariant = variants[variant];\n const sizeConfig = sizeStyles[size];\n\n const handlePress = () => {\n if (variant !== 'disabled') {\n eventBus.emit('UI:ACTION_TILE_PRESSED', { id, name, params } as EventPayload);\n onPress?.();\n }\n };\n\n const handleLongPress = () => {\n if (variant !== 'disabled') {\n eventBus.emit('UI:ACTION_TILE_LONG_PRESSED', { id, name } as EventPayload);\n onLongPress?.();\n }\n };\n\n const handleDelete = () => {\n eventBus.emit('UI:ACTION_TILE_DELETED', { id } as EventPayload);\n onDelete?.();\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, sizeConfig.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, sizeConfig.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n onLongPress={handleLongPress}\n activeOpacity={variant === 'disabled' ? 1 : 0.8}\n disabled={variant === 'disabled'}\n >\n <Card\n style={[\n styles.container,\n sizeConfig.container,\n {\n backgroundColor: currentVariant.backgroundColor,\n borderColor: currentVariant.borderColor,\n borderWidth: 2,\n opacity: currentVariant.opacity,\n },\n ...(isDraggable ? [styles.draggable] : []),\n ...(style ? [style] : []),\n ]}\n >\n <HStack spacing={12} align=\"center\" style={styles.content}>\n {icon && (\n <View\n style={[\n styles.iconContainer,\n sizeConfig.icon,\n { backgroundColor: theme.colors.primary + '20' },\n ]}\n >\n <Typography variant=\"body\">{icon}</Typography>\n </View>\n )}\n\n <VStack spacing={2} style={styles.textContent}>\n <Typography\n variant={size === 'sm' ? 'caption' : 'body'}\n style={{ fontWeight: '600' }}\n >\n {name}\n </Typography>\n\n {description && size !== 'sm' && (\n <Typography variant=\"caption\" style={{ opacity: 0.6 }}>\n {description}\n </Typography>\n )}\n\n {category && size === 'lg' && (\n <Badge variant=\"default\" size=\"sm\" style={styles.categoryBadge}>\n {category}\n </Badge>\n )}\n </VStack>\n\n {onDelete && variant !== 'disabled' && (\n <TouchableOpacity\n onPress={handleDelete}\n style={styles.deleteButton}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors.error, fontSize: 18 }}>\n ×\n </Typography>\n </TouchableOpacity>\n )}\n\n {isDraggable && (\n <View style={styles.dragHandle}>\n <View style={[styles.dragLine, { backgroundColor: theme.colors.border }]} />\n <View style={[styles.dragLine, { backgroundColor: theme.colors.border }]} />\n <View style={[styles.dragLine, { backgroundColor: theme.colors.border }]} />\n </View>\n )}\n </HStack>\n </Card>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 10,\n },\n content: {\n flex: 1,\n },\n iconContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n textContent: {\n flex: 1,\n },\n categoryBadge: {\n alignSelf: 'flex-start',\n marginTop: 4,\n },\n deleteButton: {\n padding: 4,\n minWidth: 24,\n alignItems: 'center',\n },\n draggable: {\n shadowColor: 'rgba(0,0,0,0.1)',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 1,\n shadowRadius: 4,\n elevation: 3,\n },\n dragHandle: {\n paddingHorizontal: 4,\n gap: 3,\n },\n dragLine: {\n width: 16,\n height: 2,\n borderRadius: 1,\n },\n});\n\nActionTile.displayName = 'ActionTile';\n","import React from 'react';\nimport {\n View,\n ScrollView,\n TouchableOpacity,\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 { Card } from '../../../../atoms/Card';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Button } from '../../../../atoms/Button';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport interface SequenceStep {\n id: string;\n actionId: string;\n actionName: string;\n icon?: string;\n params?: Record<string, unknown>;\n isActive?: boolean;\n}\n\nexport interface SequenceBarProps {\n steps: SequenceStep[];\n currentStep?: number;\n isPlaying?: boolean;\n onStepPress?: (step: SequenceStep, index: number) => void;\n onStepRemove?: (stepId: string, index: number) => void;\n onPlay?: () => void;\n onPause?: () => void;\n onStop?: () => void;\n onClear?: () => void;\n maxSteps?: number;\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 SequenceBar: React.FC<SequenceBarProps> = ({\n steps,\n currentStep = -1,\n isPlaying = false,\n onStepPress,\n onStepRemove,\n onPlay,\n onPause,\n onStop,\n onClear,\n maxSteps = 10,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const scrollRef = React.useRef<ScrollView>(null);\n\n React.useEffect(() => {\n if (currentStep >= 0 && scrollRef.current) {\n const offset = currentStep * 72;\n scrollRef.current.scrollTo({ x: offset, animated: true });\n }\n }, [currentStep]);\n\n const handleStepPress = (step: SequenceStep, index: number) => {\n eventBus.emit('UI:SEQUENCE_STEP_PRESSED', { step, index } as unknown as EventPayload);\n onStepPress?.(step, index);\n };\n\n const handleStepRemove = (stepId: string, index: number) => {\n eventBus.emit('UI:SEQUENCE_STEP_REMOVED', { stepId, index } as EventPayload);\n onStepRemove?.(stepId, index);\n };\n\n const handlePlay = () => {\n eventBus.emit('UI:SEQUENCE_PLAY', { steps } as unknown as EventPayload);\n onPlay?.();\n };\n\n const handlePause = () => {\n eventBus.emit('UI:SEQUENCE_PAUSE', {} as EventPayload);\n onPause?.();\n };\n\n const handleStop = () => {\n eventBus.emit('UI:SEQUENCE_STOP', {} as EventPayload);\n onStop?.();\n };\n\n const handleClear = () => {\n eventBus.emit('UI:SEQUENCE_CLEAR', {} as EventPayload);\n onClear?.();\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading sequence...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={styles.header}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">Sequence</Typography>\n <Badge variant=\"default\" size=\"sm\">\n {steps.length}/{maxSteps}\n </Badge>\n </HStack>\n </View>\n\n <ScrollView\n ref={scrollRef}\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.sequenceScroll}\n contentContainerStyle={styles.sequenceContainer}\n >\n {steps.length === 0 ? (\n <View style={styles.emptyState}>\n <Typography variant=\"caption\" style={{ opacity: 0.5 }}>\n Drag actions here to build a sequence\n </Typography>\n </View>\n ) : (\n <HStack spacing={8}>\n {steps.map((step, index) => (\n <TouchableOpacity\n key={step.id}\n onPress={() => handleStepPress(step, index)}\n activeOpacity={0.8}\n >\n <View\n style={[\n styles.stepCard,\n {\n backgroundColor:\n index === currentStep\n ? theme.colors.primary + '30'\n : step.isActive\n ? theme.colors.surface\n : theme.colors.muted,\n borderColor:\n index === currentStep\n ? theme.colors.primary\n : theme.colors.border,\n borderWidth: index === currentStep ? 2 : 1,\n },\n ]}\n >\n <VStack align=\"center\" spacing={4}>\n <View\n style={[\n styles.stepNumber,\n {\n backgroundColor:\n index === currentStep\n ? theme.colors.primary\n : theme.colors.border,\n },\n ]}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors.card, fontWeight: '700' }}>\n {index + 1}\n </Typography>\n </View>\n\n {step.icon && (\n <Typography variant=\"body\">{step.icon}</Typography>\n )}\n\n <Typography\n variant=\"caption\"\n style={{\n fontWeight: '600',\n textAlign: 'center',\n maxWidth: 60,\n }}\n numberOfLines={1}\n >\n {step.actionName}\n </Typography>\n\n {isPlaying && index === currentStep && (\n <View style={styles.playingIndicator}>\n <View style={[styles.playingDot, { backgroundColor: theme.colors.success }]} />\n </View>\n )}\n </VStack>\n\n {onStepRemove && (\n <TouchableOpacity\n onPress={() => handleStepRemove(step.id, index)}\n style={styles.removeButton}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors.error }}>\n ×\n </Typography>\n </TouchableOpacity>\n )}\n </View>\n </TouchableOpacity>\n ))}\n </HStack>\n )}\n </ScrollView>\n\n <View style={[styles.controls, { borderTopColor: theme.colors.border }]}>\n <HStack spacing={8} justify=\"center\">\n {!isPlaying ? (\n <Button\n variant=\"primary\"\n size=\"sm\"\n onPress={handlePlay}\n disabled={steps.length === 0}\n >\n ▶ Play\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onPress={handlePause}>\n ⏸ Pause\n </Button>\n )}\n\n <Button variant=\"secondary\" size=\"sm\" onPress={handleStop}>\n ⏹ Stop\n </Button>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleClear}\n disabled={steps.length === 0}\n >\n Clear\n </Button>\n </HStack>\n </View>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'column',\n },\n header: {\n padding: 12,\n borderBottomWidth: 1,\n borderBottomColor: 'transparent',\n },\n sequenceScroll: {\n maxHeight: 120,\n paddingVertical: 8,\n },\n sequenceContainer: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n minWidth: '100%',\n },\n emptyState: {\n padding: 32,\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 300,\n },\n stepCard: {\n width: 72,\n minHeight: 90,\n padding: 8,\n borderRadius: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n stepNumber: {\n width: 20,\n height: 20,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n playingIndicator: {\n flexDirection: 'row',\n gap: 2,\n },\n playingDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n removeButton: {\n position: 'absolute',\n top: 2,\n right: 2,\n padding: 4,\n minWidth: 20,\n alignItems: 'center',\n },\n controls: {\n padding: 12,\n borderTopWidth: 1,\n },\n});\n\nSequenceBar.displayName = 'SequenceBar';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\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 { Card } from '../../../../atoms/Card';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport type StateNodeType = 'initial' | 'normal' | 'final' | 'error';\n\nexport interface StateNodeData {\n id: string;\n name: string;\n type: StateNodeType;\n x: number;\n y: number;\n actions?: string[];\n isActive?: boolean;\n}\n\nexport interface StateNodeProps {\n node: StateNodeData;\n isSelected?: boolean;\n isDragging?: boolean;\n onPress?: (node: StateNodeData) => void;\n onLongPress?: (node: StateNodeData) => void;\n onDelete?: (nodeId: string) => void;\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\nconst typeColors = (\n theme: ReturnType<typeof useTheme>\n): Record<StateNodeType, { background: string; border: string; badge: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' }> => ({\n initial: {\n background: theme.colors.success + '20',\n border: theme.colors.success,\n badge: 'success',\n },\n normal: {\n background: theme.colors.surface,\n border: theme.colors.border,\n badge: 'default',\n },\n final: {\n background: theme.colors.primary + '20',\n border: theme.colors.primary,\n badge: 'primary',\n },\n error: {\n background: theme.colors.error + '20',\n border: theme.colors.error,\n badge: 'error',\n },\n});\n\nconst typeLabels: Record<StateNodeType, string> = {\n initial: 'Start',\n normal: 'State',\n final: 'End',\n error: 'Error',\n};\n\nconst typeIcons: Record<StateNodeType, string> = {\n initial: '▶️',\n normal: '⭕',\n final: '🏁',\n error: '⚠️',\n};\n\nexport const StateNode: React.FC<StateNodeProps> = ({\n node,\n isSelected = false,\n isDragging = false,\n onPress,\n onLongPress,\n onDelete,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const colors = typeColors(theme);\n const typeStyle = colors[node.type];\n\n const handlePress = () => {\n eventBus.emit('UI:STATE_NODE_PRESSED', { node } as unknown as EventPayload);\n onPress?.(node);\n };\n\n const handleLongPress = () => {\n eventBus.emit('UI:STATE_NODE_LONG_PRESSED', { node } as unknown as EventPayload);\n onLongPress?.(node);\n };\n\n const handleDelete = () => {\n eventBus.emit('UI:STATE_NODE_DELETED', { nodeId: node.id } as EventPayload);\n onDelete?.(node.id);\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n onLongPress={handleLongPress}\n activeOpacity={0.9}\n >\n <Card\n style={[\n styles.container,\n {\n backgroundColor: typeStyle.background,\n borderColor: isSelected ? theme.colors.primary : typeStyle.border,\n borderWidth: isSelected ? 3 : 2,\n opacity: isDragging ? 0.7 : node.isActive ? 1 : 0.7,\n transform: isDragging ? [{ scale: 1.05 }] : undefined,\n },\n ...(style ? [style] : []),\n ]}\n >\n <VStack spacing={8}>\n <HStack justify=\"space-between\" align=\"center\">\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"body\">{typeIcons[node.type]}</Typography>\n <Badge variant={typeStyle.badge} size=\"sm\">\n {typeLabels[node.type]}\n </Badge>\n </HStack>\n\n {onDelete && node.type !== 'initial' && (\n <TouchableOpacity\n onPress={handleDelete}\n style={styles.deleteButton}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors.error, fontSize: 18 }}>\n ×\n </Typography>\n </TouchableOpacity>\n )}\n </HStack>\n\n <Typography variant=\"body\" style={{ fontWeight: '700', textAlign: 'center' }}>\n {node.name}\n </Typography>\n\n {node.actions && node.actions.length > 0 && (\n <View style={[styles.actionsContainer, { backgroundColor: theme.colors.card }]}>\n <Typography variant=\"caption\" style={{ opacity: 0.6, marginBottom: 4 }}>\n Actions:\n </Typography>\n <HStack spacing={4} style={styles.actionsList}>\n {node.actions.slice(0, 3).map((action, index) => (\n <Badge key={index} variant=\"secondary\" size=\"sm\">\n {action}\n </Badge>\n ))}\n {node.actions.length > 3 && (\n <Badge variant=\"default\" size=\"sm\">\n +{node.actions.length - 3}\n </Badge>\n )}\n </HStack>\n </View>\n )}\n\n {node.isActive && (\n <View style={styles.activeIndicator}>\n <View style={[styles.pulseDot, { backgroundColor: theme.colors.success }]} />\n <Typography variant=\"caption\" style={{ color: theme.colors.success }}>\n Active\n </Typography>\n </View>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n minWidth: 140,\n maxWidth: 200,\n padding: 12,\n borderRadius: 12,\n },\n deleteButton: {\n padding: 4,\n },\n actionsContainer: {\n padding: 8,\n borderRadius: 6,\n marginTop: 4,\n },\n actionsList: {\n flexWrap: 'wrap',\n },\n activeIndicator: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n marginTop: 4,\n },\n pulseDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n});\n\nStateNode.displayName = 'StateNode';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n DimensionValue,\n} from 'react-native';\nimport { useTheme } from '../../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../../../../atoms/Card';\nimport { Badge } from '../../../../atoms/Badge';\nimport { Typography } from '../../../../atoms/Typography';\nimport { HStack, VStack } from '../../../../atoms/Stack';\nimport { LoadingState } from '../../../../molecules/LoadingState';\nimport { ErrorState } from '../../../../molecules/ErrorState';\n\nexport type TransitionType = 'default' | 'conditional' | 'timeout' | 'event';\n\nexport interface TransitionArrowData {\n id: string;\n fromId: string;\n toId: string;\n label?: string;\n type: TransitionType;\n condition?: string;\n timeout?: number;\n eventName?: string;\n}\n\nexport interface TransitionArrowProps {\n transition: TransitionArrowData;\n fromX?: number;\n fromY?: number;\n toX?: number;\n toY?: number;\n isSelected?: boolean;\n isCurved?: boolean;\n onPress?: (transition: TransitionArrowData) => void;\n onDelete?: (transitionId: string) => void;\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\nconst typeColors = (\n theme: ReturnType<typeof useTheme>\n): Record<TransitionType, { color: string; badge: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' }> => ({\n default: {\n color: theme.colors.border,\n badge: 'default',\n },\n conditional: {\n color: theme.colors.warning,\n badge: 'warning',\n },\n timeout: {\n color: theme.colors.primary,\n badge: 'primary',\n },\n event: {\n color: theme.colors.success,\n badge: 'success',\n },\n});\n\nconst typeIcons: Record<TransitionType, string> = {\n default: '→',\n conditional: '?',\n timeout: '⏱',\n event: '⚡',\n};\n\nconst typeLabels: Record<TransitionType, string> = {\n default: 'Auto',\n conditional: 'If',\n timeout: 'Wait',\n event: 'On',\n};\n\nexport const TransitionArrow: React.FC<TransitionArrowProps> = ({\n transition,\n fromX = 0,\n fromY = 0,\n toX = 100,\n toY = 0,\n isSelected = false,\n onPress,\n onDelete,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const colors = typeColors(theme);\n const typeStyle = colors[transition.type];\n\n const handlePress = () => {\n eventBus.emit('UI:TRANSITION_PRESSED', { transition } as unknown as EventPayload);\n onPress?.(transition);\n };\n\n const handleDelete = () => {\n eventBus.emit('UI:TRANSITION_DELETED', { transitionId: transition.id } as EventPayload);\n onDelete?.(transition.id);\n };\n\n const midX = (fromX + toX) / 2;\n const midY = (fromY + toY) / 2;\n\n const angle = Math.atan2(toY - fromY, toX - fromX) * (180 / Math.PI);\n const length = Math.sqrt(Math.pow(toX - fromX, 2) + Math.pow(toY - fromY, 2));\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n left: Math.min(fromX, toX) as DimensionValue,\n top: Math.min(fromY, toY) as DimensionValue,\n width: Math.abs(toX - fromX) || 2,\n height: Math.abs(toY - fromY) || 40,\n },\n style,\n ]}\n >\n <View style={styles.arrowContainer}>\n <View\n style={[\n styles.arrowLine,\n {\n backgroundColor: typeStyle.color,\n width: length,\n height: isSelected ? 3 : 2,\n transform: [{ rotate: `${angle}deg` }],\n },\n ]}\n />\n\n <View\n style={[\n styles.arrowHead,\n {\n borderLeftColor: typeStyle.color,\n transform: [{ rotate: `${angle}deg` }],\n },\n ]}\n />\n\n <Card\n style={[\n styles.labelCard,\n {\n borderColor: isSelected ? theme.colors.primary : typeStyle.color,\n borderWidth: isSelected ? 2 : 1,\n left: midX - Math.min(fromX, toX) - 50,\n top: midY - Math.min(fromY, toY) - 20,\n },\n ]}\n >\n <TouchableOpacity onPress={handlePress}>\n <VStack spacing={4} align=\"center\">\n <HStack spacing={4} align=\"center\">\n <Typography variant=\"caption\">{typeIcons[transition.type]}</Typography>\n <Badge variant={typeStyle.badge} size=\"sm\">\n {typeLabels[transition.type]}\n </Badge>\n </HStack>\n\n {transition.label && (\n <Typography variant=\"caption\" style={{ fontWeight: '600' }}>\n {transition.label}\n </Typography>\n )}\n\n {transition.condition && (\n <Typography variant=\"caption\" style={{ opacity: 0.7, fontSize: 10 }}>\n {transition.condition}\n </Typography>\n )}\n\n {transition.timeout && (\n <Typography variant=\"caption\" style={{ opacity: 0.7, fontSize: 10 }}>\n {transition.timeout}ms\n </Typography>\n )}\n\n {transition.eventName && (\n <Typography variant=\"caption\" style={{ opacity: 0.7, fontSize: 10 }}>\n {transition.eventName}\n </Typography>\n )}\n </VStack>\n </TouchableOpacity>\n\n {onDelete && (\n <TouchableOpacity\n onPress={handleDelete}\n style={styles.deleteButton}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Typography variant=\"caption\" style={{ color: theme.colors.error, fontSize: 14 }}>\n ×\n </Typography>\n </TouchableOpacity>\n )}\n </Card>\n </View>\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n },\n arrowContainer: {\n position: 'relative',\n width: '100%',\n height: '100%',\n },\n arrowLine: {\n position: 'absolute',\n top: '50%',\n left: 0,\n },\n arrowHead: {\n position: 'absolute',\n right: 0,\n top: '50%',\n marginTop: -6,\n width: 0,\n height: 0,\n borderTopWidth: 6,\n borderTopColor: 'transparent',\n borderBottomWidth: 6,\n borderBottomColor: 'transparent',\n borderLeftWidth: 10,\n },\n labelCard: {\n position: 'absolute',\n padding: 8,\n borderRadius: 8,\n minWidth: 100,\n backgroundColor: 'white',\n shadowColor: 'rgba(0,0,0,0.1)',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 1,\n shadowRadius: 4,\n elevation: 3,\n },\n deleteButton: {\n position: 'absolute',\n top: -8,\n right: -8,\n backgroundColor: 'white',\n borderRadius: 10,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n shadowColor: 'rgba(0,0,0,0.1)',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 1,\n shadowRadius: 2,\n elevation: 2,\n },\n});\n\nTransitionArrow.displayName = 'TransitionArrow';\n","import React, { useRef, useState } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n PanResponder,\n GestureResponderEvent,\n PanResponderGestureState,\n Dimensions,\n} from 'react-native';\nimport { useTheme } from '../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../../../atoms/Card';\nimport { Typography } from '../../../atoms/Typography';\nimport { HStack } from '../../../atoms/Stack';\nimport { LoadingState } from '../../../molecules/LoadingState';\nimport { ErrorState } from '../../../molecules/ErrorState';\n\nexport interface PhysicsBody {\n id: string;\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n mass: number;\n color: string;\n isStatic?: boolean;\n}\n\nexport interface PhysicsConstraint {\n id: string;\n bodyAId: string;\n bodyBId: string;\n length: number;\n stiffness: number;\n}\n\nexport interface SimulationCanvasProps {\n bodies: PhysicsBody[];\n constraints?: PhysicsConstraint[];\n width?: number;\n height?: number;\n showGrid?: boolean;\n showVectors?: boolean;\n paused?: boolean;\n onBodyPress?: (body: PhysicsBody) => void;\n onBodyMove?: (bodyId: string, x: number, y: number) => void;\n onCanvasPress?: (x: number, y: number) => void;\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\nconst { width: screenWidth } = Dimensions.get('window');\n\nexport const SimulationCanvas: React.FC<SimulationCanvasProps> = ({\n bodies,\n constraints = [],\n width = screenWidth - 32,\n height = 300,\n showGrid = true,\n showVectors = false,\n paused = false,\n onBodyPress,\n onBodyMove,\n onCanvasPress,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [selectedBodyId, setSelectedBodyId] = useState<string | null>(null);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderGrant: (evt: GestureResponderEvent) => {\n const { locationX, locationY } = evt.nativeEvent;\n handleCanvasPress(locationX, locationY);\n },\n onPanResponderMove: (\n evt: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n if (selectedBodyId) {\n const { moveX, moveY } = gestureState;\n handleBodyMove(selectedBodyId, moveX, moveY);\n }\n },\n onPanResponderRelease: () => {\n setSelectedBodyId(null);\n },\n })\n ).current;\n\n const handleCanvasPress = (x: number, y: number) => {\n const clickedBody = bodies.find((body) => {\n const dx = x - body.x;\n const dy = y - body.y;\n return Math.sqrt(dx * dx + dy * dy) <= body.radius;\n });\n\n if (clickedBody) {\n setSelectedBodyId(clickedBody.id);\n eventBus.emit('UI:PHYSICS_BODY_PRESSED', { body: clickedBody } as unknown as EventPayload);\n onBodyPress?.(clickedBody);\n } else {\n eventBus.emit('UI:PHYSICS_CANVAS_PRESSED', { x, y } as EventPayload);\n onCanvasPress?.(x, y);\n }\n };\n\n const handleBodyMove = (bodyId: string, x: number, y: number) => {\n eventBus.emit('UI:PHYSICS_BODY_MOVED', { bodyId, x, y } as EventPayload);\n onBodyMove?.(bodyId, x, y);\n };\n\n const renderGrid = () => {\n if (!showGrid) return null;\n\n const gridSize = 40;\n const lines = [];\n\n for (let x = 0; x < width; x += gridSize) {\n lines.push(\n <View\n key={`v-${x}`}\n style={[\n styles.gridLine,\n {\n left: x,\n height,\n width: 1,\n backgroundColor: theme.colors.border,\n opacity: 0.3,\n },\n ]}\n />\n );\n }\n\n for (let y = 0; y < height; y += gridSize) {\n lines.push(\n <View\n key={`h-${y}`}\n style={[\n styles.gridLine,\n {\n top: y,\n width,\n height: 1,\n backgroundColor: theme.colors.border,\n opacity: 0.3,\n },\n ]}\n />\n );\n }\n\n return lines;\n };\n\n const renderConstraints = () => {\n return constraints.map((constraint) => {\n const bodyA = bodies.find((b) => b.id === constraint.bodyAId);\n const bodyB = bodies.find((b) => b.id === constraint.bodyBId);\n\n if (!bodyA || !bodyB) return null;\n\n const dx = bodyB.x - bodyA.x;\n const dy = bodyB.y - bodyA.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n const angle = Math.atan2(dy, dx) * (180 / Math.PI);\n\n return (\n <View\n key={constraint.id}\n style={[\n styles.constraint,\n {\n left: bodyA.x,\n top: bodyA.y,\n width: distance,\n height: 2,\n backgroundColor: theme.colors.primary,\n opacity: constraint.stiffness,\n transform: [{ rotate: `${angle}deg` }],\n },\n ]}\n />\n );\n });\n };\n\n const renderBodies = () => {\n return bodies.map((body) => (\n <View\n key={body.id}\n style={[\n styles.body,\n {\n left: body.x - body.radius,\n top: body.y - body.radius,\n width: body.radius * 2,\n height: body.radius * 2,\n backgroundColor: body.color,\n borderColor: selectedBodyId === body.id ? theme.colors.primary : theme.colors.border,\n borderWidth: selectedBodyId === body.id ? 3 : 1,\n opacity: body.isStatic ? 0.7 : 1,\n },\n ]}\n >\n {showVectors && !body.isStatic && (\n <View\n style={[\n styles.velocityVector,\n {\n width: Math.min(Math.sqrt(body.vx * body.vx + body.vy * body.vy) * 5, 40),\n backgroundColor: theme.colors.warning,\n transform: [{ rotate: `${Math.atan2(body.vy, body.vx)}rad` }],\n },\n ]}\n />\n )}\n {body.isStatic && (\n <View style={styles.staticIndicator}>\n <Typography variant=\"caption\" style={{ fontSize: 10, color: theme.colors['muted-foreground'] }}>\n 📌\n </Typography>\n </View>\n )}\n </View>\n ));\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, { width, height }, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading simulation...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, { width, height }, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={styles.header}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">Physics Simulation</Typography>\n <HStack spacing={8}>\n <Typography variant=\"caption\" style={{ opacity: 0.6 }}>\n Bodies: {bodies.length}\n </Typography>\n {paused && (\n <Typography variant=\"caption\" style={{ color: theme.colors.warning }}>\n ⏸ Paused\n </Typography>\n )}\n </HStack>\n </HStack>\n </View>\n\n <View\n style={[\n styles.canvas,\n {\n width,\n height,\n backgroundColor: theme.colors.background,\n },\n ]}\n {...panResponder.panHandlers}\n >\n {renderGrid()}\n {renderConstraints()}\n {renderBodies()}\n </View>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n padding: 12,\n },\n canvas: {\n position: 'relative',\n overflow: 'hidden',\n },\n gridLine: {\n position: 'absolute',\n },\n body: {\n position: 'absolute',\n borderRadius: 999,\n justifyContent: 'center',\n alignItems: 'center',\n },\n constraint: {\n position: 'absolute',\n transformOrigin: 'left center',\n },\n velocityVector: {\n height: 2,\n position: 'absolute',\n right: -40,\n top: '50%',\n },\n staticIndicator: {\n position: 'absolute',\n top: -8,\n right: -8,\n },\n});\n\nSimulationCanvas.displayName = 'SimulationCanvas';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\n ScrollView,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../../../providers/ThemeContext';\nimport { useEventBus } from '../../../../hooks/useEventBus';\nimport { Card } from '../../../atoms/Card';\nimport { Badge } from '../../../atoms/Badge';\nimport { Button } from '../../../atoms/Button';\nimport { Typography } from '../../../atoms/Typography';\nimport { HStack, VStack } from '../../../atoms/Stack';\nimport { LoadingState } from '../../../molecules/LoadingState';\nimport { ErrorState } from '../../../molecules/ErrorState';\n\nexport type SimulationTool = 'select' | 'add-circle' | 'add-box' | 'add-static' | 'constraint' | 'delete';\n\nexport interface SimulationParameter {\n id: string;\n name: string;\n value: number;\n min: number;\n max: number;\n step: number;\n unit?: string;\n}\n\nexport interface SimulationControlsProps {\n isPlaying?: boolean;\n speed?: number;\n selectedTool?: SimulationTool;\n parameters?: SimulationParameter[];\n showGrid?: boolean;\n showVectors?: boolean;\n onPlay?: () => void;\n onPause?: () => void;\n onReset?: () => void;\n onStep?: () => void;\n onSpeedChange?: (speed: number) => void;\n onToolSelect?: (tool: SimulationTool) => void;\n onParameterChange?: (paramId: string, value: number) => void;\n onToggleGrid?: () => void;\n onToggleVectors?: () => void;\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\nconst tools: Array<{ id: SimulationTool; label: string; icon: string }> = [\n { id: 'select', label: 'Select', icon: '👆' },\n { id: 'add-circle', label: 'Circle', icon: '⭕' },\n { id: 'add-box', label: 'Box', icon: '⬜' },\n { id: 'add-static', label: 'Static', icon: '📌' },\n { id: 'constraint', label: 'Link', icon: '🔗' },\n { id: 'delete', label: 'Delete', icon: '🗑️' },\n];\n\nconst speedOptions = [0.25, 0.5, 1, 1.5, 2];\n\nexport const SimulationControls: React.FC<SimulationControlsProps> = ({\n isPlaying = false,\n speed = 1,\n selectedTool = 'select',\n parameters = [],\n showGrid = true,\n showVectors = false,\n onPlay,\n onPause,\n onReset,\n onStep,\n onSpeedChange,\n onToolSelect,\n onParameterChange,\n onToggleGrid,\n onToggleVectors,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePlay = () => {\n eventBus.emit('UI:SIMULATION_PLAY', {});\n onPlay?.();\n };\n\n const handlePause = () => {\n eventBus.emit('UI:SIMULATION_PAUSE', {});\n onPause?.();\n };\n\n const handleReset = () => {\n eventBus.emit('UI:SIMULATION_RESET', {});\n onReset?.();\n };\n\n const handleStep = () => {\n eventBus.emit('UI:SIMULATION_STEP', {});\n onStep?.();\n };\n\n const handleSpeedChange = (newSpeed: number) => {\n eventBus.emit('UI:SIMULATION_SPEED_CHANGED', { speed: newSpeed });\n onSpeedChange?.(newSpeed);\n };\n\n const handleToolSelect = (tool: SimulationTool) => {\n eventBus.emit('UI:SIMULATION_TOOL_SELECTED', { tool });\n onToolSelect?.(tool);\n };\n\n const handleParameterChange = (paramId: string, value: number) => {\n eventBus.emit('UI:SIMULATION_PARAMETER_CHANGED', { paramId, value });\n onParameterChange?.(paramId, value);\n };\n\n const handleToggleGrid = () => {\n eventBus.emit('UI:SIMULATION_TOGGLE_GRID', { showGrid: !showGrid });\n onToggleGrid?.();\n };\n\n const handleToggleVectors = () => {\n eventBus.emit('UI:SIMULATION_TOGGLE_VECTORS', { showVectors: !showVectors });\n onToggleVectors?.();\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading controls...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <View style={styles.section}>\n <Typography variant=\"caption\" style={styles.sectionTitle}>\n Playback\n </Typography>\n <HStack spacing={8}>\n {!isPlaying ? (\n <Button variant=\"primary\" size=\"sm\" onPress={handlePlay} style={styles.playButton}>\n ▶ Play\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onPress={handlePause} style={styles.playButton}>\n ⏸ Pause\n </Button>\n )}\n <Button variant=\"secondary\" size=\"sm\" onPress={handleStep}>\n ⏭ Step\n </Button>\n <Button variant=\"ghost\" size=\"sm\" onPress={handleReset}>\n ↺ Reset\n </Button>\n </HStack>\n </View>\n\n <View style={styles.section}>\n <Typography variant=\"caption\" style={styles.sectionTitle}>\n Speed\n </Typography>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={8}>\n {speedOptions.map((s) => (\n <TouchableOpacity\n key={s}\n onPress={() => handleSpeedChange(s)}\n activeOpacity={0.8}\n >\n <Badge variant={speed === s ? 'primary' : 'default'} size=\"md\">\n {s}x\n </Badge>\n </TouchableOpacity>\n ))}\n </HStack>\n </ScrollView>\n </View>\n\n <View style={styles.section}>\n <Typography variant=\"caption\" style={styles.sectionTitle}>\n Tools\n </Typography>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={8}>\n {tools.map((tool) => (\n <TouchableOpacity\n key={tool.id}\n onPress={() => handleToolSelect(tool.id)}\n activeOpacity={0.8}\n >\n <View\n style={[\n styles.toolButton,\n {\n backgroundColor:\n selectedTool === tool.id\n ? theme.colors.primary + '20'\n : theme.colors.surface,\n borderColor:\n selectedTool === tool.id\n ? theme.colors.primary\n : theme.colors.border,\n },\n ]}\n >\n <Typography variant=\"body\">{tool.icon}</Typography>\n <Typography variant=\"caption\" style={{ fontSize: 10 }}>\n {tool.label}\n </Typography>\n </View>\n </TouchableOpacity>\n ))}\n </HStack>\n </ScrollView>\n </View>\n\n <View style={styles.section}>\n <Typography variant=\"caption\" style={styles.sectionTitle}>\n View Options\n </Typography>\n <HStack spacing={8}>\n <TouchableOpacity onPress={handleToggleGrid} activeOpacity={0.8}>\n <Badge variant={showGrid ? 'primary' : 'default'} size=\"md\">\n {showGrid ? '⊞ Grid On' : '⊞ Grid Off'}\n </Badge>\n </TouchableOpacity>\n <TouchableOpacity onPress={handleToggleVectors} activeOpacity={0.8}>\n <Badge variant={showVectors ? 'primary' : 'default'} size=\"md\">\n {showVectors ? '⇢ Vectors On' : '⇢ Vectors Off'}\n </Badge>\n </TouchableOpacity>\n </HStack>\n </View>\n\n {parameters.length > 0 && (\n <View style={styles.section}>\n <Typography variant=\"caption\" style={styles.sectionTitle}>\n Parameters\n </Typography>\n <VStack spacing={12}>\n {parameters.map((param) => (\n <View key={param.id}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"caption\">{param.name}</Typography>\n <Typography variant=\"caption\" style={{ opacity: 0.7 }}>\n {param.value.toFixed(2)}{param.unit || ''}\n </Typography>\n </HStack>\n <View style={styles.sliderContainer}>\n <View\n style={[\n styles.sliderTrack,\n { backgroundColor: theme.colors.border },\n ]}\n >\n <View\n style={[\n styles.sliderFill,\n {\n backgroundColor: theme.colors.primary,\n width: `${((param.value - param.min) / (param.max - param.min)) * 100}%`,\n },\n ]}\n />\n </View>\n <HStack justify=\"space-between\">\n <TouchableOpacity\n onPress={() => handleParameterChange(param.id, Math.max(param.min, param.value - param.step))}\n style={styles.sliderButton}\n >\n <Typography variant=\"caption\">-</Typography>\n </TouchableOpacity>\n <TouchableOpacity\n onPress={() => handleParameterChange(param.id, Math.min(param.max, param.value + param.step))}\n style={styles.sliderButton}\n >\n <Typography variant=\"caption\">+</Typography>\n </TouchableOpacity>\n </HStack>\n </View>\n </View>\n ))}\n </VStack>\n </View>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n section: {\n gap: 8,\n },\n sectionTitle: {\n opacity: 0.6,\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n },\n playButton: {\n minWidth: 80,\n },\n toolButton: {\n padding: 8,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: 'center',\n minWidth: 60,\n },\n sliderContainer: {\n marginTop: 4,\n },\n sliderTrack: {\n height: 4,\n borderRadius: 2,\n marginBottom: 8,\n },\n sliderFill: {\n height: '100%',\n borderRadius: 2,\n },\n sliderButton: {\n padding: 4,\n minWidth: 24,\n alignItems: 'center',\n },\n});\n\nSimulationControls.displayName = 'SimulationControls';\n","import React, { useMemo } from 'react';\nimport {\n View,\n ScrollView,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../../../providers/ThemeContext';\nimport { Card } from '../../../atoms/Card';\nimport { Badge } from '../../../atoms/Badge';\nimport { Typography } from '../../../atoms/Typography';\nimport { HStack } from '../../../atoms/Stack';\nimport { LoadingState } from '../../../molecules/LoadingState';\nimport { ErrorState } from '../../../molecules/ErrorState';\n\nexport type GraphType = 'position' | 'velocity' | 'acceleration' | 'energy';\n\nexport interface DataPoint {\n x: number;\n y: number;\n timestamp: number;\n}\n\nexport interface GraphSeries {\n id: string;\n label: string;\n color: string;\n data: DataPoint[];\n}\n\nexport interface SimulationGraphProps {\n series: GraphSeries[];\n type?: GraphType;\n width?: number;\n height?: number;\n maxPoints?: number;\n showLegend?: boolean;\n showGrid?: boolean;\n yMin?: number;\n yMax?: number;\n autoScale?: boolean;\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\nconst typeLabels: Record<GraphType, string> = {\n position: 'Position',\n velocity: 'Velocity',\n acceleration: 'Acceleration',\n energy: 'Energy',\n};\n\nconst typeUnits: Record<GraphType, string> = {\n position: 'px',\n velocity: 'px/s',\n acceleration: 'px/s²',\n energy: 'J',\n};\n\nexport const SimulationGraph: React.FC<SimulationGraphProps> = ({\n series,\n type = 'position',\n width = 350,\n height = 200,\n maxPoints = 100,\n showLegend = true,\n showGrid = true,\n yMin,\n yMax,\n autoScale = true,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const { minY, maxY, range } = useMemo(() => {\n if (!autoScale && yMin !== undefined && yMax !== undefined) {\n return { minY: yMin, maxY: yMax, range: yMax - yMin };\n }\n\n let min = Infinity;\n let max = -Infinity;\n\n series.forEach((s) => {\n s.data.forEach((point) => {\n min = Math.min(min, point.y);\n max = Math.max(max, point.y);\n });\n });\n\n if (min === Infinity) {\n min = 0;\n max = 100;\n }\n\n const padding = (max - min) * 0.1;\n return {\n minY: min - padding,\n maxY: max + padding,\n range: max - min + padding * 2,\n };\n }, [series, yMin, yMax, autoScale]);\n\n const renderGrid = () => {\n if (!showGrid) return null;\n\n const lines = [];\n const gridCount = 5;\n\n for (let i = 0; i <= gridCount; i++) {\n const y = (i / gridCount) * height;\n const value = maxY - (i / gridCount) * range;\n\n lines.push(\n <View key={`h-${i}`}>\n <View\n style={[\n styles.gridLine,\n {\n top: y,\n width,\n backgroundColor: theme.colors.border,\n opacity: 0.3,\n },\n ]}\n />\n <Typography\n variant=\"caption\"\n style={[\n styles.gridLabel,\n { top: y - 8, color: theme.colors['muted-foreground'] },\n ]}\n >\n {value.toFixed(1)}\n </Typography>\n </View>\n );\n }\n\n return lines;\n };\n\n const renderSeries = () => {\n return series.map((s) => {\n const limitedData = s.data.slice(-maxPoints);\n if (limitedData.length < 2) return null;\n\n const xStep = width / (maxPoints - 1);\n\n return (\n <View key={s.id} style={styles.seriesContainer}>\n <View style={[styles.area, { width, height }]}>\n <View\n style={[\n styles.areaFill,\n {\n backgroundColor: s.color + '20',\n width,\n height,\n },\n ]}\n />\n </View>\n <View style={[styles.lineContainer, { width, height }]}>\n {limitedData.map((point, index) => {\n if (index === 0) return null;\n\n const x1 = (index - 1) * xStep;\n const y1 = height - ((limitedData[index - 1].y - minY) / range) * height;\n const x2 = index * xStep;\n const y2 = height - ((point.y - minY) / range) * height;\n\n const length = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n const angle = Math.atan2(y2 - y1, x2 - x1) * (180 / Math.PI);\n\n return (\n <View\n key={`${s.id}-line-${index}`}\n style={[\n styles.line,\n {\n backgroundColor: s.color,\n width: length,\n height: 2,\n left: x1,\n top: y1,\n transform: [{ rotate: `${angle}deg` }],\n },\n ]}\n />\n );\n })}\n </View>\n {limitedData.map((point, index) => {\n const x = index * xStep;\n const y = height - ((point.y - minY) / range) * height;\n\n return (\n <View\n key={`${s.id}-point-${index}`}\n style={[\n styles.point,\n {\n backgroundColor: s.color,\n left: x - 3,\n top: y - 3,\n },\n ]}\n />\n );\n })}\n </View>\n );\n });\n };\n\n const renderLegend = () => {\n if (!showLegend || series.length === 0) return null;\n\n return (\n <View style={styles.legend}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={12}>\n {series.map((s) => {\n const latestValue = s.data[s.data.length - 1]?.y;\n return (\n <HStack key={s.id} spacing={6} align=\"center\">\n <View\n style={[\n styles.legendColor,\n { backgroundColor: s.color },\n ]}\n />\n <Typography variant=\"caption\" style={{ fontWeight: '600' }}>\n {s.label}\n </Typography>\n {latestValue !== undefined && (\n <Badge variant=\"default\" size=\"sm\">\n {latestValue.toFixed(2)} {typeUnits[type]}\n </Badge>\n )}\n </HStack>\n );\n })}\n </HStack>\n </ScrollView>\n </View>\n );\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading graph...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <View style={styles.header}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">{typeLabels[type]}</Typography>\n <Typography variant=\"caption\" style={{ opacity: 0.6 }}>\n {typeUnits[type]}\n </Typography>\n </HStack>\n </View>\n\n <View style={[styles.graphContainer, { width, height }]}>\n {renderGrid()}\n {renderSeries()}\n </View>\n\n {renderLegend()}\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n padding: 12,\n borderBottomWidth: 1,\n borderBottomColor: 'transparent',\n },\n graphContainer: {\n position: 'relative',\n overflow: 'hidden',\n },\n gridLine: {\n position: 'absolute',\n height: 1,\n },\n gridLabel: {\n position: 'absolute',\n left: 4,\n fontSize: 10,\n },\n seriesContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n },\n area: {\n position: 'absolute',\n },\n areaFill: {\n opacity: 0.2,\n },\n lineContainer: {\n position: 'absolute',\n },\n line: {\n position: 'absolute',\n transformOrigin: 'left center',\n },\n point: {\n position: 'absolute',\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n legend: {\n padding: 12,\n borderTopWidth: 1,\n borderTopColor: 'transparent',\n },\n legendColor: {\n width: 12,\n height: 12,\n borderRadius: 2,\n },\n});\n\nSimulationGraph.displayName = 'SimulationGraph';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack } from '../../atoms/Stack';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport type { EventPayload } from '../../../types';\n\n\nexport interface BookChapterViewProps {\n /** Chapter title */\n title: string;\n /** Chapter content - can be text or React nodes */\n content: string | React.ReactNode;\n /** Chapter number */\n chapterNumber?: number;\n /** Optional subtitle */\n subtitle?: string;\n /** Additional 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 emitted when chapter is viewed */\n viewEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nexport const BookChapterView: React.FC<BookChapterViewProps> = ({\n title,\n content,\n chapterNumber,\n subtitle,\n style,\n isLoading,\n error,\n viewEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n React.useEffect(() => {\n if (viewEvent) {\n eventBus.emit(`UI:${viewEvent}`, { ...actionPayload, title, chapterNumber });\n }\n }, [viewEvent, title, chapterNumber, actionPayload, eventBus]);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading chapter...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <ScrollView\n style={[styles.container, style]}\n contentContainerStyle={styles.contentContainer}\n showsVerticalScrollIndicator={true}\n >\n <VStack spacing={theme.spacing[4]}>\n {/* Chapter Header */}\n <View style={styles.header}>\n {chapterNumber !== undefined && (\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n >\n Chapter {chapterNumber}\n </Typography>\n )}\n <Typography variant=\"h2\">{title}</Typography>\n {subtitle && (\n <Typography\n variant=\"body\"\n color={theme.colors['muted-foreground']}\n >\n {subtitle}\n </Typography>\n )}\n </View>\n\n {/* Chapter Content */}\n <View style={styles.content}>\n {typeof content === 'string' ? (\n <Typography variant=\"body\" style={styles.textContent}>\n {content}\n </Typography>\n ) : (\n content\n )}\n </View>\n </VStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n contentContainer: {\n padding: 16,\n },\n header: {\n marginBottom: 8,\n },\n content: {\n marginTop: 8,\n },\n textContent: {\n lineHeight: 28,\n },\n});\n\nBookChapterView.displayName = 'BookChapterView';\n","import React from 'react';\nimport { View, Image, StyleSheet, ViewStyle, ImageStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack, HStack } from '../../atoms/Stack';\nimport { Card } from '../../atoms/Card';\nimport { Badge } from '../../atoms/Badge';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport type { EventPayload } from '../../../types';\n\n\nexport interface BookCoverPageProps {\n /** Book title */\n title: string;\n /** Book author */\n author?: string;\n /** Book cover image URL */\n coverImage?: string;\n /** Book description/summary */\n description?: string;\n /** Publication year */\n year?: number | string;\n /** Genre or category */\n genre?: string;\n /** Edition info */\n edition?: string;\n /** Publisher info */\n publisher?: string;\n /** Additional styles */\n style?: ViewStyle;\n /** Cover image style */\n coverStyle?: ImageStyle;\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 emitted when cover is tapped */\n selectEvent?: string;\n /** Event emitted when author is tapped */\n authorEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nexport const BookCoverPage: React.FC<BookCoverPageProps> = ({\n title,\n author,\n coverImage,\n description,\n year,\n genre,\n edition,\n publisher,\n style,\n coverStyle,\n isLoading,\n error,\n selectEvent,\n authorEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n // Cover press handler - currently using Card's action prop instead\n // const handleCoverPress = () => {\n // if (selectEvent) {\n // eventBus.emit(`UI:${selectEvent}`, { ...actionPayload, title, author });\n // }\n // };\n\n const handleAuthorPress = () => {\n if (authorEvent) {\n eventBus.emit(`UI:${authorEvent}`, { ...actionPayload, author });\n }\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading book...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <Card\n style={[styles.container, ...(style ? [style] : [])]}\n padding=\"lg\"\n action={selectEvent}\n actionPayload={actionPayload}\n >\n <VStack align=\"center\" spacing={theme.spacing[6]}>\n {/* Cover Image */}\n {coverImage ? (\n <Image\n source={{ uri: coverImage }}\n style={[styles.coverImage, coverStyle]}\n resizeMode=\"cover\"\n />\n ) : (\n <View style={[styles.coverPlaceholder, { backgroundColor: theme.colors.muted }]}>\n <Typography variant=\"h1\" color={theme.colors['muted-foreground']}>\n 📚\n </Typography>\n </View>\n )}\n\n {/* Book Info */}\n <VStack align=\"center\" spacing={theme.spacing[2]}>\n <Typography variant=\"h2\" align=\"center\">\n {title}\n </Typography>\n\n {author && (\n <Typography\n variant=\"body\"\n color={theme.colors['muted-foreground']}\n align=\"center\"\n >\n by{' '}\n <Typography\n variant=\"body\"\n color={theme.colors.primary}\n onPress={handleAuthorPress}\n >\n {author}\n </Typography>\n </Typography>\n )}\n\n {/* Metadata */}\n <HStack spacing={theme.spacing[2]} style={styles.metadata}>\n {year && (\n <Badge variant=\"secondary\">{year}</Badge>\n )}\n {genre && (\n <Badge variant=\"default\">{genre}</Badge>\n )}\n {edition && (\n <Badge variant=\"secondary\">{edition}</Badge>\n )}\n </HStack>\n\n {publisher && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {publisher}\n </Typography>\n )}\n </VStack>\n\n {/* Description */}\n {description && (\n <Typography\n variant=\"body\"\n color={theme.colors['muted-foreground']}\n align=\"center\"\n style={styles.description}\n >\n {description}\n </Typography>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n coverImage: {\n width: 200,\n height: 300,\n borderRadius: 8,\n },\n coverPlaceholder: {\n width: 200,\n height: 300,\n borderRadius: 8,\n justifyContent: 'center',\n alignItems: 'center',\n },\n metadata: {\n marginTop: 8,\n flexWrap: 'wrap',\n justifyContent: 'center',\n },\n description: {\n marginTop: 16,\n lineHeight: 24,\n },\n});\n\nBookCoverPage.displayName = 'BookCoverPage';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Typography } from '../../atoms/Typography';\nimport { Button } from '../../atoms/Button';\nimport { ProgressBar } from '../../atoms/ProgressBar';\nimport { HStack, VStack } from '../../atoms/Stack';\nimport { Icon } from '../../atoms/Icon';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport type { EventPayload } from '../../../types';\n\n\nexport interface BookNavBarProps {\n /** Current chapter number */\n currentChapter: number;\n /** Total number of chapters */\n totalChapters: number;\n /** Current page number */\n currentPage?: number;\n /** Total number of pages */\n totalPages?: number;\n /** Reading progress percentage (0-100) */\n progress?: number;\n /** Whether previous chapter is available */\n hasPrevious?: boolean;\n /** Whether next chapter is available */\n hasNext?: boolean;\n /** Whether to show page numbers */\n showPageNumbers?: boolean;\n /** Whether to show chapter list button */\n showTocButton?: boolean;\n /** Additional 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 emitted when previous chapter is requested */\n previousEvent?: string;\n /** Event emitted when next chapter is requested */\n nextEvent?: string;\n /** Event emitted when TOC is requested */\n tocEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nexport const BookNavBar: React.FC<BookNavBarProps> = ({\n currentChapter,\n totalChapters,\n currentPage,\n totalPages,\n progress,\n hasPrevious = true,\n hasNext = true,\n showPageNumbers = true,\n showTocButton = true,\n style,\n isLoading,\n error,\n previousEvent,\n nextEvent,\n tocEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePrevious = () => {\n if (previousEvent && hasPrevious) {\n eventBus.emit(`UI:${previousEvent}`, {\n ...actionPayload,\n currentChapter,\n direction: 'previous',\n });\n }\n };\n\n const handleNext = () => {\n if (nextEvent && hasNext) {\n eventBus.emit(`UI:${nextEvent}`, {\n ...actionPayload,\n currentChapter,\n direction: 'next',\n });\n }\n };\n\n const handleToc = () => {\n if (tocEvent) {\n eventBus.emit(`UI:${tocEvent}`, { ...actionPayload, currentChapter });\n }\n };\n\n // Calculate progress from current position if not provided\n const calculatedProgress = progress ??\n (totalChapters > 0 ? ((currentChapter - 1) / totalChapters) * 100 : 0);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading navigation...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.card }, style]}>\n <VStack spacing={theme.spacing[3]}>\n {/* Progress Bar */}\n <ProgressBar\n progress={calculatedProgress}\n size=\"sm\"\n trackStyle={{ backgroundColor: theme.colors.muted }}\n fillStyle={{ backgroundColor: theme.colors.primary }}\n />\n\n {/* Navigation Controls */}\n <HStack justify=\"space-between\" align=\"center\" style={styles.controls}>\n {/* Previous Button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handlePrevious}\n disabled={!hasPrevious}\n actionPayload={actionPayload}\n >\n <HStack spacing={theme.spacing[1]} align=\"center\">\n <Icon\n name=\"chevron-left\"\n size={16}\n color={hasPrevious ? theme.colors.primary : theme.colors['muted-foreground']}\n />\n <Typography\n variant=\"caption\"\n color={hasPrevious ? theme.colors.primary : theme.colors['muted-foreground']}\n >\n Previous\n </Typography>\n </HStack>\n </Button>\n\n {/* Center Info */}\n <VStack align=\"center\" spacing={theme.spacing[1]}>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n Chapter {currentChapter} of {totalChapters}\n </Typography>\n {showPageNumbers && currentPage !== undefined && totalPages !== undefined && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n Page {currentPage} of {totalPages}\n </Typography>\n )}\n </VStack>\n\n {/* Next Button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleNext}\n disabled={!hasNext}\n actionPayload={actionPayload}\n >\n <HStack spacing={theme.spacing[1]} align=\"center\">\n <Typography\n variant=\"caption\"\n color={hasNext ? theme.colors.primary : theme.colors['muted-foreground']}\n >\n Next\n </Typography>\n <Icon\n name=\"chevron-right\"\n size={16}\n color={hasNext ? theme.colors.primary : theme.colors['muted-foreground']}\n />\n </HStack>\n </Button>\n </HStack>\n\n {/* TOC Button */}\n {showTocButton && tocEvent && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onPress={handleToc}\n action={tocEvent}\n actionPayload={actionPayload}\n style={styles.tocButton}\n >\n <HStack spacing={theme.spacing[1]} align=\"center\">\n <Icon name=\"menu\" size={14} color={theme.colors['secondary-foreground']} />\n <Typography variant=\"caption\">Table of Contents</Typography>\n </HStack>\n </Button>\n )}\n </VStack>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n borderTopWidth: 1,\n borderTopColor: '#e2e8f0',\n },\n controls: {\n paddingHorizontal: 8,\n },\n tocButton: {\n alignSelf: 'center',\n minWidth: 150,\n },\n});\n\nBookNavBar.displayName = 'BookNavBar';\n","import React from 'react';\nimport {\n View,\n FlatList,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Typography } from '../../atoms/Typography';\nimport { VStack, HStack } from '../../atoms/Stack';\nimport { Card } from '../../atoms/Card';\nimport { Divider } from '../../atoms/Divider';\nimport { Icon } from '../../atoms/Icon';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport { EmptyState } from '../../molecules/EmptyState';\nimport type { EventPayload } from '../../../types';\n\n\nexport interface BookChapter {\n id: string;\n title: string;\n number?: number;\n pageNumber?: number;\n isLocked?: boolean;\n isCompleted?: boolean;\n}\n\nexport interface BookTableOfContentsProps {\n /** Array of chapters */\n chapters: BookChapter[];\n /** Currently active chapter ID */\n activeChapterId?: string;\n /** Book title */\n bookTitle?: string;\n /** Additional 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 emitted when a chapter is selected */\n selectEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nexport const BookTableOfContents: React.FC<BookTableOfContentsProps> = ({\n chapters,\n activeChapterId,\n bookTitle,\n style,\n isLoading,\n error,\n selectEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleChapterPress = (chapter: BookChapter) => {\n if (chapter.isLocked) return;\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, {\n ...actionPayload,\n chapterId: chapter.id,\n chapterNumber: chapter.number,\n title: chapter.title,\n });\n }\n };\n\n const renderChapter = ({ item, index }: { item: BookChapter; index: number }) => {\n const isActive = item.id === activeChapterId;\n const showDivider = index < chapters.length - 1;\n\n return (\n <View>\n <TouchableOpacity\n onPress={() => handleChapterPress(item)}\n disabled={item.isLocked}\n activeOpacity={0.7}\n style={[\n styles.chapterItem,\n isActive && { backgroundColor: theme.colors.primary + '10' },\n item.isLocked && styles.lockedItem,\n ]}\n >\n <HStack justify=\"space-between\" align=\"center\">\n <HStack spacing={theme.spacing[3]} align=\"center\" style={styles.chapterInfo}>\n {/* Chapter Number or Status Icon */}\n <View style={styles.numberContainer}>\n {item.isCompleted ? (\n <Icon name=\"check\" size={16} color={theme.colors.success} />\n ) : item.isLocked ? (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n 🔒\n </Typography>\n ) : (\n <Typography\n variant=\"caption\"\n color={isActive ? theme.colors.primary : theme.colors['muted-foreground']}\n >\n {item.number || index + 1}\n </Typography>\n )}\n </View>\n\n {/* Chapter Title */}\n <VStack spacing={theme.spacing[1]}>\n <Typography\n variant=\"body\"\n color={\n item.isLocked\n ? theme.colors['muted-foreground']\n : isActive\n ? theme.colors.primary\n : theme.colors.foreground\n }\n >\n {item.title}\n </Typography>\n {item.pageNumber !== undefined && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n Page {item.pageNumber}\n </Typography>\n )}\n </VStack>\n </HStack>\n\n {/* Active Indicator */}\n {isActive && (\n <Icon name=\"chevron-right\" size={16} color={theme.colors.primary} />\n )}\n </HStack>\n </TouchableOpacity>\n\n {showDivider && <Divider thickness={0.5} />}\n </View>\n );\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading table of contents...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (chapters.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState message=\"No chapters available\" icon={<Typography variant=\"h2\">📑</Typography>} />\n </View>\n );\n }\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]} padding=\"md\">\n <VStack spacing={theme.spacing[4]}>\n {/* Header */}\n {bookTitle && (\n <View style={styles.header}>\n <Typography variant=\"h3\" align=\"center\">\n {bookTitle}\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']} align=\"center\">\n Table of Contents\n </Typography>\n </View>\n )}\n\n {/* Chapter List */}\n <FlatList\n data={chapters}\n renderItem={renderChapter}\n keyExtractor={(item) => item.id}\n showsVerticalScrollIndicator={true}\n contentContainerStyle={styles.listContent}\n />\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n paddingBottom: 8,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n },\n listContent: {\n paddingVertical: 8,\n },\n chapterItem: {\n paddingVertical: 12,\n paddingHorizontal: 8,\n borderRadius: 8,\n },\n lockedItem: {\n opacity: 0.6,\n },\n chapterInfo: {\n flex: 1,\n },\n numberContainer: {\n width: 28,\n height: 28,\n borderRadius: 14,\n backgroundColor: '#f1f5f9',\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nBookTableOfContents.displayName = 'BookTableOfContents';\n","import React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle, Modal } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { Typography } from '../../atoms/Typography';\n\nimport { Button } from '../../atoms/Button';\nimport { LoadingState } from '../../molecules/LoadingState';\nimport { ErrorState } from '../../molecules/ErrorState';\nimport { EmptyState } from '../../molecules/EmptyState';\nimport { BookChapterView } from './BookChapterView';\nimport { BookCoverPage, BookCoverPageProps } from './BookCoverPage';\nimport { BookNavBar } from './BookNavBar';\nimport { BookTableOfContents, BookChapter } from './BookTableOfContents';\nimport type { EventPayload } from '../../../types';\n\n\nexport interface BookViewerProps {\n /** Book metadata */\n book: Omit<BookCoverPageProps, 'isLoading' | 'error' | 'entity' | 'selectEvent' | 'authorEvent' | 'actionPayload' | 'style'>;\n /** Array of chapters */\n chapters: BookChapter[];\n /** Currently active chapter index (0-based) */\n currentChapterIndex?: number;\n /** Reading progress percentage (0-100) */\n progress?: number;\n /** Additional 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 /** Whether to show the cover page initially */\n showCover?: boolean;\n /** Event emitted when a chapter is selected */\n chapterSelectEvent?: string;\n /** Event emitted when navigation occurs */\n navigateEvent?: string;\n /** Event emitted when TOC is toggled */\n tocEvent?: string;\n /** Event emitted when book is closed */\n closeEvent?: string;\n /** Payload to include with events */\n actionPayload?: EventPayload;\n}\n\nexport const BookViewer: React.FC<BookViewerProps> = ({\n book,\n chapters,\n currentChapterIndex = 0,\n progress,\n style,\n isLoading,\n error,\n showCover = false,\n chapterSelectEvent,\n navigateEvent,\n tocEvent,\n closeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [showToc, setShowToc] = useState(false);\n const [showCoverPage, setShowCoverPage] = useState(showCover);\n const [activeChapterIndex, setActiveChapterIndex] = useState(currentChapterIndex);\n\n const currentChapter = chapters[activeChapterIndex];\n const totalChapters = chapters.length;\n\n // Chapter navigation handlers - currently using declarative events instead\n // const handlePreviousChapter = useCallback(() => {\n // if (activeChapterIndex > 0) {\n // const newIndex = activeChapterIndex - 1;\n // setActiveChapterIndex(newIndex);\n // setShowCoverPage(false);\n // if (navigateEvent) {\n // eventBus.emit(`UI:${navigateEvent}`, {\n // ...actionPayload,\n // previousIndex: activeChapterIndex,\n // newIndex,\n // direction: 'previous',\n // chapterId: chapters[newIndex]?.id,\n // });\n // }\n // }\n // }, [activeChapterIndex, chapters, navigateEvent, actionPayload, eventBus]);\n\n // const handleNextChapter = useCallback(() => {\n // if (activeChapterIndex < totalChapters - 1) {\n // const newIndex = activeChapterIndex + 1;\n // setActiveChapterIndex(newIndex);\n // setShowCoverPage(false);\n // if (navigateEvent) {\n // eventBus.emit(`UI:${navigateEvent}`, {\n // ...actionPayload,\n // previousIndex: activeChapterIndex,\n // newIndex,\n // direction: 'next',\n // chapterId: chapters[newIndex]?.id,\n // });\n // }\n // }\n // }, [activeChapterIndex, totalChapters, chapters, navigateEvent, actionPayload, eventBus]);\n\n // const handleChapterSelect = useCallback((chapterId: string) => {\n // const index = chapters.findIndex((c) => c.id === chapterId);\n // if (index !== -1) {\n // setActiveChapterIndex(index);\n // setShowCoverPage(false);\n // setShowToc(false);\n // if (chapterSelectEvent) {\n // eventBus.emit(`UI:${chapterSelectEvent}`, {\n // ...actionPayload,\n // chapterId,\n // chapterIndex: index,\n // title: chapters[index]?.title,\n // });\n // }\n // }\n // }, [chapters, chapterSelectEvent, actionPayload, eventBus]);\n\n // Listen for navigation events from child components\n React.useEffect(() => {\n const handleNav = (data: unknown) => {\n const navData = data as { direction?: string; chapterId?: string; newIndex?: number };\n if (navData.direction === 'previous' && activeChapterIndex > 0) {\n setActiveChapterIndex(prev => prev - 1);\n setShowCoverPage(false);\n } else if (navData.direction === 'next' && activeChapterIndex < totalChapters - 1) {\n setActiveChapterIndex(prev => prev + 1);\n setShowCoverPage(false);\n } else if (navData.newIndex !== undefined && navData.newIndex >= 0 && navData.newIndex < totalChapters) {\n setActiveChapterIndex(navData.newIndex);\n setShowCoverPage(false);\n setShowToc(false);\n } else if (navData.chapterId) {\n const index = chapters.findIndex((c) => c.id === navData.chapterId);\n if (index !== -1) {\n setActiveChapterIndex(index);\n setShowCoverPage(false);\n setShowToc(false);\n }\n }\n };\n\n if (navigateEvent) {\n eventBus.on(`UI:${navigateEvent}`, handleNav);\n }\n if (chapterSelectEvent) {\n eventBus.on(`UI:${chapterSelectEvent}`, handleNav);\n }\n\n return () => {\n if (navigateEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (eventBus as any).off?.(`UI:${navigateEvent}`, handleNav);\n }\n if (chapterSelectEvent) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (eventBus as any).off?.(`UI:${chapterSelectEvent}`, handleNav);\n }\n };\n }, [navigateEvent, chapterSelectEvent, activeChapterIndex, totalChapters, chapters, eventBus]);\n\n const handleTocToggle = useCallback(() => {\n setShowToc((prev) => !prev);\n if (tocEvent) {\n eventBus.emit(`UI:${tocEvent}`, {\n ...actionPayload,\n isOpen: !showToc,\n currentChapterIndex: activeChapterIndex,\n });\n }\n }, [showToc, tocEvent, actionPayload, activeChapterIndex, eventBus]);\n\n const handleClose = useCallback(() => {\n if (closeEvent) {\n eventBus.emit(`UI:${closeEvent}`, { ...actionPayload });\n }\n }, [closeEvent, actionPayload, eventBus]);\n\n const handleStartReading = useCallback(() => {\n setShowCoverPage(false);\n if (navigateEvent) {\n eventBus.emit(`UI:${navigateEvent}`, {\n ...actionPayload,\n action: 'start_reading',\n chapterIndex: 0,\n });\n }\n }, [navigateEvent, actionPayload, eventBus]);\n\n // Calculate progress\n const calculatedProgress = progress ??\n (totalChapters > 0 ? (activeChapterIndex / totalChapters) * 100 : 0);\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading book...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} onRetry={handleClose} />\n </View>\n );\n }\n\n if (chapters.length === 0) {\n return (\n <View style={[styles.container, style]}>\n <EmptyState\n message=\"This book has no chapters\"\n icon={<Typography variant=\"h2\">📚</Typography>}\n />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.background }, style]}>\n {/* Close Button */}\n <View style={styles.header}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleClose}\n style={styles.closeButton}\n >\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n ✕\n </Typography>\n </Button>\n </View>\n\n {/* Main Content */}\n <View style={styles.content}>\n {showCoverPage ? (\n <BookCoverPage\n {...book}\n selectEvent={chapterSelectEvent}\n actionPayload={actionPayload}\n />\n ) : currentChapter ? (\n <BookChapterView\n title={currentChapter.title}\n chapterNumber={currentChapter.number || activeChapterIndex + 1}\n content={currentChapter.title} // Placeholder - in real implementation, fetch chapter content\n viewEvent={chapterSelectEvent}\n actionPayload={{ ...actionPayload, chapterId: currentChapter.id }}\n />\n ) : (\n <EmptyState message=\"No chapter selected\" />\n )}\n </View>\n\n {/* Start Reading Button (only on cover) */}\n {showCoverPage && (\n <View style={styles.startButtonContainer}>\n <Button variant=\"primary\" size=\"lg\" onPress={handleStartReading}>\n Start Reading\n </Button>\n </View>\n )}\n\n {/* Navigation Bar (hidden on cover) */}\n {!showCoverPage && (\n <BookNavBar\n currentChapter={activeChapterIndex + 1}\n totalChapters={totalChapters}\n progress={calculatedProgress}\n hasPrevious={activeChapterIndex > 0}\n hasNext={activeChapterIndex < totalChapters - 1}\n previousEvent={navigateEvent}\n nextEvent={navigateEvent}\n tocEvent={tocEvent}\n actionPayload={actionPayload}\n />\n )}\n\n {/* TOC Modal */}\n <Modal\n visible={showToc}\n transparent\n animationType=\"slide\"\n onRequestClose={handleTocToggle}\n >\n <View style={[styles.modalOverlay, { backgroundColor: 'rgba(0,0,0,0.5)' }]}>\n <View style={[styles.modalContent, { backgroundColor: theme.colors.background }]}>\n <View style={styles.modalHeader}>\n <Typography variant=\"h3\">Table of Contents</Typography>\n <Button variant=\"ghost\" size=\"sm\" onPress={handleTocToggle}>\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n ✕\n </Typography>\n </Button>\n </View>\n <BookTableOfContents\n chapters={chapters}\n activeChapterId={currentChapter?.id}\n bookTitle={book.title}\n selectEvent={chapterSelectEvent}\n actionPayload={actionPayload}\n />\n </View>\n </View>\n </Modal>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n padding: 16,\n alignItems: 'flex-end',\n },\n closeButton: {\n padding: 8,\n },\n content: {\n flex: 1,\n paddingHorizontal: 16,\n },\n startButtonContainer: {\n padding: 24,\n alignItems: 'center',\n },\n modalOverlay: {\n flex: 1,\n justifyContent: 'flex-end',\n },\n modalContent: {\n height: '80%',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n padding: 16,\n },\n modalHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingBottom: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n },\n});\n\nBookViewer.displayName = 'BookViewer';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { CodeBlock } from '../molecules/CodeBlock';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface CodeFile {\n id: string;\n name: string;\n language: string;\n content: string;\n path?: string;\n}\n\nexport interface CodeViewerProps {\n /** Files to display */\n files: CodeFile[];\n /** Currently selected file ID */\n selectedFileId?: string;\n /** Callback when file is selected */\n onFileSelect?: (fileId: string) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative select event - emits UI:FILE_SELECT via eventBus */\n selectEvent?: string;\n}\n\nexport const CodeViewer: React.FC<CodeViewerProps> = ({\n files,\n selectedFileId,\n onFileSelect,\n style,\n isLoading,\n error,\n selectEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleFileSelect = (fileId: string) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { fileId });\n }\n onFileSelect?.(fileId);\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading code files...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (files.length === 0) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No code files available\" />\n </Card>\n );\n }\n\n const selectedFile = files.find(f => f.id === selectedFileId) || files[0];\n\n const getLanguageColor = (language: string): string => {\n const colors: Record<string, string> = {\n typescript: '#3178c6',\n javascript: '#f7df1e',\n python: '#3776ab',\n rust: '#dea584',\n go: '#00add8',\n java: '#b07219',\n html: '#e34c26',\n css: '#563d7c',\n json: '#292929',\n };\n return colors[language.toLowerCase()] || theme.colors.primary;\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]} padding=\"none\">\n <VStack spacing={0}>\n {/* File tabs */}\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={8} style={[styles.tabs, { backgroundColor: theme.colors.muted }]}>\n {files.map(file => (\n <Button\n key={file.id}\n variant={selectedFile.id === file.id ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => handleFileSelect(file.id)}\n >\n <HStack spacing={4} align=\"center\">\n <View\n style={[\n styles.languageDot,\n { backgroundColor: getLanguageColor(file.language) },\n ]}\n />\n <Typography variant=\"caption\">{file.name}</Typography>\n </HStack>\n </Button>\n ))}\n </HStack>\n </ScrollView>\n\n {/* File info */}\n <HStack\n spacing={8}\n align=\"center\"\n style={[styles.fileInfo, { borderBottomColor: theme.colors.border }]}\n >\n <Typography variant=\"h4\" style={{ flex: 1 }}>\n {selectedFile.name}\n </Typography>\n <Badge variant=\"secondary\">{selectedFile.language}</Badge>\n {selectedFile.path && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {selectedFile.path}\n </Typography>\n )}\n </HStack>\n\n {/* Code content */}\n <CodeBlock\n code={selectedFile.content}\n language={selectedFile.language}\n showLineNumbers\n showCopyButton\n scrollable\n />\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n tabs: {\n padding: 12,\n },\n fileInfo: {\n padding: 16,\n borderBottomWidth: 1,\n },\n languageDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n});\n\nCodeViewer.displayName = 'CodeViewer';\n","import React from 'react';\nimport {\n View,\n ScrollView,\n Image,\n StyleSheet,\n ViewStyle,\n Dimensions,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport type DocumentType = 'pdf' | 'image' | 'text' | 'markdown';\n\nexport interface Document {\n id: string;\n name: string;\n type: DocumentType;\n url: string;\n content?: string;\n size?: string;\n pages?: number;\n}\n\nexport interface DocumentViewerProps {\n /** Documents to display */\n documents: Document[];\n /** Currently selected document ID */\n selectedDocumentId?: string;\n /** Callback when document is selected */\n onDocumentSelect?: (documentId: string) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative select event - emits UI:DOCUMENT_SELECT via eventBus */\n selectEvent?: string;\n /** Declarative download event - emits UI:DOCUMENT_DOWNLOAD via eventBus */\n downloadEvent?: string;\n}\n\nconst { width: screenWidth } = Dimensions.get('window');\n\nexport const DocumentViewer: React.FC<DocumentViewerProps> = ({\n documents,\n selectedDocumentId,\n onDocumentSelect,\n style,\n isLoading,\n error,\n selectEvent,\n downloadEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleDocumentSelect = (documentId: string) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { documentId } as EventPayload);\n }\n onDocumentSelect?.(documentId);\n };\n\n const handleDownload = (document: Document) => {\n if (downloadEvent) {\n eventBus.emit(`UI:${downloadEvent}`, { document } as unknown as EventPayload);\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading documents...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (documents.length === 0) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No documents available\" />\n </Card>\n );\n }\n\n const selectedDocument =\n documents.find(d => d.id === selectedDocumentId) || documents[0];\n\n const getDocumentIcon = (type: DocumentType): string => {\n const icons: Record<DocumentType, string> = {\n pdf: '📄',\n image: '🖼️',\n text: '📝',\n markdown: '📑',\n };\n return icons[type];\n };\n\n const renderDocumentContent = (document: Document) => {\n switch (document.type) {\n case 'image':\n return (\n <Image\n source={{ uri: document.url }}\n style={styles.image}\n resizeMode=\"contain\"\n />\n );\n case 'text':\n case 'markdown':\n return (\n <ScrollView style={styles.textContainer}>\n <Typography variant=\"body\" style={styles.textContent}>\n {document.content || 'No content available'}\n </Typography>\n </ScrollView>\n );\n case 'pdf':\n default:\n return (\n <VStack align=\"center\" spacing={16} style={styles.pdfPlaceholder}>\n <Typography variant=\"h1\">{getDocumentIcon(document.type)}</Typography>\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n PDF viewer not available in mobile preview\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {document.pages ? `${document.pages} pages` : 'PDF Document'}\n </Typography>\n </VStack>\n );\n }\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]} padding=\"none\">\n <VStack spacing={0}>\n {/* Document tabs */}\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <HStack spacing={8} style={[styles.tabs, { backgroundColor: theme.colors.muted }]}>\n {documents.map(doc => (\n <Button\n key={doc.id}\n variant={selectedDocument.id === doc.id ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => handleDocumentSelect(doc.id)}\n >\n <HStack spacing={4} align=\"center\">\n <Typography variant=\"body\">{getDocumentIcon(doc.type)}</Typography>\n <Typography variant=\"caption\">{doc.name}</Typography>\n </HStack>\n </Button>\n ))}\n </HStack>\n </ScrollView>\n\n {/* Document info */}\n <HStack\n spacing={8}\n align=\"center\"\n style={[styles.docInfo, { borderBottomColor: theme.colors.border }]}\n >\n <Typography variant=\"h4\" style={{ flex: 1 }}>\n {getDocumentIcon(selectedDocument.type)} {selectedDocument.name}\n </Typography>\n <Badge variant=\"secondary\">{selectedDocument.type.toUpperCase()}</Badge>\n {selectedDocument.size && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {selectedDocument.size}\n </Typography>\n )}\n <Button variant=\"ghost\" size=\"sm\" onPress={() => handleDownload(selectedDocument)}>\n Download\n </Button>\n </HStack>\n\n {/* Document content */}\n <View style={styles.content}>{renderDocumentContent(selectedDocument)}</View>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n tabs: {\n padding: 12,\n },\n docInfo: {\n padding: 16,\n borderBottomWidth: 1,\n },\n content: {\n minHeight: 300,\n },\n image: {\n width: screenWidth - 32,\n height: 300,\n backgroundColor: '#000',\n },\n textContainer: {\n padding: 16,\n maxHeight: 400,\n },\n textContent: {\n lineHeight: 24,\n },\n pdfPlaceholder: {\n padding: 48,\n minHeight: 300,\n justifyContent: 'center',\n },\n});\n\nDocumentViewer.displayName = 'DocumentViewer';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle, TouchableOpacity } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface ComponentPattern {\n id: string;\n name: string;\n description: string;\n category: string;\n complexity: 'simple' | 'medium' | 'complex';\n preview?: React.ReactNode;\n codeSnippet?: string;\n tags?: string[];\n}\n\nexport interface ComponentPatternsProps {\n /** Patterns to display */\n patterns: ComponentPattern[];\n /** Selected pattern ID */\n selectedPatternId?: string;\n /** Callback when pattern is selected */\n onPatternSelect?: (patternId: string) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative select event - emits UI:PATTERN_SELECT via eventBus */\n selectEvent?: string;\n /** Declarative use event - emits UI:PATTERN_USE via eventBus */\n useEvent?: string;\n}\n\nexport const ComponentPatterns: React.FC<ComponentPatternsProps> = ({\n patterns,\n selectedPatternId,\n onPatternSelect,\n style,\n isLoading,\n error,\n selectEvent,\n useEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePatternSelect = (patternId: string) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { patternId } as EventPayload);\n }\n onPatternSelect?.(patternId);\n };\n\n const handleUsePattern = (pattern: ComponentPattern) => {\n if (useEvent) {\n eventBus.emit(`UI:${useEvent}`, { pattern } as unknown as EventPayload);\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading patterns...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (patterns.length === 0) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No patterns available\" />\n </Card>\n );\n }\n\n // Group patterns by category\n const groupedPatterns = patterns.reduce((acc, pattern) => {\n if (!acc[pattern.category]) {\n acc[pattern.category] = [];\n }\n acc[pattern.category].push(pattern);\n return acc;\n }, {} as Record<string, ComponentPattern[]>);\n\n const getComplexityVariant = (\n complexity: ComponentPattern['complexity']\n ): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' => {\n switch (complexity) {\n case 'simple':\n return 'success';\n case 'medium':\n return 'warning';\n case 'complex':\n return 'error';\n default:\n return 'default';\n }\n };\n\n const renderPatternCard = (pattern: ComponentPattern) => {\n const isSelected = pattern.id === selectedPatternId;\n\n return (\n <TouchableOpacity\n key={pattern.id}\n onPress={() => handlePatternSelect(pattern.id)}\n activeOpacity={0.9}\n >\n <Card\n style={[\n styles.patternCard,\n ...(isSelected\n ? [{ borderColor: theme.colors.primary, borderWidth: 2 }]\n : []),\n ]}\n padding=\"md\"\n >\n <VStack spacing={12}>\n <HStack justify=\"space-between\" align=\"flex-start\">\n <VStack spacing={4} style={styles.patternInfo}>\n <Typography variant=\"h4\">{pattern.name}</Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {pattern.description}\n </Typography>\n </VStack>\n <Badge variant={getComplexityVariant(pattern.complexity)}>\n {pattern.complexity}\n </Badge>\n </HStack>\n\n {pattern.preview && (\n <View style={[styles.previewContainer, { backgroundColor: theme.colors.muted }]}>\n {pattern.preview}\n </View>\n )}\n\n {pattern.tags && pattern.tags.length > 0 && (\n <HStack spacing={4} style={styles.tags}>\n {pattern.tags.map(tag => (\n <Badge key={tag} variant=\"secondary\" size=\"sm\">\n {tag}\n </Badge>\n ))}\n </HStack>\n )}\n\n {isSelected && (\n <Button variant=\"primary\" size=\"sm\" onPress={() => handleUsePattern(pattern)}>\n Use Pattern\n </Button>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n );\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <Typography variant=\"h3\">Component Patterns</Typography>\n\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {Object.entries(groupedPatterns).map(([category, categoryPatterns]) => (\n <VStack key={category} spacing={12}>\n <Typography variant=\"h4\" style={{ color: theme.colors.primary }}>\n {category}\n </Typography>\n <VStack spacing={8}>{categoryPatterns.map(renderPatternCard)}</VStack>\n </VStack>\n ))}\n </VStack>\n </ScrollView>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxHeight: 600,\n },\n patternCard: {\n borderWidth: 1,\n borderColor: 'transparent',\n },\n patternInfo: {\n flex: 1,\n },\n previewContainer: {\n padding: 16,\n borderRadius: 8,\n minHeight: 80,\n justifyContent: 'center',\n alignItems: 'center',\n },\n tags: {\n flexWrap: 'wrap',\n },\n});\n\nComponentPatterns.displayName = 'ComponentPatterns';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { CodeBlock } from '../molecules/CodeBlock';\n\nexport interface CustomPatternProps {\n /** Pattern name */\n name: string;\n /** Pattern description */\n description?: string;\n /** Pattern category */\n category?: string;\n /** Pattern complexity level */\n complexity?: 'simple' | 'medium' | 'complex';\n /** Custom preview component */\n preview?: React.ReactNode;\n /** Code implementation */\n code?: string;\n /** Language of the code */\n language?: string;\n /** Pattern tags */\n tags?: string[];\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative edit event - emits UI:PATTERN_EDIT via eventBus */\n editEvent?: string;\n /** Declarative delete event - emits UI:PATTERN_DELETE via eventBus */\n deleteEvent?: string;\n /** Declarative use event - emits UI:PATTERN_USE via eventBus */\n useEvent?: string;\n}\n\nexport const CustomPattern: React.FC<CustomPatternProps> = ({\n name,\n description,\n category,\n complexity = 'medium',\n preview,\n code,\n language = 'typescript',\n tags,\n style,\n isLoading,\n error,\n editEvent,\n deleteEvent,\n useEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleEdit = () => {\n if (editEvent) {\n eventBus.emit(`UI:${editEvent}`, { name });\n }\n };\n\n const handleDelete = () => {\n if (deleteEvent) {\n eventBus.emit(`UI:${deleteEvent}`, { name });\n }\n };\n\n const handleUse = () => {\n if (useEvent) {\n eventBus.emit(`UI:${useEvent}`, { name });\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading pattern...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n const getComplexityVariant = (\n comp: CustomPatternProps['complexity']\n ): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' => {\n switch (comp) {\n case 'simple':\n return 'success';\n case 'medium':\n return 'warning';\n case 'complex':\n return 'error';\n default:\n return 'default';\n }\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n {/* Header */}\n <HStack justify=\"space-between\" align=\"flex-start\">\n <VStack spacing={4} style={styles.headerInfo}>\n <Typography variant=\"h3\">{name}</Typography>\n {category && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {category}\n </Typography>\n )}\n </VStack>\n <Badge variant={getComplexityVariant(complexity)}>{complexity}</Badge>\n </HStack>\n\n {/* Description */}\n {description && (\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n {description}\n </Typography>\n )}\n\n {/* Tags */}\n {tags && tags.length > 0 && (\n <HStack spacing={4} style={styles.tags}>\n {tags.map(tag => (\n <Badge key={tag} variant=\"secondary\" size=\"sm\">\n {tag}\n </Badge>\n ))}\n </HStack>\n )}\n\n {/* Preview */}\n {preview && (\n <View style={[styles.previewContainer, { backgroundColor: theme.colors.muted }]}>\n <Typography variant=\"label\" style={styles.previewLabel}>\n Preview\n </Typography>\n {preview}\n </View>\n )}\n\n {/* Code */}\n {code && (\n <VStack spacing={8}>\n <Typography variant=\"label\">Implementation</Typography>\n <CodeBlock\n code={code}\n language={language}\n showLineNumbers\n showCopyButton\n scrollable\n />\n </VStack>\n )}\n\n {/* Actions */}\n <HStack spacing={8} style={styles.actions}>\n {useEvent && (\n <Button variant=\"primary\" onPress={handleUse} style={styles.actionButton}>\n Use Pattern\n </Button>\n )}\n {editEvent && (\n <Button variant=\"secondary\" onPress={handleEdit} style={styles.actionButton}>\n Edit\n </Button>\n )}\n {deleteEvent && (\n <Button variant=\"ghost\" onPress={handleDelete} style={styles.actionButton}>\n Delete\n </Button>\n )}\n </HStack>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n headerInfo: {\n flex: 1,\n },\n tags: {\n flexWrap: 'wrap',\n },\n previewContainer: {\n padding: 16,\n borderRadius: 8,\n minHeight: 100,\n justifyContent: 'center',\n alignItems: 'center',\n },\n previewLabel: {\n position: 'absolute',\n top: 8,\n left: 8,\n opacity: 0.5,\n },\n actions: {\n marginTop: 8,\n flexWrap: 'wrap',\n },\n actionButton: {\n flex: 1,\n minWidth: 80,\n },\n});\n\nCustomPattern.displayName = 'CustomPattern';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface StateNode {\n id: string;\n name: string;\n type: 'initial' | 'state' | 'final';\n description?: string;\n actions?: string[];\n}\n\nexport interface StateTransition {\n id: string;\n from: string;\n to: string;\n event: string;\n condition?: string;\n}\n\nexport interface StateMachine {\n id: string;\n name: string;\n states: StateNode[];\n transitions: StateTransition[];\n currentState?: string;\n}\n\nexport interface StateMachineViewProps {\n /** State machine to visualize */\n stateMachine: StateMachine;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative state click event - emits UI:STATE_CLICK via eventBus */\n stateClickEvent?: string;\n /** Declarative transition click event - emits UI:TRANSITION_CLICK via eventBus */\n transitionClickEvent?: string;\n}\n\nexport const StateMachineView: React.FC<StateMachineViewProps> = ({\n stateMachine,\n style,\n isLoading,\n error,\n stateClickEvent,\n transitionClickEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleStateClick = (stateId: string) => {\n if (stateClickEvent) {\n eventBus.emit(`UI:${stateClickEvent}`, { stateId, stateMachine } as unknown as EventPayload);\n }\n };\n\n const handleTransitionClick = (transitionId: string) => {\n if (transitionClickEvent) {\n eventBus.emit(`UI:${transitionClickEvent}`, { transitionId, stateMachine } as unknown as EventPayload);\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading state machine...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (!stateMachine.states.length) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No states defined\" />\n </Card>\n );\n }\n\n const getStateVariant = (\n state: StateNode\n ): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' => {\n if (stateMachine.currentState === state.id) return 'primary';\n if (state.type === 'initial') return 'success';\n if (state.type === 'final') return 'secondary';\n return 'default';\n };\n\n const getTransitionsForState = (stateId: string): StateTransition[] => {\n return stateMachine.transitions.filter(t => t.from === stateId);\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h3\">{stateMachine.name}</Typography>\n {stateMachine.currentState && (\n <Badge variant=\"primary\">Current: {stateMachine.currentState}</Badge>\n )}\n </HStack>\n\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {/* States */}\n <VStack spacing={12}>\n <Typography variant=\"h4\">States</Typography>\n {stateMachine.states.map(state => (\n <Button\n key={state.id}\n variant=\"ghost\"\n onPress={() => handleStateClick(state.id)}\n style={{\n ...styles.stateCard,\n ...(stateMachine.currentState === state.id\n ? {\n backgroundColor: `${theme.colors.primary}20`,\n borderColor: theme.colors.primary,\n borderWidth: 2,\n }\n : {}),\n }}\n >\n <VStack spacing={8} style={styles.stateContent}>\n <HStack justify=\"space-between\" align=\"center\">\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"h4\">{state.name}</Typography>\n <Badge variant={getStateVariant(state)} size=\"sm\">\n {state.type}\n </Badge>\n </HStack>\n {stateMachine.currentState === state.id && (\n <View\n style={[\n styles.currentIndicator,\n { backgroundColor: theme.colors.primary },\n ]}\n />\n )}\n </HStack>\n\n {state.description && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {state.description}\n </Typography>\n )}\n\n {state.actions && state.actions.length > 0 && (\n <HStack spacing={4} style={styles.actions}>\n {state.actions.map((action, index) => (\n <Badge key={index} variant=\"secondary\" size=\"sm\">\n {action}\n </Badge>\n ))}\n </HStack>\n )}\n\n {/* Transitions from this state */}\n {(() => {\n const transitions = getTransitionsForState(state.id);\n if (transitions.length === 0) return null;\n return (\n <VStack spacing={4} style={styles.transitions}>\n <Typography variant=\"label\">Transitions:</Typography>\n {transitions.map(transition => (\n <Button\n key={transition.id}\n variant=\"ghost\"\n size=\"sm\"\n onPress={() => handleTransitionClick(transition.id)}\n style={styles.transitionItem}\n >\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"caption\">\n {transition.event} →{' '}\n {stateMachine.states.find(s => s.id === transition.to)?.name}\n </Typography>\n {transition.condition && (\n <Badge variant=\"secondary\" size=\"sm\">\n if {transition.condition}\n </Badge>\n )}\n </HStack>\n </Button>\n ))}\n </VStack>\n );\n })()}\n </VStack>\n </Button>\n ))}\n </VStack>\n </VStack>\n </ScrollView>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxHeight: 600,\n },\n stateCard: {\n borderWidth: 1,\n borderColor: 'transparent',\n padding: 12,\n },\n stateContent: {\n alignItems: 'flex-start',\n },\n currentIndicator: {\n width: 12,\n height: 12,\n borderRadius: 6,\n },\n actions: {\n flexWrap: 'wrap',\n },\n transitions: {\n marginTop: 8,\n },\n transitionItem: {\n paddingVertical: 4,\n paddingHorizontal: 8,\n },\n});\n\nStateMachineView.displayName = 'StateMachineView';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle, TouchableOpacity } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport type { EventPayload } from '@almadar/core';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { Badge } from '../atoms/Badge';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\nimport { EmptyState } from '../molecules/EmptyState';\n\nexport interface LayoutPattern {\n id: string;\n name: string;\n description: string;\n category: 'flex' | 'grid' | 'stack' | 'position';\n complexity: 'simple' | 'medium' | 'complex';\n preview?: React.ReactNode;\n properties?: Array<{\n name: string;\n type: string;\n description: string;\n default?: string;\n }>;\n codeExample?: string;\n}\n\nexport interface LayoutPatternsProps {\n /** Layout patterns to display */\n patterns: LayoutPattern[];\n /** Selected pattern ID */\n selectedPatternId?: string;\n /** Callback when pattern is selected */\n onPatternSelect?: (patternId: string) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative select event - emits UI:LAYOUT_SELECT via eventBus */\n selectEvent?: string;\n /** Declarative apply event - emits UI:LAYOUT_APPLY via eventBus */\n applyEvent?: string;\n}\n\nexport const LayoutPatterns: React.FC<LayoutPatternsProps> = ({\n patterns,\n selectedPatternId,\n onPatternSelect,\n style,\n isLoading,\n error,\n selectEvent,\n applyEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePatternSelect = (patternId: string) => {\n if (selectEvent) {\n eventBus.emit(`UI:${selectEvent}`, { patternId } as EventPayload);\n }\n onPatternSelect?.(patternId);\n };\n\n const handleApplyPattern = (pattern: LayoutPattern) => {\n if (applyEvent) {\n eventBus.emit(`UI:${applyEvent}`, { pattern } as unknown as EventPayload);\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <LoadingState message=\"Loading layout patterns...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (patterns.length === 0) {\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <EmptyState message=\"No layout patterns available\" />\n </Card>\n );\n }\n\n // Group patterns by category\n const groupedPatterns = patterns.reduce((acc, pattern) => {\n if (!acc[pattern.category]) {\n acc[pattern.category] = [];\n }\n acc[pattern.category].push(pattern);\n return acc;\n }, {} as Record<string, LayoutPattern[]>);\n\n const getComplexityVariant = (\n complexity: LayoutPattern['complexity']\n ): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' => {\n switch (complexity) {\n case 'simple':\n return 'success';\n case 'medium':\n return 'warning';\n case 'complex':\n return 'error';\n default:\n return 'default';\n }\n };\n\n const getCategoryIcon = (category: LayoutPattern['category']): string => {\n const icons: Record<string, string> = {\n flex: '↔️',\n grid: '⊞',\n stack: '☰',\n position: '⌖',\n };\n return icons[category] || '📐';\n };\n\n const renderPatternCard = (pattern: LayoutPattern) => {\n const isSelected = pattern.id === selectedPatternId;\n\n return (\n <TouchableOpacity\n key={pattern.id}\n onPress={() => handlePatternSelect(pattern.id)}\n activeOpacity={0.9}\n >\n <Card\n style={[\n styles.patternCard,\n ...(isSelected\n ? [{ borderColor: theme.colors.primary, borderWidth: 2 }]\n : []),\n ]}\n padding=\"md\"\n >\n <VStack spacing={12}>\n <HStack justify=\"space-between\" align=\"flex-start\">\n <VStack spacing={4} style={styles.patternInfo}>\n <Typography variant=\"h4\">\n {getCategoryIcon(pattern.category)} {pattern.name}\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {pattern.description}\n </Typography>\n </VStack>\n <Badge variant={getComplexityVariant(pattern.complexity)}>\n {pattern.complexity}\n </Badge>\n </HStack>\n\n {pattern.preview && (\n <View style={[styles.previewContainer, { backgroundColor: theme.colors.muted }]}>\n {pattern.preview}\n </View>\n )}\n\n {pattern.properties && pattern.properties.length > 0 && (\n <VStack spacing={4}>\n <Typography variant=\"label\">Properties:</Typography>\n {pattern.properties.map((prop, index) => (\n <HStack key={index} spacing={8} align=\"center\">\n <Typography variant=\"caption\" style={styles.propertyName}>\n {prop.name}\n </Typography>\n <Badge variant=\"secondary\" size=\"sm\">\n {prop.type}\n </Badge>\n {prop.default && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n = {prop.default}\n </Typography>\n )}\n </HStack>\n ))}\n </VStack>\n )}\n\n {isSelected && applyEvent && (\n <Button variant=\"primary\" size=\"sm\" onPress={() => handleApplyPattern(pattern)}>\n Apply Layout\n </Button>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n );\n };\n\n return (\n <Card style={[styles.container, ...(style ? [style] : [])]}>\n <VStack spacing={16}>\n <Typography variant=\"h3\">Layout Patterns</Typography>\n\n <ScrollView showsVerticalScrollIndicator={false}>\n <VStack spacing={16}>\n {Object.entries(groupedPatterns).map(([category, categoryPatterns]) => (\n <VStack key={category} spacing={12}>\n <Typography variant=\"h4\" style={{ color: theme.colors.primary }}>\n {getCategoryIcon(category as LayoutPattern['category'])} {category.toUpperCase()}\n </Typography>\n <VStack spacing={8}>{categoryPatterns.map(renderPatternCard)}</VStack>\n </VStack>\n ))}\n </VStack>\n </ScrollView>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxHeight: 600,\n },\n patternCard: {\n borderWidth: 1,\n borderColor: 'transparent',\n },\n patternInfo: {\n flex: 1,\n },\n previewContainer: {\n padding: 16,\n borderRadius: 8,\n minHeight: 80,\n justifyContent: 'center',\n alignItems: 'center',\n },\n propertyName: {\n fontFamily: 'monospace',\n minWidth: 100,\n },\n});\n\nLayoutPatterns.displayName = 'LayoutPatterns';\n"],"mappings":"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","names":["React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","styles","View","StyleSheet","React","View","Pressable","StyleSheet","React","View","styles","Pressable","StyleSheet","React","View","ScrollView","StyleSheet","React","View","styles","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","ScrollView","React","View","styles","ScrollView","StyleSheet","React","useState","View","TouchableOpacity","StyleSheet","Modal","ScrollView","useState","React","View","styles","TouchableOpacity","ScrollView","Modal","StyleSheet","React","View","TouchableOpacity","ScrollView","StyleSheet","React","View","styles","TouchableOpacity","ScrollView","StyleSheet","React","View","ScrollView","StyleSheet","React","View","styles","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","ScrollView","TouchableOpacity","StyleSheet","React","styles","ScrollView","View","TouchableOpacity","StyleSheet","React","useState","View","StyleSheet","useState","React","View","styles","StyleSheet","React","useState","useEffect","useCallback","View","StyleSheet","useState","useCallback","useEffect","handleDismiss","React","View","styles","StyleSheet","React","useState","useEffect","useCallback","View","StyleSheet","useState","useCallback","useEffect","React","View","styles","StyleSheet","React","useState","useEffect","useCallback","View","StyleSheet","useState","useCallback","useEffect","React","styles","View","StyleSheet","React","useState","useCallback","View","StyleSheet","width","useState","useCallback","React","View","styles","StyleSheet","React","useCallback","View","StyleSheet","Image","ScrollView","useCallback","React","View","styles","Image","ScrollView","StyleSheet","React","View","StyleSheet","ScrollView","React","View","styles","ScrollView","StyleSheet","React","useRef","useCallback","useState","View","StyleSheet","PanResponder","useState","useRef","useCallback","width","PanResponder","React","View","styles","StyleSheet","React","useState","useCallback","View","StyleSheet","ScrollView","useState","useCallback","React","View","styles","ScrollView","StyleSheet","React","useState","useCallback","View","StyleSheet","ScrollView","Dimensions","Dimensions","useState","useCallback","React","View","styles","ScrollView","StyleSheet","React","useState","useCallback","View","StyleSheet","PanResponder","Dimensions","SCREEN_WIDTH","Dimensions","useState","useCallback","React","PanResponder","View","styles","StyleSheet","React","useState","useCallback","View","StyleSheet","TouchableOpacity","ScrollView","useState","useCallback","React","View","styles","TouchableOpacity","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","useEffect","useRef","View","StyleSheet","Animated","styles","React","useRef","useEffect","View","ScrollView","StyleSheet","useRef","useEffect","React","styles","View","ScrollView","StyleSheet","React","useState","useEffect","useCallback","useRef","View","Text","TouchableOpacity","StyleSheet","useState","useRef","useEffect","useCallback","React","TouchableOpacity","styles","View","Text","StyleSheet","React","useState","useCallback","useRef","useState","useRef","React","useCallback","React","View","Text","TouchableOpacity","StyleSheet","React","styles","TouchableOpacity","Text","View","StyleSheet","React","View","Text","StyleSheet","Dimensions","Dimensions","React","View","styles","Text","StyleSheet","React","useEffect","View","Text","StyleSheet","Animated","React","Animated","useEffect","View","styles","Text","StyleSheet","React","useState","useCallback","View","Text","TouchableOpacity","StyleSheet","useState","useCallback","item","React","styles","View","TouchableOpacity","Text","StyleSheet","React","View","Text","StyleSheet","Dimensions","ActivityIndicator","width","Dimensions","React","View","styles","ActivityIndicator","Text","StyleSheet","React","Text","TouchableOpacity","StyleSheet","React","TouchableOpacity","styles","Text","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet","React","useState","useCallback","useEffect","View","Text","StyleSheet","useState","useEffect","useCallback","React","View","styles","Text","StyleSheet","React","useState","useCallback","View","Text","TouchableOpacity","StyleSheet","ScrollView","useState","useCallback","React","styles","ScrollView","View","Text","TouchableOpacity","StyleSheet","React","useState","useCallback","useRef","useEffect","View","Text","TouchableOpacity","StyleSheet","ScrollView","useState","useRef","useEffect","useCallback","React","styles","ScrollView","Text","View","TouchableOpacity","StyleSheet","React","useState","useCallback","View","Text","TouchableOpacity","StyleSheet","ScrollView","useState","useCallback","React","styles","ScrollView","Text","View","TouchableOpacity","StyleSheet","React","useState","useCallback","useRef","useEffect","useMemo","View","Text","TouchableOpacity","StyleSheet","ScrollView","ENCOURAGEMENT_MESSAGES","useState","useRef","useEffect","useCallback","useMemo","React","styles","ScrollView","Text","View","TouchableOpacity","StyleSheet","React","useCallback","View","TouchableOpacity","StyleSheet","useCallback","React","View","styles","TouchableOpacity","StyleSheet","React","useEffect","useRef","StyleSheet","ScrollView","useRef","useEffect","React","styles","ScrollView","StyleSheet","React","useCallback","StyleSheet","useCallback","React","styles","StyleSheet","React","useState","useCallback","useRef","useEffect","View","StyleSheet","ScrollView","TouchableOpacity","ENCOURAGEMENT_MESSAGES","useState","useRef","useEffect","useCallback","React","ScrollView","styles","View","TouchableOpacity","StyleSheet","React","useState","useCallback","View","Text","StyleSheet","ScrollView","TouchableOpacity","useState","useCallback","React","ScrollView","styles","TouchableOpacity","View","Text","StyleSheet","React","useState","useCallback","View","StyleSheet","ScrollView","TouchableOpacity","useState","useCallback","React","ScrollView","styles","TouchableOpacity","View","StyleSheet","React","useState","useCallback","View","Text","StyleSheet","ScrollView","TouchableOpacity","useState","useCallback","React","ScrollView","styles","Text","TouchableOpacity","View","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","ScrollView","View","StyleSheet","React","ScrollView","StyleSheet","React","styles","ScrollView","StyleSheet","React","View","ScrollView","TouchableOpacity","StyleSheet","React","styles","View","ScrollView","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","styles","TouchableOpacity","View","StyleSheet","React","View","ScrollView","TouchableOpacity","StyleSheet","React","styles","View","ScrollView","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","styles","TouchableOpacity","View","StyleSheet","React","View","TouchableOpacity","StyleSheet","typeColors","typeIcons","typeLabels","React","styles","TouchableOpacity","View","StyleSheet","React","useRef","useState","View","StyleSheet","PanResponder","Dimensions","screenWidth","Dimensions","width","useState","useRef","PanResponder","React","View","styles","StyleSheet","React","View","TouchableOpacity","ScrollView","StyleSheet","React","styles","View","ScrollView","TouchableOpacity","StyleSheet","React","useMemo","View","ScrollView","StyleSheet","typeLabels","width","useMemo","React","View","styles","ScrollView","StyleSheet","React","View","ScrollView","StyleSheet","React","View","styles","ScrollView","StyleSheet","React","View","Image","StyleSheet","React","View","styles","Image","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","styles","StyleSheet","React","useState","useCallback","View","StyleSheet","Modal","useState","React","useCallback","View","styles","Modal","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","ScrollView","View","StyleSheet","React","View","ScrollView","Image","StyleSheet","Dimensions","screenWidth","Dimensions","React","styles","Image","ScrollView","View","StyleSheet","React","View","ScrollView","StyleSheet","TouchableOpacity","React","styles","TouchableOpacity","View","ScrollView","StyleSheet","React","View","StyleSheet","React","styles","View","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","ScrollView","View","StyleSheet","React","View","ScrollView","StyleSheet","TouchableOpacity","React","styles","TouchableOpacity","View","ScrollView","StyleSheet"]}
|