@almadar/mobile 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
  2. package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
  3. package/dist/chunk-5U5Z65ZO.js.map +1 -0
  4. package/dist/chunk-A56SRZKI.js +59 -0
  5. package/dist/chunk-A56SRZKI.js.map +1 -0
  6. package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
  7. package/dist/chunk-BFRVXKSP.js.map +1 -0
  8. package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
  9. package/dist/chunk-ETD72PHO.js.map +1 -0
  10. package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
  11. package/dist/chunk-GMR5FKKB.js.map +1 -0
  12. package/dist/chunk-K2JGK2QD.js +17 -0
  13. package/dist/chunk-K2JGK2QD.js.map +1 -0
  14. package/dist/chunk-MLTSQPVN.js +337 -0
  15. package/dist/chunk-MLTSQPVN.js.map +1 -0
  16. package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
  17. package/dist/chunk-PBO6ZN2M.js.map +1 -0
  18. package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
  19. package/dist/chunk-QUFLYKWA.js.map +1 -0
  20. package/dist/chunk-TRYFJDL3.js +7 -0
  21. package/dist/chunk-TRYFJDL3.js.map +1 -0
  22. package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
  23. package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
  24. package/dist/components/atoms/DayCell.d.ts +18 -0
  25. package/dist/components/atoms/DayCell.d.ts.map +1 -0
  26. package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
  27. package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
  28. package/dist/components/atoms/RangeSlider.d.ts +20 -0
  29. package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
  30. package/dist/components/atoms/StatusDot.d.ts +16 -0
  31. package/dist/components/atoms/StatusDot.d.ts.map +1 -0
  32. package/dist/components/atoms/TextHighlight.d.ts +17 -0
  33. package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
  34. package/dist/components/atoms/ThemeToggle.d.ts +13 -0
  35. package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
  36. package/dist/components/atoms/TrendIndicator.d.ts +16 -0
  37. package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
  38. package/dist/components/atoms/TypewriterText.d.ts +16 -0
  39. package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
  40. package/dist/components/atoms/index.d.ts +18 -0
  41. package/dist/components/atoms/index.d.ts.map +1 -1
  42. package/dist/components/atoms/index.js +30 -10
  43. package/dist/components/index.js +59 -18
  44. package/dist/components/molecules/Accordion.d.ts +20 -0
  45. package/dist/components/molecules/Accordion.d.ts.map +1 -0
  46. package/dist/components/molecules/CalendarGrid.d.ts +22 -0
  47. package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
  48. package/dist/components/molecules/Carousel.d.ts +17 -0
  49. package/dist/components/molecules/Carousel.d.ts.map +1 -0
  50. package/dist/components/molecules/DataGrid.d.ts +43 -0
  51. package/dist/components/molecules/DataGrid.d.ts.map +1 -0
  52. package/dist/components/molecules/DataList.d.ts +43 -0
  53. package/dist/components/molecules/DataList.d.ts.map +1 -0
  54. package/dist/components/molecules/FlipCard.d.ts +16 -0
  55. package/dist/components/molecules/FlipCard.d.ts.map +1 -0
  56. package/dist/components/molecules/Lightbox.d.ts +19 -0
  57. package/dist/components/molecules/Lightbox.d.ts.map +1 -0
  58. package/dist/components/molecules/NumberStepper.d.ts +19 -0
  59. package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
  60. package/dist/components/molecules/PullToRefresh.d.ts +14 -0
  61. package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
  62. package/dist/components/molecules/SortableList.d.ts +17 -0
  63. package/dist/components/molecules/SortableList.d.ts.map +1 -0
  64. package/dist/components/molecules/StarRating.d.ts +19 -0
  65. package/dist/components/molecules/StarRating.d.ts.map +1 -0
  66. package/dist/components/molecules/SwipeableRow.d.ts +20 -0
  67. package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
  68. package/dist/components/molecules/index.d.ts +24 -0
  69. package/dist/components/molecules/index.d.ts.map +1 -1
  70. package/dist/components/molecules/index.js +30 -5
  71. package/dist/components/organisms/FormSection.d.ts +7 -0
  72. package/dist/components/organisms/FormSection.d.ts.map +1 -1
  73. package/dist/components/organisms/index.d.ts +0 -4
  74. package/dist/components/organisms/index.d.ts.map +1 -1
  75. package/dist/components/organisms/index.js +4 -8
  76. package/dist/index.js +72 -26
  77. package/dist/index.js.map +1 -1
  78. package/dist/lib/getNestedValue.d.ts +5 -0
  79. package/dist/lib/getNestedValue.d.ts.map +1 -0
  80. package/dist/lib/index.d.ts +1 -0
  81. package/dist/lib/index.d.ts.map +1 -1
  82. package/dist/lib/index.js +6 -2
  83. package/dist/providers/ThemeProvider.d.ts +7 -0
  84. package/dist/providers/ThemeProvider.d.ts.map +1 -1
  85. package/dist/providers/index.d.ts +2 -2
  86. package/dist/providers/index.d.ts.map +1 -1
  87. package/dist/providers/index.js +8 -4
  88. package/package.json +30 -29
  89. package/dist/chunk-6RVITGGH.js +0 -167
  90. package/dist/chunk-6RVITGGH.js.map +0 -1
  91. package/dist/chunk-7C5JCLLY.js.map +0 -1
  92. package/dist/chunk-DMLYJFYQ.js.map +0 -1
  93. package/dist/chunk-DY52O4T3.js.map +0 -1
  94. package/dist/chunk-LFHVNHVA.js.map +0 -1
  95. package/dist/chunk-T77JPOTP.js.map +0 -1
  96. package/dist/chunk-VLUJ7BXN.js +0 -36
  97. package/dist/chunk-VLUJ7BXN.js.map +0 -1
  98. package/dist/chunk-YMJZLYLV.js.map +0 -1
  99. package/dist/components/organisms/EntityCard.d.ts +0 -11
  100. package/dist/components/organisms/EntityCard.d.ts.map +0 -1
  101. package/dist/components/organisms/EntityList.d.ts +0 -17
  102. package/dist/components/organisms/EntityList.d.ts.map +0 -1
  103. /package/dist/{chunk-S2IT7WZT.js.map → chunk-5JVEVV74.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/atoms/Center.tsx","../src/components/atoms/Radio.tsx","../src/components/atoms/Switch.tsx","../src/components/atoms/Textarea.tsx","../src/components/atoms/Avatar.tsx","../src/components/atoms/Overlay.tsx","../src/components/atoms/Spacer.tsx","../src/components/atoms/ConditionalWrapper.tsx","../src/components/atoms/StatusDot.tsx","../src/components/atoms/TrendIndicator.tsx","../src/components/atoms/TextHighlight.tsx","../src/components/atoms/AnimatedCounter.tsx","../src/components/atoms/TypewriterText.tsx","../src/components/atoms/ThemeToggle.tsx","../src/components/atoms/RangeSlider.tsx","../src/components/atoms/game/Sprite.tsx","../src/components/atoms/game/StateIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CenterProps {\n children: React.ReactNode;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Center: React.FC<CenterProps> = ({\n children,\n style,\n isLoading,\n error,\n}) => {\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n {children}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nCenter.displayName = 'Center';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface RadioProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { outer: number; inner: number }> = {\n sm: { outer: 18, inner: 8 },\n md: { outer: 24, inner: 10 },\n lg: { outer: 32, inner: 14 },\n };\n\n const { outer, inner } = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n width: outer,\n height: outer,\n borderRadius: outer / 2,\n borderWidth: 2,\n borderColor: checked \n ? theme.colors.primary \n : theme.colors.border,\n backgroundColor: theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n {checked && (\n <View\n style={{\n width: inner,\n height: inner,\n borderRadius: inner / 2,\n backgroundColor: theme.colors.primary,\n }}\n />\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nRadio.displayName = 'Radio';\n","import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle,\n Animated \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateX = React.useRef(new Animated.Value(checked ? 1 : 0)).current;\n\n React.useEffect(() => {\n const { width } = sizeStyles[size];\n const thumbWidth = width * 0.4;\n const travelDistance = width - thumbWidth - 4;\n \n Animated.timing(translateX, {\n toValue: checked ? travelDistance : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, [checked, size]);\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { width: number; height: number }> = {\n sm: { width: 36, height: 20 },\n md: { width: 48, height: 28 },\n lg: { width: 60, height: 36 },\n };\n\n const { width, height } = sizeStyles[size];\n const thumbSize = height - 4;\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.track,\n {\n width,\n height,\n borderRadius: height / 2,\n backgroundColor: checked \n ? theme.colors.primary \n : theme.colors['muted-foreground'],\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: thumbSize,\n height: thumbSize,\n borderRadius: thumbSize / 2,\n backgroundColor: theme.colors['primary-foreground'],\n transform: [{ translateX }],\n },\n ]}\n />\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n track: {\n justifyContent: 'center',\n padding: 2,\n },\n thumb: {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 2,\n elevation: 2,\n },\n});\n\nSwitch.displayName = 'Switch';\n","import React from 'react';\nimport { \n TextInput, \n TextInputProps, \n StyleSheet, \n View, \n Text,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\n\nexport interface TextareaProps extends Omit<TextInputProps, 'onChange' | 'multiline'> {\n label?: string;\n /** String error message for form validation */\n errorMessage?: string;\n helperText?: string;\n containerStyle?: ViewStyle;\n numberOfLines?: number;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state object */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Declarative focus event name - emits UI:${focusEvent} via eventBus */\n focusEvent?: string;\n}\n\nexport const Textarea: React.FC<TextareaProps> = ({\n label,\n errorMessage,\n helperText,\n containerStyle,\n style,\n numberOfLines = 4,\n isLoading,\n error,\n changeEvent,\n focusEvent,\n onChangeText,\n onFocus,\n ...textInputProps\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleChangeText = (text: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { value: text });\n }\n onChangeText?.(text);\n };\n\n const handleFocus = () => {\n if (focusEvent) {\n eventBus.emit(`UI:${focusEvent}`);\n }\n onFocus?.({} as never);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n const errorText = error?.message || errorMessage;\n\n return (\n <View style={[styles.container, containerStyle]}>\n {label && (\n <Text style={[styles.label, { color: theme.colors.foreground }]}>\n {label}\n </Text>\n )}\n <TextInput\n multiline\n numberOfLines={numberOfLines}\n textAlignVertical=\"top\"\n style={[\n styles.textarea,\n {\n borderColor: errorText ? theme.colors.error : theme.colors.border,\n backgroundColor: theme.colors.card,\n color: theme.colors.foreground,\n },\n style,\n ]}\n placeholderTextColor={theme.colors['muted-foreground']}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n {...textInputProps}\n />\n {errorText ? (\n <Text style={[styles.errorText, { color: theme.colors.error }]}>\n {errorText}\n </Text>\n ) : helperText ? (\n <Text style={[styles.helperText, { color: theme.colors['muted-foreground'] }]}>\n {helperText}\n </Text>\n ) : null}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n textarea: {\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n fontSize: 16,\n minHeight: 100,\n },\n errorText: {\n fontSize: 12,\n marginTop: 4,\n },\n helperText: {\n fontSize: 12,\n marginTop: 4,\n },\n});\n\nTextarea.displayName = 'Textarea';\n","import React from 'react';\nimport { \n View, \n Text, \n StyleSheet, \n ViewStyle,\n Image,\n ImageSourcePropType \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface AvatarProps {\n src?: ImageSourcePropType;\n alt?: string;\n initials?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n initials,\n size = 'md',\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n const sizeMap: Record<string, { container: number; fontSize: number }> = {\n sm: { container: 32, fontSize: 12 },\n md: { container: 40, fontSize: 14 },\n lg: { container: 48, fontSize: 16 },\n xl: { container: 64, fontSize: 20 },\n };\n\n const { container, fontSize } = sizeMap[size];\n\n if (isLoading) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <LoadingState message=\"\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, { width: container, height: container }, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getInitials = () => {\n if (initials) return initials;\n if (alt) {\n return alt\n .split(' ')\n .map(n => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n }\n return '?';\n };\n\n if (src) {\n return (\n <Image\n source={src}\n style={[\n styles.image,\n { \n width: container, \n height: container, \n borderRadius: container / 2 \n },\n style as never,\n ]}\n accessibilityLabel={alt}\n />\n );\n }\n\n return (\n <View\n style={[\n styles.container,\n {\n width: container,\n height: container,\n borderRadius: container / 2,\n backgroundColor: theme.colors.primary,\n },\n style,\n ]}\n >\n <Text\n style={[\n styles.initials,\n {\n fontSize,\n color: theme.colors['primary-foreground'],\n },\n ]}\n >\n {getInitials()}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n resizeMode: 'cover',\n },\n initials: {\n fontWeight: '600',\n },\n});\n\nAvatar.displayName = 'Avatar';\n","import React from 'react';\nimport { \n TouchableWithoutFeedback, \n View,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\n\nexport interface OverlayProps {\n /** Whether overlay is visible */\n isVisible?: boolean;\n /** Called when overlay is pressed */\n onPress?: () => void;\n /** Whether to apply blur effect (iOS only) */\n blur?: boolean;\n /** Declarative event name — emits UI:{action} via eventBus on press */\n action?: string;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const Overlay: React.FC<OverlayProps> = ({\n isVisible = true,\n onPress,\n blur = true,\n action,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n if (!isVisible) return null;\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, {});\n }\n onPress?.();\n };\n\n return (\n <TouchableWithoutFeedback onPress={handlePress}>\n <View \n style={[\n styles.overlay,\n { \n backgroundColor: theme.colors.background,\n opacity: 0.8,\n },\n blur && styles.blur,\n ...(style ? [style] : []),\n ]}\n pointerEvents=\"auto\"\n />\n </TouchableWithoutFeedback>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 40,\n },\n blur: {\n // Note: For actual blur effect on iOS, use @react-native-community/blur\n // This is a fallback opacity-based overlay\n },\n});\n\nOverlay.displayName = 'Overlay';\n","import React from 'react';\nimport { View, ViewStyle } from 'react-native';\n\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';\n\nexport interface SpacerProps {\n /** Fixed size (auto = flex grow) */\n size?: SpacerSize;\n /** Orientation (for fixed sizes) */\n axis?: 'horizontal' | 'vertical';\n /** Custom style */\n style?: ViewStyle;\n}\n\nconst sizeValues: Record<Exclude<SpacerSize, 'auto'>, number> = {\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n};\n\n/**\n * Spacer - Flexible spacing element for flex layouts\n * \n * Usage:\n * - size=\"auto\" (default): Expands to fill available space (flex: 1)\n * - size=\"md\": Fixed size spacing\n */\nexport const Spacer: React.FC<SpacerProps> = ({\n size = 'auto',\n axis = 'horizontal',\n style,\n}) => {\n if (size === 'auto') {\n return (\n <View \n style={[{ flex: 1 }, ...(style ? [style] : [])]} \n accessibilityElementsHidden\n />\n );\n }\n\n const sizeValue = sizeValues[size];\n const spacerStyle: ViewStyle = axis === 'horizontal' \n ? { width: sizeValue }\n : { height: sizeValue };\n\n return (\n <View \n style={[\n spacerStyle,\n ...(style ? [style] : []),\n ]} \n accessibilityElementsHidden\n />\n );\n};\n\nSpacer.displayName = 'Spacer';\n","/**\n * ConditionalWrapper Atom Component\n *\n * A wrapper component that conditionally renders its children based on\n * condition evaluation. Used for dynamic field visibility in forms.\n * \n * Note: S-expression evaluation requires @almadar/evaluator to be installed.\n * For now, this uses a simplified condition evaluator.\n */\n\nimport React from 'react';\nimport { Animated, ViewStyle } from 'react-native';\n\nexport interface ConditionalContext {\n formValues: Record<string, unknown>;\n globalVariables: Record<string, unknown>;\n localVariables?: Record<string, unknown>;\n entity?: Record<string, unknown>;\n}\n\nexport type Condition = \n | boolean \n | string \n | [string, string, unknown] // [operator, field, value]\n | ((context: ConditionalContext) => boolean);\n\nexport interface ConditionalWrapperProps {\n /** The condition to evaluate (boolean, expression tuple, or function) */\n condition?: Condition;\n /** Context for evaluating the condition */\n context?: ConditionalContext;\n /** Children to render when condition is true */\n children: React.ReactNode;\n /** Optional fallback to render when condition is false */\n fallback?: React.ReactNode;\n /** Whether to animate the transition */\n animate?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/**\n * Simple condition evaluator\n * Supports: boolean, comparison tuples like [\"=\", \"fieldName\", \"value\"], or functions\n */\nfunction evaluateCondition(\n condition: Condition, \n context: ConditionalContext = { formValues: {}, globalVariables: {} }\n): boolean {\n // Boolean condition\n if (typeof condition === 'boolean') {\n return condition;\n }\n\n // Function condition\n if (typeof condition === 'function') {\n return condition(context);\n }\n\n // Expression tuple: [operator, field, value]\n if (Array.isArray(condition) && condition.length === 3) {\n const [operator, fieldPath, expectedValue] = condition;\n \n // Parse field path (e.g., \"formValues.myField\" or \"globalVariables.HG_VAR\")\n const parts = String(fieldPath).split('.');\n let actualValue: unknown;\n \n if (parts[0] === 'formValues' && parts[1]) {\n actualValue = context.formValues?.[parts[1]];\n } else if (parts[0] === 'globalVariables' && parts[1]) {\n actualValue = context.globalVariables?.[parts[1]];\n } else if (parts[0] === 'localVariables' && parts[1]) {\n actualValue = context.localVariables?.[parts[1]];\n } else if (parts[0] && context.entity?.[parts[0]]) {\n actualValue = context.entity[parts[0]];\n }\n\n switch (operator) {\n case '=':\n case '==':\n return actualValue === expectedValue;\n case '!=':\n return actualValue !== expectedValue;\n case '>':\n return Number(actualValue) > Number(expectedValue);\n case '>=':\n return Number(actualValue) >= Number(expectedValue);\n case '<':\n return Number(actualValue) < Number(expectedValue);\n case '<=':\n return Number(actualValue) <= Number(expectedValue);\n case 'includes':\n return Array.isArray(actualValue) && actualValue.includes(expectedValue);\n default:\n return false;\n }\n }\n\n // String truthiness\n return Boolean(condition);\n}\n\nexport const ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({\n condition,\n context = { formValues: {}, globalVariables: {} },\n children,\n fallback = null,\n animate = false,\n style,\n}) => {\n const [isVisible, setIsVisible] = React.useState(!condition ? true : false);\n const fadeAnim = React.useRef(new Animated.Value(!condition ? 1 : 0)).current;\n\n React.useEffect(() => {\n if (!condition) {\n setIsVisible(true);\n return;\n }\n\n const visible = evaluateCondition(condition, context);\n \n setIsVisible(visible);\n\n if (animate) {\n Animated.timing(fadeAnim, {\n toValue: visible ? 1 : 0,\n duration: 200,\n useNativeDriver: true,\n }).start();\n } else {\n fadeAnim.setValue(visible ? 1 : 0);\n }\n }, [condition, context, animate, fadeAnim]);\n\n if (!condition) {\n return <>{children}</>;\n }\n\n if (animate) {\n return (\n <Animated.View\n style={[\n { opacity: fadeAnim, overflow: 'hidden' },\n ...(style ? [style] : []),\n ]}\n >\n {isVisible ? children : fallback}\n </Animated.View>\n );\n }\n\n return isVisible ? <>{children}</> : <>{fallback}</>;\n};\n\nConditionalWrapper.displayName = 'ConditionalWrapper';\n","import React, { useEffect, useRef } from 'react';\nimport { View, Animated, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from './Typography';\nimport { HStack } from './Stack';\n\nexport type StatusDotStatus = 'online' | 'offline' | 'busy' | 'away' | 'error';\nexport type StatusDotSize = 'sm' | 'md' | 'lg';\n\nexport interface StatusDotProps {\n status?: StatusDotStatus;\n pulse?: boolean;\n size?: StatusDotSize;\n label?: string;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeMap: Record<StatusDotSize, number> = {\n sm: 8,\n md: 12,\n lg: 16,\n};\n\nexport const StatusDot: React.FC<StatusDotProps> = ({\n status = 'offline',\n pulse = false,\n size = 'md',\n label,\n style,\n}) => {\n const theme = useTheme();\n const pulseAnim = useRef(new Animated.Value(1)).current;\n\n const statusColors: Record<StatusDotStatus, string> = {\n online: theme.colors.success,\n offline: theme.colors['muted-foreground'],\n busy: theme.colors.error,\n away: theme.colors.warning,\n error: theme.colors.error,\n };\n\n useEffect(() => {\n if (pulse && (status === 'online' || status === 'busy')) {\n const animation = Animated.loop(\n Animated.sequence([\n Animated.timing(pulseAnim, {\n toValue: 0.3,\n duration: 1000,\n useNativeDriver: true,\n }),\n Animated.timing(pulseAnim, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: true,\n }),\n ])\n );\n animation.start();\n return () => animation.stop();\n } else {\n pulseAnim.setValue(1);\n }\n }, [pulse, status, pulseAnim]);\n\n const dotSize = sizeMap[size];\n const color = statusColors[status];\n\n const dot = (\n <View style={[styles.wrapper, style]}>\n <Animated.View\n style={[\n styles.dot,\n {\n width: dotSize,\n height: dotSize,\n borderRadius: dotSize / 2,\n backgroundColor: color,\n opacity: pulseAnim,\n },\n ]}\n />\n </View>\n );\n\n if (label) {\n return (\n <HStack spacing={theme.spacing[2]} align=\"center\" style={style}>\n {dot}\n <Typography variant=\"caption\" style={{ color: theme.colors.foreground }}>\n {label}\n </Typography>\n </HStack>\n );\n }\n\n return dot;\n};\n\nconst styles = StyleSheet.create({\n wrapper: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n dot: {},\n});\n\nStatusDot.displayName = 'StatusDot';\n","import React from 'react';\nimport { StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from './Typography';\nimport { Icon } from './Icon';\nimport { HStack } from './Stack';\n\nexport type TrendDirection = 'up' | 'down' | 'neutral';\nexport type TrendSize = 'sm' | 'md' | 'lg';\n\nexport interface TrendIndicatorProps {\n value?: number;\n direction?: TrendDirection;\n showValue?: boolean;\n size?: TrendSize;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeConfig: Record<TrendSize, { icon: number; font: 'xs' | 'sm' | 'base' }> = {\n sm: { icon: 14, font: 'xs' },\n md: { icon: 18, font: 'sm' },\n lg: { icon: 22, font: 'base' },\n};\n\nexport const TrendIndicator: React.FC<TrendIndicatorProps> = ({\n value,\n direction = 'neutral',\n showValue = true,\n size = 'md',\n style,\n}) => {\n const theme = useTheme();\n const config = sizeConfig[size];\n\n const directionColors: Record<TrendDirection, string> = {\n up: theme.colors.success,\n down: theme.colors.error,\n neutral: theme.colors['muted-foreground'],\n };\n\n const color = directionColors[direction];\n const iconName = direction === 'up' ? 'chevron-up' : direction === 'down' ? 'chevron-down' : 'minus';\n\n return (\n <HStack spacing={4} align=\"center\" style={style}>\n <Icon name={iconName} size={config.icon} color={color} />\n {showValue && value !== undefined && (\n <Typography\n variant=\"body\"\n style={[\n styles.value,\n { color, fontSize: theme.typography.sizes[config.font] },\n ]}\n >\n {Math.abs(value)}%\n </Typography>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n value: {\n fontWeight: '500',\n },\n});\n\nTrendIndicator.displayName = 'TrendIndicator';\n","import React from 'react';\nimport { Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from './Typography';\n\nexport type HighlightType = 'mark' | 'code' | 'emphasis' | 'custom';\n\nexport interface TextHighlightProps {\n children: React.ReactNode;\n highlightType?: HighlightType;\n isActive?: boolean;\n action?: string;\n actionPayload?: Record<string, unknown>;\n color?: string;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const TextHighlight: React.FC<TextHighlightProps> = ({\n children,\n highlightType = 'mark',\n isActive = true,\n action,\n actionPayload,\n color,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (action) {\n eventBus.emit(`UI:${action}`, actionPayload);\n }\n };\n\n const highlightColors: Record<HighlightType, { bg: string; fg: string }> = {\n mark: { bg: theme.colors.warning + '40', fg: theme.colors.foreground },\n code: { bg: theme.colors.muted, fg: theme.colors.foreground },\n emphasis: { bg: theme.colors.primary + '20', fg: theme.colors.primary },\n custom: { bg: (color || theme.colors.accent) + '30', fg: theme.colors.foreground },\n };\n\n const { bg, fg } = highlightColors[highlightType];\n\n const content = (\n <Typography\n variant=\"body\"\n style={[\n styles.text,\n isActive && {\n backgroundColor: bg,\n color: fg,\n },\n highlightType === 'code' && {\n fontFamily: 'monospace',\n fontSize: theme.typography.sizes.sm,\n },\n style,\n ]}\n >\n {children}\n </Typography>\n );\n\n if (action) {\n return (\n <Pressable onPress={handlePress} style={styles.pressable}>\n {content}\n </Pressable>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n text: {\n paddingHorizontal: 4,\n paddingVertical: 1,\n borderRadius: 4,\n },\n pressable: {\n alignSelf: 'flex-start',\n },\n});\n\nTextHighlight.displayName = 'TextHighlight';\n","import React, { useEffect, useRef } from 'react';\nimport { Animated, StyleSheet, ViewStyle, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface AnimatedCounterProps {\n value: number;\n duration?: number;\n prefix?: string;\n suffix?: string;\n style?: ViewStyle;\n textStyle?: TextStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const AnimatedCounter: React.FC<AnimatedCounterProps> = ({\n value,\n duration = 800,\n prefix = '',\n suffix = '',\n style,\n textStyle,\n}) => {\n const theme = useTheme();\n const animatedValue = useRef(new Animated.Value(0)).current;\n const displayRef = useRef(0);\n const [displayValue, setDisplayValue] = React.useState(0);\n\n useEffect(() => {\n animatedValue.setValue(displayRef.current);\n\n Animated.timing(animatedValue, {\n toValue: value,\n duration,\n useNativeDriver: false,\n }).start();\n\n const listener = animatedValue.addListener(({ value: v }) => {\n const rounded = Math.round(v);\n if (rounded !== displayRef.current) {\n displayRef.current = rounded;\n setDisplayValue(rounded);\n }\n });\n\n return () => {\n animatedValue.removeListener(listener);\n };\n }, [value, duration, animatedValue]);\n\n return (\n <Animated.View style={[styles.container, style]}>\n <Animated.Text\n style={[\n styles.text,\n {\n color: theme.colors.foreground,\n fontSize: theme.typography.sizes['2xl'],\n fontWeight: theme.typography.fontWeight.bold as '600',\n },\n textStyle,\n ]}\n >\n {prefix}{displayValue}{suffix}\n </Animated.Text>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n textAlign: 'center',\n },\n});\n\nAnimatedCounter.displayName = 'AnimatedCounter';\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Animated, StyleSheet, ViewStyle, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { HStack } from './Stack';\n\nexport interface TypewriterTextProps {\n text: string;\n speed?: number;\n startDelay?: number;\n onComplete?: () => void;\n showCursor?: boolean;\n style?: ViewStyle;\n textStyle?: TextStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const TypewriterText: React.FC<TypewriterTextProps> = ({\n text,\n speed = 50,\n startDelay = 0,\n onComplete,\n showCursor = true,\n style,\n textStyle,\n}) => {\n const theme = useTheme();\n const [displayedText, setDisplayedText] = useState('');\n const [isComplete, setIsComplete] = useState(false);\n const cursorOpacity = useRef(new Animated.Value(1)).current;\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n setDisplayedText('');\n setIsComplete(false);\n let charIndex = 0;\n\n timeoutRef.current = setTimeout(() => {\n intervalRef.current = setInterval(() => {\n if (charIndex < text.length) {\n setDisplayedText(text.slice(0, charIndex + 1));\n charIndex++;\n } else {\n if (intervalRef.current) clearInterval(intervalRef.current);\n setIsComplete(true);\n onComplete?.();\n }\n }, speed);\n }, startDelay);\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [text, speed, startDelay, onComplete]);\n\n useEffect(() => {\n if (showCursor && !isComplete) {\n const blink = Animated.loop(\n Animated.sequence([\n Animated.timing(cursorOpacity, {\n toValue: 0,\n duration: 500,\n useNativeDriver: true,\n }),\n Animated.timing(cursorOpacity, {\n toValue: 1,\n duration: 500,\n useNativeDriver: true,\n }),\n ])\n );\n blink.start();\n return () => blink.stop();\n }\n }, [showCursor, isComplete, cursorOpacity]);\n\n return (\n <HStack spacing={0} align=\"flex-end\" style={style}>\n <Animated.Text\n style={[\n styles.text,\n {\n color: theme.colors.foreground,\n fontSize: theme.typography.sizes.base,\n },\n textStyle,\n ]}\n >\n {displayedText}\n </Animated.Text>\n {showCursor && !isComplete && (\n <Animated.Text\n style={[\n styles.cursor,\n {\n color: theme.colors.primary,\n fontSize: theme.typography.sizes.base,\n opacity: cursorOpacity,\n },\n ]}\n >\n |\n </Animated.Text>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n text: {\n fontWeight: '400',\n },\n cursor: {\n fontWeight: '300',\n marginLeft: 1,\n },\n});\n\nTypewriterText.displayName = 'TypewriterText';\n","import React from 'react';\nimport { Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useThemeMode } from '../../providers/ThemeProvider';\nimport { Typography } from './Typography';\nimport { Icon } from './Icon';\nimport { HStack } from './Stack';\n\nexport type ThemeToggleSize = 'sm' | 'md' | 'lg';\n\nexport interface ThemeToggleProps {\n size?: ThemeToggleSize;\n showLabel?: boolean;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst sizeConfig: Record<ThemeToggleSize, { icon: number; padding: number }> = {\n sm: { icon: 18, padding: 6 },\n md: { icon: 24, padding: 10 },\n lg: { icon: 30, padding: 14 },\n};\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({\n size = 'md',\n showLabel = false,\n style,\n}) => {\n const theme = useTheme();\n const { resolvedMode, toggleMode } = useThemeMode();\n const config = sizeConfig[size];\n\n const isDark = resolvedMode === 'dark';\n const iconText = isDark ? '☀' : '☾';\n const label = isDark ? 'Light mode' : 'Dark mode';\n\n return (\n <Pressable\n onPress={toggleMode}\n style={[\n styles.container,\n {\n padding: config.padding,\n borderRadius: theme.borderRadius.full,\n backgroundColor: theme.colors.secondary,\n },\n style,\n ]}\n >\n <HStack spacing={theme.spacing[2]} align=\"center\">\n <Icon name={isDark ? 'check' : 'settings'} size={config.icon} color={theme.colors.foreground} />\n <Typography variant=\"body\" style={{ color: theme.colors.foreground, fontSize: config.icon * 0.7 }}>\n {iconText}\n </Typography>\n {showLabel && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {label}\n </Typography>\n )}\n </HStack>\n </Pressable>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignSelf: 'flex-start',\n },\n});\n\nThemeToggle.displayName = 'ThemeToggle';\n","import React, { useRef, useState } from 'react';\nimport { View, PanResponder, StyleSheet, ViewStyle, LayoutChangeEvent } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from './Typography';\nimport { HStack } from './Stack';\nimport { VStack } from './Stack';\n\nexport interface RangeSliderProps {\n min?: number;\n max?: number;\n value?: number;\n step?: number;\n action?: string;\n actionPayload?: Record<string, unknown>;\n onChange?: (value: number) => void;\n showValue?: boolean;\n label?: string;\n disabled?: boolean;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nconst THUMB_SIZE = 24;\nconst TRACK_HEIGHT = 4;\n\nexport const RangeSlider: React.FC<RangeSliderProps> = ({\n min = 0,\n max = 100,\n value: controlledValue,\n step = 1,\n action,\n actionPayload,\n onChange,\n showValue = false,\n label,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalValue, setInternalValue] = useState(controlledValue ?? min);\n const trackWidth = useRef(0);\n const currentValue = controlledValue ?? internalValue;\n\n const clamp = (v: number) => {\n const stepped = Math.round((v - min) / step) * step + min;\n return Math.max(min, Math.min(max, stepped));\n };\n\n const getFraction = () => (currentValue - min) / (max - min);\n\n const emitValue = (v: number) => {\n const clamped = clamp(v);\n setInternalValue(clamped);\n onChange?.(clamped);\n if (action) {\n eventBus.emit(`UI:${action}`, { ...actionPayload, value: clamped });\n }\n };\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => !disabled,\n onMoveShouldSetPanResponder: () => !disabled,\n onPanResponderGrant: (_, gestureState) => {\n const fraction = Math.max(0, Math.min(1, gestureState.x0 / (trackWidth.current || 1)));\n emitValue(fraction * (max - min) + min);\n },\n onPanResponderMove: (_, gestureState) => {\n const startFraction = getFraction();\n const deltaFraction = gestureState.dx / (trackWidth.current || 1);\n const newValue = (startFraction + deltaFraction) * (max - min) + min;\n emitValue(newValue);\n },\n })\n ).current;\n\n const handleLayout = (e: LayoutChangeEvent) => {\n trackWidth.current = e.nativeEvent.layout.width;\n };\n\n const fraction = getFraction();\n\n const content = (\n <View\n style={[styles.trackContainer, disabled && { opacity: 0.5 }, style]}\n onLayout={handleLayout}\n {...panResponder.panHandlers}\n >\n <View\n style={[\n styles.track,\n { backgroundColor: theme.colors.border },\n ]}\n />\n <View\n style={[\n styles.trackFill,\n {\n backgroundColor: theme.colors.primary,\n width: `${fraction * 100}%` as unknown as number,\n },\n ]}\n />\n <View\n style={[\n styles.thumb,\n {\n backgroundColor: theme.colors.primary,\n borderColor: theme.colors.card,\n left: `${fraction * 100}%` as unknown as number,\n marginLeft: -THUMB_SIZE / 2,\n ...theme.shadows.sm,\n },\n ]}\n />\n </View>\n );\n\n if (label || showValue) {\n return (\n <VStack spacing={theme.spacing[2]} style={style}>\n {(label || showValue) && (\n <HStack spacing={0} align=\"center\" style={styles.header}>\n {label && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'], flex: 1 }}>\n {label}\n </Typography>\n )}\n {showValue && (\n <Typography variant=\"body\" style={{ color: theme.colors.foreground, fontWeight: '500' }}>\n {currentValue}\n </Typography>\n )}\n </HStack>\n )}\n {content}\n </VStack>\n );\n }\n\n return content;\n};\n\nconst styles = StyleSheet.create({\n trackContainer: {\n height: THUMB_SIZE + 8,\n justifyContent: 'center',\n paddingHorizontal: THUMB_SIZE / 2,\n },\n track: {\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n position: 'absolute',\n left: THUMB_SIZE / 2,\n right: THUMB_SIZE / 2,\n },\n trackFill: {\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n position: 'absolute',\n left: THUMB_SIZE / 2,\n },\n thumb: {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n borderWidth: 3,\n position: 'absolute',\n },\n header: {\n justifyContent: 'space-between',\n },\n});\n\nRangeSlider.displayName = 'RangeSlider';\n","import React, { useMemo } from 'react';\nimport { \n View, \n Image, \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n ImageSourcePropType \n} from 'react-native';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface SpriteProps {\n /** Spritesheet image URL or require */\n spritesheet: ImageSourcePropType;\n /** Width of each frame in pixels */\n frameWidth: number;\n /** Height of each frame in pixels */\n frameHeight: number;\n /** Frame index to display (0-based, left-to-right, top-to-bottom) */\n frame: number;\n /** X position in pixels */\n x: number;\n /** Y position in pixels */\n y: number;\n /** Scale factor (default: 1) */\n scale?: number;\n /** Flip horizontally */\n flipX?: boolean;\n /** Flip vertically */\n flipY?: boolean;\n /** Rotation in degrees */\n rotation?: number;\n /** Opacity (0-1) */\n opacity?: number;\n /** Z-index for layering */\n zIndex?: number;\n /** Number of columns in spritesheet (for frame calculation) */\n columns?: number;\n /** Optional style */\n style?: ViewStyle;\n /** Optional onPress handler */\n onPress?: () => void;\n /** Declarative event name emitted on press via useEventBus */\n action?: string;\n}\n\n/**\n * Sprite component for rendering spritesheet frames\n */\nexport const Sprite: React.FC<SpriteProps> = ({\n spritesheet,\n frameWidth,\n frameHeight,\n frame,\n x,\n y,\n scale = 1,\n flipX = false,\n flipY = false,\n rotation = 0,\n opacity = 1,\n zIndex = 0,\n columns = 16,\n style,\n onPress,\n action,\n}) => {\n const eventBus = useEventBus();\n\n // Calculate source position in spritesheet\n const sourcePosition = useMemo(() => {\n const frameX = frame % columns;\n const frameY = Math.floor(frame / columns);\n return {\n x: frameX * frameWidth,\n y: frameY * frameHeight,\n };\n }, [frame, columns, frameWidth, frameHeight]);\n\n const handlePress = () => {\n if (action) eventBus.emit(`UI:${action}`, {});\n onPress?.();\n };\n\n const transform = [\n { translateX: x },\n { translateY: y },\n { scale: scale },\n { rotate: `${rotation}deg` },\n { scaleX: flipX ? -1 : 1 },\n { scaleY: flipY ? -1 : 1 },\n ];\n\n const Container = (action || onPress) ? TouchableOpacity : View;\n\n return (\n <Container\n onPress={(action || onPress) ? handlePress : undefined}\n style={[\n styles.container,\n {\n width: frameWidth,\n height: frameHeight,\n transform,\n opacity,\n zIndex,\n },\n style as never,\n ]}\n >\n <View\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n position: 'absolute',\n left: -sourcePosition.x,\n top: -sourcePosition.y,\n overflow: 'hidden',\n }}\n >\n <Image\n source={spritesheet}\n style={{\n width: frameWidth * columns,\n height: frameHeight * Math.ceil((frame + 1) / columns),\n resizeMode: 'stretch',\n }}\n />\n </View>\n </Container>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n overflow: 'hidden',\n },\n});\n\nSprite.displayName = 'Sprite';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\n\nexport interface StateStyle {\n icon: string;\n backgroundColor: string;\n}\n\nexport interface StateIndicatorProps {\n /** The current state name */\n state: string;\n /** Optional label override (defaults to capitalized state name) */\n label?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show pulse animation on non-idle states */\n animated?: boolean;\n /** Custom state styles to extend/override defaults */\n stateStyles?: Record<string, StateStyle>;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst DEFAULT_STATE_STYLES: Record<string, StateStyle> = {\n idle: { icon: '⏸', backgroundColor: '#6b7280' },\n active: { icon: '▶', backgroundColor: '#22c55e' },\n sleeping: { icon: '💤', backgroundColor: '#6b7280' },\n moving: { icon: '🚶', backgroundColor: '#3b82f6' },\n eating: { icon: '🍽', backgroundColor: '#22c55e' },\n waiting: { icon: '⏳', backgroundColor: '#eab308' },\n happy: { icon: '😊', backgroundColor: '#22c55e' },\n scared: { icon: '😨', backgroundColor: '#ef4444' },\n done: { icon: '✓', backgroundColor: '#22c55e' },\n error: { icon: '✗', backgroundColor: '#ef4444' },\n ready: { icon: '✓', backgroundColor: '#22c55e' },\n cooldown: { icon: '🔄', backgroundColor: '#eab308' },\n};\n\nconst DEFAULT_STYLE: StateStyle = { icon: '?', backgroundColor: '#6b7280' };\n\nconst SIZE_STYLES: Record<string, { padding: number; fontSize: number }> = {\n sm: { padding: 4, fontSize: 10 },\n md: { padding: 8, fontSize: 12 },\n lg: { padding: 12, fontSize: 14 },\n};\n\nexport const StateIndicator: React.FC<StateIndicatorProps> = ({\n state,\n label,\n size = 'md',\n animated = true,\n stateStyles,\n style,\n}) => {\n const theme = useTheme();\n const mergedStyles = stateStyles\n ? { ...DEFAULT_STATE_STYLES, ...stateStyles }\n : DEFAULT_STATE_STYLES;\n const config = mergedStyles[state.toLowerCase()] || DEFAULT_STYLE;\n const displayLabel = label || state.charAt(0).toUpperCase() + state.slice(1);\n const sizeStyles = SIZE_STYLES[size];\n const shouldAnimate = animated && \n state.toLowerCase() !== 'idle' && \n state.toLowerCase() !== 'done';\n\n return (\n <View\n style={[\n styles.container,\n {\n backgroundColor: config.backgroundColor,\n paddingHorizontal: sizeStyles.padding,\n paddingVertical: sizeStyles.padding * 0.5,\n opacity: shouldAnimate ? 0.8 : 1,\n },\n style as never,\n ]}\n >\n <Text style={{ fontSize: sizeStyles.fontSize, marginRight: 4 }}>\n {config.icon}\n </Text>\n <Text\n style={{\n fontSize: sizeStyles.fontSize,\n color: theme.colors['primary-foreground'],\n fontWeight: '500',\n }}\n >\n {displayLabel}\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 9999,\n },\n});\n\nStateIndicator.displayName = 'StateIndicator';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,SAAS,MAAM,kBAA6B;AAerC,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,MAAI,WAAW;AACb,WACE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,KAAK,KACnC,oCAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,KAAK,KACnC,oCAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,KAAK,KAClC,QACH;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,OAAO,cAAc;;;ACpDrB,OAAOA,YAAW;AAClB;AAAA,EACE;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAwBA,IAAM,QAA8B,CAAC;AAAA,EAC1C,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY,UAAW;AAE3B,UAAM,WAAW,CAAC;AAClB,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,SAAS,SAAS,CAAC;AAAA,IAC5E;AACA,eAAW,QAAQ;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,aAA+D;AAAA,IACnE,IAAI,EAAE,OAAO,IAAI,OAAO,EAAE;AAAA,IAC1B,IAAI,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,IAC3B,IAAI,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,EAC7B;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI,WAAW,IAAI;AAExC,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,eAAe;AAAA,MACf,OAAO;AAAA,QACLE,QAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc,QAAQ;AAAA,UACtB,aAAa;AAAA,UACb,aAAa,UACT,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,UACjB,iBAAiB,MAAM,OAAO;AAAA,UAC9B,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC,WACC,gBAAAF,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc,QAAQ;AAAA,UACtB,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA;AAAA,IACF;AAAA,EAEJ;AAEJ;AAEA,IAAMC,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,MAAM,cAAc;;;ACxHpB,OAAOC,YAAW;AAClB;AAAA,EACE,oBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA;AAAA,OACK;AAwBA,IAAM,SAAgC,CAAC;AAAA,EAC5C,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,aAAaC,OAAM,OAAO,IAAI,SAAS,MAAM,UAAU,IAAI,CAAC,CAAC,EAAE;AAErE,EAAAA,OAAM,UAAU,MAAM;AACpB,UAAM,EAAE,OAAAC,OAAM,IAAI,WAAW,IAAI;AACjC,UAAM,aAAaA,SAAQ;AAC3B,UAAM,iBAAiBA,SAAQ,aAAa;AAE5C,aAAS,OAAO,YAAY;AAAA,MAC1B,SAAS,UAAU,iBAAiB;AAAA,MACpC,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAAA,EACX,GAAG,CAAC,SAAS,IAAI,CAAC;AAElB,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY,UAAW;AAE3B,UAAM,WAAW,CAAC;AAClB,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,SAAS,SAAS,CAAC;AAAA,IAC5E;AACA,eAAW,QAAQ;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAD,OAAA,cAACE,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAH,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACE,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAH,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,aAAgE;AAAA,IACpE,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,IAC5B,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,IAC5B,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,EAC9B;AAEA,QAAM,EAAE,OAAO,OAAO,IAAI,WAAW,IAAI;AACzC,QAAM,YAAY,SAAS;AAE3B,SACE,gBAAAA,OAAA;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,eAAe;AAAA,MACf,OAAO;AAAA,QACLD,QAAO;AAAA,QACP;AAAA,UACE;AAAA,UACA;AAAA,UACA,cAAc,SAAS;AAAA,UACvB,iBAAiB,UACb,MAAM,OAAO,UACb,MAAM,OAAO,kBAAkB;AAAA,UACnC,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAH,OAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACLG,QAAO;AAAA,UACP;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc,YAAY;AAAA,YAC1B,iBAAiB,MAAM,OAAO,oBAAoB;AAAA,YAClD,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,IAAMA,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AACF,CAAC;AAED,OAAO,cAAc;;;AClJrB,OAAOC,YAAW;AAClB;AAAA,EACE;AAAA,EAEA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA;AAAA,OAEK;AAwBA,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,mBAAmB,CAAC,SAAiB;AACzC,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACpD;AACA,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY;AACd,eAAS,KAAK,MAAM,UAAU,EAAE;AAAA,IAClC;AACA,cAAU,CAAC,CAAU;AAAA,EACvB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,cAAc,KAC3C,SACC,gBAAAF,OAAA,cAAC,QAAK,OAAO,CAACE,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,CAAC,KAC3D,KACH,GAEF,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,QAAM,YAAY,OAAO,WAAW;AAEpC,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,cAAc,KAC3C,SACC,gBAAAF,OAAA,cAAC,QAAK,OAAO,CAACE,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,CAAC,KAC3D,KACH,GAEF,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT;AAAA,MACA,mBAAkB;AAAA,MAClB,OAAO;AAAA,QACLE,QAAO;AAAA,QACP;AAAA,UACE,aAAa,YAAY,MAAM,OAAO,QAAQ,MAAM,OAAO;AAAA,UAC3D,iBAAiB,MAAM,OAAO;AAAA,UAC9B,OAAO,MAAM,OAAO;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAAA,MACA,sBAAsB,MAAM,OAAO,kBAAkB;AAAA,MACrD,cAAc;AAAA,MACd,SAAS;AAAA,MACR,GAAG;AAAA;AAAA,EACN,GACC,YACC,gBAAAF,OAAA,cAAC,QAAK,OAAO,CAACE,QAAO,WAAW,EAAE,OAAO,MAAM,OAAO,MAAM,CAAC,KAC1D,SACH,IACE,aACF,gBAAAF,OAAA,cAAC,QAAK,OAAO,CAACE,QAAO,YAAY,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,CAAC,KACzE,UACH,IACE,IACN;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AACF,CAAC;AAED,SAAS,cAAc;;;AChJvB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA;AAAA,OAEK;AAmBA,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,QAAMC,WAAmE;AAAA,IACvE,IAAI,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,IAClC,IAAI,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,IAClC,IAAI,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,IAClC,IAAI,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,EACpC;AAEA,QAAM,EAAE,WAAW,SAAS,IAAIA,SAAQ,IAAI;AAE5C,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,OAAO,WAAW,QAAQ,UAAU,GAAG,KAAK,KAC5E,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,IAAG,CAC3B;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,OAAO,WAAW,QAAQ,UAAU,GAAG,KAAK,KAC5E,gBAAAF,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,SAAU,QAAO;AACrB,QAAI,KAAK;AACP,aAAO,IACJ,MAAM,GAAG,EACT,IAAI,OAAK,EAAE,CAAC,CAAC,EACb,KAAK,EAAE,EACP,YAAY,EACZ,MAAM,GAAG,CAAC;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAEA,MAAI,KAAK;AACP,WACE,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,OAAO;AAAA,UACLE,QAAO;AAAA,UACP;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc,YAAY;AAAA,UAC5B;AAAA,UACA;AAAA,QACF;AAAA,QACA,oBAAoB;AAAA;AAAA,IACtB;AAAA,EAEJ;AAEA,SACE,gBAAAF,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc,YAAY;AAAA,UAC1B,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLD,QAAO;AAAA,UACP;AAAA,YACE;AAAA,YACA,OAAO,MAAM,OAAO,oBAAoB;AAAA,UAC1C;AAAA,QACF;AAAA;AAAA,MAEC,YAAY;AAAA,IACf;AAAA,EACF;AAEJ;AAEA,IAAMA,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,EACd;AACF,CAAC;AAED,OAAO,cAAc;;;ACvIrB,OAAOC,YAAW;AAClB;AAAA,EACE;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAiBA,IAAM,UAAkC,CAAC;AAAA,EAC9C,YAAY;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,cAAc,MAAM;AACxB,QAAI,QAAQ;AACV,eAAS,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC;AAAA,IAClC;AACA,cAAU;AAAA,EACZ;AAEA,SACE,gBAAAC,OAAA,cAAC,4BAAyB,SAAS,eACjC,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE,iBAAiB,MAAM,OAAO;AAAA,UAC9B,SAAS;AAAA,QACX;AAAA,QACA,QAAQA,QAAO;AAAA,QACf,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,MACzB;AAAA,MACA,eAAc;AAAA;AAAA,EAChB,CACF;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA;AAAA;AAAA,EAGN;AACF,CAAC;AAED,QAAQ,cAAc;;;AC3EtB,OAAOC,YAAW;AAClB,SAAS,QAAAC,aAAuB;AAahC,IAAM,aAA0D;AAAA,EAC9D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AASO,IAAM,SAAgC,CAAC;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AACF,MAAM;AACJ,MAAI,SAAS,QAAQ;AACnB,WACE,gBAAAD,OAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE;AAAA,QAC9C,6BAA2B;AAAA;AAAA,IAC7B;AAAA,EAEJ;AAEA,QAAM,YAAY,WAAW,IAAI;AACjC,QAAM,cAAyB,SAAS,eACpC,EAAE,OAAO,UAAU,IACnB,EAAE,QAAQ,UAAU;AAExB,SACE,gBAAAD,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,MACzB;AAAA,MACA,6BAA2B;AAAA;AAAA,EAC7B;AAEJ;AAEA,OAAO,cAAc;;;AClDrB,OAAOC,YAAW;AAClB,SAAS,YAAAC,iBAA2B;AAkCpC,SAAS,kBACP,WACA,UAA8B,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC,EAAE,GAC3D;AAET,MAAI,OAAO,cAAc,WAAW;AAClC,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,cAAc,YAAY;AACnC,WAAO,UAAU,OAAO;AAAA,EAC1B;AAGA,MAAI,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW,GAAG;AACtD,UAAM,CAAC,UAAU,WAAW,aAAa,IAAI;AAG7C,UAAM,QAAQ,OAAO,SAAS,EAAE,MAAM,GAAG;AACzC,QAAI;AAEJ,QAAI,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,GAAG;AACzC,oBAAc,QAAQ,aAAa,MAAM,CAAC,CAAC;AAAA,IAC7C,WAAW,MAAM,CAAC,MAAM,qBAAqB,MAAM,CAAC,GAAG;AACrD,oBAAc,QAAQ,kBAAkB,MAAM,CAAC,CAAC;AAAA,IAClD,WAAW,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,GAAG;AACpD,oBAAc,QAAQ,iBAAiB,MAAM,CAAC,CAAC;AAAA,IACjD,WAAW,MAAM,CAAC,KAAK,QAAQ,SAAS,MAAM,CAAC,CAAC,GAAG;AACjD,oBAAc,QAAQ,OAAO,MAAM,CAAC,CAAC;AAAA,IACvC;AAEA,YAAQ,UAAU;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,OAAO,WAAW,IAAI,OAAO,aAAa;AAAA,MACnD,KAAK;AACH,eAAO,OAAO,WAAW,KAAK,OAAO,aAAa;AAAA,MACpD,KAAK;AACH,eAAO,OAAO,WAAW,IAAI,OAAO,aAAa;AAAA,MACnD,KAAK;AACH,eAAO,OAAO,WAAW,KAAK,OAAO,aAAa;AAAA,MACpD,KAAK;AACH,eAAO,MAAM,QAAQ,WAAW,KAAK,YAAY,SAAS,aAAa;AAAA,MACzE;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAGA,SAAO,QAAQ,SAAS;AAC1B;AAEO,IAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA,UAAU,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC,EAAE;AAAA,EAChD;AAAA,EACA,WAAW;AAAA,EACX,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAID,OAAM,SAAS,CAAC,YAAY,OAAO,KAAK;AAC1E,QAAM,WAAWA,OAAM,OAAO,IAAIC,UAAS,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE;AAEtE,EAAAD,OAAM,UAAU,MAAM;AACpB,QAAI,CAAC,WAAW;AACd,mBAAa,IAAI;AACjB;AAAA,IACF;AAEA,UAAM,UAAU,kBAAkB,WAAW,OAAO;AAEpD,iBAAa,OAAO;AAEpB,QAAI,SAAS;AACX,MAAAC,UAAS,OAAO,UAAU;AAAA,QACxB,SAAS,UAAU,IAAI;AAAA,QACvB,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC,EAAE,MAAM;AAAA,IACX,OAAO;AACL,eAAS,SAAS,UAAU,IAAI,CAAC;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,WAAW,SAAS,SAAS,QAAQ,CAAC;AAE1C,MAAI,CAAC,WAAW;AACd,WAAO,gBAAAD,OAAA,cAAAA,OAAA,gBAAG,QAAS;AAAA,EACrB;AAEA,MAAI,SAAS;AACX,WACE,gBAAAA,OAAA;AAAA,MAACC,UAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACL,EAAE,SAAS,UAAU,UAAU,SAAS;AAAA,UACxC,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,QACzB;AAAA;AAAA,MAEC,YAAY,WAAW;AAAA,IAC1B;AAAA,EAEJ;AAEA,SAAO,YAAY,gBAAAD,OAAA,cAAAA,OAAA,gBAAG,QAAS,IAAM,gBAAAA,OAAA,cAAAA,OAAA,gBAAG,QAAS;AACnD;AAEA,mBAAmB,cAAc;;;AC1JjC,OAAOE,UAAS,WAAW,cAAc;AACzC,SAAS,QAAAC,OAAM,YAAAC,WAAU,cAAAC,mBAA6B;AAmBtD,IAAM,UAAyC;AAAA,EAC7C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,YAAsC,CAAC;AAAA,EAClD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,YAAY,OAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AAEhD,QAAM,eAAgD;AAAA,IACpD,QAAQ,MAAM,OAAO;AAAA,IACrB,SAAS,MAAM,OAAO,kBAAkB;AAAA,IACxC,MAAM,MAAM,OAAO;AAAA,IACnB,MAAM,MAAM,OAAO;AAAA,IACnB,OAAO,MAAM,OAAO;AAAA,EACtB;AAEA,YAAU,MAAM;AACd,QAAI,UAAU,WAAW,YAAY,WAAW,SAAS;AACvD,YAAM,YAAYA,UAAS;AAAA,QACzBA,UAAS,SAAS;AAAA,UAChBA,UAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,UAAS,OAAO,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AACA,gBAAU,MAAM;AAChB,aAAO,MAAM,UAAU,KAAK;AAAA,IAC9B,OAAO;AACL,gBAAU,SAAS,CAAC;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,SAAS,CAAC;AAE7B,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,QAAQ,aAAa,MAAM;AAEjC,QAAM,MACJ,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,SAAS,KAAK,KACjC,gBAAAF,OAAA;AAAA,IAACD,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLG,QAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc,UAAU;AAAA,UACxB,iBAAiB;AAAA,UACjB,SAAS;AAAA,QACX;AAAA,MACF;AAAA;AAAA,EACF,CACF;AAGF,MAAI,OAAO;AACT,WACE,gBAAAF,OAAA,cAAC,UAAO,SAAS,MAAM,QAAQ,CAAC,GAAG,OAAM,UAAS,SAC/C,KACD,gBAAAA,OAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KACnE,KACH,CACF;AAAA,EAEJ;AAEA,SAAO;AACT;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,KAAK,CAAC;AACR,CAAC;AAED,UAAU,cAAc;;;AC7GxB,OAAOC,aAAW;AAClB,SAAS,cAAAC,mBAA6B;AAoBtC,IAAM,aAA8E;AAAA,EAClF,IAAI,EAAE,MAAM,IAAI,MAAM,KAAK;AAAA,EAC3B,IAAI,EAAE,MAAM,IAAI,MAAM,KAAK;AAAA,EAC3B,IAAI,EAAE,MAAM,IAAI,MAAM,OAAO;AAC/B;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,OAAO;AAAA,EACP;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,SAAS,WAAW,IAAI;AAE9B,QAAM,kBAAkD;AAAA,IACtD,IAAI,MAAM,OAAO;AAAA,IACjB,MAAM,MAAM,OAAO;AAAA,IACnB,SAAS,MAAM,OAAO,kBAAkB;AAAA,EAC1C;AAEA,QAAM,QAAQ,gBAAgB,SAAS;AACvC,QAAM,WAAW,cAAc,OAAO,eAAe,cAAc,SAAS,iBAAiB;AAE7F,SACE,gBAAAC,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,UAAS,SACjC,gBAAAA,QAAA,cAAC,QAAK,MAAM,UAAU,MAAM,OAAO,MAAM,OAAc,GACtD,aAAa,UAAU,UACtB,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,OAAO,UAAU,MAAM,WAAW,MAAM,OAAO,IAAI,EAAE;AAAA,MACzD;AAAA;AAAA,IAEC,KAAK,IAAI,KAAK;AAAA,IAAE;AAAA,EACnB,CAEJ;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,OAAO;AAAA,IACL,YAAY;AAAA,EACd;AACF,CAAC;AAED,eAAe,cAAc;;;ACtE7B,OAAOC,aAAW;AAClB,SAAS,WAAW,cAAAC,mBAA6B;AAoB1C,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,MAAM;AACxB,QAAI,QAAQ;AACV,eAAS,KAAK,MAAM,MAAM,IAAI,aAAa;AAAA,IAC7C;AAAA,EACF;AAEA,QAAM,kBAAqE;AAAA,IACzE,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,MAAM,IAAI,MAAM,OAAO,WAAW;AAAA,IACrE,MAAM,EAAE,IAAI,MAAM,OAAO,OAAO,IAAI,MAAM,OAAO,WAAW;AAAA,IAC5D,UAAU,EAAE,IAAI,MAAM,OAAO,UAAU,MAAM,IAAI,MAAM,OAAO,QAAQ;AAAA,IACtE,QAAQ,EAAE,KAAK,SAAS,MAAM,OAAO,UAAU,MAAM,IAAI,MAAM,OAAO,WAAW;AAAA,EACnF;AAEA,QAAM,EAAE,IAAI,GAAG,IAAI,gBAAgB,aAAa;AAEhD,QAAM,UACJ,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,YAAY;AAAA,UACV,iBAAiB;AAAA,UACjB,OAAO;AAAA,QACT;AAAA,QACA,kBAAkB,UAAU;AAAA,UAC1B,YAAY;AAAA,UACZ,UAAU,MAAM,WAAW,MAAM;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC;AAAA,EACH;AAGF,MAAI,QAAQ;AACV,WACE,gBAAAD,QAAA,cAAC,aAAU,SAAS,aAAa,OAAOC,QAAO,aAC5C,OACH;AAAA,EAEJ;AAEA,SAAO;AACT;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,MAAM;AAAA,IACJ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AACF,CAAC;AAED,cAAc,cAAc;;;AC1F5B,OAAOC,WAAS,aAAAC,YAAW,UAAAC,eAAc;AACzC,SAAS,YAAAC,WAAU,cAAAC,oBAAwC;AAepD,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,gBAAgBC,QAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AACpD,QAAM,aAAaD,QAAO,CAAC;AAC3B,QAAM,CAAC,cAAc,eAAe,IAAIE,QAAM,SAAS,CAAC;AAExD,EAAAC,WAAU,MAAM;AACd,kBAAc,SAAS,WAAW,OAAO;AAEzC,IAAAF,UAAS,OAAO,eAAe;AAAA,MAC7B,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAET,UAAM,WAAW,cAAc,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM;AAC3D,YAAM,UAAU,KAAK,MAAM,CAAC;AAC5B,UAAI,YAAY,WAAW,SAAS;AAClC,mBAAW,UAAU;AACrB,wBAAgB,OAAO;AAAA,MACzB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,oBAAc,eAAe,QAAQ;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,aAAa,CAAC;AAEnC,SACE,gBAAAC,QAAA,cAACD,UAAS,MAAT,EAAc,OAAO,CAACG,SAAO,WAAW,KAAK,KAC5C,gBAAAF,QAAA;AAAA,IAACD,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLG,SAAO;AAAA,QACP;AAAA,UACE,OAAO,MAAM,OAAO;AAAA,UACpB,UAAU,MAAM,WAAW,MAAM,KAAK;AAAA,UACtC,YAAY,MAAM,WAAW,WAAW;AAAA,QAC1C;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC;AAAA,IAAQ;AAAA,IAAc;AAAA,EACzB,CACF;AAEJ;AAEA,IAAMA,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AACF,CAAC;AAED,gBAAgB,cAAc;;;AChF9B,OAAOC,WAAS,aAAAC,YAAW,UAAAC,SAAQ,gBAAgB;AACnD,SAAS,YAAAC,WAAU,cAAAC,oBAAwC;AAiBpD,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,EAAE;AACrD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,gBAAgBC,QAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AACpD,QAAM,cAAcD,QAA8C,IAAI;AACtE,QAAM,aAAaA,QAA6C,IAAI;AAEpE,EAAAE,WAAU,MAAM;AACd,qBAAiB,EAAE;AACnB,kBAAc,KAAK;AACnB,QAAI,YAAY;AAEhB,eAAW,UAAU,WAAW,MAAM;AACpC,kBAAY,UAAU,YAAY,MAAM;AACtC,YAAI,YAAY,KAAK,QAAQ;AAC3B,2BAAiB,KAAK,MAAM,GAAG,YAAY,CAAC,CAAC;AAC7C;AAAA,QACF,OAAO;AACL,cAAI,YAAY,QAAS,eAAc,YAAY,OAAO;AAC1D,wBAAc,IAAI;AAClB,uBAAa;AAAA,QACf;AAAA,MACF,GAAG,KAAK;AAAA,IACV,GAAG,UAAU;AAEb,WAAO,MAAM;AACX,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AACvD,UAAI,YAAY,QAAS,eAAc,YAAY,OAAO;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,YAAY,UAAU,CAAC;AAExC,EAAAA,WAAU,MAAM;AACd,QAAI,cAAc,CAAC,YAAY;AAC7B,YAAM,QAAQD,UAAS;AAAA,QACrBA,UAAS,SAAS;AAAA,UAChBA,UAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,UACDA,UAAS,OAAO,eAAe;AAAA,YAC7B,SAAS;AAAA,YACT,UAAU;AAAA,YACV,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AACA,YAAM,MAAM;AACZ,aAAO,MAAM,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,YAAY,aAAa,CAAC;AAE1C,SACE,gBAAAE,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YAAW,SACnC,gBAAAA,QAAA;AAAA,IAACF,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLG,SAAO;AAAA,QACP;AAAA,UACE,OAAO,MAAM,OAAO;AAAA,UACpB,UAAU,MAAM,WAAW,MAAM;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC;AAAA,EACH,GACC,cAAc,CAAC,cACd,gBAAAD,QAAA;AAAA,IAACF,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLG,SAAO;AAAA,QACP;AAAA,UACE,OAAO,MAAM,OAAO;AAAA,UACpB,UAAU,MAAM,WAAW,MAAM;AAAA,UACjC,SAAS;AAAA,QACX;AAAA,MACF;AAAA;AAAA,IACD;AAAA,EAED,CAEJ;AAEJ;AAEA,IAAMA,WAASC,aAAW,OAAO;AAAA,EAC/B,MAAM;AAAA,IACJ,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF,CAAC;AAED,eAAe,cAAc;;;ACzH7B,OAAOC,aAAW;AAClB,SAAS,aAAAC,YAAW,cAAAC,oBAA6B;AAkBjD,IAAMC,cAAyE;AAAA,EAC7E,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE;AAAA,EAC3B,IAAI,EAAE,MAAM,IAAI,SAAS,GAAG;AAAA,EAC5B,IAAI,EAAE,MAAM,IAAI,SAAS,GAAG;AAC9B;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,cAAc,WAAW,IAAI,aAAa;AAClD,QAAM,SAASA,YAAW,IAAI;AAE9B,QAAM,SAAS,iBAAiB;AAChC,QAAM,WAAW,SAAS,WAAM;AAChC,QAAM,QAAQ,SAAS,eAAe;AAEtC,SACE,gBAAAC,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAO;AAAA,QACLC,SAAO;AAAA,QACP;AAAA,UACE,SAAS,OAAO;AAAA,UAChB,cAAc,MAAM,aAAa;AAAA,UACjC,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,QAAA,cAAC,UAAO,SAAS,MAAM,QAAQ,CAAC,GAAG,OAAM,YACvC,gBAAAA,QAAA,cAAC,QAAK,MAAM,SAAS,UAAU,YAAY,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,YAAY,GAC9F,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,YAAY,UAAU,OAAO,OAAO,IAAI,KAC7F,QACH,GACC,aACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAC5E,KACH,CAEJ;AAAA,EACF;AAEJ;AAEA,IAAME,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AACF,CAAC;AAED,YAAY,cAAc;;;ACxE1B,OAAOC,WAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AACxC,SAAS,QAAAC,OAAM,cAAc,cAAAC,oBAAgD;AAwB7E,IAAM,aAAa;AACnB,IAAM,eAAe;AAEd,IAAM,cAA0C,CAAC;AAAA,EACtD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,mBAAmB,GAAG;AACzE,QAAM,aAAaC,QAAO,CAAC;AAC3B,QAAM,eAAe,mBAAmB;AAExC,QAAM,QAAQ,CAAC,MAAc;AAC3B,UAAM,UAAU,KAAK,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO;AACtD,WAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,OAAO,CAAC;AAAA,EAC7C;AAEA,QAAM,cAAc,OAAO,eAAe,QAAQ,MAAM;AAExD,QAAM,YAAY,CAAC,MAAc;AAC/B,UAAM,UAAU,MAAM,CAAC;AACvB,qBAAiB,OAAO;AACxB,eAAW,OAAO;AAClB,QAAI,QAAQ;AACV,eAAS,KAAK,MAAM,MAAM,IAAI,EAAE,GAAG,eAAe,OAAO,QAAQ,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,QAAM,eAAeA;AAAA,IACnB,aAAa,OAAO;AAAA,MAClB,8BAA8B,MAAM,CAAC;AAAA,MACrC,6BAA6B,MAAM,CAAC;AAAA,MACpC,qBAAqB,CAAC,GAAG,iBAAiB;AACxC,cAAMC,YAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,WAAW,WAAW,EAAE,CAAC;AACrF,kBAAUA,aAAY,MAAM,OAAO,GAAG;AAAA,MACxC;AAAA,MACA,oBAAoB,CAAC,GAAG,iBAAiB;AACvC,cAAM,gBAAgB,YAAY;AAClC,cAAM,gBAAgB,aAAa,MAAM,WAAW,WAAW;AAC/D,cAAM,YAAY,gBAAgB,kBAAkB,MAAM,OAAO;AACjE,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH,EAAE;AAEF,QAAM,eAAe,CAAC,MAAyB;AAC7C,eAAW,UAAU,EAAE,YAAY,OAAO;AAAA,EAC5C;AAEA,QAAM,WAAW,YAAY;AAE7B,QAAM,UACJ,gBAAAC,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO,CAACC,SAAO,gBAAgB,YAAY,EAAE,SAAS,IAAI,GAAG,KAAK;AAAA,MAClE,UAAU;AAAA,MACT,GAAG,aAAa;AAAA;AAAA,IAEjB,gBAAAF,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,SAAO;AAAA,UACP,EAAE,iBAAiB,MAAM,OAAO,OAAO;AAAA,QACzC;AAAA;AAAA,IACF;AAAA,IACA,gBAAAF,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,MAAM,OAAO;AAAA,YAC9B,OAAO,GAAG,WAAW,GAAG;AAAA,UAC1B;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAF,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,MAAM,OAAO;AAAA,YAC9B,aAAa,MAAM,OAAO;AAAA,YAC1B,MAAM,GAAG,WAAW,GAAG;AAAA,YACvB,YAAY,CAAC,aAAa;AAAA,YAC1B,GAAG,MAAM,QAAQ;AAAA,UACnB;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EACF;AAGF,MAAI,SAAS,WAAW;AACtB,WACE,gBAAAF,QAAA,cAAC,UAAO,SAAS,MAAM,QAAQ,CAAC,GAAG,UAC/B,SAAS,cACT,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,UAAS,OAAOE,SAAO,UAC9C,SACC,gBAAAF,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,GAAG,MAAM,EAAE,KACrF,KACH,GAED,aACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,YAAY,YAAY,MAAM,KACnF,YACH,CAEJ,GAED,OACH;AAAA,EAEJ;AAEA,SAAO;AACT;AAEA,IAAME,WAASC,aAAW,OAAO;AAAA,EAC/B,gBAAgB;AAAA,IACd,QAAQ,aAAa;AAAA,IACrB,gBAAgB;AAAA,IAChB,mBAAmB,aAAa;AAAA,EAClC;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc,eAAe;AAAA,IAC7B,UAAU;AAAA,IACV,MAAM,aAAa;AAAA,IACnB,OAAO,aAAa;AAAA,EACtB;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,cAAc,eAAe;AAAA,IAC7B,UAAU;AAAA,IACV,MAAM,aAAa;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc,aAAa;AAAA,IAC3B,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,YAAY,cAAc;;;AClL1B,OAAOC,WAAS,eAAe;AAC/B;AAAA,EACE,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAGK;AAyCA,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,WAAW,YAAY;AAG7B,QAAM,iBAAiB,QAAQ,MAAM;AACnC,UAAM,SAAS,QAAQ;AACvB,UAAM,SAAS,KAAK,MAAM,QAAQ,OAAO;AACzC,WAAO;AAAA,MACL,GAAG,SAAS;AAAA,MACZ,GAAG,SAAS;AAAA,IACd;AAAA,EACF,GAAG,CAAC,OAAO,SAAS,YAAY,WAAW,CAAC;AAE5C,QAAM,cAAc,MAAM;AACxB,QAAI,OAAQ,UAAS,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC;AAC5C,cAAU;AAAA,EACZ;AAEA,QAAM,YAAY;AAAA,IAChB,EAAE,YAAY,EAAE;AAAA,IAChB,EAAE,YAAY,EAAE;AAAA,IAChB,EAAE,MAAa;AAAA,IACf,EAAE,QAAQ,GAAG,QAAQ,MAAM;AAAA,IAC3B,EAAE,QAAQ,QAAQ,KAAK,EAAE;AAAA,IACzB,EAAE,QAAQ,QAAQ,KAAK,EAAE;AAAA,EAC3B;AAEA,QAAM,YAAa,UAAU,UAAWC,oBAAmBC;AAE3D,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAU,UAAU,UAAW,cAAc;AAAA,MAC7C,OAAO;AAAA,QACLC,SAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAD,QAAA;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO,aAAa;AAAA,UACpB,QAAQ,cAAc,KAAK,MAAM,QAAQ,KAAK,OAAO;AAAA,UACrD,UAAU;AAAA,UACV,MAAM,CAAC,eAAe;AAAA,UACtB,KAAK,CAAC,eAAe;AAAA,UACrB,UAAU;AAAA,QACZ;AAAA;AAAA,MAEA,gBAAAC,QAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,aAAa;AAAA,YACpB,QAAQ,cAAc,KAAK,MAAM,QAAQ,KAAK,OAAO;AAAA,YACrD,YAAY;AAAA,UACd;AAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,IAAMD,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF,CAAC;AAED,OAAO,cAAc;;;AC5IrB,OAAOC,aAAW;AAClB,SAAS,QAAAC,QAAM,QAAAC,OAAM,cAAAC,oBAA6B;AAuBlD,IAAM,uBAAmD;AAAA,EACvD,MAAM,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EAC9C,QAAQ,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EAChD,UAAU,EAAE,MAAM,aAAM,iBAAiB,UAAU;AAAA,EACnD,QAAQ,EAAE,MAAM,aAAM,iBAAiB,UAAU;AAAA,EACjD,QAAQ,EAAE,MAAM,aAAM,iBAAiB,UAAU;AAAA,EACjD,SAAS,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EACjD,OAAO,EAAE,MAAM,aAAM,iBAAiB,UAAU;AAAA,EAChD,QAAQ,EAAE,MAAM,aAAM,iBAAiB,UAAU;AAAA,EACjD,MAAM,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EAC9C,OAAO,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EAC/C,OAAO,EAAE,MAAM,UAAK,iBAAiB,UAAU;AAAA,EAC/C,UAAU,EAAE,MAAM,aAAM,iBAAiB,UAAU;AACrD;AAEA,IAAM,gBAA4B,EAAE,MAAM,KAAK,iBAAiB,UAAU;AAE1E,IAAM,cAAqE;AAAA,EACzE,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG;AAAA,EAC/B,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG;AAAA,EAC/B,IAAI,EAAE,SAAS,IAAI,UAAU,GAAG;AAClC;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,eAAe,cACjB,EAAE,GAAG,sBAAsB,GAAG,YAAY,IAC1C;AACJ,QAAM,SAAS,aAAa,MAAM,YAAY,CAAC,KAAK;AACpD,QAAM,eAAe,SAAS,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AAC3E,QAAM,aAAa,YAAY,IAAI;AACnC,QAAM,gBAAgB,YACpB,MAAM,YAAY,MAAM,UACxB,MAAM,YAAY,MAAM;AAE1B,SACE,gBAAAC,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,SAAO;AAAA,QACP;AAAA,UACE,iBAAiB,OAAO;AAAA,UACxB,mBAAmB,WAAW;AAAA,UAC9B,iBAAiB,WAAW,UAAU;AAAA,UACtC,SAAS,gBAAgB,MAAM;AAAA,QACjC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,QAAA,cAACG,OAAA,EAAK,OAAO,EAAE,UAAU,WAAW,UAAU,aAAa,EAAE,KAC1D,OAAO,IACV;AAAA,IACA,gBAAAH,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU,WAAW;AAAA,UACrB,OAAO,MAAM,OAAO,oBAAoB;AAAA,UACxC,YAAY;AAAA,QACd;AAAA;AAAA,MAEC;AAAA,IACH;AAAA,EACF;AAEJ;AAEA,IAAMD,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF,CAAC;AAED,eAAe,cAAc;","names":["React","View","StyleSheet","React","View","styles","StyleSheet","React","TouchableOpacity","View","StyleSheet","React","width","View","styles","TouchableOpacity","StyleSheet","React","StyleSheet","View","React","View","styles","StyleSheet","React","View","Text","StyleSheet","sizeMap","React","View","styles","Text","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","React","Animated","React","View","Animated","StyleSheet","Animated","React","View","styles","StyleSheet","React","StyleSheet","React","styles","StyleSheet","React","StyleSheet","React","styles","StyleSheet","React","useEffect","useRef","Animated","StyleSheet","useRef","Animated","React","useEffect","styles","StyleSheet","React","useEffect","useRef","Animated","StyleSheet","useRef","Animated","useEffect","React","styles","StyleSheet","React","Pressable","StyleSheet","sizeConfig","React","Pressable","styles","StyleSheet","React","useRef","useState","View","StyleSheet","useState","useRef","fraction","React","View","styles","StyleSheet","React","View","Image","TouchableOpacity","StyleSheet","TouchableOpacity","View","React","styles","Image","StyleSheet","React","View","Text","StyleSheet","React","View","styles","Text","StyleSheet"]}