@almadar/mobile 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
- package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
- package/dist/chunk-5U5Z65ZO.js.map +1 -0
- package/dist/chunk-A56SRZKI.js +59 -0
- package/dist/chunk-A56SRZKI.js.map +1 -0
- package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
- package/dist/chunk-BFRVXKSP.js.map +1 -0
- package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
- package/dist/chunk-ETD72PHO.js.map +1 -0
- package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
- package/dist/chunk-GMR5FKKB.js.map +1 -0
- package/dist/chunk-K2JGK2QD.js +17 -0
- package/dist/chunk-K2JGK2QD.js.map +1 -0
- package/dist/chunk-MLTSQPVN.js +337 -0
- package/dist/chunk-MLTSQPVN.js.map +1 -0
- package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
- package/dist/chunk-PBO6ZN2M.js.map +1 -0
- package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
- package/dist/chunk-QUFLYKWA.js.map +1 -0
- package/dist/chunk-TRYFJDL3.js +7 -0
- package/dist/chunk-TRYFJDL3.js.map +1 -0
- package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
- package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
- package/dist/components/atoms/DayCell.d.ts +18 -0
- package/dist/components/atoms/DayCell.d.ts.map +1 -0
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
- package/dist/components/atoms/RangeSlider.d.ts +20 -0
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
- package/dist/components/atoms/StatusDot.d.ts +16 -0
- package/dist/components/atoms/StatusDot.d.ts.map +1 -0
- package/dist/components/atoms/TextHighlight.d.ts +17 -0
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
- package/dist/components/atoms/ThemeToggle.d.ts +13 -0
- package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
- package/dist/components/atoms/TrendIndicator.d.ts +16 -0
- package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
- package/dist/components/atoms/TypewriterText.d.ts +16 -0
- package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
- package/dist/components/atoms/index.d.ts +18 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +30 -10
- package/dist/components/index.js +59 -18
- package/dist/components/molecules/Accordion.d.ts +20 -0
- package/dist/components/molecules/Accordion.d.ts.map +1 -0
- package/dist/components/molecules/CalendarGrid.d.ts +22 -0
- package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
- package/dist/components/molecules/Carousel.d.ts +17 -0
- package/dist/components/molecules/Carousel.d.ts.map +1 -0
- package/dist/components/molecules/DataGrid.d.ts +43 -0
- package/dist/components/molecules/DataGrid.d.ts.map +1 -0
- package/dist/components/molecules/DataList.d.ts +43 -0
- package/dist/components/molecules/DataList.d.ts.map +1 -0
- package/dist/components/molecules/FlipCard.d.ts +16 -0
- package/dist/components/molecules/FlipCard.d.ts.map +1 -0
- package/dist/components/molecules/Lightbox.d.ts +19 -0
- package/dist/components/molecules/Lightbox.d.ts.map +1 -0
- package/dist/components/molecules/NumberStepper.d.ts +19 -0
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
- package/dist/components/molecules/PullToRefresh.d.ts +14 -0
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
- package/dist/components/molecules/SortableList.d.ts +17 -0
- package/dist/components/molecules/SortableList.d.ts.map +1 -0
- package/dist/components/molecules/StarRating.d.ts +19 -0
- package/dist/components/molecules/StarRating.d.ts.map +1 -0
- package/dist/components/molecules/SwipeableRow.d.ts +20 -0
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
- package/dist/components/molecules/index.d.ts +24 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/index.js +30 -5
- package/dist/components/organisms/FormSection.d.ts +7 -0
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +0 -4
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +4 -8
- package/dist/index.js +72 -26
- package/dist/index.js.map +1 -1
- package/dist/lib/getNestedValue.d.ts +5 -0
- package/dist/lib/getNestedValue.d.ts.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +6 -2
- package/dist/providers/ThemeProvider.d.ts +7 -0
- package/dist/providers/ThemeProvider.d.ts.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +8 -4
- package/package.json +30 -29
- package/dist/chunk-6RVITGGH.js +0 -167
- package/dist/chunk-6RVITGGH.js.map +0 -1
- package/dist/chunk-7C5JCLLY.js.map +0 -1
- package/dist/chunk-DMLYJFYQ.js.map +0 -1
- package/dist/chunk-DY52O4T3.js.map +0 -1
- package/dist/chunk-LFHVNHVA.js.map +0 -1
- package/dist/chunk-T77JPOTP.js.map +0 -1
- package/dist/chunk-VLUJ7BXN.js +0 -36
- package/dist/chunk-VLUJ7BXN.js.map +0 -1
- package/dist/chunk-YMJZLYLV.js.map +0 -1
- package/dist/components/organisms/EntityCard.d.ts +0 -11
- package/dist/components/organisms/EntityCard.d.ts.map +0 -1
- package/dist/components/organisms/EntityList.d.ts +0 -17
- package/dist/components/organisms/EntityList.d.ts.map +0 -1
- /package/dist/{chunk-S2IT7WZT.js.map → chunk-5JVEVV74.js.map} +0 -0
package/dist/chunk-6RVITGGH.js
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useEventBus
|
|
3
|
-
} from "./chunk-YTVYMEKU.js";
|
|
4
|
-
import {
|
|
5
|
-
useTheme
|
|
6
|
-
} from "./chunk-CUAWHLEK.js";
|
|
7
|
-
|
|
8
|
-
// src/components/atoms/Label.tsx
|
|
9
|
-
import React from "react";
|
|
10
|
-
import { Text, StyleSheet } from "react-native";
|
|
11
|
-
var Label = ({
|
|
12
|
-
children,
|
|
13
|
-
required = false,
|
|
14
|
-
disabled = false,
|
|
15
|
-
style
|
|
16
|
-
}) => {
|
|
17
|
-
const theme = useTheme();
|
|
18
|
-
return /* @__PURE__ */ React.createElement(
|
|
19
|
-
Text,
|
|
20
|
-
{
|
|
21
|
-
style: [
|
|
22
|
-
styles.label,
|
|
23
|
-
{
|
|
24
|
-
color: disabled ? theme.colors["muted-foreground"] : theme.colors.foreground
|
|
25
|
-
},
|
|
26
|
-
style
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
children,
|
|
30
|
-
required && /* @__PURE__ */ React.createElement(Text, { style: [styles.required, { color: theme.colors.error }] }, " *")
|
|
31
|
-
);
|
|
32
|
-
};
|
|
33
|
-
var styles = StyleSheet.create({
|
|
34
|
-
label: {
|
|
35
|
-
fontSize: 14,
|
|
36
|
-
fontWeight: "500",
|
|
37
|
-
marginBottom: 6
|
|
38
|
-
},
|
|
39
|
-
required: {
|
|
40
|
-
fontWeight: "400"
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
Label.displayName = "Label";
|
|
44
|
-
|
|
45
|
-
// src/components/atoms/game/ControlButton.tsx
|
|
46
|
-
import React2, { useState, useCallback } from "react";
|
|
47
|
-
import {
|
|
48
|
-
TouchableOpacity,
|
|
49
|
-
Text as Text2,
|
|
50
|
-
StyleSheet as StyleSheet2
|
|
51
|
-
} from "react-native";
|
|
52
|
-
var sizeMap = {
|
|
53
|
-
sm: { width: 40, height: 40, fontSize: 14 },
|
|
54
|
-
md: { width: 56, height: 56, fontSize: 16 },
|
|
55
|
-
lg: { width: 72, height: 72, fontSize: 20 },
|
|
56
|
-
xl: { width: 96, height: 96, fontSize: 24 }
|
|
57
|
-
};
|
|
58
|
-
var shapeMap = {
|
|
59
|
-
circle: 9999,
|
|
60
|
-
rounded: 12,
|
|
61
|
-
square: 4
|
|
62
|
-
};
|
|
63
|
-
var variantMap = {
|
|
64
|
-
primary: {
|
|
65
|
-
backgroundColor: "#2563eb",
|
|
66
|
-
borderColor: "#60a5fa",
|
|
67
|
-
textColor: "#ffffff"
|
|
68
|
-
},
|
|
69
|
-
secondary: {
|
|
70
|
-
backgroundColor: "#374151",
|
|
71
|
-
borderColor: "#6b7280",
|
|
72
|
-
textColor: "#ffffff"
|
|
73
|
-
},
|
|
74
|
-
ghost: {
|
|
75
|
-
backgroundColor: "transparent",
|
|
76
|
-
borderColor: "rgba(255,255,255,0.3)",
|
|
77
|
-
textColor: "#ffffff"
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
var ControlButton = ({
|
|
81
|
-
label,
|
|
82
|
-
icon,
|
|
83
|
-
size = "md",
|
|
84
|
-
shape = "circle",
|
|
85
|
-
variant = "secondary",
|
|
86
|
-
onPress,
|
|
87
|
-
onRelease,
|
|
88
|
-
pressEvent,
|
|
89
|
-
releaseEvent,
|
|
90
|
-
pressed,
|
|
91
|
-
disabled,
|
|
92
|
-
style
|
|
93
|
-
}) => {
|
|
94
|
-
useTheme();
|
|
95
|
-
const eventBus = useEventBus();
|
|
96
|
-
const [isPressed, setIsPressed] = useState(false);
|
|
97
|
-
const actualPressed = pressed ?? isPressed;
|
|
98
|
-
const sizeConfig = sizeMap[size] ?? sizeMap.md;
|
|
99
|
-
const borderRadius = shapeMap[shape] ?? shapeMap.circle;
|
|
100
|
-
const variantConfig = variantMap[variant] ?? variantMap.secondary;
|
|
101
|
-
const handlePressIn = useCallback(
|
|
102
|
-
(_e) => {
|
|
103
|
-
if (disabled) return;
|
|
104
|
-
setIsPressed(true);
|
|
105
|
-
if (pressEvent) eventBus.emit(`UI:${pressEvent}`, {});
|
|
106
|
-
onPress?.();
|
|
107
|
-
},
|
|
108
|
-
[disabled, pressEvent, eventBus, onPress]
|
|
109
|
-
);
|
|
110
|
-
const handlePressOut = useCallback(
|
|
111
|
-
(_e) => {
|
|
112
|
-
if (disabled) return;
|
|
113
|
-
setIsPressed(false);
|
|
114
|
-
if (releaseEvent) eventBus.emit(`UI:${releaseEvent}`, {});
|
|
115
|
-
onRelease?.();
|
|
116
|
-
},
|
|
117
|
-
[disabled, releaseEvent, eventBus, onRelease]
|
|
118
|
-
);
|
|
119
|
-
return /* @__PURE__ */ React2.createElement(
|
|
120
|
-
TouchableOpacity,
|
|
121
|
-
{
|
|
122
|
-
activeOpacity: 0.8,
|
|
123
|
-
disabled,
|
|
124
|
-
onPressIn: handlePressIn,
|
|
125
|
-
onPressOut: handlePressOut,
|
|
126
|
-
style: [
|
|
127
|
-
styles2.button,
|
|
128
|
-
{
|
|
129
|
-
width: sizeConfig.width,
|
|
130
|
-
height: sizeConfig.height,
|
|
131
|
-
borderRadius,
|
|
132
|
-
backgroundColor: variantConfig.backgroundColor,
|
|
133
|
-
borderColor: variantConfig.borderColor,
|
|
134
|
-
opacity: disabled ? 0.5 : 1,
|
|
135
|
-
transform: [{ scale: actualPressed ? 0.95 : 1 }]
|
|
136
|
-
},
|
|
137
|
-
style
|
|
138
|
-
]
|
|
139
|
-
},
|
|
140
|
-
icon ? /* @__PURE__ */ React2.createElement(Text2, { style: { fontSize: sizeConfig.fontSize * 1.5 } }, icon) : label ? /* @__PURE__ */ React2.createElement(
|
|
141
|
-
Text2,
|
|
142
|
-
{
|
|
143
|
-
style: {
|
|
144
|
-
fontSize: sizeConfig.fontSize,
|
|
145
|
-
color: variantConfig.textColor,
|
|
146
|
-
fontWeight: "700"
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
label
|
|
150
|
-
) : null
|
|
151
|
-
);
|
|
152
|
-
};
|
|
153
|
-
var styles2 = StyleSheet2.create({
|
|
154
|
-
button: {
|
|
155
|
-
justifyContent: "center",
|
|
156
|
-
alignItems: "center",
|
|
157
|
-
borderWidth: 2,
|
|
158
|
-
userSelect: "none"
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
ControlButton.displayName = "ControlButton";
|
|
162
|
-
|
|
163
|
-
export {
|
|
164
|
-
Label,
|
|
165
|
-
ControlButton
|
|
166
|
-
};
|
|
167
|
-
//# sourceMappingURL=chunk-6RVITGGH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/atoms/Label.tsx","../src/components/atoms/game/ControlButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, StyleSheet, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface LabelProps {\n children: React.ReactNode;\n required?: boolean;\n disabled?: boolean;\n style?: TextStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Label: React.FC<LabelProps> = ({\n children,\n required = false,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n\n return (\n <Text\n style={[\n styles.label,\n {\n color: disabled \n ? theme.colors['muted-foreground'] \n : theme.colors.foreground,\n },\n style,\n ]}\n >\n {children}\n {required && (\n <Text style={[styles.required, { color: theme.colors.error }]}>\n {' *'}\n </Text>\n )}\n </Text>\n );\n};\n\nconst styles = StyleSheet.create({\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n required: {\n fontWeight: '400',\n },\n});\n\nLabel.displayName = 'Label';\n","import React, { useState, useCallback } from 'react';\nimport { \n TouchableOpacity, \n Text, \n StyleSheet, \n GestureResponderEvent,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface ControlButtonProps {\n /** Button label text */\n label?: string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl' | string;\n /** Shape variant */\n shape?: 'circle' | 'rounded' | 'square' | string;\n /** Visual variant */\n variant?: 'primary' | 'secondary' | 'ghost' | string;\n /** Called when button is pressed */\n onPress?: () => void;\n /** Called when button is released */\n onRelease?: () => void;\n /** Declarative event name emitted on press via useEventBus */\n pressEvent?: string;\n /** Declarative event name emitted on release via useEventBus */\n releaseEvent?: string;\n /** Whether the button is currently pressed */\n pressed?: boolean;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst sizeMap: Record<string, { width: number; height: number; fontSize: number }> = {\n sm: { width: 40, height: 40, fontSize: 14 },\n md: { width: 56, height: 56, fontSize: 16 },\n lg: { width: 72, height: 72, fontSize: 20 },\n xl: { width: 96, height: 96, fontSize: 24 },\n};\n\nconst shapeMap: Record<string, number> = {\n circle: 9999,\n rounded: 12,\n square: 4,\n};\n\nconst variantMap: Record<string, { backgroundColor: string; borderColor: string; textColor: string }> = {\n primary: { \n backgroundColor: '#2563eb', \n borderColor: '#60a5fa',\n textColor: '#ffffff',\n },\n secondary: { \n backgroundColor: '#374151', \n borderColor: '#6b7280',\n textColor: '#ffffff',\n },\n ghost: { \n backgroundColor: 'transparent', \n borderColor: 'rgba(255,255,255,0.3)',\n textColor: '#ffffff',\n },\n};\n\nexport const ControlButton: React.FC<ControlButtonProps> = ({\n label,\n icon,\n size = 'md',\n shape = 'circle',\n variant = 'secondary',\n onPress,\n onRelease,\n pressEvent,\n releaseEvent,\n pressed,\n disabled,\n style,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n const [isPressed, setIsPressed] = useState(false);\n const actualPressed = pressed ?? isPressed;\n\n const sizeConfig = sizeMap[size] ?? sizeMap.md;\n const borderRadius = shapeMap[shape] ?? shapeMap.circle;\n const variantConfig = variantMap[variant] ?? variantMap.secondary;\n\n const handlePressIn = useCallback(\n (_e: GestureResponderEvent) => {\n if (disabled) return;\n setIsPressed(true);\n if (pressEvent) eventBus.emit(`UI:${pressEvent}`, {});\n onPress?.();\n },\n [disabled, pressEvent, eventBus, onPress]\n );\n\n const handlePressOut = useCallback(\n (_e: GestureResponderEvent) => {\n if (disabled) return;\n setIsPressed(false);\n if (releaseEvent) eventBus.emit(`UI:${releaseEvent}`, {});\n onRelease?.();\n },\n [disabled, releaseEvent, eventBus, onRelease]\n );\n\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={disabled}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n style={[\n styles.button,\n {\n width: sizeConfig.width,\n height: sizeConfig.height,\n borderRadius,\n backgroundColor: variantConfig.backgroundColor,\n borderColor: variantConfig.borderColor,\n opacity: disabled ? 0.5 : 1,\n transform: [{ scale: actualPressed ? 0.95 : 1 }],\n },\n style as never,\n ]}\n >\n {icon ? (\n <Text style={{ fontSize: sizeConfig.fontSize * 1.5 }}>\n {icon as string}\n </Text>\n ) : label ? (\n <Text\n style={{\n fontSize: sizeConfig.fontSize,\n color: variantConfig.textColor,\n fontWeight: '700',\n }}\n >\n {label}\n </Text>\n ) : null}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n button: {\n justifyContent: 'center',\n alignItems: 'center',\n borderWidth: 2,\n userSelect: 'none',\n },\n});\n\nControlButton.displayName = 'ControlButton';\n"],"mappings":"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","names":["React","Text","StyleSheet","React","styles","Text","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/atoms/Typography.tsx","../src/components/molecules/LoadingState.tsx","../src/components/atoms/Stack.tsx","../src/components/molecules/ErrorState.tsx","../src/components/atoms/Button.tsx","../src/components/atoms/Input.tsx","../src/components/atoms/Select.tsx","../src/components/atoms/Card.tsx","../src/components/atoms/Badge.tsx","../src/components/atoms/ProgressBar.tsx","../src/components/atoms/game/HealthBar.tsx","../src/components/atoms/game/ScoreDisplay.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, StyleSheet, TextStyle, TextProps } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport type TypographyVariant = \n | 'h1' \n | 'h2' \n | 'h3' \n | 'h4' \n | 'body' \n | 'caption' \n | 'label';\n\nexport interface TypographyProps extends TextProps {\n variant?: TypographyVariant;\n color?: string;\n align?: 'left' | 'center' | 'right';\n children: React.ReactNode;\n /** Loading state indicator - renders as skeleton when true */\n isLoading?: boolean;\n /** Error state - can affect styling */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport function Typography({\n variant = 'body',\n color,\n align = 'left',\n children,\n style,\n isLoading,\n error,\n ...rest\n}: TypographyProps) {\n const theme = useTheme();\n\n // When loading, return a skeleton-like placeholder\n if (isLoading) {\n return (\n <Text\n style={[\n styles.skeleton,\n {\n backgroundColor: theme.colors.muted,\n width: '60%',\n },\n style,\n ]}\n {...rest}\n >\n {' '}\n </Text>\n );\n }\n\n const variantStyles: Record<TypographyVariant, TextStyle> = {\n h1: {\n fontSize: theme.typography.sizes['4xl'],\n fontWeight: theme.typography.fontWeight.bold as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes['4xl'],\n color: theme.colors.foreground,\n },\n h2: {\n fontSize: theme.typography.sizes['3xl'],\n fontWeight: theme.typography.fontWeight.bold as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes['3xl'],\n color: theme.colors.foreground,\n },\n h3: {\n fontSize: theme.typography.sizes['2xl'],\n fontWeight: theme.typography.fontWeight.bold as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes['2xl'],\n color: theme.colors.foreground,\n },\n h4: {\n fontSize: theme.typography.sizes.xl,\n fontWeight: theme.typography.fontWeight.medium as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes.xl,\n color: theme.colors.foreground,\n },\n body: {\n fontSize: theme.typography.sizes.base,\n fontWeight: theme.typography.fontWeight.normal as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes.base,\n color: theme.colors.foreground,\n },\n caption: {\n fontSize: theme.typography.sizes.sm,\n fontWeight: theme.typography.fontWeight.normal as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes.sm,\n color: theme.colors['muted-foreground'],\n },\n label: {\n fontSize: theme.typography.sizes.xs,\n fontWeight: theme.typography.fontWeight.medium as TextStyle['fontWeight'],\n lineHeight: theme.typography.lineHeight * theme.typography.sizes.xs,\n color: theme.colors['muted-foreground'],\n textTransform: 'uppercase',\n },\n };\n\n const textColor = error ? theme.colors.error : (color || variantStyles[variant].color);\n\n return (\n <Text\n style={[\n variantStyles[variant],\n { textAlign: align, color: textColor },\n style,\n ]}\n {...rest}\n >\n {children}\n </Text>\n );\n}\n\nconst styles = StyleSheet.create({\n skeleton: {\n borderRadius: 4,\n },\n});\n\nTypography.displayName = 'Typography';\n","import React from 'react';\nimport { ActivityIndicator, StyleSheet } from 'react-native';\nimport { VStack } from '../atoms/Stack';\nimport { Typography } from '../atoms/Typography';\n\nexport interface LoadingStateProps {\n message?: string;\n}\n\nexport const LoadingState: React.FC<LoadingStateProps> = ({\n message = 'Loading...',\n}) => {\n return (\n <VStack align=\"center\" spacing={12} style={styles.container}>\n <ActivityIndicator size=\"large\" color=\"#6366f1\" />\n <Typography variant=\"body\" color=\"#6b7280\">\n {message}\n </Typography>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nLoadingState.displayName = 'LoadingState';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface VStackProps {\n spacing?: number;\n align?: 'flex-start' | 'center' | 'flex-end' | 'stretch';\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';\n children: React.ReactNode;\n style?: ViewStyle | ViewStyle[] | undefined;\n testID?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const VStack: React.FC<VStackProps> = ({\n spacing = 8,\n align = 'stretch',\n justify = 'flex-start',\n children,\n style,\n testID,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.vstack, style]}>\n <LoadingState />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.vstack, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const stackStyles: ViewStyle[] = [\n styles.vstack,\n { gap: spacing, alignItems: align, justifyContent: justify },\n ];\n \n if (Array.isArray(style)) {\n stackStyles.push(...style);\n } else if (style) {\n stackStyles.push(style);\n }\n\n return (\n <View testID={testID} style={stackStyles}>\n {children}\n </View>\n );\n};\n\nexport interface HStackProps {\n spacing?: number;\n align?: 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline';\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly';\n children: React.ReactNode;\n style?: ViewStyle | ViewStyle[] | undefined;\n testID?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const HStack: React.FC<HStackProps> = ({\n spacing = 8,\n align = 'center',\n justify = 'flex-start',\n children,\n style,\n testID,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.hstack, style]}>\n <LoadingState />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.hstack, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const stackStyles: ViewStyle[] = [\n styles.hstack,\n { gap: spacing, alignItems: align, justifyContent: justify },\n ];\n \n if (Array.isArray(style)) {\n stackStyles.push(...style);\n } else if (style) {\n stackStyles.push(style);\n }\n\n return (\n <View testID={testID} style={stackStyles}>\n {children}\n </View>\n );\n};\n\nexport interface BoxProps {\n children?: React.ReactNode;\n style?: ViewStyle | ViewStyle[] | undefined;\n testID?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Box: React.FC<BoxProps> = ({ \n children, \n style, \n testID,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.box, style]}>\n <LoadingState />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.box, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const boxStyles: ViewStyle[] = [styles.box];\n \n if (Array.isArray(style)) {\n boxStyles.push(...style);\n } else if (style) {\n boxStyles.push(style);\n }\n\n return <View testID={testID} style={boxStyles}>{children}</View>;\n};\n\nconst styles = StyleSheet.create({\n vstack: {\n flexDirection: 'column',\n },\n hstack: {\n flexDirection: 'row',\n },\n box: {\n // Base box styles - mostly empty to allow full customization\n },\n});\n\nVStack.displayName = 'VStack';\nHStack.displayName = 'HStack';\nBox.displayName = 'Box';\n","import React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { VStack } from '../atoms/Stack';\n\nexport interface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n}\n\nexport const ErrorState: React.FC<ErrorStateProps> = ({\n message = 'Something went wrong',\n onRetry,\n}) => {\n return (\n <VStack align=\"center\" spacing={16} style={styles.container}>\n <Typography variant=\"body\" color=\"#ef4444\">\n {message}\n </Typography>\n {onRetry && (\n <Button variant=\"secondary\" onPress={onRetry}>\n Retry\n </Button>\n )}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nErrorState.displayName = 'ErrorState';\n","import React from 'react';\nimport { \n TouchableOpacity, \n Text, \n StyleSheet, \n ActivityIndicator,\n ViewStyle,\n TextStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\n\nexport interface ButtonProps {\n onPress?: () => void;\n children: React.ReactNode;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n isLoading?: boolean;\n style?: ViewStyle;\n textStyle?: TextStyle;\n /** Declarative event name - emits UI:${action} via eventBus on press */\n action?: string;\n /** Payload to include with the action event */\n actionPayload?: Record<string, unknown>;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n onPress,\n children,\n variant = 'default',\n size = 'md',\n disabled = false,\n isLoading = false,\n style,\n textStyle,\n action,\n actionPayload,\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 const getVariantStyles = (): { container: ViewStyle; text: TextStyle } => {\n switch (variant) {\n case 'primary':\n return {\n container: {\n backgroundColor: theme.colors.primary,\n },\n text: {\n color: theme.colors['primary-foreground'],\n },\n };\n case 'secondary':\n return {\n container: {\n backgroundColor: theme.colors.secondary,\n },\n text: {\n color: theme.colors['secondary-foreground'],\n },\n };\n case 'ghost':\n return {\n container: {\n backgroundColor: 'transparent',\n },\n text: {\n color: theme.colors.primary,\n },\n };\n case 'destructive':\n return {\n container: {\n backgroundColor: theme.colors.error,\n },\n text: {\n color: theme.colors['error-foreground'],\n },\n };\n default:\n return {\n container: {\n backgroundColor: theme.colors.card,\n borderWidth: 1,\n borderColor: theme.colors.border,\n },\n text: {\n color: theme.colors.foreground,\n },\n };\n }\n };\n\n const sizeStyles: Record<string, { container: ViewStyle; text: TextStyle }> = {\n sm: {\n container: {\n paddingVertical: theme.spacing[1],\n paddingHorizontal: theme.spacing[3],\n borderRadius: theme.borderRadius.md,\n },\n text: {\n fontSize: theme.typography.sizes.sm,\n },\n },\n md: {\n container: {\n paddingVertical: theme.spacing[2],\n paddingHorizontal: theme.spacing[4],\n borderRadius: theme.borderRadius.md,\n },\n text: {\n fontSize: theme.typography.sizes.base,\n },\n },\n lg: {\n container: {\n paddingVertical: theme.spacing[3],\n paddingHorizontal: theme.spacing[6],\n borderRadius: theme.borderRadius.lg,\n },\n text: {\n fontSize: theme.typography.sizes.lg,\n },\n },\n };\n\n const variantStyle = getVariantStyles();\n const sizeStyle = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled || isLoading}\n activeOpacity={0.8}\n style={[\n styles.button,\n variantStyle.container,\n sizeStyle.container,\n (disabled || isLoading) && { opacity: 0.5 },\n style,\n ]}\n >\n {isLoading ? (\n <ActivityIndicator color={variantStyle.text.color} size=\"small\" />\n ) : (\n <Text style={[styles.text, variantStyle.text, sizeStyle.text, textStyle]}>\n {children}\n </Text>\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n button: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontWeight: '500',\n },\n});\n\nButton.displayName = 'Button';\n","import React from 'react';\nimport { \n TextInput, \n TextInputProps, \n StyleSheet, \n View, \n Text,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\n\nexport interface InputProps extends Omit<TextInputProps, 'onChange'> {\n label?: string;\n /** String error message for form validation */\n errorMessage?: string;\n helperText?: string;\n containerStyle?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state object */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Declarative focus event name - emits UI:${focusEvent} via eventBus */\n focusEvent?: string;\n}\n\nexport const Input: React.FC<InputProps> = ({\n label,\n errorMessage,\n helperText,\n containerStyle,\n style,\n isLoading,\n error,\n changeEvent,\n focusEvent,\n onChangeText,\n onFocus,\n onBlur,\n ...textInputProps\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleChangeText = (text: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { value: text });\n }\n onChangeText?.(text);\n };\n\n const handleFocus = () => {\n if (focusEvent) {\n eventBus.emit(`UI:${focusEvent}`);\n }\n onFocus?.({} as never);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n const errorText = error?.message || errorMessage;\n\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <TextInput\n style={[\n styles.input,\n {\n borderColor: errorText ? theme.colors.error : theme.colors.border,\n backgroundColor: theme.colors.card,\n color: theme.colors.foreground,\n },\n style,\n ]}\n placeholderTextColor={theme.colors['muted-foreground']}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={onBlur}\n {...textInputProps}\n />\n {errorText ? (\n <Text style={[styles.errorText, { color: theme.colors.error }]}>\n {errorText}\n </Text>\n ) : helperText ? (\n <Text style={[styles.helperText, { color: theme.colors['muted-foreground'] }]}>\n {helperText}\n </Text>\n ) : null}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n input: {\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 16,\n },\n errorText: {\n fontSize: 12,\n marginTop: 4,\n },\n helperText: {\n fontSize: 12,\n marginTop: 4,\n },\n});\n\nInput.displayName = 'Input';\n","import React, { useState } from 'react';\nimport { \n TouchableOpacity, \n View, \n Text, \n StyleSheet, \n ViewStyle,\n TextStyle,\n Modal,\n FlatList,\n SafeAreaView,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n style?: ViewStyle;\n textStyle?: TextStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload base to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select...',\n disabled = false,\n style,\n textStyle,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [isOpen, setIsOpen] = useState(false);\n\n const selectedOption = options.find(opt => opt.value === value);\n\n const handleSelect = (selectedValue: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, value: selectedValue });\n }\n onChange?.(selectedValue);\n setIsOpen(false);\n };\n\n const handleOpen = () => {\n if (!disabled && !isLoading) {\n setIsOpen(true);\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 <>\n <TouchableOpacity\n onPress={handleOpen}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.button,\n {\n borderColor: theme.colors.border,\n backgroundColor: theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n <Text\n style={[\n styles.buttonText,\n {\n color: selectedOption \n ? theme.colors.foreground \n : theme.colors['muted-foreground'],\n },\n textStyle,\n ]}\n numberOfLines={1}\n >\n {selectedOption?.label || placeholder}\n </Text>\n <Text style={[styles.chevron, { color: theme.colors['muted-foreground'] }]}>\n ▼\n </Text>\n </TouchableOpacity>\n\n <Modal\n visible={isOpen}\n transparent\n animationType=\"slide\"\n onRequestClose={() => setIsOpen(false)}\n >\n <SafeAreaView style={[styles.modalContainer, { backgroundColor: theme.colors.background }]}>\n <View style={styles.modalHeader}>\n <TouchableOpacity onPress={() => setIsOpen(false)}>\n <Text style={[styles.closeButton, { color: theme.colors.primary }]}>\n Close\n </Text>\n </TouchableOpacity>\n </View>\n <FlatList\n data={options}\n keyExtractor={(item) => item.value}\n renderItem={({ item }) => (\n <TouchableOpacity\n style={[\n styles.option,\n {\n backgroundColor: item.value === value \n ? theme.colors.primary \n : theme.colors.card,\n borderBottomColor: theme.colors.border,\n },\n ]}\n onPress={() => handleSelect(item.value)}\n >\n <Text\n style={{\n color: item.value === value \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground,\n }}\n >\n {item.label}\n </Text>\n </TouchableOpacity>\n )}\n />\n </SafeAreaView>\n </Modal>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n button: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n },\n buttonText: {\n fontSize: 16,\n flex: 1,\n },\n chevron: {\n fontSize: 12,\n marginLeft: 8,\n },\n modalContainer: {\n flex: 1,\n },\n modalHeader: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n padding: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n },\n closeButton: {\n fontSize: 16,\n fontWeight: '500',\n },\n option: {\n padding: 16,\n borderBottomWidth: 1,\n },\n});\n\nSelect.displayName = 'Select';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle, TouchableOpacity } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CardProps {\n children: React.ReactNode;\n onPress?: () => void;\n style?: ViewStyle | ViewStyle[] | undefined;\n padding?: 'none' | 'sm' | 'md' | 'lg';\n variant?: 'default' | 'elevated' | 'outlined';\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 event name - emits UI:${action} via eventBus on press */\n action?: string;\n /** Payload to include with the action event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Card: React.FC<CardProps> = ({\n children,\n onPress,\n style,\n padding = 'md',\n variant = 'default',\n isLoading,\n error,\n action,\n actionPayload,\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.card, style]}>\n <LoadingState />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.card, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const paddingStyles: Record<string, ViewStyle> = {\n none: { padding: 0 },\n sm: { padding: theme.spacing[3] },\n md: { padding: theme.spacing[4] },\n lg: { padding: theme.spacing[6] },\n };\n\n const variantStyles: Record<string, ViewStyle> = {\n default: {\n backgroundColor: theme.colors.card,\n ...theme.shadows.main,\n },\n elevated: {\n backgroundColor: theme.colors.card,\n ...theme.shadows.lg,\n },\n outlined: {\n backgroundColor: theme.colors.card,\n borderWidth: 1,\n borderColor: theme.colors.border,\n ...theme.shadows.none,\n },\n };\n\n const cardStyles: ViewStyle[] = [\n styles.card,\n variantStyles[variant],\n paddingStyles[padding],\n ];\n\n if (Array.isArray(style)) {\n cardStyles.push(...style);\n } else if (style) {\n cardStyles.push(style);\n }\n\n const content = <View style={cardStyles}>{children}</View>;\n\n if (onPress || action) {\n return (\n <TouchableOpacity onPress={handlePress} activeOpacity={0.9}>\n {content}\n </TouchableOpacity>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n card: {\n borderRadius: 12,\n },\n});\n\nCard.displayName = 'Card';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport type BadgeVariant = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\nexport type BadgeSize = 'sm' | 'md';\n\nexport interface BadgeProps {\n children: React.ReactNode;\n variant?: BadgeVariant;\n size?: BadgeSize;\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 Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n size = 'md',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.badge, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.badge, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const variantStyles: Record<BadgeVariant, { container: ViewStyle; text: TextStyle }> = {\n default: {\n container: {\n backgroundColor: theme.colors.secondary,\n },\n text: {\n color: theme.colors['secondary-foreground'],\n },\n },\n primary: {\n container: {\n backgroundColor: theme.colors.primary,\n },\n text: {\n color: theme.colors['primary-foreground'],\n },\n },\n secondary: {\n container: {\n backgroundColor: theme.colors['secondary-hover'],\n },\n text: {\n color: theme.colors['secondary-foreground'],\n },\n },\n success: {\n container: {\n backgroundColor: theme.colors.success,\n },\n text: {\n color: theme.colors['success-foreground'],\n },\n },\n warning: {\n container: {\n backgroundColor: theme.colors.warning,\n },\n text: {\n color: theme.colors['warning-foreground'],\n },\n },\n error: {\n container: {\n backgroundColor: theme.colors.error,\n },\n text: {\n color: theme.colors['error-foreground'],\n },\n },\n };\n\n const sizeStyles: Record<BadgeSize, { container: ViewStyle; text: TextStyle }> = {\n sm: {\n container: {\n paddingHorizontal: theme.spacing[2],\n paddingVertical: 2,\n borderRadius: theme.borderRadius.full,\n },\n text: {\n fontSize: theme.typography.sizes.xs,\n },\n },\n md: {\n container: {\n paddingHorizontal: theme.spacing[3],\n paddingVertical: theme.spacing[1],\n borderRadius: theme.borderRadius.full,\n },\n text: {\n fontSize: theme.typography.sizes.sm,\n },\n },\n };\n\n const variantStyle = variantStyles[variant];\n const sizeStyle = sizeStyles[size];\n\n return (\n <View style={[styles.badge, variantStyle.container, sizeStyle.container, style]}>\n <Text style={[styles.text, variantStyle.text, sizeStyle.text]}>{children}</Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n badge: {\n alignSelf: 'flex-start',\n },\n text: {\n fontWeight: '500',\n },\n});\n\nBadge.displayName = 'Badge';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle, Text } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface ProgressBarProps {\n progress: number; // 0 to 100\n showLabel?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n trackStyle?: ViewStyle;\n fillStyle?: 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 ProgressBar: React.FC<ProgressBarProps> = ({\n progress,\n showLabel = false,\n size = 'md',\n style,\n trackStyle,\n fillStyle,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const clampedProgress = Math.max(0, Math.min(100, progress));\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 heightMap: Record<string, number> = {\n sm: 4,\n md: 8,\n lg: 12,\n };\n\n const height = heightMap[size];\n\n return (\n <View style={[styles.container, style]}>\n <View\n style={[\n styles.track,\n {\n height,\n backgroundColor: theme.colors.muted,\n borderRadius: height / 2,\n },\n trackStyle,\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${clampedProgress}%`,\n height: '100%',\n backgroundColor: theme.colors.primary,\n borderRadius: height / 2,\n },\n fillStyle,\n ]}\n />\n </View>\n {showLabel && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {Math.round(clampedProgress)}%\n </Text>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n track: {\n width: '100%',\n overflow: 'hidden',\n },\n fill: {\n // Animated fill\n },\n label: {\n marginTop: 4,\n fontSize: 12,\n fontWeight: '500',\n textAlign: 'right',\n },\n});\n\nProgressBar.displayName = 'ProgressBar';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nexport interface HealthBarProps {\n /** Current health value */\n current: number;\n /** Maximum health value */\n max: number;\n /** Display format */\n format?: 'hearts' | 'bar' | 'numeric';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional styles */\n style?: ViewStyle;\n /** Animation on change */\n animated?: boolean;\n}\n\nconst sizeMap = {\n sm: { heart: 16, bar: 8, text: 12 },\n md: { heart: 24, bar: 12, text: 16 },\n lg: { heart: 32, bar: 16, text: 20 },\n};\n\nconst HeartIcon: React.FC<{ filled: boolean; size: number; color: string }> = ({ \n filled, \n size, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n color \n}) => (\n <View\n style={{\n width: size,\n height: size,\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Text\n style={{\n fontSize: size * 0.8,\n color: filled ? '#ef4444' : '#9ca3af',\n }}\n >\n {filled ? '♥' : '♡'}\n </Text>\n </View>\n);\n\nexport const HealthBar: React.FC<HealthBarProps> = ({\n current,\n max,\n format = 'hearts',\n size = 'md',\n style,\n animated = true,\n}) => {\n const theme = useTheme();\n const sizes = sizeMap[size];\n const percentage = Math.max(0, Math.min(100, (current / max) * 100));\n\n if (format === 'hearts') {\n return (\n <View style={[styles.heartsContainer, style]}>\n {Array.from({ length: max }).map((_, i) => (\n <View\n key={i}\n style={[\n animated && styles.animatedHeart,\n ]}\n >\n <HeartIcon\n filled={i < current}\n size={sizes.heart}\n color={theme.colors.error}\n />\n </View>\n ))}\n </View>\n );\n }\n\n if (format === 'bar') {\n const barColor = percentage > 66 \n ? '#22c55e' // green\n : percentage > 33 \n ? '#eab308' // yellow\n : '#ef4444'; // red\n\n return (\n <View\n style={[\n styles.barContainer,\n {\n height: sizes.bar,\n backgroundColor: theme.colors.muted,\n },\n style,\n ]}\n >\n <View\n style={[\n styles.barFill,\n {\n width: `${percentage}%`,\n backgroundColor: barColor,\n },\n animated && styles.animatedBar,\n ]}\n />\n </View>\n );\n }\n\n // Numeric format\n return (\n <Text\n style={[\n styles.numericText,\n {\n fontSize: sizes.text,\n color: theme.colors.foreground,\n },\n style as never,\n ]}\n >\n {current}/{max}\n </Text>\n );\n};\n\nconst styles = StyleSheet.create({\n heartsContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n },\n animatedHeart: {\n // React Native transform animation could be added here\n },\n barContainer: {\n width: 96,\n borderRadius: 9999,\n overflow: 'hidden',\n },\n barFill: {\n height: '100%',\n borderRadius: 9999,\n },\n animatedBar: {\n // LayoutAnimation could be configured\n },\n numericText: {\n fontFamily: 'monospace',\n fontWeight: '700',\n },\n});\n\nHealthBar.displayName = 'HealthBar';\n","import React, { useState, useEffect } from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nexport interface ScoreDisplayProps {\n /** Current score value */\n value: number;\n /** Label to display before score */\n label?: string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** Additional styles */\n style?: ViewStyle;\n /** Animation on value change */\n animated?: boolean;\n /** Number formatting locale */\n locale?: string;\n}\n\nconst sizeMap: Record<string, { fontSize: number }> = {\n sm: { fontSize: 14 },\n md: { fontSize: 18 },\n lg: { fontSize: 24 },\n xl: { fontSize: 36 },\n};\n\nexport const ScoreDisplay: React.FC<ScoreDisplayProps> = ({\n value,\n label,\n icon,\n size = 'md',\n style,\n animated = true,\n locale = 'en-US',\n}) => {\n const theme = useTheme();\n const [displayValue, setDisplayValue] = useState(value);\n const [isAnimating, setIsAnimating] = useState(false);\n\n const sizeConfig = sizeMap[size] ?? sizeMap.md;\n\n useEffect(() => {\n if (!animated || displayValue === value) {\n setDisplayValue(value);\n return;\n }\n\n setIsAnimating(true);\n const diff = value - displayValue;\n const steps = Math.min(Math.abs(diff), 20);\n const increment = diff / steps;\n let current = displayValue;\n let step = 0;\n\n const timer = setInterval(() => {\n step++;\n current += increment;\n setDisplayValue(Math.round(current));\n\n if (step >= steps) {\n clearInterval(timer);\n setDisplayValue(value);\n setIsAnimating(false);\n }\n }, 50);\n\n return () => clearInterval(timer);\n }, [value, animated]);\n\n const formattedValue = new Intl.NumberFormat(locale).format(displayValue);\n\n return (\n <View\n style={[\n styles.container,\n {\n opacity: isAnimating ? 0.7 : 1,\n },\n style as never,\n ]}\n >\n {icon && (\n <Text style={{ fontSize: sizeConfig.fontSize, marginRight: 8 }}>\n {icon as string}\n </Text>\n )}\n {label && (\n <Text\n style={{\n fontSize: sizeConfig.fontSize,\n color: theme.colors['muted-foreground'],\n marginRight: 8,\n }}\n >\n {label}\n </Text>\n )}\n <Text\n style={{\n fontSize: sizeConfig.fontSize,\n color: theme.colors.foreground,\n fontWeight: '700',\n fontVariant: ['tabular-nums'],\n }}\n >\n {formattedValue}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n});\n\nScoreDisplay.displayName = 'ScoreDisplay';\n"],"mappings":"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","names":["React","ActivityIndicator","StyleSheet","React","StyleSheet","React","StyleSheet","React","Text","StyleSheet","React","styles","Text","StyleSheet","React","styles","StyleSheet","React","styles","StyleSheet","React","styles","ActivityIndicator","StyleSheet","React","StyleSheet","View","Text","React","View","styles","Text","StyleSheet","React","TouchableOpacity","View","Text","StyleSheet","React","View","styles","TouchableOpacity","Text","StyleSheet","React","View","StyleSheet","TouchableOpacity","React","View","styles","TouchableOpacity","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet","React","View","StyleSheet","Text","React","View","styles","Text","StyleSheet","React","View","Text","StyleSheet","React","View","Text","styles","StyleSheet","React","useState","View","Text","StyleSheet","sizeMap","useState","React","View","styles","Text","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/atoms/Center.tsx","../src/components/atoms/Radio.tsx","../src/components/atoms/Switch.tsx","../src/components/atoms/Textarea.tsx","../src/components/atoms/Spinner.tsx","../src/components/atoms/Avatar.tsx","../src/components/atoms/Overlay.tsx","../src/components/atoms/Spacer.tsx","../src/components/atoms/ConditionalWrapper.tsx","../src/components/atoms/game/Sprite.tsx","../src/components/atoms/game/StateIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CenterProps {\n children: React.ReactNode;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Center: React.FC<CenterProps> = ({\n children,\n style,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n {children}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nCenter.displayName = 'Center';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface RadioProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { outer: number; inner: number }> = {\n sm: { outer: 18, inner: 8 },\n md: { outer: 24, inner: 10 },\n lg: { outer: 32, inner: 14 },\n };\n\n const { outer, inner } = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n width: outer,\n height: outer,\n borderRadius: outer / 2,\n borderWidth: 2,\n borderColor: checked \n ? theme.colors.primary \n : theme.colors.border,\n backgroundColor: theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n {checked && (\n <View\n style={{\n width: inner,\n height: inner,\n borderRadius: inner / 2,\n backgroundColor: theme.colors.primary,\n }}\n />\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nRadio.displayName = 'Radio';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle,\n Animated \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateX = React.useRef(new Animated.Value(checked ? 1 : 0)).current;\n\n React.useEffect(() => {\n const { width } = sizeStyles[size];\n const thumbWidth = width * 0.4;\n const travelDistance = width - thumbWidth - 4;\n \n Animated.timing(translateX, {\n toValue: checked ? travelDistance : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, size]);\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { width: number; height: number }> = {\n sm: { width: 36, height: 20 },\n md: { width: 48, height: 28 },\n lg: { width: 60, height: 36 },\n };\n\n const { width, height } = sizeStyles[size];\n const thumbSize = height - 4;\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.track,\n {\n width,\n height,\n borderRadius: height / 2,\n backgroundColor: checked \n ? theme.colors.primary \n : theme.colors['muted-foreground'],\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: thumbSize,\n height: thumbSize,\n borderRadius: thumbSize / 2,\n backgroundColor: theme.colors['primary-foreground'],\n transform: [{ translateX }],\n },\n ]}\n />\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n track: {\n justifyContent: 'center',\n padding: 2,\n },\n thumb: {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 2,\n elevation: 2,\n },\n});\n\nSwitch.displayName = 'Switch';\n","import React from 'react';\nimport { \n TextInput, \n TextInputProps, \n StyleSheet, \n View, \n Text,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\n\nexport interface TextareaProps extends Omit<TextInputProps, 'onChange' | 'multiline'> {\n label?: string;\n /** String error message for form validation */\n errorMessage?: string;\n helperText?: string;\n containerStyle?: ViewStyle;\n numberOfLines?: number;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state object */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Declarative focus event name - emits UI:${focusEvent} via eventBus */\n focusEvent?: string;\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n label,\n errorMessage,\n helperText,\n containerStyle,\n style,\n numberOfLines = 4,\n isLoading,\n error,\n changeEvent,\n focusEvent,\n onChangeText,\n onFocus,\n ...textInputProps\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleChangeText = (text: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { value: text });\n }\n onChangeText?.(text);\n };\n\n const handleFocus = () => {\n if (focusEvent) {\n eventBus.emit(`UI:${focusEvent}`);\n }\n onFocus?.({} as never);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n const errorText = error?.message || errorMessage;\n\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <TextInput\n multiline\n numberOfLines={numberOfLines}\n textAlignVertical=\"top\"\n style={[\n styles.textarea,\n {\n borderColor: errorText ? theme.colors.error : theme.colors.border,\n backgroundColor: theme.colors.card,\n color: theme.colors.foreground,\n },\n style,\n ]}\n placeholderTextColor={theme.colors['muted-foreground']}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n {...textInputProps}\n />\n {errorText ? (\n <Text style={[styles.errorText, { color: theme.colors.error }]}>\n {errorText}\n </Text>\n ) : helperText ? (\n <Text style={[styles.helperText, { color: theme.colors['muted-foreground'] }]}>\n {helperText}\n </Text>\n ) : null}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n textarea: {\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 16,\n minHeight: 100,\n },\n errorText: {\n fontSize: 12,\n marginTop: 4,\n },\n helperText: {\n fontSize: 12,\n marginTop: 4,\n },\n});\n\nTextarea.displayName = 'Textarea';\n","import React from 'react';\nimport { ActivityIndicator, StyleSheet, View, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface SpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color,\n style,\n}) => {\n const theme = useTheme();\n\n const sizeMap: Record<string, number> = {\n sm: 16,\n md: 24,\n lg: 32,\n };\n\n return (\n <View style={[styles.container, style]}>\n <ActivityIndicator\n size={sizeMap[size]}\n color={color || theme.colors.primary}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nSpinner.displayName = 'Spinner';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Image,\n ImageSourcePropType \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface AvatarProps {\n src?: ImageSourcePropType;\n alt?: string;\n initials?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n initials,\n size = 'md',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const sizeMap: Record<string, { container: number; fontSize: number }> = {\n sm: { container: 32, fontSize: 12 },\n md: { container: 40, fontSize: 14 },\n lg: { container: 48, fontSize: 16 },\n xl: { container: 64, fontSize: 20 },\n };\n\n const { container, fontSize } = sizeMap[size];\n\n if (isLoading) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <LoadingState message=\"\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getInitials = () => {\n if (initials) return initials;\n if (alt) {\n return alt\n .split(' ')\n .map(n => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n }\n return '?';\n };\n\n if (src) {\n return (\n <Image\n source={src}\n style={[\n styles.image,\n { \n width: container, \n height: container, \n borderRadius: container / 2 \n },\n style as never,\n ]}\n accessibilityLabel={alt}\n />\n );\n }\n\n return (\n <View\n style={[\n styles.container,\n {\n width: container,\n height: container,\n borderRadius: container / 2,\n backgroundColor: theme.colors.primary,\n },\n style,\n ]}\n >\n <Text\n style={[\n styles.initials,\n {\n fontSize,\n color: theme.colors['primary-foreground'],\n },\n ]}\n >\n {getInitials()}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n resizeMode: 'cover',\n },\n initials: {\n fontWeight: '600',\n },\n});\n\nAvatar.displayName = 'Avatar';\n","import React from 'react';\nimport { \n TouchableWithoutFeedback, \n View,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isVisible?: boolean;\n /** Called when overlay is pressed */\n onPress?: () => void;\n /** Whether to apply blur effect (iOS only) */\n blur?: boolean;\n /** Declarative event name — emits UI:{action} via eventBus on press */\n action?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const Overlay: React.FC<OverlayProps> = ({\n isVisible = true,\n onPress,\n blur = true,\n action,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n if (!isVisible) return null;\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, {});\n }\n onPress?.();\n };\n\n return (\n <TouchableWithoutFeedback onPress={handlePress}>\n <View \n style={[\n styles.overlay,\n { \n backgroundColor: theme.colors.background,\n opacity: 0.8,\n },\n blur && styles.blur,\n ...(style ? [style] : []),\n ]}\n pointerEvents=\"auto\"\n />\n </TouchableWithoutFeedback>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 40,\n },\n blur: {\n // Note: For actual blur effect on iOS, use @react-native-community/blur\n // This is a fallback opacity-based overlay\n },\n});\n\nOverlay.displayName = 'Overlay';\n","import React from 'react';\nimport { View, ViewStyle } from 'react-native';\n\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n\nexport interface SpacerProps {\n /** Fixed size (auto = flex grow) */\n size?: SpacerSize;\n /** Orientation (for fixed sizes) */\n axis?: 'horizontal' | 'vertical';\n /** Custom style */\n style?: ViewStyle;\n}\n\nconst sizeValues: Record<Exclude<SpacerSize, 'auto'>, number> = {\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n};\n\n/**\n * Spacer - Flexible spacing element for flex layouts\n * \n * Usage:\n * - size=\"auto\" (default): Expands to fill available space (flex: 1)\n * - size=\"md\": Fixed size spacing\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'auto',\n axis = 'horizontal',\n style,\n}) => {\n if (size === 'auto') {\n return (\n <View \n style={[{ flex: 1 }, ...(style ? [style] : [])]} \n accessibilityElementsHidden\n />\n );\n }\n\n const sizeValue = sizeValues[size];\n const spacerStyle: ViewStyle = axis === 'horizontal' \n ? { width: sizeValue }\n : { height: sizeValue };\n\n return (\n <View \n style={[\n spacerStyle,\n ...(style ? [style] : []),\n ]} \n accessibilityElementsHidden\n />\n );\n};\n\nSpacer.displayName = 'Spacer';\n","/**\n * ConditionalWrapper Atom Component\n *\n * A wrapper component that conditionally renders its children based on\n * condition evaluation. Used for dynamic field visibility in forms.\n * \n * Note: S-expression evaluation requires @almadar/evaluator to be installed.\n * For now, this uses a simplified condition evaluator.\n */\n\nimport React from 'react';\nimport { Animated, ViewStyle } from 'react-native';\n\nexport interface ConditionalContext {\n formValues: Record<string, unknown>;\n globalVariables: Record<string, unknown>;\n localVariables?: Record<string, unknown>;\n entity?: Record<string, unknown>;\n}\n\nexport type Condition = \n | boolean \n | string \n | [string, string, unknown] // [operator, field, value]\n | ((context: ConditionalContext) => boolean);\n\nexport interface ConditionalWrapperProps {\n /** The condition to evaluate (boolean, expression tuple, or function) */\n condition?: Condition;\n /** Context for evaluating the condition */\n context?: ConditionalContext;\n /** Children to render when condition is true */\n children: React.ReactNode;\n /** Optional fallback to render when condition is false */\n fallback?: React.ReactNode;\n /** Whether to animate the transition */\n animate?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/**\n * Simple condition evaluator\n * Supports: boolean, comparison tuples like [\"=\", \"fieldName\", \"value\"], or functions\n */\nfunction evaluateCondition(\n condition: Condition, \n context: ConditionalContext = { formValues: {}, globalVariables: {} }\n): boolean {\n // Boolean condition\n if (typeof condition === 'boolean') {\n return condition;\n }\n\n // Function condition\n if (typeof condition === 'function') {\n return condition(context);\n }\n\n // Expression tuple: [operator, field, value]\n if (Array.isArray(condition) && condition.length === 3) {\n const [operator, fieldPath, expectedValue] = condition;\n \n // Parse field path (e.g., \"formValues.myField\" or \"globalVariables.HG_VAR\")\n const parts = String(fieldPath).split('.');\n let actualValue: unknown;\n \n if (parts[0] === 'formValues' && parts[1]) {\n actualValue = context.formValues?.[parts[1]];\n } else if (parts[0] === 'globalVariables' && parts[1]) {\n actualValue = context.globalVariables?.[parts[1]];\n } else if (parts[0] === 'localVariables' && parts[1]) {\n actualValue = context.localVariables?.[parts[1]];\n } else if (parts[0] && context.entity?.[parts[0]]) {\n actualValue = context.entity[parts[0]];\n }\n\n switch (operator) {\n case '=':\n case '==':\n return actualValue === expectedValue;\n case '!=':\n return actualValue !== expectedValue;\n case '>':\n return Number(actualValue) > Number(expectedValue);\n case '>=':\n return Number(actualValue) >= Number(expectedValue);\n case '<':\n return Number(actualValue) < Number(expectedValue);\n case '<=':\n return Number(actualValue) <= Number(expectedValue);\n case 'includes':\n return Array.isArray(actualValue) && actualValue.includes(expectedValue);\n default:\n return false;\n }\n }\n\n // String truthiness\n return Boolean(condition);\n}\n\nexport const ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({\n condition,\n context = { formValues: {}, globalVariables: {} },\n children,\n fallback = null,\n animate = false,\n style,\n}) => {\n const [isVisible, setIsVisible] = React.useState(!condition ? true : false);\n const fadeAnim = React.useRef(new Animated.Value(!condition ? 1 : 0)).current;\n\n React.useEffect(() => {\n if (!condition) {\n setIsVisible(true);\n return;\n }\n\n const visible = evaluateCondition(condition, context);\n \n setIsVisible(visible);\n\n if (animate) {\n Animated.timing(fadeAnim, {\n toValue: visible ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(visible ? 1 : 0);\n }\n }, [condition, context, animate, fadeAnim]);\n\n if (!condition) {\n return <>{children}</>;\n }\n\n if (animate) {\n return (\n <Animated.View\n style={[\n { opacity: fadeAnim, overflow: 'hidden' },\n ...(style ? [style] : []),\n ]}\n >\n {isVisible ? children : fallback}\n </Animated.View>\n );\n }\n\n return isVisible ? <>{children}</> : <>{fallback}</>;\n};\n\nConditionalWrapper.displayName = 'ConditionalWrapper';\n","import React, { useMemo } from 'react';\nimport { \n View, \n Image, \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n ImageSourcePropType \n} from 'react-native';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface SpriteProps {\n /** Spritesheet image URL or require */\n spritesheet: ImageSourcePropType;\n /** Width of each frame in pixels */\n frameWidth: number;\n /** Height of each frame in pixels */\n frameHeight: number;\n /** Frame index to display (0-based, left-to-right, top-to-bottom) */\n frame: number;\n /** X position in pixels */\n x: number;\n /** Y position in pixels */\n y: number;\n /** Scale factor (default: 1) */\n scale?: number;\n /** Flip horizontally */\n flipX?: boolean;\n /** Flip vertically */\n flipY?: boolean;\n /** Rotation in degrees */\n rotation?: number;\n /** Opacity (0-1) */\n opacity?: number;\n /** Z-index for layering */\n zIndex?: number;\n /** Number of columns in spritesheet (for frame calculation) */\n columns?: number;\n /** Optional style */\n style?: ViewStyle;\n /** Optional onPress handler */\n onPress?: () => void;\n /** Declarative event name emitted on press via useEventBus */\n action?: string;\n}\n\n/**\n * Sprite component for rendering spritesheet frames\n */\nexport const Sprite: React.FC<SpriteProps> = ({\n spritesheet,\n frameWidth,\n frameHeight,\n frame,\n x,\n y,\n scale = 1,\n flipX = false,\n flipY = false,\n rotation = 0,\n opacity = 1,\n zIndex = 0,\n columns = 16,\n style,\n onPress,\n action,\n}) => {\n const eventBus = useEventBus();\n\n // Calculate source position in spritesheet\n const sourcePosition = useMemo(() => {\n const frameX = frame % columns;\n const frameY = Math.floor(frame / columns);\n return {\n x: frameX * frameWidth,\n y: frameY * frameHeight,\n };\n }, [frame, columns, frameWidth, frameHeight]);\n\n const handlePress = () => {\n if (action) eventBus.emit(`UI:${action}`, {});\n onPress?.();\n };\n\n const transform = [\n { translateX: x },\n { translateY: y },\n { scale: scale },\n { rotate: `${rotation}deg` },\n { scaleX: flipX ? -1 : 1 },\n { scaleY: flipY ? -1 : 1 },\n ];\n\n const Container = (action || onPress) ? TouchableOpacity : View;\n\n return (\n <Container\n onPress={(action || onPress) ? handlePress : undefined}\n style={[\n styles.container,\n {\n width: frameWidth,\n height: frameHeight,\n transform,\n opacity,\n zIndex,\n },\n style as never,\n ]}\n >\n <View\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n position: 'absolute',\n left: -sourcePosition.x,\n top: -sourcePosition.y,\n overflow: 'hidden',\n }}\n >\n <Image\n source={spritesheet}\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n resizeMode: 'stretch',\n }}\n />\n </View>\n </Container>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n overflow: 'hidden',\n },\n});\n\nSprite.displayName = 'Sprite';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nexport interface StateStyle {\n icon: string;\n backgroundColor: string;\n}\n\nexport interface StateIndicatorProps {\n /** The current state name */\n state: string;\n /** Optional label override (defaults to capitalized state name) */\n label?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show pulse animation on non-idle states */\n animated?: boolean;\n /** Custom state styles to extend/override defaults */\n stateStyles?: Record<string, StateStyle>;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst DEFAULT_STATE_STYLES: Record<string, StateStyle> = {\n idle: { icon: '⏸', backgroundColor: '#6b7280' },\n active: { icon: '▶', backgroundColor: '#22c55e' },\n sleeping: { icon: '💤', backgroundColor: '#6b7280' },\n moving: { icon: '🚶', backgroundColor: '#3b82f6' },\n eating: { icon: '🍽', backgroundColor: '#22c55e' },\n waiting: { icon: '⏳', backgroundColor: '#eab308' },\n happy: { icon: '😊', backgroundColor: '#22c55e' },\n scared: { icon: '😨', backgroundColor: '#ef4444' },\n done: { icon: '✓', backgroundColor: '#22c55e' },\n error: { icon: '✗', backgroundColor: '#ef4444' },\n ready: { icon: '✓', backgroundColor: '#22c55e' },\n cooldown: { icon: '🔄', backgroundColor: '#eab308' },\n};\n\nconst DEFAULT_STYLE: StateStyle = { icon: '?', backgroundColor: '#6b7280' };\n\nconst SIZE_STYLES: Record<string, { padding: number; fontSize: number }> = {\n sm: { padding: 4, fontSize: 10 },\n md: { padding: 8, fontSize: 12 },\n lg: { padding: 12, fontSize: 14 },\n};\n\nexport const StateIndicator: React.FC<StateIndicatorProps> = ({\n state,\n label,\n size = 'md',\n animated = true,\n stateStyles,\n style,\n}) => {\n const theme = useTheme();\n const mergedStyles = stateStyles\n ? { ...DEFAULT_STATE_STYLES, ...stateStyles }\n : DEFAULT_STATE_STYLES;\n const config = mergedStyles[state.toLowerCase()] || DEFAULT_STYLE;\n const displayLabel = label || state.charAt(0).toUpperCase() + state.slice(1);\n const sizeStyles = SIZE_STYLES[size];\n const shouldAnimate = animated && \n state.toLowerCase() !== 'idle' && \n state.toLowerCase() !== 'done';\n\n return (\n <View\n style={[\n styles.container,\n {\n backgroundColor: config.backgroundColor,\n paddingHorizontal: sizeStyles.padding,\n paddingVertical: sizeStyles.padding * 0.5,\n opacity: shouldAnimate ? 0.8 : 1,\n },\n style as never,\n ]}\n >\n <Text style={{ fontSize: sizeStyles.fontSize, marginRight: 4 }}>\n {config.icon}\n </Text>\n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['primary-foreground'],\n fontWeight: '500',\n }}\n >\n {displayLabel}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 9999,\n },\n});\n\nStateIndicator.displayName = 'StateIndicator';\n"],"mappings":"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","names":["React","View","StyleSheet","React","View","styles","StyleSheet","React","TouchableOpacity","View","StyleSheet","React","width","View","styles","TouchableOpacity","StyleSheet","React","StyleSheet","View","React","View","styles","StyleSheet","React","StyleSheet","View","React","View","styles","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","React","Animated","React","View","Image","TouchableOpacity","StyleSheet","TouchableOpacity","View","React","styles","Image","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/molecules/EmptyState.tsx","../src/components/molecules/List.tsx","../src/components/molecules/Modal.tsx","../src/components/molecules/Drawer.tsx","../src/components/molecules/Tabs.tsx","../src/components/molecules/Toast.tsx","../src/components/molecules/CodeBlock.tsx","../src/components/molecules/game/StatBadge.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet } from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nexport interface EmptyStateProps {\n message?: string;\n icon?: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No data available',\n icon,\n}) => {\n return (\n <VStack align=\"center\" spacing={12} style={styles.container}>\n {icon}\n <Typography variant=\"body\" color=\"#6b7280\">\n {message}\n </Typography>\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nEmptyState.displayName = 'EmptyState';\n","import React from 'react';\nimport { \n FlatList, \n FlatListProps\n} from 'react-native';\nimport { EmptyState } from './EmptyState';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface ListProps<T> extends Omit<FlatListProps<T>, 'renderItem'> {\n data: T[];\n renderItem: (item: T) => React.ReactElement;\n keyExtractor: (item: T) => string;\n isLoading?: boolean;\n isError?: boolean;\n onRetry?: () => void;\n emptyMessage?: string;\n}\n\nexport function List<T>({\n data,\n renderItem,\n keyExtractor,\n isLoading,\n isError,\n onRetry,\n emptyMessage = 'No items found',\n ...flatListProps\n}: ListProps<T>) {\n if (isLoading) {\n return <LoadingState />;\n }\n\n if (isError) {\n return <ErrorState onRetry={onRetry} />;\n }\n\n if (!data || data.length === 0) {\n return <EmptyState message={emptyMessage} />;\n }\n\n return (\n <FlatList\n data={data}\n renderItem={({ item }) => renderItem(item)}\n keyExtractor={keyExtractor}\n {...flatListProps}\n />\n );\n}\n\nList.displayName = 'List';\n","import React, { useCallback } from 'react';\nimport { \n Modal as RNModal, \n View, \n TouchableOpacity, \n StyleSheet,\n ViewStyle\n} from 'react-native';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n showCloseButton?: boolean;\n closeOnBackdrop?: boolean;\n animationType?: 'none' | 'slide' | 'fade';\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n showCloseButton = true,\n closeOnBackdrop = true,\n animationType = 'fade',\n ...modalProps\n}) => {\n const handleBackdropPress = useCallback(() => {\n if (closeOnBackdrop) {\n onClose();\n }\n }, [closeOnBackdrop, onClose]);\n\n const transparent = animationType !== 'slide';\n\n return (\n <RNModal\n visible={isOpen}\n animationType={animationType}\n transparent={transparent}\n onRequestClose={onClose}\n {...modalProps}\n >\n <TouchableOpacity\n style={styles.overlay}\n activeOpacity={1}\n onPress={handleBackdropPress}\n >\n <View style={styles.centeredView}>\n <TouchableOpacity activeOpacity={1} onPress={(e) => e.stopPropagation()}>\n <Card style={[styles.modalCard, styles[size] as ViewStyle]}>\n <VStack spacing={16}>\n {/* Header */}\n {title && (\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">{title}</Typography>\n {showCloseButton && (\n <TouchableOpacity onPress={onClose}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n )}\n </HStack>\n )}\n\n {/* Content */}\n <View>{children}</View>\n\n {/* Footer */}\n {footer && (\n <HStack justify=\"flex-end\" spacing={12}>\n {footer}\n </HStack>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n </View>\n </TouchableOpacity>\n </RNModal>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n centeredView: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 20,\n },\n modalCard: {\n width: '100%',\n maxWidth: 400,\n },\n sm: {\n maxWidth: 300,\n },\n md: {\n maxWidth: 400,\n },\n lg: {\n maxWidth: 600,\n },\n});\n\nModal.displayName = 'Modal';\n\n// Confirm Modal\nexport interface ConfirmModalProps extends Omit<ModalProps, 'children' | 'footer'> {\n message: string;\n onConfirm: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = 'Confirm',\n message = 'Are you sure you want to proceed?',\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n \n}) => {\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={\n <>\n <Typography variant=\"body\" color=\"#6b7280\" onPress={onClose}>\n {cancelLabel}\n </Typography>\n <Typography variant=\"body\" color=\"#ef4444\" onPress={onConfirm}>\n {confirmLabel}\n </Typography>\n </>\n }\n >\n <Typography variant=\"body\">{message}</Typography>\n </Modal>\n );\n};\n\nConfirmModal.displayName = 'ConfirmModal';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n placement?: 'left' | 'right';\n width?: number;\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n children,\n title,\n placement = 'right',\n width = SCREEN_WIDTH * 0.8,\n}) => {\n const translateX = React.useRef(\n new Animated.Value(placement === 'right' ? SCREEN_WIDTH : -SCREEN_WIDTH)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(translateX, {\n toValue: isOpen ? 0 : placement === 'right' ? width : -width,\n duration: 250,\n useNativeDriver: true,\n }).start();\n }, [isOpen, placement, translateX, width]);\n\n if (!isOpen) return null;\n\n return (\n <View style={styles.overlay}>\n {/* Backdrop */}\n <TouchableOpacity\n style={styles.backdrop}\n activeOpacity={1}\n onPress={onClose}\n />\n \n {/* Drawer Panel */}\n <Animated.View\n style={[\n styles.drawer,\n {\n width,\n [placement]: 0,\n transform: [{ translateX }],\n },\n ]}\n >\n <View style={styles.content}>\n {/* Header */}\n {(title || true) && (\n <View style={styles.header}>\n <TouchableOpacity onPress={onClose} style={styles.closeButton}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n </View>\n )}\n\n {/* Drawer Content */}\n <VStack spacing={0} style={styles.children}>\n {children}\n </VStack>\n </View>\n </Animated.View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n flexDirection: 'row',\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n drawer: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n backgroundColor: '#ffffff',\n shadowColor: '#000',\n shadowOffset: { width: -2, height: 0 },\n shadowOpacity: 0.25,\n shadowRadius: 5,\n elevation: 5,\n },\n content: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e5e7eb',\n gap: 12,\n },\n closeButton: {\n padding: 4,\n },\n children: {\n flex: 1,\n padding: 16,\n },\n});\n\nDrawer.displayName = 'Drawer';\n","import React, { useState } from 'react';\nimport { \n View, \n TouchableOpacity, \n StyleSheet, \n ViewStyle,\n ScrollView \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { HStack } from '../atoms/Stack';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n badge?: number;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n activeTab?: string;\n onChange?: (tabId: string) => void;\n style?: ViewStyle;\n variant?: 'default' | 'pills' | 'underlined';\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n activeTab,\n onChange,\n style,\n variant = 'default',\n isLoading,\n error,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalActiveTab, setInternalActiveTab] = useState(tabs[0]?.id);\n const currentTab = activeTab ?? internalActiveTab;\n\n const handleTabPress = (tabId: string) => {\n setInternalActiveTab(tabId);\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { tabId });\n }\n onChange?.(tabId);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getTabStyle = (isActive: boolean) => {\n switch (variant) {\n case 'pills':\n return {\n backgroundColor: isActive ? theme.colors.primary : 'transparent',\n borderRadius: theme.borderRadius.full,\n };\n case 'underlined':\n return {\n borderBottomWidth: 2,\n borderBottomColor: isActive ? theme.colors.primary : 'transparent',\n backgroundColor: 'transparent',\n };\n default:\n return {\n backgroundColor: isActive ? theme.colors.card : 'transparent',\n borderRadius: theme.borderRadius.md,\n ...theme.shadows.sm,\n };\n }\n };\n\n return (\n <View style={[styles.container, style]}>\n <ScrollView \n horizontal \n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.scrollContent}\n >\n <HStack spacing={8}>\n {tabs.map((tab) => {\n const isActive = currentTab === tab.id;\n return (\n <TouchableOpacity\n key={tab.id}\n onPress={() => handleTabPress(tab.id)}\n style={[\n styles.tab,\n getTabStyle(isActive),\n ]}\n >\n <HStack spacing={4} align=\"center\">\n {tab.icon}\n <Typography \n variant=\"body\" \n style={{ \n color: isActive && variant === 'pills' \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground \n }}\n >\n {tab.label}\n </Typography>\n {tab.badge !== undefined && tab.badge > 0 && (\n <View style={[styles.badge, { backgroundColor: theme.colors.error }]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['error-foreground'] }}>\n {tab.badge > 99 ? '99+' : tab.badge}\n </Typography>\n </View>\n )}\n </HStack>\n </TouchableOpacity>\n );\n })}\n </HStack>\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n scrollContent: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n tab: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n badge: {\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n});\n\nTabs.displayName = 'Tabs';\n","import React, { useEffect } from 'react';\nimport { \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n Animated\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastProps {\n id: string;\n message: string;\n variant?: ToastVariant;\n duration?: number;\n onDismiss?: (id: string) => void;\n dismissAction?: string;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Payload for dismiss action */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n id,\n message,\n variant = 'info',\n duration = 5000,\n onDismiss,\n dismissAction,\n style,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateY = React.useRef(new Animated.Value(-100)).current;\n const opacity = React.useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n ]).start();\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n handleDismiss();\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [duration]);\n\n const handleDismiss = () => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: -100,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }),\n ]).start(() => {\n if (dismissAction) {\n eventBus.emit(`UI:${dismissAction}`, { ...actionPayload, toastId: id });\n }\n onDismiss?.(id);\n });\n };\n\n const variantStyles: Record<ToastVariant, { bg: string }> = {\n info: { bg: theme.colors.info },\n success: { bg: theme.colors.success },\n warning: { bg: theme.colors.warning },\n error: { bg: theme.colors.error },\n };\n\n const { bg } = variantStyles[variant];\n const textColor = variant === 'warning' ? '#000000' : '#ffffff';\n\n return (\n <Animated.View\n style={[\n styles.container,\n { backgroundColor: bg },\n { transform: [{ translateY }], opacity },\n style,\n ]}\n >\n <HStack spacing={12} align=\"center\" justify=\"space-between\">\n <Typography variant=\"body\" style={{ color: textColor, flex: 1 }}>\n {message}\n </Typography>\n \n <TouchableOpacity onPress={handleDismiss} style={styles.dismiss}>\n <Typography variant=\"body\" style={{ color: textColor }}>\n ✕\n </Typography>\n </TouchableOpacity>\n </HStack>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 12,\n marginHorizontal: 16,\n marginVertical: 4,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 4,\n },\n dismiss: {\n padding: 4,\n },\n});\n\nToast.displayName = 'Toast';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { HStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface CodeBlockProps {\n /** Code content to display */\n code: string;\n /** Programming language for syntax highlighting hint */\n language?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Whether to show copy button */\n showCopyButton?: boolean;\n /** Whether to allow horizontal scrolling */\n scrollable?: boolean;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative copy event name - emits UI:${copyEvent} via eventBus */\n copyEvent?: string;\n}\n\n// Simple syntax highlighting tokens\ninterface Token {\n text: string;\n style: 'keyword' | 'string' | 'comment' | 'number' | 'function' | 'default';\n}\n\nconst KEYWORDS = [\n 'const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while',\n 'import', 'export', 'from', 'class', 'interface', 'type', 'async', 'await',\n 'try', 'catch', 'throw', 'new', 'this', 'true', 'false', 'null', 'undefined',\n];\n\nconst TOKEN_COLORS: Record<Token['style'], string> = {\n keyword: '#c678dd',\n string: '#98c379',\n comment: '#5c6370',\n number: '#d19a66',\n function: '#61afef',\n default: '#abb2bf',\n};\n\n/**\n * Simple tokenizer for basic syntax highlighting\n */\nconst tokenizeCode = (code: string): Token[][] => {\n const lines = code.split('\\n');\n\n return lines.map((line) => {\n const tokens: Token[] = [];\n let remaining = line;\n\n while (remaining.length > 0) {\n let matched = false;\n\n // Check for comments\n if (remaining.startsWith('//')) {\n tokens.push({ text: remaining, style: 'comment' });\n break;\n }\n\n // Check for strings (double quotes)\n if (remaining.startsWith('\"')) {\n const endIndex = remaining.indexOf('\"', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (single quotes)\n if (remaining.startsWith(\"'\")) {\n const endIndex = remaining.indexOf(\"'\", 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (template literals)\n if (remaining.startsWith('`')) {\n const endIndex = remaining.indexOf('`', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for numbers\n const numberMatch = remaining.match(/^\\d+(\\.\\d+)?/);\n if (numberMatch) {\n tokens.push({ text: numberMatch[0], style: 'number' });\n remaining = remaining.slice(numberMatch[0].length);\n matched = true;\n continue;\n }\n\n // Check for keywords and identifiers\n const wordMatch = remaining.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);\n if (wordMatch) {\n const word = wordMatch[0];\n const style: Token['style'] = KEYWORDS.includes(word) ? 'keyword' : 'default';\n tokens.push({ text: word, style });\n remaining = remaining.slice(word.length);\n matched = true;\n continue;\n }\n\n // Check for function calls (identifier followed by opening paren)\n const funcMatch = remaining.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(/);\n if (funcMatch && !KEYWORDS.includes(funcMatch[1])) {\n tokens.pop(); // Remove the identifier we just added\n tokens.push({ text: funcMatch[1], style: 'function' });\n tokens.push({ text: '(', style: 'default' });\n remaining = remaining.slice(funcMatch[0].length - 1);\n matched = true;\n continue;\n }\n\n // If nothing matched, take the first character as default\n if (!matched) {\n tokens.push({ text: remaining[0], style: 'default' });\n remaining = remaining.slice(1);\n }\n }\n\n return tokens;\n });\n};\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code,\n language,\n showLineNumbers = true,\n showCopyButton = true,\n scrollable = true,\n style,\n isLoading,\n error,\n copyEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleCopy = () => {\n if (copyEvent) {\n eventBus.emit(`UI:${copyEvent}`, { code, language });\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style || {}]}>\n <LoadingState message=\"Loading code...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, style || {}]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n const tokenizedLines = tokenizeCode(code);\n const lineNumberWidth = String(tokenizedLines.length).length * 10 + 16;\n\n const CodeContent = (\n <View style={styles.codeContainer}>\n {tokenizedLines.map((tokens, lineIndex) => (\n <View key={lineIndex} style={styles.line}>\n {showLineNumbers && (\n <View style={[styles.lineNumber, { width: lineNumberWidth }]}>\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n {lineIndex + 1}\n </Typography>\n </View>\n )}\n <View style={styles.lineContent}>\n {tokens.length === 0 ? (\n <Typography variant=\"body\"> </Typography>\n ) : (\n <Typography variant=\"body\">\n {tokens.map((token, tokenIndex) => (\n <Typography\n key={tokenIndex}\n variant=\"body\"\n style={{\n color: TOKEN_COLORS[token.style],\n fontFamily: 'monospace',\n }}\n >\n {token.text}\n </Typography>\n ))}\n </Typography>\n )}\n </View>\n </View>\n ))}\n </View>\n );\n\n return (\n <Card style={[styles.container, style || {}]} padding=\"none\">\n {(language || showCopyButton) && (\n <HStack\n spacing={8}\n align=\"center\"\n justify=\"space-between\"\n style={[\n styles.header,\n { backgroundColor: theme.colors.muted, borderBottomColor: theme.colors.border },\n ]}\n >\n {language ? (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n textTransform: 'uppercase',\n }}\n >\n {language}\n </Typography>\n ) : (\n <View />\n )}\n {showCopyButton && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleCopy}>\n Copy\n </Button>\n )}\n </HStack>\n )}\n\n {scrollable ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n {CodeContent}\n </ScrollView>\n ) : (\n CodeContent\n )}\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n borderBottomWidth: 1,\n },\n codeContainer: {\n padding: 16,\n },\n line: {\n flexDirection: 'row',\n },\n lineNumber: {\n alignItems: 'flex-end',\n paddingRight: 16,\n opacity: 0.5,\n },\n lineContent: {\n flex: 1,\n },\n});\n\nCodeBlock.displayName = 'CodeBlock';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { HealthBar } from '../../atoms/game/HealthBar';\nimport { ScoreDisplay } from '../../atoms/game/ScoreDisplay';\n\nexport interface StatBadgeProps {\n /** Stat label */\n label: string;\n /** Current value (defaults to 0 if not provided) */\n value?: number | string;\n /** Maximum value (for bar/hearts format) */\n max?: number;\n /** Data source entity name (for schema config) */\n source?: string;\n /** Field name in the source (for schema config) */\n field?: string;\n /** Display format */\n format?: 'number' | 'hearts' | 'bar' | 'text' | string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | string;\n /** Visual variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst sizeMap: Record<string, { padding: number; fontSize: number }> = {\n sm: { padding: 8, fontSize: 12 },\n md: { padding: 12, fontSize: 14 },\n lg: { padding: 16, fontSize: 16 },\n};\n\nconst variantMap: Record<string, { backgroundColor: string; borderColor: string }> = {\n default: { backgroundColor: 'rgba(31, 41, 55, 0.8)', borderColor: '#374151' },\n primary: { backgroundColor: 'rgba(30, 58, 138, 0.8)', borderColor: '#1d4ed8' },\n success: { backgroundColor: 'rgba(20, 83, 45, 0.8)', borderColor: '#15803d' },\n warning: { backgroundColor: 'rgba(113, 63, 18, 0.8)', borderColor: '#a16207' },\n danger: { backgroundColor: 'rgba(127, 29, 29, 0.8)', borderColor: '#b91c1c' },\n};\n\nexport const StatBadge: React.FC<StatBadgeProps> = ({\n label,\n value = 0,\n max,\n format = 'number',\n icon,\n size = 'md',\n variant = 'default',\n style,\n // Ignored config props (used for schema binding)\n source: _source,\n field: _field,\n}) => {\n const theme = useTheme();\n const numValue = typeof value === 'number' ? value : parseInt(String(value), 10) || 0;\n const sizeStyles = sizeMap[size] ?? sizeMap.md;\n const variantStyles = variantMap[variant] ?? variantMap.default;\n\n return (\n <View\n style={[\n styles.container,\n {\n backgroundColor: variantStyles.backgroundColor,\n borderColor: variantStyles.borderColor,\n padding: sizeStyles.padding,\n },\n style as never,\n ]}\n >\n {icon && (\n <Text style={{ fontSize: 18, marginRight: 8 }}>\n {icon as string}\n </Text>\n )}\n \n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['muted-foreground'],\n fontWeight: '500',\n marginRight: 8,\n }}\n >\n {label}\n </Text>\n \n {format === 'hearts' && max && (\n <HealthBar\n current={numValue}\n max={max}\n format=\"hearts\"\n size={size === 'lg' ? 'md' : 'sm'}\n />\n )}\n \n {format === 'bar' && max && (\n <HealthBar\n current={numValue}\n max={max}\n format=\"bar\"\n size={size === 'lg' ? 'md' : 'sm'}\n />\n )}\n \n {format === 'number' && (\n <ScoreDisplay\n value={numValue}\n size={size === 'lg' ? 'md' : 'sm'}\n animated\n />\n )}\n \n {format === 'text' && (\n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['primary-foreground'],\n fontWeight: '700',\n }}\n >\n {value}\n </Text>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 8,\n borderWidth: 1,\n },\n});\n\nStatBadge.displayName = 'StatBadge';\n"],"mappings":"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","names":["React","React","React","StyleSheet","React","styles","StyleSheet","React","View","StyleSheet","TouchableOpacity","React","View","styles","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","TouchableOpacity","StyleSheet","Animated","React","Animated","styles","TouchableOpacity","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","View","ScrollView","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/atoms/Checkbox.tsx","../src/components/atoms/Icon.tsx","../src/components/atoms/Divider.tsx"],"sourcesContent":["import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CheckboxProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { box: number; check: number }> = {\n sm: { box: 18, check: 10 },\n md: { box: 24, check: 14 },\n lg: { box: 32, check: 18 },\n };\n\n const { box, check } = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n width: box,\n height: box,\n borderRadius: theme.borderRadius.sm,\n borderWidth: 2,\n borderColor: checked \n ? theme.colors.primary \n : theme.colors.border,\n backgroundColor: checked \n ? theme.colors.primary \n : theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n {checked && (\n <View\n style={{\n width: check,\n height: check,\n backgroundColor: theme.colors['primary-foreground'],\n transform: [{ rotate: '45deg' }],\n }}\n />\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nCheckbox.displayName = 'Checkbox';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\n\n// For now, using a simple text-based icon approach\n// In production, this would use react-native-vector-icons\nexport type IconName = \n | 'home' \n | 'user' \n | 'settings' \n | 'arrow-right' \n | 'arrow-left'\n | 'check'\n | 'x'\n | 'plus'\n | 'minus'\n | 'search'\n | 'menu'\n | 'more-vertical'\n | 'chevron-right'\n | 'chevron-left'\n | 'chevron-down'\n | 'chevron-up';\n\nexport interface IconProps {\n name: IconName;\n size?: number;\n color?: string;\n style?: ViewStyle;\n}\n\n// Simple emoji/icon mapping for initial implementation\nconst iconMap: Record<IconName, string> = {\n home: '🏠',\n user: '👤',\n settings: '⚙️',\n 'arrow-right': '→',\n 'arrow-left': '←',\n check: '✓',\n x: '✕',\n plus: '+',\n minus: '−',\n search: '🔍',\n menu: '☰',\n 'more-vertical': '⋮',\n 'chevron-right': '›',\n 'chevron-left': '‹',\n 'chevron-down': '⌄',\n 'chevron-up': '⌃',\n};\n\nexport const Icon: React.FC<IconProps> = ({\n name,\n size = 24,\n color = '#374151',\n style,\n}) => {\n return (\n <View style={[styles.container, { width: size, height: size }, style]}>\n <Text style={[\n styles.icon,\n { fontSize: size * 0.7, color, lineHeight: size },\n ]}>\n {iconMap[name] || '?'}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n icon: {\n textAlign: 'center',\n },\n});\n\nIcon.displayName = 'Icon';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n thickness?: number;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n thickness = 1,\n style,\n}) => {\n const theme = useTheme();\n\n return (\n <View\n style={[\n orientation === 'horizontal' ? styles.horizontal : styles.vertical,\n {\n backgroundColor: theme.colors.border,\n ...(orientation === 'horizontal'\n ? { height: thickness }\n : { width: thickness }),\n },\n style,\n ]}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n horizontal: {\n width: '100%',\n marginVertical: 8,\n },\n vertical: {\n height: '100%',\n marginHorizontal: 8,\n },\n});\n\nDivider.displayName = 'Divider';\n"],"mappings":"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","names":["React","View","StyleSheet","styles","React","View","StyleSheet","React","View","styles","StyleSheet"]}
|