@almadar/mobile 1.1.0 → 1.2.3

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 (104) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
  3. package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
  4. package/dist/chunk-5U5Z65ZO.js.map +1 -0
  5. package/dist/chunk-A56SRZKI.js +59 -0
  6. package/dist/chunk-A56SRZKI.js.map +1 -0
  7. package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
  8. package/dist/chunk-BFRVXKSP.js.map +1 -0
  9. package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
  10. package/dist/chunk-ETD72PHO.js.map +1 -0
  11. package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
  12. package/dist/chunk-GMR5FKKB.js.map +1 -0
  13. package/dist/chunk-K2JGK2QD.js +17 -0
  14. package/dist/chunk-K2JGK2QD.js.map +1 -0
  15. package/dist/chunk-MLTSQPVN.js +337 -0
  16. package/dist/chunk-MLTSQPVN.js.map +1 -0
  17. package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
  18. package/dist/chunk-PBO6ZN2M.js.map +1 -0
  19. package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
  20. package/dist/chunk-QUFLYKWA.js.map +1 -0
  21. package/dist/chunk-TRYFJDL3.js +7 -0
  22. package/dist/chunk-TRYFJDL3.js.map +1 -0
  23. package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
  24. package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
  25. package/dist/components/atoms/DayCell.d.ts +18 -0
  26. package/dist/components/atoms/DayCell.d.ts.map +1 -0
  27. package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
  28. package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
  29. package/dist/components/atoms/RangeSlider.d.ts +20 -0
  30. package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
  31. package/dist/components/atoms/StatusDot.d.ts +16 -0
  32. package/dist/components/atoms/StatusDot.d.ts.map +1 -0
  33. package/dist/components/atoms/TextHighlight.d.ts +17 -0
  34. package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
  35. package/dist/components/atoms/ThemeToggle.d.ts +13 -0
  36. package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
  37. package/dist/components/atoms/TrendIndicator.d.ts +16 -0
  38. package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
  39. package/dist/components/atoms/TypewriterText.d.ts +16 -0
  40. package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
  41. package/dist/components/atoms/index.d.ts +18 -0
  42. package/dist/components/atoms/index.d.ts.map +1 -1
  43. package/dist/components/atoms/index.js +30 -10
  44. package/dist/components/index.js +59 -18
  45. package/dist/components/molecules/Accordion.d.ts +20 -0
  46. package/dist/components/molecules/Accordion.d.ts.map +1 -0
  47. package/dist/components/molecules/CalendarGrid.d.ts +22 -0
  48. package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
  49. package/dist/components/molecules/Carousel.d.ts +17 -0
  50. package/dist/components/molecules/Carousel.d.ts.map +1 -0
  51. package/dist/components/molecules/DataGrid.d.ts +43 -0
  52. package/dist/components/molecules/DataGrid.d.ts.map +1 -0
  53. package/dist/components/molecules/DataList.d.ts +43 -0
  54. package/dist/components/molecules/DataList.d.ts.map +1 -0
  55. package/dist/components/molecules/FlipCard.d.ts +16 -0
  56. package/dist/components/molecules/FlipCard.d.ts.map +1 -0
  57. package/dist/components/molecules/Lightbox.d.ts +19 -0
  58. package/dist/components/molecules/Lightbox.d.ts.map +1 -0
  59. package/dist/components/molecules/NumberStepper.d.ts +19 -0
  60. package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
  61. package/dist/components/molecules/PullToRefresh.d.ts +14 -0
  62. package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
  63. package/dist/components/molecules/SortableList.d.ts +17 -0
  64. package/dist/components/molecules/SortableList.d.ts.map +1 -0
  65. package/dist/components/molecules/StarRating.d.ts +19 -0
  66. package/dist/components/molecules/StarRating.d.ts.map +1 -0
  67. package/dist/components/molecules/SwipeableRow.d.ts +20 -0
  68. package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
  69. package/dist/components/molecules/index.d.ts +24 -0
  70. package/dist/components/molecules/index.d.ts.map +1 -1
  71. package/dist/components/molecules/index.js +30 -5
  72. package/dist/components/organisms/FormSection.d.ts +7 -0
  73. package/dist/components/organisms/FormSection.d.ts.map +1 -1
  74. package/dist/components/organisms/index.d.ts +0 -4
  75. package/dist/components/organisms/index.d.ts.map +1 -1
  76. package/dist/components/organisms/index.js +4 -8
  77. package/dist/index.js +72 -26
  78. package/dist/index.js.map +1 -1
  79. package/dist/lib/getNestedValue.d.ts +5 -0
  80. package/dist/lib/getNestedValue.d.ts.map +1 -0
  81. package/dist/lib/index.d.ts +1 -0
  82. package/dist/lib/index.d.ts.map +1 -1
  83. package/dist/lib/index.js +6 -2
  84. package/dist/providers/ThemeProvider.d.ts +7 -0
  85. package/dist/providers/ThemeProvider.d.ts.map +1 -1
  86. package/dist/providers/index.d.ts +2 -2
  87. package/dist/providers/index.d.ts.map +1 -1
  88. package/dist/providers/index.js +8 -4
  89. package/package.json +31 -30
  90. package/dist/chunk-6RVITGGH.js +0 -167
  91. package/dist/chunk-6RVITGGH.js.map +0 -1
  92. package/dist/chunk-7C5JCLLY.js.map +0 -1
  93. package/dist/chunk-DMLYJFYQ.js.map +0 -1
  94. package/dist/chunk-DY52O4T3.js.map +0 -1
  95. package/dist/chunk-LFHVNHVA.js.map +0 -1
  96. package/dist/chunk-T77JPOTP.js.map +0 -1
  97. package/dist/chunk-VLUJ7BXN.js +0 -36
  98. package/dist/chunk-VLUJ7BXN.js.map +0 -1
  99. package/dist/chunk-YMJZLYLV.js.map +0 -1
  100. package/dist/components/organisms/EntityCard.d.ts +0 -11
  101. package/dist/components/organisms/EntityCard.d.ts.map +0 -1
  102. package/dist/components/organisms/EntityList.d.ts +0 -17
  103. package/dist/components/organisms/EntityList.d.ts.map +0 -1
  104. /package/dist/{chunk-S2IT7WZT.js.map → chunk-5JVEVV74.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/molecules/FormField.tsx","../src/components/molecules/FormSectionHeader.tsx","../src/components/molecules/InputGroup.tsx","../src/components/molecules/Alert.tsx","../src/components/molecules/Skeleton.tsx","../src/components/molecules/SearchInput.tsx","../src/components/molecules/Tooltip.tsx","../src/components/molecules/Popover.tsx","../src/components/molecules/Menu.tsx","../src/components/molecules/Breadcrumb.tsx","../src/components/molecules/ButtonGroup.tsx","../src/components/molecules/ErrorBoundary.tsx","../src/components/molecules/FloatingActionButton.tsx","../src/components/molecules/Flex.tsx","../src/components/molecules/SimpleGrid.tsx","../src/components/molecules/Container.tsx","../src/components/molecules/Grid.tsx","../src/components/molecules/SidePanel.tsx","../src/components/molecules/Navigation.tsx","../src/components/molecules/RelationSelect.tsx","../src/components/molecules/FilterGroup.tsx","../src/components/molecules/Meter.tsx","../src/components/molecules/Pagination.tsx","../src/components/molecules/MarkdownContent.tsx","../src/components/molecules/WizardNavigation.tsx","../src/components/molecules/WizardProgress.tsx","../src/components/molecules/QuizBlock.tsx","../src/components/molecules/game/ActionButtons.tsx","../src/components/molecules/game/DPad.tsx","../src/components/molecules/RepeatableFormSection.tsx","../src/components/molecules/ScaledDiagram.tsx"],"sourcesContent":["import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nexport interface FormFieldProps {\n label?: string;\n required?: boolean;\n error?: string;\n helperText?: string;\n children: React.ReactNode;\n style?: ViewStyle;\n}\n\nexport const FormField: React.FC<FormFieldProps> = ({\n label,\n required,\n error,\n helperText,\n children,\n style,\n}) => {\n return (\n <VStack spacing={6} style={[styles.container, style as ViewStyle]}>\n {label && (\n <View style={styles.labelContainer}>\n <Typography variant=\"label\">\n {label}\n {required && <Typography variant=\"label\" color=\"#ef4444\"> *</Typography>}\n </Typography>\n </View>\n )}\n \n {children}\n \n {error ? (\n <Typography variant=\"caption\" color=\"#ef4444\">\n {error}\n </Typography>\n ) : helperText ? (\n <Typography variant=\"caption\" color=\"#6b7280\">\n {helperText}\n </Typography>\n ) : null}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n labelContainer: {\n marginBottom: 4,\n },\n});\n\nFormField.displayName = 'FormField';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface FormSectionHeaderProps {\n title: string;\n subtitle?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const FormSectionHeader: React.FC<FormSectionHeaderProps> = ({\n title,\n subtitle,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <View style={[styles.container, style]}>\n <Typography \n variant=\"h4\" \n style={{ color: theme.colors.foreground }}\n >\n {title}\n </Typography>\n {subtitle && (\n <Typography \n variant=\"caption\" \n style={[styles.subtitle, { color: theme.colors['muted-foreground'] }]}\n >\n {subtitle}\n </Typography>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 16,\n },\n subtitle: {\n marginTop: 4,\n },\n});\n\nFormSectionHeader.displayName = 'FormSectionHeader';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { VStack } from '../atoms/Stack';\nimport { Label } from '../atoms/Label';\nimport { Typography } from '../atoms/Typography';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface InputGroupProps {\n label?: string;\n required?: boolean;\n helperText?: string;\n errorMessage?: string;\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 InputGroup: React.FC<InputGroupProps> = ({\n label,\n required = false,\n helperText,\n errorMessage,\n children,\n style,\n isLoading,\n error,\n}) => {\n const theme = useTheme();\n\n if (isLoading) {\n return (\n <View style={[styles.container, style as ViewStyle]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style as never]}>\n <ErrorState message={(error as Error).message} />\n </View>\n );\n }\n\n const errorText = (error as Error | null)?.message || errorMessage;\n\n return (\n <VStack spacing={4} style={[styles.container, style as ViewStyle]}>\n {label && (\n <Label required={required}>\n {label}\n </Label>\n )}\n {children}\n {errorText ? (\n <Typography \n variant=\"caption\" \n style={{ color: theme.colors.error }}\n >\n {errorText}\n </Typography>\n ) : helperText ? (\n <Typography \n variant=\"caption\" \n style={{ color: theme.colors['muted-foreground'] }}\n >\n {helperText}\n </Typography>\n ) : null}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n});\n\nInputGroup.displayName = 'InputGroup';\n","import React from 'react';\nimport { \n View, \n TouchableOpacity,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface AlertProps {\n title?: string;\n message: string;\n variant?: AlertVariant;\n dismissible?: boolean;\n onDismiss?: () => void;\n dismissAction?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Payload for dismiss action */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n message,\n variant = 'info',\n dismissible = false,\n onDismiss,\n dismissAction,\n style,\n isLoading,\n error,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleDismiss = () => {\n if (dismissAction) {\n eventBus.emit(`UI:${dismissAction}`, actionPayload);\n }\n onDismiss?.();\n };\n\n const variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string }> = {\n info: {\n bg: theme.colors.info,\n border: theme.colors.info,\n icon: 'ℹ️',\n },\n success: {\n bg: theme.colors.success,\n border: theme.colors.success,\n icon: '✓',\n },\n warning: {\n bg: theme.colors.warning,\n border: theme.colors.warning,\n icon: '⚠️',\n },\n error: {\n bg: theme.colors.error,\n border: theme.colors.error,\n icon: '✕',\n },\n };\n\n const { bg, border } = variantStyles[variant];\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\n style={[\n styles.container,\n {\n backgroundColor: bg + '20', // 20% opacity\n borderColor: border,\n },\n style,\n ]}\n >\n <HStack spacing={12} align=\"flex-start\">\n <View style={[styles.icon, { backgroundColor: bg }]}>\n <Typography variant=\"body\" style={{ color: theme.colors['info-foreground'] }}>\n {variantStyles[variant].icon}\n </Typography>\n </View>\n \n <View style={styles.content}>\n {title && (\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body\" style={{ color: theme.colors.foreground }}>\n {message}\n </Typography>\n </View>\n\n {dismissible && (\n <TouchableOpacity onPress={handleDismiss} style={styles.dismiss}>\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'] }}>\n ✕\n </Typography>\n </TouchableOpacity>\n )}\n </HStack>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n borderWidth: 1,\n padding: 12,\n },\n icon: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flex: 1,\n },\n dismiss: {\n padding: 4,\n },\n});\n\nAlert.displayName = 'Alert';\n","import React, { useEffect } from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle,\n Animated,\n Easing\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface SkeletonProps {\n width?: number | string;\n height?: number;\n borderRadius?: number;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width = '100%',\n height = 16,\n borderRadius = 4,\n style,\n}) => {\n const theme = useTheme();\n const shimmer = React.useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n const animation = Animated.loop(\n Animated.timing(shimmer, {\n toValue: 1,\n duration: 1500,\n easing: Easing.ease,\n useNativeDriver: true,\n })\n );\n\n animation.start();\n\n return () => animation.stop();\n }, []);\n\n const translateX = shimmer.interpolate({\n inputRange: [0, 1],\n outputRange: [-200, 200],\n });\n\n return (\n <View\n style={[\n styles.container,\n {\n width: width as never,\n height,\n borderRadius,\n backgroundColor: theme.colors.muted,\n },\n style as ViewStyle,\n ]}\n >\n <Animated.View\n style={[\n styles.shimmer,\n {\n transform: [{ translateX }],\n },\n ]}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n shimmer: {\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n },\n});\n\nSkeleton.displayName = 'Skeleton';\n","import React from 'react';\nimport { \n View, \n TextInput, \n TouchableOpacity,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface SearchInputProps {\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: () => void;\n placeholder?: string;\n autoFocus?: boolean;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Declarative submit event name - emits UI:${submitEvent} via eventBus */\n submitEvent?: string;\n}\n\nexport const SearchInput: React.FC<SearchInputProps> = ({\n value,\n onChange,\n onSubmit,\n placeholder = 'Search...',\n autoFocus = false,\n style,\n isLoading,\n error,\n changeEvent,\n submitEvent,\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 onChange?.(text);\n };\n\n const handleSubmit = () => {\n if (submitEvent) {\n eventBus.emit(`UI:${submitEvent}`, { value });\n }\n onSubmit?.();\n };\n\n const handleClear = () => {\n handleChangeText('');\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style as ViewStyle]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style as ViewStyle]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <HStack \n spacing={8} \n align=\"center\" \n style={[\n styles.container,\n {\n backgroundColor: theme.colors.card,\n borderColor: theme.colors.border,\n },\n style as ViewStyle,\n ]}\n >\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'] }}>\n 🔍\n </Typography>\n \n <TextInput\n value={value}\n onChangeText={handleChangeText}\n onSubmitEditing={handleSubmit}\n placeholder={placeholder}\n placeholderTextColor={theme.colors['muted-foreground']}\n autoFocus={autoFocus}\n returnKeyType=\"search\"\n style={[\n styles.input,\n { color: theme.colors.foreground },\n ]}\n />\n \n {value && value.length > 0 && (\n <TouchableOpacity onPress={handleClear} style={styles.clear}>\n <Typography variant=\"body\" style={{ color: theme.colors['muted-foreground'] }}>\n ✕\n </Typography>\n </TouchableOpacity>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n borderWidth: 1,\n paddingHorizontal: 12,\n height: 44,\n },\n input: {\n flex: 1,\n fontSize: 16,\n padding: 0,\n },\n clear: {\n padding: 4,\n },\n});\n\nSearchInput.displayName = 'SearchInput';\n","import React, { useState, useRef } from 'react';\nimport { \n View, \n Text,\n StyleSheet, \n ViewStyle,\n Modal,\n TouchableOpacity,\n TouchableWithoutFeedback\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface TooltipProps {\n content: string;\n children: React.ReactNode;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n children,\n style,\n}) => {\n const theme = useTheme();\n const [visible, setVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n\n const showTooltip = () => {\n triggerRef.current?.measure((x, y, width, height, pageX, pageY) => {\n setPosition({ x: pageX, y: pageY, width, height });\n setVisible(true);\n });\n };\n\n const hideTooltip = () => {\n setVisible(false);\n };\n\n const tooltipY = position.y - 40;\n const centerX = position.x + position.width / 2;\n\n return (\n <>\n <TouchableOpacity\n ref={triggerRef}\n onPressIn={showTooltip}\n onPressOut={hideTooltip}\n style={style}\n activeOpacity={1}\n >\n {children}\n </TouchableOpacity>\n\n <Modal\n visible={visible}\n transparent\n animationType=\"fade\"\n onRequestClose={hideTooltip}\n >\n <TouchableWithoutFeedback onPress={hideTooltip}>\n <View style={styles.overlay}>\n <View\n style={[\n styles.tooltip,\n {\n backgroundColor: theme.colors.foreground,\n top: tooltipY,\n left: centerX - 60,\n },\n ]}\n >\n <Text style={[styles.text, { color: theme.colors.background }]}>\n {content}\n </Text>\n <View \n style={[\n styles.arrow, \n { borderTopColor: theme.colors.foreground }\n ]} \n />\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n tooltip: {\n position: 'absolute',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 6,\n minWidth: 120,\n alignItems: 'center',\n },\n text: {\n fontSize: 12,\n textAlign: 'center',\n },\n arrow: {\n position: 'absolute',\n bottom: -8,\n borderLeftWidth: 8,\n borderRightWidth: 8,\n borderTopWidth: 8,\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n },\n});\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, useRef } from 'react';\nimport { \n View, \n StyleSheet, \n ViewStyle,\n Modal,\n TouchableOpacity,\n TouchableWithoutFeedback,\n Dimensions\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface PopoverProps {\n trigger: React.ReactNode;\n content: React.ReactNode;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n content,\n style,\n}) => {\n const theme = useTheme();\n const [visible, setVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const triggerRef = useRef<View>(null);\n const screenHeight = Dimensions.get('window').height;\n\n const showPopover = () => {\n triggerRef.current?.measure((x, y, width, height, pageX, pageY) => {\n setPosition({ x: pageX, y: pageY, width, height });\n setVisible(true);\n });\n };\n\n const hidePopover = () => {\n setVisible(false);\n };\n\n // Position popover below trigger, or above if near bottom\n const popoverY = position.y + position.height + 8;\n const showAbove = popoverY > screenHeight * 0.7;\n const finalY = showAbove ? position.y - 200 : popoverY;\n\n return (\n <>\n <TouchableOpacity\n ref={triggerRef}\n onPress={showPopover}\n style={style}\n >\n {trigger}\n </TouchableOpacity>\n\n <Modal\n visible={visible}\n transparent\n animationType=\"fade\"\n onRequestClose={hidePopover}\n >\n <TouchableWithoutFeedback onPress={hidePopover}>\n <View style={styles.overlay}>\n <View\n style={[\n styles.popover,\n {\n backgroundColor: theme.colors.card,\n borderColor: theme.colors.border,\n top: finalY,\n left: position.x,\n minWidth: position.width,\n },\n ]}\n >\n {showAbove && (\n <View style={[styles.arrowUp, { borderBottomColor: theme.colors.card }]} />\n )}\n <View style={styles.content}>\n {content}\n </View>\n {!showAbove && (\n <View style={[styles.arrowDown, { borderTopColor: theme.colors.card }]} />\n )}\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.3)',\n },\n popover: {\n position: 'absolute',\n borderRadius: 8,\n borderWidth: 1,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 4,\n },\n content: {\n padding: 12,\n },\n arrowUp: {\n position: 'absolute',\n top: -8,\n left: 20,\n borderLeftWidth: 8,\n borderRightWidth: 8,\n borderBottomWidth: 8,\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n },\n arrowDown: {\n position: 'absolute',\n bottom: -8,\n left: 20,\n borderLeftWidth: 8,\n borderRightWidth: 8,\n borderTopWidth: 8,\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n },\n});\n\nPopover.displayName = 'Popover';\n","import React from 'react';\nimport { \n View, \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n Modal,\n TouchableWithoutFeedback,\n ScrollView\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 interface MenuItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n action?: string;\n disabled?: boolean;\n}\n\nexport interface MenuProps {\n trigger: React.ReactNode;\n items: MenuItem[];\n style?: ViewStyle;\n onSelect?: (item: MenuItem) => void;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Menu: React.FC<MenuProps> = ({\n trigger,\n items,\n style,\n onSelect,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [visible, setVisible] = React.useState(false);\n const triggerRef = React.useRef<View>(null);\n const [position, setPosition] = React.useState({ x: 0, y: 0, width: 0 });\n\n const showMenu = () => {\n triggerRef.current?.measure((x, y, width, height, pageX, pageY) => {\n setPosition({ x: pageX, y: pageY + height + 4, width });\n setVisible(true);\n });\n };\n\n const hideMenu = () => {\n setVisible(false);\n };\n\n const handleSelect = (item: MenuItem) => {\n if (item.disabled) return;\n \n if (item.action) {\n eventBus.emit(`UI:${item.action}`, { itemId: item.id });\n }\n onSelect?.(item);\n hideMenu();\n };\n\n return (\n <>\n <TouchableOpacity\n ref={triggerRef}\n onPress={showMenu}\n style={style}\n >\n {trigger}\n </TouchableOpacity>\n\n <Modal\n visible={visible}\n transparent\n animationType=\"fade\"\n onRequestClose={hideMenu}\n >\n <TouchableWithoutFeedback onPress={hideMenu}>\n <View style={styles.overlay}>\n <View\n style={[\n styles.menu,\n {\n backgroundColor: theme.colors.card,\n borderColor: theme.colors.border,\n top: position.y,\n left: position.x,\n minWidth: Math.max(position.width, 200),\n },\n ]}\n >\n <ScrollView>\n {items.map((item) => (\n <TouchableOpacity\n key={item.id}\n onPress={() => handleSelect(item)}\n disabled={item.disabled}\n style={[\n styles.item,\n { opacity: item.disabled ? 0.5 : 1 },\n ]}\n >\n <HStack spacing={12} align=\"center\">\n {item.icon}\n <Typography \n variant=\"body\" \n style={{ color: theme.colors.foreground }}\n >\n {item.label}\n </Typography>\n </HStack>\n </TouchableOpacity>\n ))}\n </ScrollView>\n </View>\n </View>\n </TouchableWithoutFeedback>\n </Modal>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.3)',\n },\n menu: {\n position: 'absolute',\n borderRadius: 8,\n borderWidth: 1,\n maxHeight: 300,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 4,\n },\n item: {\n padding: 12,\n borderBottomWidth: 1,\n borderBottomColor: 'rgba(0,0,0,0.1)',\n },\n});\n\nMenu.displayName = 'Menu';\n","import React from 'react';\nimport { \n TouchableOpacity,\n ScrollView,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n action?: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n style?: ViewStyle;\n onNavigate?: (item: BreadcrumbItem, index: number) => void;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n style,\n onNavigate,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = (item: BreadcrumbItem, index: number) => {\n if (item.action) {\n eventBus.emit(`UI:${item.action}`, { href: item.href, index });\n }\n onNavigate?.(item, index);\n };\n\n return (\n <ScrollView \n horizontal \n showsHorizontalScrollIndicator={false}\n style={[styles.container, style]}\n >\n <HStack spacing={4} align=\"center\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <HStack key={index} spacing={4} align=\"center\">\n {index > 0 && (\n <Typography \n variant=\"caption\" \n style={{ color: theme.colors['muted-foreground'] }}\n >\n /\n </Typography>\n )}\n {isLast ? (\n <Typography \n variant=\"caption\" \n style={{ color: theme.colors.foreground, fontWeight: '500' }}\n >\n {item.label}\n </Typography>\n ) : (\n <TouchableOpacity onPress={() => handlePress(item, index)}>\n <Typography \n variant=\"caption\" \n style={{ color: theme.colors.primary }}\n >\n {item.label}\n </Typography>\n </TouchableOpacity>\n )}\n </HStack>\n );\n })}\n </HStack>\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxWidth: '100%',\n },\n});\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React from 'react';\nimport { \n TouchableOpacity,\n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\n\nexport interface ButtonGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ButtonGroupProps {\n options: ButtonGroupOption[];\n value?: string;\n onChange?: (value: string) => void;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n}\n\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n options,\n value,\n onChange,\n style,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = (optionValue: string) => {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { value: optionValue });\n }\n onChange?.(optionValue);\n };\n\n return (\n <HStack spacing={4} style={style ? [styles.container, style] : styles.container}>\n {options.map((option) => {\n const isSelected = value === option.value;\n return (\n <TouchableOpacity\n key={option.value}\n onPress={() => handlePress(option.value)}\n disabled={option.disabled}\n style={[\n styles.button,\n {\n backgroundColor: isSelected \n ? theme.colors.primary \n : theme.colors.card,\n borderColor: theme.colors.border,\n opacity: option.disabled ? 0.5 : 1,\n },\n ]}\n >\n <Typography \n variant=\"body\" \n style={{ \n color: isSelected \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground \n }}\n >\n {option.label}\n </Typography>\n </TouchableOpacity>\n );\n })}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexWrap: 'wrap',\n },\n button: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n borderRadius: 8,\n borderWidth: 1,\n },\n});\n\nButtonGroup.displayName = 'ButtonGroup';\n","import React, { ReactNode, ErrorInfo } from 'react';\nimport { View, ViewStyle } from 'react-native';\nimport { ErrorState } from './ErrorState';\n\nexport interface ErrorBoundaryProps {\n /** Content to render when no error */\n children: ReactNode;\n /** Fallback UI when an error is caught */\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n /** Additional styles for the wrapper */\n style?: ViewStyle;\n /** Called when an error is caught (for logging/telemetry) */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\n/**\n * ErrorBoundary — catches React render errors in child components.\n */\nexport class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n static displayName = 'ErrorBoundary';\n\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n }\n\n private reset = (): void => {\n this.setState({ error: null });\n };\n\n render(): ReactNode {\n const { error } = this.state;\n const { children, fallback, style } = this.props;\n\n if (error) {\n const fallbackContent = this.renderFallback(error, fallback);\n if (style) {\n return <View style={style}>{fallbackContent}</View>;\n }\n return fallbackContent;\n }\n\n return children;\n }\n\n private renderFallback(error: Error, fallback: ErrorBoundaryProps['fallback']): ReactNode {\n if (typeof fallback === 'function') {\n return fallback(error, this.reset);\n }\n if (fallback) {\n return fallback;\n }\n return (\n <ErrorState\n message={`Something went wrong: ${error.message}`}\n onRetry={this.reset}\n />\n );\n }\n}\n","import React, { useState, useRef } from 'react';\nimport {\n View,\n TouchableOpacity,\n Animated,\n StyleSheet,\n ViewStyle,\n Text,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\n\nexport interface FloatingAction {\n id: string;\n label: string;\n icon: string;\n onPress?: () => void;\n event?: string;\n variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\n}\n\nexport interface FloatingActionButtonProps {\n /** Single action */\n action?: {\n icon: string;\n onPress: () => void;\n label?: string;\n variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\n };\n /** Multiple actions */\n actions?: FloatingAction[];\n /** Simplified icon API */\n icon?: string;\n /** Simplified onPress API */\n onPress?: () => void;\n /** Simplified variant API */\n variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\n /** Button position */\n position?:\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'top-right'\n | 'top-left'\n | 'top-center';\n /** Additional styles */\n style?: ViewStyle;\n}\n\nexport const FloatingActionButton: React.FC<FloatingActionButtonProps> = ({\n action,\n actions,\n icon,\n onPress,\n variant = 'primary',\n position = 'bottom-right',\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [isExpanded, setIsExpanded] = useState(false);\n const animation = useRef(new Animated.Value(0)).current;\n\n const resolvedAction =\n action ??\n (icon\n ? {\n icon,\n onPress: onPress ?? (() => {}),\n variant,\n }\n : undefined);\n\n const getPositionStyle = (): ViewStyle => {\n switch (position) {\n case 'bottom-right':\n return { bottom: 24, right: 24 };\n case 'bottom-left':\n return { bottom: 24, left: 24 };\n case 'bottom-center':\n return { bottom: 24, alignSelf: 'center' };\n case 'top-right':\n return { top: 24, right: 24 };\n case 'top-left':\n return { top: 24, left: 24 };\n case 'top-center':\n return { top: 24, alignSelf: 'center' };\n default:\n return { bottom: 24, right: 24 };\n }\n };\n\n const getVariantColor = (v: string) => {\n switch (v) {\n case 'primary':\n return theme.colors.primary;\n case 'secondary':\n return theme.colors.secondary;\n case 'success':\n return '#22c55e';\n case 'danger':\n return '#ef4444';\n case 'warning':\n return '#f59e0b';\n default:\n return theme.colors.primary;\n }\n };\n\n const toggleExpanded = () => {\n const newValue = !isExpanded;\n setIsExpanded(newValue);\n Animated.spring(animation, {\n toValue: newValue ? 1 : 0,\n useNativeDriver: true,\n }).start();\n };\n\n // Single action\n if (resolvedAction && (!actions || actions.length === 0)) {\n return (\n <TouchableOpacity\n onPress={resolvedAction.onPress}\n style={[\n styles.fab,\n { backgroundColor: getVariantColor(resolvedAction.variant || 'primary') },\n getPositionStyle(),\n style,\n ]}\n accessibilityLabel={resolvedAction.label || 'Action'}\n >\n <Text style={styles.icon}>{resolvedAction.icon || '+'}</Text>\n </TouchableOpacity>\n );\n }\n\n // Multiple actions\n if (actions && actions.length > 0) {\n return (\n <View style={[styles.container, getPositionStyle(), style]}>\n {/* Expanded actions */}\n {isExpanded && actions.length > 1 && (\n <View style={styles.actionsContainer}>\n {actions.map((actionItem, index) => {\n const translateY = animation.interpolate({\n inputRange: [0, 1],\n outputRange: [20 * (actions.length - index), 0],\n });\n const opacity = animation.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [0, 0, 1],\n });\n\n return (\n <Animated.View\n key={actionItem.id}\n style={[\n styles.actionRow,\n { opacity, transform: [{ translateY }] },\n ]}\n >\n <TouchableOpacity\n onPress={() => {\n setIsExpanded(false);\n if (actionItem.event)\n eventBus.emit(`UI:${actionItem.event}`, {\n actionId: actionItem.id,\n });\n actionItem.onPress?.();\n }}\n style={[\n styles.actionButton,\n { backgroundColor: getVariantColor(actionItem.variant || 'primary') },\n ]}\n >\n <Text style={styles.icon}>{actionItem.icon}</Text>\n </TouchableOpacity>\n <View style={styles.labelContainer}>\n <Text style={styles.label}>{actionItem.label}</Text>\n </View>\n </Animated.View>\n );\n })}\n </View>\n )}\n\n {/* Main FAB */}\n <TouchableOpacity\n onPress={() => {\n if (actions.length === 1) {\n if (actions[0].event)\n eventBus.emit(`UI:${actions[0].event}`, {\n actionId: actions[0].id,\n });\n actions[0].onPress?.();\n } else {\n toggleExpanded();\n }\n }}\n style={[\n styles.fab,\n {\n backgroundColor: isExpanded\n ? theme.colors.secondary\n : theme.colors.primary,\n },\n ]}\n >\n <Animated.Text\n style={[\n styles.icon,\n {\n transform: [\n {\n rotate: animation.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '45deg'],\n }),\n },\n ],\n },\n ]}\n >\n +\n </Animated.Text>\n </TouchableOpacity>\n </View>\n );\n }\n\n return null;\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 50,\n alignItems: 'flex-end',\n },\n fab: {\n width: 56,\n height: 56,\n borderRadius: 28,\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 4,\n elevation: 5,\n },\n icon: {\n fontSize: 24,\n color: '#fff',\n fontWeight: '300',\n },\n actionsContainer: {\n marginBottom: 12,\n gap: 8,\n },\n actionRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n actionButton: {\n width: 40,\n height: 40,\n borderRadius: 20,\n justifyContent: 'center',\n alignItems: 'center',\n },\n labelContainer: {\n backgroundColor: 'rgba(0,0,0,0.8)',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 4,\n },\n label: {\n color: '#fff',\n fontSize: 12,\n },\n});\n\nFloatingActionButton.displayName = 'FloatingActionButton';\n","import React from 'react';\nimport { View, ViewStyle, FlexStyle } from 'react-native';\n\nexport type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse';\nexport type FlexAlign = 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline';\nexport type FlexJustify = 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly';\nexport type FlexGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport interface FlexProps {\n /** Flex direction */\n direction?: FlexDirection;\n /** Flex wrap */\n wrap?: FlexWrap;\n /** Align items */\n align?: FlexAlign;\n /** Justify content */\n justify?: FlexJustify;\n /** Gap between items */\n gap?: FlexGap;\n /** Flex grow */\n grow?: boolean | number;\n /** Flex shrink */\n shrink?: boolean | number;\n /** Flex basis */\n basis?: string | number;\n /** Custom style */\n style?: ViewStyle;\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst gapValues: Record<FlexGap, number> = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n '2xl': 48,\n};\n\nexport const Flex: React.FC<FlexProps> = ({\n direction = 'row',\n wrap = 'nowrap',\n align = 'stretch',\n justify = 'flex-start',\n gap = 'none',\n grow,\n shrink,\n basis,\n style,\n children,\n}) => {\n const flexStyle: FlexStyle = {\n flexDirection: direction,\n flexWrap: wrap,\n alignItems: align,\n justifyContent: justify,\n gap: gapValues[gap],\n };\n\n if (grow !== undefined) {\n flexStyle.flexGrow = grow === true ? 1 : grow === false ? 0 : grow;\n }\n if (shrink !== undefined) {\n flexStyle.flexShrink = shrink === true ? 1 : shrink === false ? 0 : shrink;\n }\n if (basis !== undefined) {\n flexStyle.flexBasis = typeof basis === 'number' ? basis : undefined;\n }\n\n return (\n <View style={[flexStyle, ...(style ? [style] : [])]}>\n {children}\n </View>\n );\n};\n\nFlex.displayName = 'Flex';\n","import React from 'react';\nimport { View, ViewStyle } from 'react-native';\n\nexport type SimpleGridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface SimpleGridProps {\n /** Minimum width of each child (for auto columns) */\n minChildWidth?: number;\n /** Exact number of columns */\n cols?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Gap between items */\n gap?: SimpleGridGap;\n /** Custom style */\n style?: ViewStyle;\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst gapValues: Record<SimpleGridGap, number> = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n};\n\nexport const SimpleGrid: React.FC<SimpleGridProps> = ({\n minChildWidth = 150,\n cols,\n gap = 'md',\n style,\n children,\n}) => {\n const childrenArray = React.Children.toArray(children);\n const gapValue = gapValues[gap];\n \n // If exact columns specified, use fixed layout\n if (cols) {\n const rowStyle: ViewStyle = {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: gapValue,\n };\n\n return (\n <View style={[rowStyle, ...(style ? [style] : [])]}>\n {childrenArray.map((child, index) => (\n <View key={index} style={{ flex: 1 / cols, padding: gapValue / 2 }}>\n {child}\n </View>\n ))}\n </View>\n );\n }\n\n // Auto-fit based on minChildWidth using flexWrap\n const containerStyle: ViewStyle = {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: gapValue,\n };\n\n const itemStyle: ViewStyle = {\n minWidth: minChildWidth,\n flex: 1,\n };\n\n return (\n <View style={[containerStyle, ...(style ? [style] : [])]}>\n {childrenArray.map((child, index) => (\n <View key={index} style={itemStyle}>\n {child}\n </View>\n ))}\n </View>\n );\n};\n\nSimpleGrid.displayName = 'SimpleGrid';\n","import React from 'react';\nimport { View, ViewStyle } from 'react-native';\n\nexport type ContainerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\nexport type ContainerPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface ContainerProps {\n /** Maximum width */\n size?: ContainerSize;\n /** Alias for size */\n maxWidth?: ContainerSize;\n /** Horizontal padding */\n padding?: ContainerPadding;\n /** Center horizontally */\n center?: boolean;\n /** Custom style */\n style?: ViewStyle;\n /** Children elements */\n children?: React.ReactNode;\n}\n\nconst sizeValues: Record<ContainerSize, number> = {\n xs: 320,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n full: 99999,\n};\n\nconst paddingValues: Record<ContainerPadding, number> = {\n none: 0,\n sm: 16,\n md: 24,\n lg: 32,\n xl: 48,\n};\n\nexport const Container: React.FC<ContainerProps> = ({\n size,\n maxWidth,\n padding = 'md',\n center = true,\n style,\n children,\n}) => {\n const resolvedSize = maxWidth ?? size ?? 'lg';\n \n const containerStyle: ViewStyle = {\n width: '100%',\n maxWidth: sizeValues[resolvedSize],\n paddingHorizontal: paddingValues[padding],\n ...(center && { alignSelf: 'center' }),\n };\n\n return (\n <View style={[containerStyle, ...(style ? [style] : [])]}>\n {children}\n </View>\n );\n};\n\nContainer.displayName = 'Container';\n","import React from 'react';\nimport { View, ViewStyle, FlatList, ListRenderItem } from 'react-native';\n\nexport type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface GridProps<T = unknown> {\n /** Number of columns */\n columns: number;\n /** Gap between items */\n gap?: GridGap;\n /** Custom style */\n style?: ViewStyle;\n /** Data array (for renderItem) */\n data?: T[];\n /** Render function for each item */\n renderItem?: ListRenderItem<T>;\n /** Key extractor */\n keyExtractor?: (item: T, index: number) => string;\n /** Children (alternative to data/renderItem) */\n children?: React.ReactNode;\n}\n\nconst gapValues: Record<GridGap, number> = {\n none: 0,\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n};\n\nexport function Grid<T>({\n columns,\n gap = 'md',\n style,\n data,\n renderItem,\n keyExtractor,\n children,\n}: GridProps<T>): React.ReactElement | null {\n const gapValue = gapValues[gap];\n\n // If using data/renderItem, use FlatList for performance\n if (data && renderItem) {\n return (\n <FlatList<T>\n data={data}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n numColumns={columns}\n columnWrapperStyle={{ gap: gapValue }}\n contentContainerStyle={[\n { gap: gapValue },\n ...(style ? [style] : []),\n ]}\n />\n );\n }\n\n // Otherwise, use View with flexWrap\n const containerStyle: ViewStyle = {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: gapValue,\n };\n\n const childrenArray = React.Children.toArray(children);\n \n return (\n <View style={[containerStyle, ...(style ? [style] : [])]}>\n {childrenArray.map((child, index) => (\n <View \n key={index} \n style={{ \n flex: 1 / columns,\n padding: gapValue / 2,\n }}\n >\n {child}\n </View>\n ))}\n </View>\n );\n}\n\nGrid.displayName = 'Grid';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Animated,\n Dimensions,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { VStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface SidePanelProps {\n /**\n * Panel title\n */\n title: string;\n\n /**\n * Panel content\n */\n children: React.ReactNode;\n\n /**\n * Is panel open\n */\n isOpen: boolean;\n\n /**\n * On close handler\n */\n onClose: () => void;\n\n /**\n * Panel width (percentage of screen width or absolute number)\n * @default 0.8 (80% of screen width)\n */\n width?: number;\n\n /**\n * Panel position\n * @default 'right'\n */\n position?: 'left' | 'right';\n\n /**\n * Show overlay backdrop\n * @default true\n */\n showOverlay?: boolean;\n\n /**\n * Additional style for the panel container\n */\n style?: ViewStyle;\n\n /** Loading state indicator */\n isLoading?: boolean;\n\n /** Error state */\n error?: Error | null;\n\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n\n /** Declarative close event — emits UI:{closeEvent} via eventBus when panel should close */\n closeEvent?: string;\n}\n\nexport const SidePanel: React.FC<SidePanelProps> = ({\n title,\n children,\n isOpen,\n onClose,\n width = SCREEN_WIDTH * 0.8,\n position = 'right',\n showOverlay = true,\n style,\n isLoading,\n error,\n closeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateX = React.useRef(\n new Animated.Value(position === 'right' ? SCREEN_WIDTH : -SCREEN_WIDTH)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(translateX, {\n toValue: isOpen ? 0 : position === 'right' ? width : -width,\n duration: 300,\n useNativeDriver: true,\n }).start();\n }, [isOpen, position, translateX, width]);\n\n const handleClose = () => {\n if (closeEvent) {\n eventBus.emit(`UI:${closeEvent}`, {});\n }\n onClose();\n };\n\n if (!isOpen) return null;\n\n return (\n <View style={styles.overlay}>\n {/* Backdrop */}\n {showOverlay && (\n <TouchableOpacity\n style={styles.backdrop}\n activeOpacity={1}\n onPress={handleClose}\n />\n )}\n\n {/* Side Panel */}\n <Animated.View\n style={[\n styles.panel,\n {\n width,\n backgroundColor: theme.colors.card,\n [position]: 0,\n transform: [{ translateX }],\n borderLeftColor: theme.colors.border,\n borderRightColor: theme.colors.border,\n },\n position === 'right' ? styles.borderLeft : styles.borderRight,\n style,\n ]}\n >\n {/* Header */}\n <View\n style={[\n styles.header,\n {\n borderBottomColor: theme.colors.border,\n backgroundColor: theme.colors.card,\n },\n ]}\n >\n <Typography variant=\"h4\">{title}</Typography>\n <Button variant=\"ghost\" size=\"sm\" onPress={handleClose}>\n ✕\n </Button>\n </View>\n\n {/* Content */}\n <VStack spacing={0} style={styles.content}>\n {isLoading ? (\n <LoadingState />\n ) : error ? (\n <ErrorState message={error.message} onRetry={handleClose} />\n ) : (\n children\n )}\n </VStack>\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 panel: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n shadowColor: '#000',\n shadowOffset: { width: -2, height: 0 },\n shadowOpacity: 0.25,\n shadowRadius: 5,\n elevation: 5,\n zIndex: 1001,\n },\n borderLeft: {\n borderLeftWidth: 1,\n },\n borderRight: {\n borderRightWidth: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: 16,\n borderBottomWidth: 1,\n },\n content: {\n flex: 1,\n padding: 16,\n },\n});\n\nSidePanel.displayName = 'SidePanel';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n ScrollView,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Badge } from '../atoms/Badge';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface NavigationItem {\n /**\n * Item ID\n */\n id: string;\n\n /**\n * Item label\n */\n label: string;\n\n /**\n * Item icon (emoji or text)\n */\n icon?: string;\n\n /**\n * Item badge count\n */\n badge?: number;\n\n /**\n * Is item active\n */\n isActive?: boolean;\n\n /**\n * Disable item\n */\n disabled?: boolean;\n\n /**\n * Item click handler\n */\n onPress?: () => void;\n\n /**\n * Declarative event name - emits UI:{event} via eventBus on press\n */\n event?: string;\n\n /**\n * Navigation target for declarative navigation\n */\n navigatesTo?: string;\n}\n\nexport interface NavigationProps {\n /**\n * Navigation items\n */\n items: NavigationItem[];\n\n /**\n * Navigation orientation\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n\n /**\n * Additional style for the container\n */\n style?: ViewStyle;\n\n /**\n * Variant for styling\n * @default 'default'\n */\n variant?: 'default' | 'pills' | 'underlined';\n\n /** Loading state indicator */\n isLoading?: boolean;\n\n /** Error state */\n error?: Error | null;\n\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n\n /**\n * Declarative change event name - emits UI:{changeEvent} via eventBus when navigation changes\n */\n changeEvent?: string;\n}\n\nexport const Navigation: React.FC<NavigationProps> = ({\n items,\n orientation = 'horizontal',\n style,\n variant = 'default',\n isLoading,\n error,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = (item: NavigationItem) => {\n if (item.disabled) return;\n\n if (item.event) {\n eventBus.emit(`UI:${item.event}`, { itemId: item.id, navigatesTo: item.navigatesTo });\n }\n\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { itemId: item.id, navigatesTo: item.navigatesTo });\n }\n\n item.onPress?.();\n };\n\n const getItemStyle = (isActive: boolean): ViewStyle => {\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 borderRadius: 0,\n };\n default:\n return {\n backgroundColor: isActive ? theme.colors.card : 'transparent',\n borderRadius: theme.borderRadius.md,\n };\n }\n };\n\n const getTextColor = (isActive: boolean): string => {\n if (variant === 'pills' && isActive) {\n return theme.colors['primary-foreground'];\n }\n return isActive ? theme.colors.primary : theme.colors.foreground;\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading navigation...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const renderItem = (item: NavigationItem) => {\n const isActive = item.isActive ?? false;\n\n return (\n <TouchableOpacity\n key={item.id}\n onPress={() => handlePress(item)}\n disabled={item.disabled}\n style={[\n styles.item,\n getItemStyle(isActive),\n item.disabled && { opacity: 0.5 },\n ]}\n activeOpacity={0.7}\n >\n <HStack spacing={8} align=\"center\">\n {item.icon && (\n <Typography variant=\"body\" style={{ color: getTextColor(isActive) }}>\n {item.icon}\n </Typography>\n )}\n <Typography variant=\"body\" style={{ color: getTextColor(isActive) }}>\n {item.label}\n </Typography>\n {item.badge !== undefined && item.badge > 0 && (\n <Badge variant=\"error\" size=\"sm\">\n {item.badge > 99 ? '99+' : item.badge}\n </Badge>\n )}\n </HStack>\n </TouchableOpacity>\n );\n };\n\n if (orientation === 'horizontal') {\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={[styles.horizontalContainer, style]}\n >\n {items.map(renderItem)}\n </ScrollView>\n );\n }\n\n return (\n <VStack spacing={4} style={[styles.verticalContainer, ...(style ? [style] : [])]}>\n {items.map(renderItem)}\n </VStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n horizontalContainer: {\n flexDirection: 'row',\n paddingVertical: 8,\n paddingHorizontal: 4,\n },\n verticalContainer: {\n width: '100%',\n padding: 8,\n },\n item: {\n paddingVertical: 10,\n paddingHorizontal: 16,\n marginHorizontal: 4,\n },\n});\n\nNavigation.displayName = 'Navigation';\n","import React, { useState, useMemo } from 'react';\nimport {\n View,\n TouchableOpacity,\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';\n\nimport { Button } from '../atoms/Button';\nimport { Input } from '../atoms/Input';\nimport { Badge } from '../atoms/Badge';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { EmptyState } from './EmptyState';\n\nexport interface RelationOption {\n id: string;\n label: string;\n subtitle?: string;\n avatarUri?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface RelationSelectProps {\n options: RelationOption[];\n value?: string | string[];\n onChange?: (value: string | string[] | undefined) => 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 /** Allow multiple selection */\n multiple?: boolean;\n /** Show search input for filtering */\n searchable?: boolean;\n /** Maximum number of selections (for multiple mode) */\n maxSelections?: number;\n /** Event name to emit on selection change - emits UI:${changeEvent} */\n changeEvent?: string;\n /** Event name to emit on search - emits UI:${searchEvent} */\n searchEvent?: string;\n /** Payload base to include with events */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const RelationSelect: React.FC<RelationSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select...',\n disabled = false,\n style,\n textStyle,\n isLoading,\n error,\n entity,\n multiple = false,\n searchable = true,\n maxSelections,\n changeEvent,\n searchEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const selectedValues = useMemo(() => {\n if (multiple) {\n return Array.isArray(value) ? value : value ? [value] : [];\n }\n return value ? [value as string] : [];\n }, [value, multiple]);\n\n const selectedOptions = useMemo(() => {\n return options.filter((opt) => selectedValues.includes(opt.id));\n }, [options, selectedValues]);\n\n const filteredOptions = useMemo(() => {\n if (!searchQuery.trim()) return options;\n const query = searchQuery.toLowerCase();\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(query) ||\n opt.subtitle?.toLowerCase().includes(query)\n );\n }, [options, searchQuery]);\n\n const handleSearchChange = (query: string) => {\n setSearchQuery(query);\n if (searchEvent) {\n eventBus.emit(`UI:${searchEvent}`, { ...actionPayload, query, entity });\n }\n };\n\n const handleSelect = (selectedId: string) => {\n if (multiple) {\n const currentValues = selectedValues;\n let newValues: string[];\n\n if (currentValues.includes(selectedId)) {\n newValues = currentValues.filter((id) => id !== selectedId);\n } else {\n if (maxSelections && currentValues.length >= maxSelections) {\n return;\n }\n newValues = [...currentValues, selectedId];\n }\n\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, {\n ...actionPayload,\n value: newValues,\n entity,\n });\n }\n onChange?.(newValues);\n } else {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, {\n ...actionPayload,\n value: selectedId,\n entity,\n });\n }\n onChange?.(selectedId);\n setIsOpen(false);\n }\n };\n\n const handleClear = () => {\n if (multiple) {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, value: [], entity });\n }\n onChange?.([]);\n } else {\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, value: undefined, entity });\n }\n onChange?.('');\n }\n };\n\n const handleOpen = () => {\n if (!disabled && !isLoading) {\n setSearchQuery('');\n setIsOpen(true);\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n setSearchQuery('');\n };\n\n const renderOption = ({ item }: { item: RelationOption }): React.ReactElement => {\n const isSelected = selectedValues.includes(item.id);\n\n return (\n <TouchableOpacity\n style={[\n styles.option,\n {\n backgroundColor: isSelected\n ? theme.colors.primary\n : theme.colors.card,\n borderBottomColor: theme.colors.border,\n },\n ]}\n onPress={() => handleSelect(item.id)}\n >\n <HStack spacing={12} align=\"center\">\n {item.avatarUri ? (\n <View\n style={[\n styles.avatar,\n {\n backgroundColor: isSelected\n ? theme.colors['primary-foreground']\n : theme.colors.muted,\n },\n ]}\n >\n <Text style={{ fontSize: 20 }}>👤</Text>\n </View>\n ) : (\n <View\n style={[\n styles.avatarPlaceholder,\n {\n backgroundColor: isSelected\n ? theme.colors['primary-foreground']\n : theme.colors.muted,\n },\n ]}\n >\n <Text style={{ fontSize: 16 }}>\n {item.label.charAt(0).toUpperCase()}\n </Text>\n </View>\n )}\n\n <VStack spacing={2} style={styles.optionContent}>\n <Text\n style={[\n styles.optionLabel,\n {\n color: isSelected\n ? theme.colors['primary-foreground']\n : theme.colors.foreground,\n },\n textStyle,\n ]}\n numberOfLines={1}\n >\n {item.label}\n </Text>\n {item.subtitle && (\n <Text\n style={[\n styles.optionSubtitle,\n {\n color: isSelected\n ? `${theme.colors['primary-foreground']}99`\n : theme.colors['muted-foreground'],\n },\n ]}\n numberOfLines={1}\n >\n {item.subtitle}\n </Text>\n )}\n </VStack>\n\n {isSelected && (\n <Typography\n variant=\"body\"\n style={{ color: theme.colors['primary-foreground'] }}\n >\n ✓\n </Typography>\n )}\n </HStack>\n\n {item.metadata && (\n <HStack spacing={8} style={styles.metadata}>\n {Object.entries(item.metadata).map(([key, val]) => (\n <Badge\n key={key}\n variant={isSelected ? 'secondary' : 'default'}\n size=\"sm\"\n >\n {val}\n </Badge>\n ))}\n </HStack>\n )}\n </TouchableOpacity>\n );\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading options...\" />\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 {/* Trigger button */}\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 ]}\n >\n <View style={styles.buttonContent}>\n {selectedOptions.length === 0 ? (\n <Text\n style={[\n styles.buttonText,\n {\n color: theme.colors['muted-foreground'],\n },\n textStyle,\n ]}\n numberOfLines={1}\n >\n {placeholder}\n </Text>\n ) : (\n <HStack spacing={8} style={styles.selectedContainer}>\n {selectedOptions.map((opt) => (\n <View\n key={opt.id}\n style={[\n styles.selectedChip,\n { backgroundColor: theme.colors.primary },\n ]}\n >\n <Text\n style={[\n styles.selectedChipText,\n { color: theme.colors['primary-foreground'] },\n ]}\n numberOfLines={1}\n >\n {opt.label}\n </Text>\n </View>\n ))}\n {multiple && maxSelections && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {selectedOptions.length}/{maxSelections}\n </Typography>\n )}\n </HStack>\n )}\n </View>\n\n {selectedOptions.length > 0 && !disabled && (\n <TouchableOpacity\n onPress={handleClear}\n style={styles.clearButton}\n hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}\n >\n <Typography\n variant=\"body\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n ✕\n </Typography>\n </TouchableOpacity>\n )}\n\n <Text style={[styles.chevron, { color: theme.colors['muted-foreground'] }]}>\n ▼\n </Text>\n </TouchableOpacity>\n\n {/* Selection Modal */}\n <Modal\n visible={isOpen}\n transparent\n animationType=\"slide\"\n onRequestClose={handleClose}\n >\n <SafeAreaView\n style={[styles.modalContainer, { backgroundColor: theme.colors.background }]}\n >\n {/* Header */}\n <View style={[styles.modalHeader, { borderBottomColor: theme.colors.border }]}>\n <Button variant=\"ghost\" onPress={handleClose}>\n Cancel\n </Button>\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {multiple ? 'Select Items' : 'Select Item'}\n </Typography>\n <Button variant=\"primary\" onPress={handleClose}>\n Done\n </Button>\n </View>\n\n {/* Search */}\n {searchable && (\n <View style={styles.searchContainer}>\n <Input\n value={searchQuery}\n onChangeText={handleSearchChange}\n placeholder=\"Search...\"\n changeEvent={searchEvent}\n />\n </View>\n )}\n\n {/* Options list */}\n {filteredOptions.length === 0 ? (\n <EmptyState message=\"No matching options\" />\n ) : (\n <FlatList\n data={filteredOptions}\n keyExtractor={(item) => item.id}\n renderItem={renderOption}\n contentContainerStyle={styles.listContent}\n />\n )}\n </SafeAreaView>\n </Modal>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n button: {\n flexDirection: 'row',\n alignItems: 'center',\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n minHeight: 48,\n },\n buttonContent: {\n flex: 1,\n },\n buttonText: {\n fontSize: 16,\n },\n selectedContainer: {\n flexWrap: 'wrap',\n flex: 1,\n },\n selectedChip: {\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderRadius: 16,\n },\n selectedChipText: {\n fontSize: 14,\n fontWeight: '500',\n },\n clearButton: {\n padding: 4,\n marginRight: 8,\n },\n chevron: {\n fontSize: 12,\n },\n modalContainer: {\n flex: 1,\n },\n modalHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n },\n searchContainer: {\n padding: 16,\n },\n listContent: {\n paddingBottom: 20,\n },\n option: {\n padding: 16,\n borderBottomWidth: 1,\n },\n optionContent: {\n flex: 1,\n },\n optionLabel: {\n fontSize: 16,\n fontWeight: '500',\n },\n optionSubtitle: {\n fontSize: 14,\n },\n avatar: {\n width: 40,\n height: 40,\n borderRadius: 20,\n justifyContent: 'center',\n alignItems: 'center',\n },\n avatarPlaceholder: {\n width: 40,\n height: 40,\n borderRadius: 20,\n justifyContent: 'center',\n alignItems: 'center',\n },\n metadata: {\n marginTop: 8,\n marginLeft: 52,\n },\n});\n\nRelationSelect.displayName = 'RelationSelect';\n","/**\n * FilterGroup Molecule Component\n *\n * A component for filtering entity data. Composes atoms (Button, Select, Badge, HStack)\n * and follows the design system using theme colors.\n *\n * Implements the Closed Circuit principle:\n * - FilterGroup updates QuerySingleton filters via query prop\n * - FilterGroup emits UI:FILTER events for trait state machines\n * - entity-list/entity-cards read filtered data via query prop\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, TouchableOpacity, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Button } from '../atoms/Button';\nimport { Select, SelectOption } from '../atoms/Select';\nimport { Badge } from '../atoms/Badge';\nimport { Typography } from '../atoms/Typography';\nimport { HStack, VStack } from '../atoms/Stack';\n\n/** Filter definition from schema */\nexport interface FilterDefinition {\n field: string;\n label: string;\n /** Filter type */\n filterType?: 'select' | 'toggle' | 'checkbox';\n /** Alias for filterType (schema compatibility) */\n type?: 'select' | 'toggle' | 'checkbox';\n /** Options for select/toggle filters */\n options?: readonly string[];\n}\n\nexport interface FilterGroupProps {\n /** Entity name to filter */\n entity: string;\n /** Filter definitions from schema */\n filters: readonly FilterDefinition[];\n /** Callback when a filter changes - for EntityStore integration */\n onFilterChange?: (field: string, value: string | null) => void;\n /** Callback to clear all filters */\n onClearAll?: () => void;\n /** Additional styles */\n style?: ViewStyle;\n /** Variant style */\n variant?: 'default' | 'compact' | 'pills' | 'vertical';\n /** Show filter icon */\n showIcon?: boolean;\n /**\n * Query singleton binding for state management.\n * When provided, syncs filter state with the query singleton.\n * Example: \"@TaskQuery\"\n */\n query?: string;\n /** Loading state indicator */\n isLoading?: boolean;\n}\n\n/**\n * FilterGroup - Renders filter controls for entity data\n * Uses atoms: Button, Select, Badge, HStack\n */\nexport const FilterGroup: React.FC<FilterGroupProps> = ({\n entity,\n filters,\n onFilterChange,\n onClearAll,\n style,\n variant = 'default',\n showIcon = true,\n query,\n isLoading: _isLoading,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n // Track selected values for each filter (local state for UI)\n const [selectedValues, setSelectedValues] = useState<Record<string, string>>(\n {}\n );\n\n const handleFilterSelect = useCallback(\n (field: string, value: string | null) => {\n setSelectedValues((prev) => {\n if (value === null || value === '' || value === 'all') {\n const next = { ...prev };\n delete next[field];\n return next;\n }\n return { ...prev, [field]: value };\n });\n\n // Call callback if provided (for backward compat)\n onFilterChange?.(field, value === 'all' ? null : value);\n\n // Emit UI:FILTER event for closed circuit\n eventBus.emit('UI:FILTER', {\n entity,\n field,\n value: value === 'all' ? null : value,\n query,\n });\n },\n [onFilterChange, eventBus, entity, query]\n );\n\n const handleClearAll = useCallback(() => {\n setSelectedValues({});\n\n // Call callback if provided (for backward compat)\n onClearAll?.();\n\n // Emit UI:CLEAR_FILTERS event for closed circuit\n eventBus.emit('UI:CLEAR_FILTERS', { entity, query });\n }, [onClearAll, eventBus, entity, query]);\n\n const activeFilterCount = Object.keys(selectedValues).length;\n\n const buildSelectOptions = (filter: FilterDefinition): SelectOption[] => {\n return [\n { value: 'all', label: 'All' },\n ...(filter.options?.map((opt) => ({\n value: opt,\n label: opt,\n })) || []),\n ];\n };\n\n // Pills variant - horizontal toggle buttons\n if (variant === 'pills') {\n return (\n <HStack\n spacing={16}\n align=\"center\"\n style={[styles.pillsContainer, style ?? {}]}\n >\n {showIcon && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n 🔍\n </Typography>\n )}\n {filters.map((filter) => (\n <HStack key={filter.field} spacing={8} align=\"center\">\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n >\n {filter.label}:\n </Typography>\n <HStack spacing={0} style={styles.pillGroup}>\n <TouchableOpacity\n onPress={() => handleFilterSelect(filter.field, null)}\n style={[\n styles.pill,\n {\n backgroundColor: !selectedValues[filter.field]\n ? theme.colors.primary\n : theme.colors.card,\n borderColor: theme.colors.border,\n },\n ]}\n >\n <Typography\n variant=\"caption\"\n style={{\n color: !selectedValues[filter.field]\n ? theme.colors['primary-foreground']\n : theme.colors['muted-foreground'],\n }}\n >\n All\n </Typography>\n </TouchableOpacity>\n {filter.options?.map((option) => (\n <TouchableOpacity\n key={option}\n onPress={() => handleFilterSelect(filter.field, option)}\n style={[\n styles.pill,\n styles.pillWithBorder,\n {\n backgroundColor:\n selectedValues[filter.field] === option\n ? theme.colors.primary\n : theme.colors.card,\n borderColor: theme.colors.border,\n },\n ]}\n >\n <Typography\n variant=\"caption\"\n style={{\n color:\n selectedValues[filter.field] === option\n ? theme.colors['primary-foreground']\n : theme.colors['muted-foreground'],\n }}\n >\n {option}\n </Typography>\n </TouchableOpacity>\n ))}\n </HStack>\n </HStack>\n ))}\n\n {/* Clear all button */}\n {activeFilterCount > 0 && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleClearAll}>\n Clear\n </Button>\n )}\n </HStack>\n );\n }\n\n // Vertical variant - stacked filters for sidebars\n if (variant === 'vertical') {\n return (\n <VStack spacing={16} style={[styles.verticalContainer, style ?? {}]}>\n {showIcon && (\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n 🔍\n </Typography>\n <Typography\n variant=\"label\"\n color={theme.colors['muted-foreground']}\n >\n Filters\n </Typography>\n </HStack>\n )}\n {filters.map((filter) => (\n <VStack key={filter.field} spacing={4}>\n <Typography\n variant=\"label\"\n color={theme.colors['muted-foreground']}\n >\n {filter.label}\n </Typography>\n <Select\n value={selectedValues[filter.field] || 'all'}\n onChange={(newValue: string) =>\n handleFilterSelect(filter.field, newValue)\n }\n options={buildSelectOptions(filter)}\n />\n </VStack>\n ))}\n {activeFilterCount > 0 && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleClearAll}>\n Clear all\n </Button>\n )}\n </VStack>\n );\n }\n\n // Compact variant - smaller selects inline\n if (variant === 'compact') {\n return (\n <HStack\n spacing={12}\n align=\"center\"\n style={[styles.compactContainer, style ?? {}]}\n >\n {showIcon && (\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n 🔍\n </Typography>\n )}\n {filters.map((filter) => (\n <View key={filter.field} style={styles.compactSelect}>\n <Select\n value={selectedValues[filter.field] || 'all'}\n onChange={(newValue: string) =>\n handleFilterSelect(filter.field, newValue)\n }\n options={[\n { value: 'all', label: `All ${filter.label}` },\n ...(filter.options?.map((opt) => ({\n value: opt,\n label: opt,\n })) || []),\n ]}\n />\n </View>\n ))}\n\n {/* Active filter badges */}\n {activeFilterCount > 0 && (\n <>\n {Object.entries(selectedValues).map(([field, value]) => {\n const filterDef = filters.find((f) => f.field === field);\n return (\n <TouchableOpacity\n key={field}\n onPress={() => handleFilterSelect(field, null)}\n >\n <Badge variant=\"primary\" size=\"md\">\n {filterDef?.label}: {value} ✕\n </Badge>\n </TouchableOpacity>\n );\n })}\n <Button variant=\"ghost\" size=\"sm\" onPress={handleClearAll}>\n Clear all\n </Button>\n </>\n )}\n </HStack>\n );\n }\n\n // Default variant - labeled selects with clear visual hierarchy\n return (\n <View\n style={[\n styles.defaultContainer,\n {\n backgroundColor: theme.colors.card,\n borderColor: theme.colors.border,\n },\n style,\n ]}\n >\n <HStack spacing={16} align=\"center\" style={styles.defaultContent}>\n {showIcon && (\n <HStack spacing={8} align=\"center\">\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n 🔍\n </Typography>\n <Typography\n variant=\"label\"\n color={theme.colors['muted-foreground']}\n >\n Filters\n </Typography>\n </HStack>\n )}\n\n {/* Filter selects */}\n {filters.map((filter) => (\n <VStack key={filter.field} spacing={4}>\n <Typography\n variant=\"label\"\n color={theme.colors['muted-foreground']}\n >\n {filter.label}\n </Typography>\n <Select\n value={selectedValues[filter.field] || 'all'}\n onChange={(newValue: string) =>\n handleFilterSelect(filter.field, newValue)\n }\n options={buildSelectOptions(filter)}\n />\n </VStack>\n ))}\n\n {/* Active filter count and clear */}\n {activeFilterCount > 0 && (\n <HStack spacing={12} align=\"center\" style={styles.clearSection}>\n <Badge variant=\"primary\" size=\"md\">\n {activeFilterCount} active\n </Badge>\n <Button variant=\"ghost\" size=\"sm\" onPress={handleClearAll}>\n Clear all\n </Button>\n </HStack>\n )}\n </HStack>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n pillsContainer: {\n flexWrap: 'wrap',\n },\n pillGroup: {\n borderRadius: 6,\n overflow: 'hidden',\n borderWidth: 1,\n },\n pill: {\n paddingHorizontal: 12,\n paddingVertical: 6,\n },\n pillWithBorder: {\n borderLeftWidth: 1,\n },\n verticalContainer: {\n width: '100%',\n },\n compactContainer: {\n flexWrap: 'wrap',\n },\n compactSelect: {\n minWidth: 120,\n },\n defaultContainer: {\n padding: 16,\n borderRadius: 8,\n borderWidth: 1,\n },\n defaultContent: {\n flexWrap: 'wrap',\n },\n clearSection: {\n marginLeft: 'auto',\n },\n});\n\nFilterGroup.displayName = 'FilterGroup';\n","/**\n * Meter Molecule Component\n *\n * A gauge/meter component for displaying a value within a range.\n * Supports linear and segmented display modes.\n *\n * Orbital Component Interface Compliance:\n * - Entity binding with auto-fetch when entity is a string\n * - Event emission via useEventBus (UI:* events)\n * - isLoading and error state props\n * - style for external styling\n */\n\nimport React, { useMemo, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle, TouchableOpacity } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { Badge } from '../atoms/Badge';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport type MeterVariant = 'linear' | 'segmented';\n\nexport interface MeterThreshold {\n value: number;\n color: string;\n label?: string;\n}\n\nexport interface MeterAction {\n label: string;\n event?: string;\n navigatesTo?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\nexport interface MeterProps {\n /** Current value */\n value: number;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Display label */\n label?: string;\n /** Unit suffix (e.g., '%', 'MB', 'credits') */\n unit?: string;\n /** Display variant */\n variant?: MeterVariant;\n /** Color thresholds */\n thresholds?: readonly MeterThreshold[];\n /** Number of segments (for segmented variant) */\n segments?: number;\n /** Show value text */\n showValue?: boolean;\n /** Actions */\n actions?: readonly MeterAction[];\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Loading state */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Additional styles */\n style?: ViewStyle;\n}\n\n/** Default thresholds using theme colors */\nconst getDefaultThresholds = (theme: ReturnType<typeof useTheme>): MeterThreshold[] => [\n { value: 30, color: theme.colors.error },\n { value: 70, color: theme.colors.warning },\n { value: 100, color: theme.colors.success },\n];\n\nfunction getColorForValue(\n value: number,\n max: number,\n thresholds: readonly MeterThreshold[],\n theme: ReturnType<typeof useTheme>\n): string {\n const percentage = (value / max) * 100;\n for (const threshold of thresholds) {\n if (percentage <= threshold.value) {\n return threshold.color;\n }\n }\n return thresholds[thresholds.length - 1]?.color ?? theme.colors.primary;\n}\n\nexport const Meter: React.FC<MeterProps> = ({\n value,\n min = 0,\n max = 100,\n label,\n unit,\n variant = 'linear',\n thresholds: thresholdsProp,\n segments = 5,\n showValue = true,\n actions,\n entity,\n isLoading = false,\n error,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const thresholds = useMemo(\n () => thresholdsProp ?? getDefaultThresholds(theme),\n [thresholdsProp, theme]\n );\n\n const handleAction = useCallback(\n (action: MeterAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, { value, entity });\n }\n if (action.navigatesTo) {\n eventBus.emit('UI:NAVIGATE', { to: action.navigatesTo });\n }\n },\n [eventBus, value, entity]\n );\n\n // Handle action click\n const onActionPress = (action: MeterAction) => () => {\n handleAction(action);\n };\n\n const percentage = useMemo(() => {\n const range = max - min;\n if (range <= 0) return 0;\n return Math.min(Math.max(((value - min) / range) * 100, 0), 100);\n }, [value, min, max]);\n\n const activeColor = useMemo(\n () => getColorForValue(value, max, thresholds, theme),\n [value, max, thresholds, theme]\n );\n\n const displayValue = useMemo(() => {\n const formatted = Number.isInteger(value) ? value.toString() : value.toFixed(1);\n return unit ? `${formatted}${unit}` : formatted;\n }, [value, unit]);\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style ?? {}]}>\n <LoadingState message=\"Loading meter...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, style ?? {}]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (variant === 'segmented') {\n const activeSegments = Math.round((percentage / 100) * segments);\n\n return (\n <Card style={[styles.container, style ?? {}]}>\n <VStack spacing={8}>\n {(label || showValue) && (\n <HStack justify=\"space-between\" align=\"center\">\n {label && (\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n >\n {label}\n </Typography>\n )}\n {showValue && (\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {displayValue}\n </Typography>\n )}\n </HStack>\n )}\n <HStack spacing={4} style={styles.segmentsContainer}>\n {Array.from({ length: segments }).map((_, idx) => {\n const isActive = idx < activeSegments;\n const segColor = isActive\n ? getColorForValue(\n ((idx + 1) / segments) * max,\n max,\n thresholds,\n theme\n )\n : undefined;\n return (\n <View\n key={idx}\n style={[\n styles.segment,\n {\n backgroundColor: isActive\n ? segColor\n : theme.colors.muted,\n },\n ]}\n />\n );\n })}\n </HStack>\n {/* Threshold labels */}\n {thresholds.some((t) => t.label) && (\n <HStack justify=\"space-between\" style={styles.thresholdLabels}>\n {thresholds.map((t, idx) => (\n <Typography\n key={idx}\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n >\n {t.label || ''}\n </Typography>\n ))}\n </HStack>\n )}\n {actions && actions.length > 0 && (\n <HStack spacing={8} style={styles.actionsContainer}>\n {actions.map((action, idx) => (\n <TouchableOpacity key={idx} onPress={onActionPress(action)}>\n <Badge\n variant={action.variant ?? 'default'}\n size=\"sm\"\n >\n {action.label}\n </Badge>\n </TouchableOpacity>\n ))}\n </HStack>\n )}\n </VStack>\n </Card>\n );\n }\n\n // Default: linear\n return (\n <Card style={[styles.container, style ?? {}]}>\n <VStack spacing={8}>\n {(label || showValue) && (\n <HStack justify=\"space-between\" align=\"center\">\n {label && (\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n >\n {label}\n </Typography>\n )}\n {showValue && (\n <Typography variant=\"body\" style={{ fontWeight: '600' }}>\n {displayValue}\n </Typography>\n )}\n </HStack>\n )}\n <View\n style={[\n styles.track,\n {\n backgroundColor: theme.colors.muted,\n },\n ]}\n >\n <View\n style={[\n styles.fill,\n {\n width: `${percentage}%`,\n backgroundColor: activeColor,\n },\n ]}\n />\n </View>\n {/* Min/Max labels */}\n <HStack justify=\"space-between\" style={styles.rangeLabels}>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {min}\n {unit ? ` ${unit}` : ''}\n </Typography>\n <Typography variant=\"caption\" color={theme.colors['muted-foreground']}>\n {max}\n {unit ? ` ${unit}` : ''}\n </Typography>\n </HStack>\n {actions && actions.length > 0 && (\n <HStack spacing={8} style={styles.actionsContainer}>\n {actions.map((action, idx) => (\n <TouchableOpacity key={idx} onPress={onActionPress(action)}>\n <Badge\n variant={action.variant ?? 'default'}\n size=\"sm\"\n >\n {action.label}\n </Badge>\n </TouchableOpacity>\n ))}\n </HStack>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n },\n track: {\n width: '100%',\n height: 12,\n borderRadius: 6,\n overflow: 'hidden',\n },\n fill: {\n height: '100%',\n borderRadius: 6,\n },\n segmentsContainer: {\n width: '100%',\n },\n segment: {\n flex: 1,\n height: 8,\n borderRadius: 4,\n },\n rangeLabels: {\n width: '100%',\n marginTop: 4,\n },\n thresholdLabels: {\n width: '100%',\n },\n actionsContainer: {\n marginTop: 8,\n },\n});\n\nMeter.displayName = 'Meter';\n","import React from 'react';\nimport { View, TouchableOpacity, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface PaginationProps {\n /** Current page number (1-based) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Called when page changes */\n onPageChange?: (page: number) => void;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Maximum number of page buttons to show */\n maxVisiblePages?: number;\n /** Whether to show first/last buttons */\n showFirstLast?: boolean;\n /** Label for previous button */\n prevLabel?: string;\n /** Label for next button */\n nextLabel?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n style,\n isLoading,\n error,\n changeEvent,\n maxVisiblePages = 5,\n showFirstLast = true,\n prevLabel = 'Previous',\n nextLabel = 'Next',\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) {\n return;\n }\n\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { page, totalPages });\n }\n onPageChange?.(page);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading pages...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n if (totalPages <= 1) {\n return null;\n }\n\n // Calculate visible page range\n const getVisiblePages = (): number[] => {\n const pages: number[] = [];\n const halfVisible = Math.floor(maxVisiblePages / 2);\n let startPage = Math.max(1, currentPage - halfVisible);\n const endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);\n\n if (endPage - startPage + 1 < maxVisiblePages) {\n startPage = Math.max(1, endPage - maxVisiblePages + 1);\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n return pages;\n };\n\n const visiblePages = getVisiblePages();\n const canGoPrev = currentPage > 1;\n const canGoNext = currentPage < totalPages;\n\n return (\n <HStack spacing={4} align=\"center\" justify=\"center\" style={[styles.container, style || {}]}>\n {showFirstLast && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={!canGoPrev}\n onPress={() => handlePageChange(1)}\n >\n {'<<'}\n </Button>\n )}\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={!canGoPrev}\n onPress={() => handlePageChange(currentPage - 1)}\n >\n {prevLabel}\n </Button>\n\n {visiblePages[0] > 1 && (\n <View style={styles.ellipsis}>\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n ...\n </Typography>\n </View>\n )}\n\n {visiblePages.map((page) => {\n const isActive = page === currentPage;\n return (\n <TouchableOpacity\n key={page}\n onPress={() => handlePageChange(page)}\n style={[\n styles.pageButton,\n {\n backgroundColor: isActive\n ? theme.colors.primary\n : theme.colors.card,\n borderColor: theme.colors.border,\n },\n ]}\n >\n <Typography\n variant=\"body\"\n style={{\n color: isActive\n ? theme.colors['primary-foreground']\n : theme.colors.foreground,\n }}\n >\n {page}\n </Typography>\n </TouchableOpacity>\n );\n })}\n\n {visiblePages[visiblePages.length - 1] < totalPages && (\n <View style={styles.ellipsis}>\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n ...\n </Typography>\n </View>\n )}\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={!canGoNext}\n onPress={() => handlePageChange(currentPage + 1)}\n >\n {nextLabel}\n </Button>\n\n {showFirstLast && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={!canGoNext}\n onPress={() => handlePageChange(totalPages)}\n >\n {'>>'}\n </Button>\n )}\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexWrap: 'wrap',\n paddingVertical: 8,\n },\n pageButton: {\n minWidth: 36,\n height: 36,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n },\n ellipsis: {\n minWidth: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nPagination.displayName = 'Pagination';\n","import React from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { VStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface MarkdownContentProps {\n /** Markdown content to render */\n content: string;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Base padding for content */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\n// Markdown element types\ntype MarkdownElement =\n | { type: 'heading'; level: number; content: string }\n | { type: 'paragraph'; content: string }\n | { type: 'code'; language: string; content: string }\n | { type: 'inlineCode'; content: string }\n | { type: 'blockquote'; content: string }\n | { type: 'list'; ordered: boolean; items: string[] }\n | { type: 'horizontalRule' }\n | { type: 'strong'; content: string }\n | { type: 'emphasis'; content: string }\n | { type: 'link'; text: string; url: string }\n | { type: 'image'; alt: string; url: string }\n | { type: 'lineBreak' };\n\n/**\n * Simple markdown parser - converts markdown text to structured elements\n */\nconst parseMarkdown = (content: string): MarkdownElement[] => {\n const elements: MarkdownElement[] = [];\n const lines = content.split('\\n');\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n const trimmedLine = line.trim();\n\n // Empty line\n if (trimmedLine === '') {\n i++;\n continue;\n }\n\n // Horizontal rule\n if (/^(---|___|\\*\\*\\*)$/.test(trimmedLine)) {\n elements.push({ type: 'horizontalRule' });\n i++;\n continue;\n }\n\n // Heading\n const headingMatch = trimmedLine.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n elements.push({\n type: 'heading',\n level: headingMatch[1].length,\n content: parseInlineElements(headingMatch[2]),\n });\n i++;\n continue;\n }\n\n // Code block\n const codeBlockStart = trimmedLine.match(/^```(\\w*)/);\n if (codeBlockStart) {\n const language = codeBlockStart[1] || '';\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].trim().match(/^```$/)) {\n codeLines.push(lines[i]);\n i++;\n }\n elements.push({\n type: 'code',\n language,\n content: codeLines.join('\\n'),\n });\n i++; // Skip closing ```\n continue;\n }\n\n // Blockquote\n if (trimmedLine.startsWith('>')) {\n const quoteLines: string[] = [];\n while (i < lines.length && lines[i].trim().startsWith('>')) {\n quoteLines.push(lines[i].trim().substring(1).trim());\n i++;\n }\n elements.push({\n type: 'blockquote',\n content: parseInlineElements(quoteLines.join(' ')),\n });\n continue;\n }\n\n // Ordered list\n const orderedListMatch = trimmedLine.match(/^(\\d+)\\.\\s+(.+)$/);\n if (orderedListMatch) {\n const items: string[] = [];\n while (i < lines.length) {\n const currentLine = lines[i].trim();\n const itemMatch = currentLine.match(/^\\d+\\.\\s+(.+)$/);\n if (itemMatch) {\n items.push(parseInlineElements(itemMatch[1]));\n i++;\n } else if (currentLine === '') {\n i++;\n break;\n } else {\n break;\n }\n }\n elements.push({ type: 'list', ordered: true, items });\n continue;\n }\n\n // Unordered list\n const unorderedListMatch = trimmedLine.match(/^[\\*\\-\\+]\\s+(.+)$/);\n if (unorderedListMatch) {\n const items: string[] = [];\n while (i < lines.length) {\n const currentLine = lines[i].trim();\n const itemMatch = currentLine.match(/^[\\*\\-\\+]\\s+(.+)$/);\n if (itemMatch) {\n items.push(parseInlineElements(itemMatch[1]));\n i++;\n } else if (currentLine === '') {\n i++;\n break;\n } else {\n break;\n }\n }\n elements.push({ type: 'list', ordered: false, items });\n continue;\n }\n\n // Paragraph (collect consecutive non-empty lines)\n const paragraphLines: string[] = [];\n while (i < lines.length && lines[i].trim() !== '') {\n paragraphLines.push(lines[i]);\n i++;\n }\n elements.push({\n type: 'paragraph',\n content: parseInlineElements(paragraphLines.join(' ')),\n });\n }\n\n return elements;\n};\n\n/**\n * Parse inline markdown elements (bold, italic, code, links, etc.)\n */\nconst parseInlineElements = (text: string): string => {\n // Process inline code\n let result = text.replace(/`([^`]+)`/g, '『$1』');\n\n // Process bold\n result = result.replace(/\\*\\*([^*]+)\\*\\*|__([^_]+)__/g, '【$1$2】');\n\n // Process italic\n result = result.replace(/\\*([^*]+)\\*|_([^_]+)_/g, '〔$1$2〕');\n\n // Process links [text](url)\n result = result.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '『$1』($2)');\n\n // Process images ![alt](url)\n result = result.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, '[Image: $1]');\n\n return result;\n};\n\n/**\n * Render inline content with formatting\n */\nconst renderInlineContent = (content: string, theme: ReturnType<typeof useTheme>): React.ReactNode => {\n const parts: React.ReactNode[] = [];\n let remaining = content;\n let key = 0;\n\n const patterns = [\n { regex: /『([^』]+)』/g, type: 'code' as const },\n { regex: /【([^】]+)】/g, type: 'bold' as const },\n { regex: /〔([^〕]+)〕/g, type: 'italic' as const },\n ];\n\n while (remaining.length > 0) {\n let earliestMatch: { index: number; match: RegExpExecArray; type: 'code' | 'bold' | 'italic' } | null = null;\n\n for (const pattern of patterns) {\n pattern.regex.lastIndex = 0;\n const match = pattern.regex.exec(remaining);\n if (match && (earliestMatch === null || match.index < earliestMatch.index)) {\n earliestMatch = { index: match.index, match, type: pattern.type };\n }\n }\n\n if (earliestMatch) {\n // Add text before the match\n if (earliestMatch.index > 0) {\n parts.push(\n <Typography key={key++} variant=\"body\">\n {remaining.slice(0, earliestMatch.index)}\n </Typography>\n );\n }\n\n // Add the formatted content\n const content = earliestMatch.match[1];\n switch (earliestMatch.type) {\n case 'code':\n parts.push(\n <Typography\n key={key++}\n variant=\"body\"\n style={{\n fontFamily: 'monospace',\n backgroundColor: theme.colors.muted,\n paddingHorizontal: 4,\n paddingVertical: 2,\n borderRadius: 4,\n }}\n >\n {content}\n </Typography>\n );\n break;\n case 'bold':\n parts.push(\n <Typography\n key={key++}\n variant=\"body\"\n style={{ fontWeight: '700' }}\n >\n {content}\n </Typography>\n );\n break;\n case 'italic':\n parts.push(\n <Typography\n key={key++}\n variant=\"body\"\n style={{ fontStyle: 'italic' }}\n >\n {content}\n </Typography>\n );\n break;\n }\n\n remaining = remaining.slice(earliestMatch.index + earliestMatch.match[0].length);\n } else {\n // No more matches, add remaining text\n parts.push(\n <Typography key={key++} variant=\"body\">\n {remaining}\n </Typography>\n );\n break;\n }\n }\n\n return parts;\n};\n\nexport const MarkdownContent: React.FC<MarkdownContentProps> = ({\n content,\n style,\n isLoading,\n error,\n padding = 'md',\n}) => {\n const theme = useTheme();\n const elements = React.useMemo(() => parseMarkdown(content), [content]);\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style || {}]}>\n <LoadingState message=\"Loading content...\" />\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 paddingStyles: Record<string, ViewStyle> = {\n none: { padding: 0 },\n sm: { padding: 12 },\n md: { padding: 16 },\n lg: { padding: 24 },\n };\n\n const renderElement = (element: MarkdownElement, index: number): React.ReactNode => {\n switch (element.type) {\n case 'heading':\n const variantMap: Record<number, 'h1' | 'h2' | 'h3' | 'h4' | 'body'> = {\n 1: 'h1',\n 2: 'h2',\n 3: 'h3',\n 4: 'h4',\n 5: 'body',\n 6: 'body',\n };\n return (\n <Typography\n key={index}\n variant={variantMap[element.level] || 'body'}\n style={[\n styles.heading,\n element.level > 2 && { color: theme.colors['muted-foreground'] },\n ]}\n >\n {element.content}\n </Typography>\n );\n\n case 'paragraph':\n return (\n <View key={index} style={styles.paragraph}>\n {renderInlineContent(element.content, theme)}\n </View>\n );\n\n case 'code':\n return (\n <View\n key={index}\n style={[\n styles.codeBlock,\n { backgroundColor: theme.colors.muted },\n ]}\n >\n {element.language && (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n marginBottom: 8,\n textTransform: 'uppercase',\n }}\n >\n {element.language}\n </Typography>\n )}\n <Typography\n variant=\"body\"\n style={{\n fontFamily: 'monospace',\n color: theme.colors.foreground,\n }}\n >\n {element.content}\n </Typography>\n </View>\n );\n\n case 'blockquote':\n return (\n <View\n key={index}\n style={[\n styles.blockquote,\n {\n borderLeftColor: theme.colors.primary,\n backgroundColor: theme.colors.muted,\n },\n ]}\n >\n <Typography\n variant=\"body\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n {element.content}\n </Typography>\n </View>\n );\n\n case 'list':\n return (\n <View key={index} style={styles.list}>\n {element.items.map((item, itemIndex) => (\n <View key={itemIndex} style={styles.listItem}>\n <Typography\n variant=\"body\"\n style={[\n styles.listMarker,\n { color: theme.colors.primary },\n ]}\n >\n {element.ordered ? `${itemIndex + 1}.` : '•'}\n </Typography>\n <View style={styles.listItemContent}>\n {renderInlineContent(item, theme)}\n </View>\n </View>\n ))}\n </View>\n );\n\n case 'horizontalRule':\n return (\n <View\n key={index}\n style={[\n styles.horizontalRule,\n { backgroundColor: theme.colors.border },\n ]}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <Card style={[styles.container, style || {}]} padding=\"none\">\n <VStack spacing={12} style={[styles.content, paddingStyles[padding]]}>\n {elements.map((element, index) => renderElement(element, index))}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n content: {\n width: '100%',\n },\n heading: {\n marginTop: 8,\n marginBottom: 4,\n },\n paragraph: {\n marginVertical: 4,\n },\n codeBlock: {\n padding: 12,\n borderRadius: 8,\n marginVertical: 8,\n },\n blockquote: {\n padding: 12,\n paddingLeft: 16,\n borderLeftWidth: 4,\n borderRadius: 4,\n marginVertical: 8,\n },\n list: {\n marginVertical: 8,\n },\n listItem: {\n flexDirection: 'row',\n marginVertical: 2,\n },\n listMarker: {\n width: 24,\n },\n listItemContent: {\n flex: 1,\n },\n horizontalRule: {\n height: 1,\n marginVertical: 16,\n },\n});\n\nMarkdownContent.displayName = 'MarkdownContent';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Button } from '../atoms/Button';\nimport { HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface WizardNavigationAction {\n label: string;\n event?: string;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost' | 'destructive';\n disabled?: boolean;\n hidden?: boolean;\n}\n\nexport interface WizardNavigationProps {\n currentStep: number;\n totalSteps: number;\n onBack?: () => void;\n onNext?: () => void;\n onCancel?: () => void;\n onComplete?: () => void;\n canGoBack?: boolean;\n canGoNext?: boolean;\n isComplete?: boolean;\n backLabel?: string;\n nextLabel?: string;\n cancelLabel?: string;\n completeLabel?: string;\n customActions?: WizardNavigationAction[];\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 /** Show cancel button on first step */\n showCancel?: boolean;\n}\n\nexport const WizardNavigation: React.FC<WizardNavigationProps> = ({\n currentStep,\n totalSteps,\n onBack,\n onNext,\n onCancel,\n onComplete,\n canGoBack = true,\n canGoNext = true,\n isComplete = false,\n backLabel = 'Back',\n nextLabel = 'Next',\n cancelLabel = 'Cancel',\n completeLabel = 'Complete',\n customActions,\n style,\n isLoading,\n error,\n entity,\n showCancel = true,\n}) => {\n const eventBus = useEventBus();\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === totalSteps - 1;\n\n const handleBack = () => {\n if (isFirstStep) {\n eventBus.emit('UI:WIZARD_CANCEL', { step: currentStep, entity });\n onCancel?.();\n } else {\n eventBus.emit('UI:WIZARD_BACK', { step: currentStep - 1, entity });\n onBack?.();\n }\n };\n\n const handleNext = () => {\n if (isLastStep || isComplete) {\n eventBus.emit('UI:WIZARD_COMPLETE', { step: currentStep, entity });\n onComplete?.();\n } else {\n eventBus.emit('UI:WIZARD_NEXT', { step: currentStep + 1, entity });\n onNext?.();\n }\n };\n\n const handleCustomAction = (action: WizardNavigationAction) => {\n if (action.event) {\n eventBus.emit(`UI:${action.event}`, { step: currentStep, entity });\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 const visibleCustomActions = customActions?.filter((action) => !action.hidden) || [];\n\n return (\n <HStack spacing={12} justify=\"space-between\" style={[styles.container, style as ViewStyle]}>\n <HStack spacing={8}>\n {(isFirstStep && showCancel) || !isFirstStep ? (\n <Button\n variant=\"ghost\"\n onPress={handleBack}\n disabled={isFirstStep && !showCancel ? true : !canGoBack}\n action={isFirstStep ? 'WIZARD_CANCEL' : 'WIZARD_BACK'}\n >\n {isFirstStep ? cancelLabel : backLabel}\n </Button>\n ) : null}\n\n {visibleCustomActions.map((action, index) => (\n <Button\n key={`${action.label}-${index}`}\n variant={action.variant || 'default'}\n onPress={() => handleCustomAction(action)}\n disabled={action.disabled}\n action={action.event}\n >\n {action.label}\n </Button>\n ))}\n </HStack>\n\n <Button\n variant=\"primary\"\n onPress={handleNext}\n disabled={!canGoNext}\n action={isLastStep || isComplete ? 'WIZARD_COMPLETE' : 'WIZARD_NEXT'}\n >\n {isLastStep || isComplete ? completeLabel : nextLabel}\n </Button>\n </HStack>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n paddingVertical: 8,\n },\n});\n\nWizardNavigation.displayName = 'WizardNavigation';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { ProgressBar } from '../atoms/ProgressBar';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface WizardProgressStep {\n id: string;\n title: string;\n description?: string;\n optional?: boolean;\n}\n\nexport interface WizardProgressProps {\n steps: WizardProgressStep[];\n currentStep: number;\n onStepPress?: (stepIndex: number) => void;\n allowNavigation?: boolean;\n variant?: 'dots' | 'bar' | 'numbers';\n showLabels?: boolean;\n showDescriptions?: boolean;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const WizardProgress: React.FC<WizardProgressProps> = ({\n steps,\n currentStep,\n onStepPress,\n allowNavigation = true,\n variant = 'dots',\n showLabels = true,\n showDescriptions = false,\n style,\n isLoading,\n error,\n entity,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const progress = ((currentStep + 1) / steps.length) * 100;\n\n const handleStepPress = (index: number) => {\n if (!allowNavigation) return;\n if (index > currentStep) return; // Can only go back or stay\n\n eventBus.emit('UI:WIZARD_STEP_CHANGE', { step: index, entity });\n onStepPress?.(index);\n };\n\n const getStepStatus = (index: number): 'pending' | 'active' | 'completed' => {\n if (index === currentStep) return 'active';\n if (index < currentStep) return 'completed';\n return 'pending';\n };\n\n const getStepColor = (status: 'pending' | 'active' | 'completed') => {\n switch (status) {\n case 'completed':\n return {\n background: theme.colors.success,\n text: theme.colors['success-foreground'],\n border: theme.colors.success,\n };\n case 'active':\n return {\n background: theme.colors.primary,\n text: theme.colors['primary-foreground'],\n border: theme.colors.primary,\n };\n case 'pending':\n default:\n return {\n background: theme.colors.muted,\n text: theme.colors['muted-foreground'],\n border: theme.colors.border,\n };\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 const renderDots = () => (\n <HStack spacing={8} justify=\"center\" style={styles.dotsContainer}>\n {steps.map((step, index) => {\n const status = getStepStatus(index);\n const colors = getStepColor(status);\n const canPress = allowNavigation && index <= currentStep;\n\n return (\n <TouchableOpacity\n key={step.id}\n onPress={() => handleStepPress(index)}\n disabled={!canPress}\n style={[\n styles.dot,\n {\n backgroundColor: colors.background,\n borderColor: colors.border,\n },\n canPress && styles.clickableDot,\n ]}\n activeOpacity={0.8}\n >\n {status === 'completed' ? (\n <Typography variant=\"caption\" style={{ color: colors.text, fontWeight: '700' }}>\n ✓\n </Typography>\n ) : (\n <View style={[styles.dotInner, { backgroundColor: colors.background }]} />\n )}\n </TouchableOpacity>\n );\n })}\n </HStack>\n );\n\n const renderNumbers = () => (\n <HStack spacing={12} justify=\"center\" style={styles.numbersContainer}>\n {steps.map((step, index) => {\n const status = getStepStatus(index);\n const colors = getStepColor(status);\n const canPress = allowNavigation && index <= currentStep;\n\n return (\n <TouchableOpacity\n key={step.id}\n onPress={() => handleStepPress(index)}\n disabled={!canPress}\n activeOpacity={0.8}\n style={styles.numberStepContainer}\n >\n <VStack align=\"center\" spacing={4}>\n <View\n style={[\n styles.numberCircle,\n {\n backgroundColor: colors.background,\n borderColor: colors.border,\n },\n canPress && styles.clickableNumber,\n ]}\n >\n <Typography variant=\"body\" style={{ color: colors.text, fontWeight: '600' }}>\n {status === 'completed' ? '✓' : index + 1}\n </Typography>\n </View>\n {showLabels && (\n <Typography\n variant=\"caption\"\n style={{\n color: status === 'active' ? theme.colors.foreground : theme.colors['muted-foreground'],\n fontWeight: status === 'active' ? '600' : '400',\n textAlign: 'center',\n maxWidth: 80,\n }}\n numberOfLines={1}\n >\n {step.title}\n </Typography>\n )}\n {showDescriptions && step.description && (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n fontSize: 10,\n textAlign: 'center',\n maxWidth: 80,\n }}\n numberOfLines={1}\n >\n {step.description}\n </Typography>\n )}\n {step.optional && (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n fontSize: 10,\n fontStyle: 'italic',\n }}\n >\n (Optional)\n </Typography>\n )}\n </VStack>\n </TouchableOpacity>\n );\n })}\n </HStack>\n );\n\n const renderBar = () => (\n <VStack spacing={8} style={styles.barContainer}>\n <ProgressBar progress={progress} showLabel={false} size=\"md\" />\n {showLabels && (\n <HStack justify=\"space-between\">\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n Step {currentStep + 1} of {steps.length}\n </Typography>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {Math.round(progress)}%\n </Typography>\n </HStack>\n )}\n {showLabels && (\n <Typography\n variant=\"body\"\n style={{ color: theme.colors.foreground, textAlign: 'center', marginTop: 4 }}\n >\n {steps[currentStep]?.title}\n </Typography>\n )}\n {showDescriptions && steps[currentStep]?.description && (\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'], textAlign: 'center' }}\n >\n {steps[currentStep].description}\n </Typography>\n )}\n </VStack>\n );\n\n return (\n <View style={[styles.container, style as ViewStyle]}>\n {variant === 'dots' && renderDots()}\n {variant === 'numbers' && renderNumbers()}\n {variant === 'bar' && renderBar()}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n dotsContainer: {\n paddingVertical: 8,\n },\n dot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n borderWidth: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n dotInner: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n clickableDot: {\n transform: [{ scale: 1.1 }],\n },\n numbersContainer: {\n paddingVertical: 8,\n flexWrap: 'wrap',\n },\n numberStepContainer: {\n alignItems: 'center',\n },\n numberCircle: {\n width: 36,\n height: 36,\n borderRadius: 18,\n borderWidth: 2,\n alignItems: 'center',\n justifyContent: 'center',\n },\n clickableNumber: {\n transform: [{ scale: 1.05 }],\n },\n barContainer: {\n paddingVertical: 8,\n },\n});\n\nWizardProgress.displayName = 'WizardProgress';\n","import React from 'react';\nimport {\n View,\n TouchableOpacity,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Badge } from '../atoms/Badge';\nimport { Card } from '../atoms/Card';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface QuizOption {\n id: string;\n label: string;\n value: string;\n correct?: boolean;\n explanation?: string;\n}\n\nexport interface QuizBlockProps {\n question: string;\n options: QuizOption[];\n questionNumber?: number;\n totalQuestions?: number;\n category?: string;\n difficulty?: 'easy' | 'medium' | 'hard';\n allowMultiple?: boolean;\n showCorrectAnswer?: boolean;\n selectedValues?: string[];\n onSelect?: (values: string[]) => void;\n explanation?: string;\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Shuffle options */\n shuffle?: boolean;\n /** Show explanation immediately */\n showExplanation?: boolean;\n}\n\nexport const QuizBlock: React.FC<QuizBlockProps> = ({\n question,\n options,\n questionNumber,\n totalQuestions,\n category,\n difficulty,\n allowMultiple = false,\n showCorrectAnswer = false,\n selectedValues = [],\n onSelect,\n explanation,\n style,\n isLoading,\n error,\n entity,\n shuffle = false,\n showExplanation = false,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const [selected, setSelected] = React.useState<string[]>(selectedValues);\n const [isAnswered, setIsAnswered] = React.useState(false);\n\n React.useEffect(() => {\n setSelected(selectedValues);\n }, [selectedValues]);\n\n const shuffledOptions = React.useMemo(() => {\n if (!shuffle) return options;\n return [...options].sort(() => Math.random() - 0.5);\n }, [options, shuffle]);\n\n const getDifficultyColor = (): import('../atoms/Badge').BadgeVariant => {\n switch (difficulty) {\n case 'easy':\n return 'success';\n case 'medium':\n return 'warning';\n case 'hard':\n return 'error';\n default:\n return 'default';\n }\n };\n\n const getOptionStyle = (option: QuizOption): {\n backgroundColor: string;\n borderColor: string;\n textColor: string;\n } => {\n const isSelected = selected.includes(option.value);\n\n if (showCorrectAnswer && isAnswered) {\n if (option.correct) {\n return {\n backgroundColor: theme.colors.success,\n borderColor: theme.colors.success,\n textColor: theme.colors['success-foreground'],\n };\n }\n if (isSelected && !option.correct) {\n return {\n backgroundColor: theme.colors.error,\n borderColor: theme.colors.error,\n textColor: theme.colors['error-foreground'],\n };\n }\n }\n\n if (isSelected) {\n return {\n backgroundColor: theme.colors.primary,\n borderColor: theme.colors.primary,\n textColor: theme.colors['primary-foreground'],\n };\n }\n\n return {\n backgroundColor: theme.colors.card,\n borderColor: theme.colors.border,\n textColor: theme.colors.foreground,\n };\n };\n\n const handleSelect = (option: QuizOption) => {\n if (showCorrectAnswer && isAnswered) return;\n\n let newSelected: string[];\n\n if (allowMultiple) {\n newSelected = selected.includes(option.value)\n ? selected.filter((v) => v !== option.value)\n : [...selected, option.value];\n } else {\n newSelected = selected.includes(option.value) ? [] : [option.value];\n setIsAnswered(true);\n }\n\n setSelected(newSelected);\n\n eventBus.emit('UI:QUIZ_ANSWER', {\n question,\n selected: newSelected,\n correct: option.correct,\n entity,\n });\n\n onSelect?.(newSelected);\n };\n\n const isCorrect = selected.length > 0 && selected.every((value) => {\n const option = options.find((o) => o.value === value);\n return option?.correct;\n }) && selected.length === options.filter((o) => o.correct).length;\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading question...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <Card style={[styles.container, style as ViewStyle]} padding=\"lg\">\n <VStack spacing={16}>\n {/* Header */}\n <HStack justify=\"space-between\" align=\"center\">\n {(questionNumber !== undefined || category) && (\n <HStack spacing={8} align=\"center\">\n {questionNumber !== undefined && totalQuestions !== undefined && (\n <Badge variant=\"secondary\" size=\"sm\">\n {questionNumber} / {totalQuestions}\n </Badge>\n )}\n {category && (\n <Badge variant=\"default\" size=\"sm\">\n {category}\n </Badge>\n )}\n </HStack>\n )}\n {difficulty && (\n <Badge variant={getDifficultyColor()} size=\"sm\">\n {difficulty}\n </Badge>\n )}\n </HStack>\n\n {/* Question */}\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {question}\n </Typography>\n\n {allowMultiple && (\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n Select all that apply\n </Typography>\n )}\n\n {/* Options */}\n <VStack spacing={8}>\n {shuffledOptions.map((option) => {\n const style = getOptionStyle(option);\n const isSelected = selected.includes(option.value);\n\n return (\n <TouchableOpacity\n key={option.id}\n onPress={() => handleSelect(option)}\n activeOpacity={0.8}\n style={[\n styles.option,\n {\n backgroundColor: style.backgroundColor,\n borderColor: style.borderColor,\n },\n ]}\n >\n <HStack spacing={12} align=\"center\">\n <View\n style={[\n styles.checkbox,\n {\n borderColor: isSelected ? style.textColor : theme.colors.border,\n backgroundColor: isSelected ? style.textColor : 'transparent',\n },\n allowMultiple ? styles.checkboxSquare : styles.checkboxCircle,\n ]}\n >\n {isSelected && (\n <Typography variant=\"caption\" style={{ color: style.backgroundColor, fontWeight: '700' }}>\n ✓\n </Typography>\n )}\n </View>\n <Typography variant=\"body\" style={{ color: style.textColor, flex: 1 }}>\n {option.label}\n </Typography>\n {showCorrectAnswer && isAnswered && option.correct && (\n <Badge variant=\"success\" size=\"sm\">\n Correct\n </Badge>\n )}\n </HStack>\n </TouchableOpacity>\n );\n })}\n </VStack>\n\n {/* Result */}\n {showCorrectAnswer && isAnswered && (\n <View style={styles.resultContainer}>\n <Badge variant={isCorrect ? 'success' : 'error'} size=\"md\">\n {isCorrect ? 'Correct!' : 'Incorrect'}\n </Badge>\n </View>\n )}\n\n {/* Explanation */}\n {(showExplanation || (showCorrectAnswer && isAnswered)) && (explanation || options.some((o) => o.explanation && selected.includes(o.value))) && (\n <View style={[styles.explanationContainer, { backgroundColor: theme.colors.muted }]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n {explanation || options.find((o) => o.explanation && selected.includes(o.value))?.explanation}\n </Typography>\n </View>\n )}\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n option: {\n padding: 16,\n borderRadius: 8,\n borderWidth: 1,\n },\n checkbox: {\n width: 24,\n height: 24,\n borderWidth: 2,\n alignItems: 'center',\n justifyContent: 'center',\n },\n checkboxSquare: {\n borderRadius: 4,\n },\n checkboxCircle: {\n borderRadius: 12,\n },\n resultContainer: {\n alignItems: 'center',\n paddingVertical: 8,\n },\n explanationContainer: {\n padding: 12,\n borderRadius: 8,\n marginTop: 8,\n },\n});\n\nQuizBlock.displayName = 'QuizBlock';\n","import React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { ControlButton } from '../../atoms/game/ControlButton';\n\nexport interface ActionButtonConfig {\n /** Unique identifier */\n id: string;\n /** Display label */\n label?: string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Button variant */\n variant?: 'primary' | 'secondary' | 'ghost' | string;\n}\n\nexport interface ActionButtonsProps {\n /** Button configurations */\n buttons: ActionButtonConfig[];\n /** Called when a button is pressed/released */\n onAction?: (id: string, pressed: boolean) => void;\n /** Declarative event name emitted on action via useEventBus */\n actionEvent?: string;\n /** Layout variant */\n layout?: 'horizontal' | 'vertical' | 'diamond';\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Additional styles */\n style?: ViewStyle;\n /** Disabled state */\n disabled?: boolean;\n}\n\nconst sizeMap: Record<string, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\nexport const ActionButtons: React.FC<ActionButtonsProps> = ({\n buttons,\n onAction,\n actionEvent,\n layout = 'horizontal',\n size = 'md',\n style,\n disabled,\n}) => {\n const eventBus = useEventBus();\n const [activeButtons, setActiveButtons] = useState<Set<string>>(new Set());\n\n const handlePress = useCallback(\n (id: string) => {\n setActiveButtons((prev) => new Set(prev).add(id));\n if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });\n onAction?.(id, true);\n },\n [actionEvent, eventBus, onAction]\n );\n\n const handleRelease = useCallback(\n (id: string) => {\n setActiveButtons((prev) => {\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: false });\n onAction?.(id, false);\n },\n [actionEvent, eventBus, onAction]\n );\n\n const buttonSize = sizeMap[size] ?? 'md';\n\n // Diamond layout: special positioning for 4 buttons (A, B, X, Y style)\n if (layout === 'diamond' && buttons.length === 4) {\n const [top, right, bottom, left] = buttons;\n return (\n <View style={[styles.diamondContainer, style]}>\n {/* Row 1: Empty, Top, Empty */}\n <View style={styles.diamondRow}>\n <View style={styles.diamondEmpty} />\n <ControlButton\n icon={top.icon}\n label={top.label}\n size={buttonSize}\n variant={top.variant}\n pressed={activeButtons.has(top.id)}\n onPress={() => handlePress(top.id)}\n onRelease={() => handleRelease(top.id)}\n disabled={disabled}\n />\n <View style={styles.diamondEmpty} />\n </View>\n\n {/* Row 2: Left, Center, Right */}\n <View style={styles.diamondRow}>\n <ControlButton\n icon={left.icon}\n label={left.label}\n size={buttonSize}\n variant={left.variant}\n pressed={activeButtons.has(left.id)}\n onPress={() => handlePress(left.id)}\n onRelease={() => handleRelease(left.id)}\n disabled={disabled}\n />\n <View style={styles.diamondCenter} />\n <ControlButton\n icon={right.icon}\n label={right.label}\n size={buttonSize}\n variant={right.variant}\n pressed={activeButtons.has(right.id)}\n onPress={() => handlePress(right.id)}\n onRelease={() => handleRelease(right.id)}\n disabled={disabled}\n />\n </View>\n\n {/* Row 3: Empty, Bottom, Empty */}\n <View style={styles.diamondRow}>\n <View style={styles.diamondEmpty} />\n <ControlButton\n icon={bottom.icon}\n label={bottom.label}\n size={buttonSize}\n variant={bottom.variant}\n pressed={activeButtons.has(bottom.id)}\n onPress={() => handlePress(bottom.id)}\n onRelease={() => handleRelease(bottom.id)}\n disabled={disabled}\n />\n <View style={styles.diamondEmpty} />\n </View>\n </View>\n );\n }\n\n const containerStyle = layout === 'vertical' \n ? styles.verticalContainer \n : styles.horizontalContainer;\n\n return (\n <View style={[containerStyle, style]}>\n {buttons.map((button) => (\n <ControlButton\n key={button.id}\n icon={button.icon}\n label={button.label}\n size={buttonSize}\n variant={button.variant}\n pressed={activeButtons.has(button.id)}\n onPress={() => handlePress(button.id)}\n onRelease={() => handleRelease(button.id)}\n disabled={disabled}\n />\n ))}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n horizontalContainer: {\n flexDirection: 'row',\n gap: 8,\n },\n verticalContainer: {\n flexDirection: 'column',\n gap: 8,\n },\n diamondContainer: {\n gap: 4,\n },\n diamondRow: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 4,\n },\n diamondEmpty: {\n width: 56,\n height: 56,\n },\n diamondCenter: {\n width: 24,\n height: 24,\n borderRadius: 12,\n backgroundColor: '#374151',\n borderWidth: 2,\n borderColor: '#4b5563',\n },\n});\n\nActionButtons.displayName = 'ActionButtons';\n","import React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useEventBus } from '../../../hooks/useEventBus';\nimport { ControlButton } from '../../atoms/game/ControlButton';\n\nexport type DPadDirection = 'up' | 'down' | 'left' | 'right';\n\nexport interface DPadProps {\n /** Called when a direction is pressed/released */\n onDirection?: (direction: DPadDirection, pressed: boolean) => void;\n /** Declarative event name emitted on direction press/release via useEventBus */\n directionEvent?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to include diagonal buttons */\n includeDiagonals?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n /** Disabled state */\n disabled?: boolean;\n}\n\nconst sizeMap: Record<string, { button: 'sm' | 'md' | 'lg'; containerWidth: number }> = {\n sm: { button: 'sm', containerWidth: 112 },\n md: { button: 'md', containerWidth: 160 },\n lg: { button: 'lg', containerWidth: 208 },\n};\n\nconst arrowIcons: Record<DPadDirection, string> = {\n up: '▲',\n down: '▼',\n left: '◀',\n right: '▶',\n};\n\nexport const DPad: React.FC<DPadProps> = ({\n onDirection,\n directionEvent,\n size = 'md',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n includeDiagonals = false,\n style,\n disabled,\n}) => {\n const eventBus = useEventBus();\n const sizes = sizeMap[size];\n const [activeDirections, setActiveDirections] = useState<Set<DPadDirection>>(new Set());\n\n const handlePress = useCallback(\n (direction: DPadDirection) => {\n setActiveDirections((prev) => new Set(prev).add(direction));\n if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });\n onDirection?.(direction, true);\n },\n [directionEvent, eventBus, onDirection]\n );\n\n const handleRelease = useCallback(\n (direction: DPadDirection) => {\n setActiveDirections((prev) => {\n const next = new Set(prev);\n next.delete(direction);\n return next;\n });\n if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: false });\n onDirection?.(direction, false);\n },\n [directionEvent, eventBus, onDirection]\n );\n\n const createButton = (direction: DPadDirection) => (\n <ControlButton\n key={direction}\n icon={arrowIcons[direction]}\n size={sizes.button}\n variant=\"secondary\"\n pressed={activeDirections.has(direction)}\n onPress={() => handlePress(direction)}\n onRelease={() => handleRelease(direction)}\n disabled={disabled}\n />\n );\n\n return (\n <View style={[styles.container, { width: sizes.containerWidth }, style]}>\n {/* Row 1: Empty, Up, Empty */}\n <View style={styles.row}>\n <View style={styles.empty} />\n {createButton('up')}\n <View style={styles.empty} />\n </View>\n\n {/* Row 2: Left, Center, Right */}\n <View style={styles.row}>\n {createButton('left')}\n <View style={styles.center}>\n <View style={styles.centerDot} />\n </View>\n {createButton('right')}\n </View>\n\n {/* Row 3: Empty, Down, Empty */}\n <View style={styles.row}>\n <View style={styles.empty} />\n {createButton('down')}\n <View style={styles.empty} />\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n gap: 4,\n },\n row: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 4,\n },\n empty: {\n width: 56,\n height: 56,\n },\n center: {\n width: 56,\n height: 56,\n justifyContent: 'center',\n alignItems: 'center',\n },\n centerDot: {\n width: 24,\n height: 24,\n borderRadius: 12,\n backgroundColor: '#374151',\n borderWidth: 2,\n borderColor: '#4b5563',\n },\n});\n\nDPad.displayName = 'DPad';\n","import React, { useState, useCallback } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { Card } from '../atoms/Card';\nimport { VStack, HStack } from '../atoms/Stack';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { EmptyState } from './EmptyState';\n\nexport interface RepeatableItem {\n id: string;\n data: Record<string, unknown>;\n}\n\nexport interface RepeatableFormSectionProps {\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 /** Section title */\n title?: string;\n /** Section description */\n description?: string;\n /** Minimum number of items */\n minItems?: number;\n /** Maximum number of items */\n maxItems?: number;\n /** Initial items */\n initialItems?: RepeatableItem[];\n /** Render function for each item */\n renderItem: (item: RepeatableItem, index: number, actions: {\n remove: () => void;\n update: (data: Record<string, unknown>) => void;\n }) => React.ReactNode;\n /** Label for the add button */\n addButtonLabel?: string;\n /** Label for the remove button */\n removeButtonLabel?: string;\n /** Icon for remove button (as text/emoji) */\n removeIcon?: string;\n /** Callback when items change */\n onChange?: (items: RepeatableItem[]) => void;\n /** Event name when item is added */\n addEvent?: string;\n /** Event name when item is removed */\n removeEvent?: string;\n /** Event name when item is updated */\n updateEvent?: string;\n}\n\nexport const RepeatableFormSection: React.FC<RepeatableFormSectionProps> = ({\n style,\n isLoading,\n error,\n entity,\n title,\n description,\n minItems = 0,\n maxItems = 10,\n initialItems = [],\n renderItem,\n addButtonLabel = 'Add Item',\n removeButtonLabel = 'Remove',\n removeIcon = '✕',\n onChange,\n addEvent = 'REPEATABLE_ADD',\n removeEvent = 'REPEATABLE_REMOVE',\n updateEvent = 'REPEATABLE_UPDATE',\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [items, setItems] = useState<RepeatableItem[]>(\n initialItems.length > 0 \n ? initialItems \n : minItems > 0 \n ? Array.from({ length: minItems }, (_, i) => ({\n id: `item-${Date.now()}-${i}`,\n data: {},\n }))\n : []\n );\n\n const generateId = useCallback(() => {\n return `item-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }, []);\n\n const handleAddItem = useCallback(() => {\n if (items.length >= maxItems) {\n return;\n }\n\n const newItem: RepeatableItem = {\n id: generateId(),\n data: {},\n };\n\n const newItems = [...items, newItem];\n setItems(newItems);\n\n eventBus.emit(`UI:${addEvent}`, {\n entity,\n item: newItem,\n index: newItems.length - 1,\n totalItems: newItems.length,\n });\n\n onChange?.(newItems);\n }, [items, maxItems, generateId, entity, addEvent, onChange, eventBus]);\n\n const handleRemoveItem = useCallback((index: number) => {\n if (items.length <= minItems) {\n return;\n }\n\n const removedItem = items[index];\n const newItems = items.filter((_, i) => i !== index);\n setItems(newItems);\n\n eventBus.emit(`UI:${removeEvent}`, {\n entity,\n item: removedItem,\n index,\n totalItems: newItems.length,\n });\n\n onChange?.(newItems);\n }, [items, minItems, entity, removeEvent, onChange, eventBus]);\n\n const handleUpdateItem = useCallback((index: number, data: Record<string, unknown>) => {\n const newItems = items.map((item, i) =>\n i === index ? { ...item, data: { ...item.data, ...data } } : item\n );\n setItems(newItems);\n\n eventBus.emit(`UI:${updateEvent}`, {\n entity,\n item: newItems[index],\n index,\n data,\n });\n\n onChange?.(newItems);\n }, [items, entity, updateEvent, onChange, eventBus]);\n\n const canAdd = items.length < maxItems;\n const canRemove = items.length > minItems;\n\n if (isLoading) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <LoadingState message=\"Loading section...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={{ ...styles.container, ...(style || {}) }}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n return (\n <Card style={{ ...styles.container, ...(style || {}) }} padding=\"lg\">\n <VStack spacing={24}>\n {/* Header */}\n {(title || description) && (\n <VStack spacing={4}>\n {title && (\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body\" color={theme.colors['muted-foreground']}>\n {description}\n </Typography>\n )}\n </VStack>\n )}\n\n {/* Items */}\n {items.length === 0 ? (\n <EmptyState message=\"No items yet. Click add to create one.\" />\n ) : (\n <VStack spacing={16}>\n {items.map((item, index) => (\n <View\n key={item.id}\n style={{\n ...styles.itemContainer,\n borderColor: theme.colors.border,\n }}\n >\n <VStack spacing={12}>\n {/* Item Header with Remove Button */}\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"label\" color={theme.colors['muted-foreground']}>\n Item {index + 1}\n </Typography>\n {canRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={() => handleRemoveItem(index)}\n action={removeEvent}\n actionPayload={{\n entity,\n itemId: item.id,\n index,\n }}\n >\n {removeIcon} {removeButtonLabel}\n </Button>\n )}\n </HStack>\n\n {/* Item Content */}\n {renderItem(item, index, {\n remove: () => handleRemoveItem(index),\n update: (data) => handleUpdateItem(index, data),\n })}\n </VStack>\n </View>\n ))}\n </VStack>\n )}\n\n {/* Add Button */}\n {canAdd && (\n <Button\n variant=\"secondary\"\n onPress={handleAddItem}\n action={addEvent}\n actionPayload={{\n entity,\n currentCount: items.length,\n }}\n >\n + {addButtonLabel}\n </Button>\n )}\n\n {/* Item Count Indicator */}\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n style={{ textAlign: 'right' }}\n >\n {items.length} / {maxItems} items\n </Typography>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n itemContainer: {\n borderWidth: 1,\n borderRadius: 8,\n padding: 16,\n },\n});\n\nRepeatableFormSection.displayName = 'RepeatableFormSection';\n","import React, { useRef, useState, useCallback } from 'react';\nimport {\n View,\n StyleSheet,\n ViewStyle,\n Animated,\n PanResponder,\n GestureResponderEvent,\n PanResponderGestureState,\n Dimensions,\n TouchableOpacity,\n} from 'react-native';\n\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Button } from '../atoms/Button';\nimport { HStack, VStack } from '../atoms/Stack';\nimport { Card } from '../atoms/Card';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { EmptyState } from './EmptyState';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface ScaledDiagramProps {\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 /** Diagram content to render */\n children: React.ReactNode;\n /** Width of the diagram content */\n contentWidth?: number;\n /** Height of the diagram content */\n contentHeight?: number;\n /** Container width */\n width?: number;\n /** Container height */\n height?: number;\n /** Initial scale */\n initialScale?: number;\n /** Minimum scale */\n minScale?: number;\n /** Maximum scale */\n maxScale?: number;\n /** Enable pan gestures */\n enablePan?: boolean;\n /** Enable zoom gestures (pinch) - simulated with buttons for simplicity */\n enableZoom?: boolean;\n /** Show zoom controls */\n showControls?: boolean;\n /** Title for the diagram */\n title?: string;\n /** Enable double tap to zoom */\n enableDoubleTap?: boolean;\n /** Event prefix for diagram interactions */\n eventPrefix?: string;\n}\n\nexport const ScaledDiagram: React.FC<ScaledDiagramProps> = ({\n style,\n isLoading,\n error,\n entity,\n children,\n contentWidth = 800,\n contentHeight = 600,\n width = SCREEN_WIDTH - 32,\n height = 400,\n initialScale = 1,\n minScale = 0.5,\n maxScale = 3,\n enablePan = true,\n enableZoom = true,\n showControls = true,\n title,\n enableDoubleTap = true,\n eventPrefix = 'DIAGRAM',\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const scale = useRef(new Animated.Value(initialScale)).current;\n const translateX = useRef(new Animated.Value(0)).current;\n const translateY = useRef(new Animated.Value(0)).current;\n\n const [currentScale, setCurrentScale] = useState(initialScale);\n const lastTranslate = useRef({ x: 0, y: 0 });\n\n // Clamp values to bounds\n const clamp = useCallback((value: number, min: number, max: number) => {\n return Math.min(Math.max(value, min), max);\n }, []);\n\n // Calculate bounds for panning\n const getBounds = useCallback((newScale: number) => {\n const scaledWidth = contentWidth * newScale;\n const scaledHeight = contentHeight * newScale;\n const maxX = Math.max(0, (scaledWidth - width) / 2);\n const maxY = Math.max(0, (scaledHeight - height) / 2);\n return { maxX, maxY };\n }, [contentWidth, contentHeight, width, height]);\n\n const handleZoomIn = useCallback(() => {\n if (!enableZoom) return;\n\n const newScale = clamp(currentScale * 1.25, minScale, maxScale);\n setCurrentScale(newScale);\n\n Animated.spring(scale, {\n toValue: newScale,\n useNativeDriver: true,\n friction: 8,\n }).start();\n\n eventBus.emit(`UI:${eventPrefix}_ZOOM_IN`, {\n entity,\n scale: newScale,\n });\n }, [currentScale, minScale, maxScale, enableZoom, entity, eventPrefix, scale, eventBus, clamp]);\n\n const handleZoomOut = useCallback(() => {\n if (!enableZoom) return;\n\n const newScale = clamp(currentScale / 1.25, minScale, maxScale);\n setCurrentScale(newScale);\n\n // Reset position when zooming out to fit\n if (newScale <= initialScale) {\n lastTranslate.current = { x: 0, y: 0 };\n Animated.parallel([\n Animated.spring(translateX, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }),\n ]).start();\n }\n\n Animated.spring(scale, {\n toValue: newScale,\n useNativeDriver: true,\n friction: 8,\n }).start();\n\n eventBus.emit(`UI:${eventPrefix}_ZOOM_OUT`, {\n entity,\n scale: newScale,\n });\n }, [currentScale, minScale, maxScale, initialScale, enableZoom, entity, eventPrefix, scale, translateX, translateY, eventBus, clamp]);\n\n const handleReset = useCallback(() => {\n setCurrentScale(initialScale);\n lastTranslate.current = { x: 0, y: 0 };\n\n Animated.parallel([\n Animated.spring(scale, {\n toValue: initialScale,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.spring(translateX, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }),\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n friction: 8,\n }),\n ]).start();\n\n eventBus.emit(`UI:${eventPrefix}_RESET`, {\n entity,\n scale: initialScale,\n });\n }, [initialScale, entity, eventPrefix, scale, translateX, translateY, eventBus]);\n\n const handleDoubleTap = useCallback(() => {\n if (!enableDoubleTap) return;\n\n if (currentScale > initialScale) {\n handleReset();\n } else {\n const newScale = clamp(currentScale * 2, minScale, maxScale);\n setCurrentScale(newScale);\n\n Animated.spring(scale, {\n toValue: newScale,\n useNativeDriver: true,\n friction: 8,\n }).start();\n }\n }, [currentScale, initialScale, enableDoubleTap, minScale, maxScale, handleReset, scale, clamp]);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => enablePan,\n onMoveShouldSetPanResponder: () => enablePan && currentScale > 1,\n onPanResponderGrant: () => {\n lastTranslate.current = {\n x: 0,\n y: 0,\n };\n },\n onPanResponderMove: (_event: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n if (!enablePan || currentScale <= 1) return;\n\n const { maxX, maxY } = getBounds(currentScale);\n\n const newX = clamp(\n gestureState.dx,\n -maxX - lastTranslate.current.x,\n maxX - lastTranslate.current.x\n );\n const newY = clamp(\n gestureState.dy,\n -maxY - lastTranslate.current.y,\n maxY - lastTranslate.current.y\n );\n\n translateX.setValue(newX);\n translateY.setValue(newY);\n },\n onPanResponderRelease: (_event: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n if (!enablePan || currentScale <= 1) return;\n\n const { maxX, maxY } = getBounds(currentScale);\n\n lastTranslate.current.x = clamp(\n lastTranslate.current.x + gestureState.dx,\n -maxX,\n maxX\n );\n lastTranslate.current.y = clamp(\n lastTranslate.current.y + gestureState.dy,\n -maxY,\n maxY\n );\n\n translateX.setOffset(lastTranslate.current.x);\n translateX.setValue(0);\n translateY.setOffset(lastTranslate.current.y);\n translateY.setValue(0);\n\n eventBus.emit(`UI:${eventPrefix}_PAN`, {\n entity,\n x: lastTranslate.current.x,\n y: lastTranslate.current.y,\n scale: currentScale,\n });\n },\n })\n ).current;\n\n if (isLoading) {\n return (\n <Card style={{ ...styles.container, width, height, ...(style || {}) }} padding=\"lg\">\n <LoadingState message=\"Loading diagram...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={{ ...styles.container, width, height, ...(style || {}) }} padding=\"lg\">\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n if (!children) {\n return (\n <Card style={{ ...styles.container, width, height, ...(style || {}) }} padding=\"lg\">\n <EmptyState message=\"No diagram content\" />\n </Card>\n );\n }\n\n const animatedStyle = {\n transform: [\n { scale },\n { translateX },\n { translateY },\n ],\n };\n\n return (\n <Card style={{ ...styles.container, width, ...(style || {}) }} padding=\"md\">\n <VStack spacing={12}>\n {/* Header */}\n {(title || showControls) && (\n <HStack justify=\"space-between\" align=\"center\">\n {title && (\n <Typography variant=\"h4\" style={{ color: theme.colors.foreground }}>\n {title}\n </Typography>\n )}\n {showControls && (\n <HStack spacing={8}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleZoomOut}\n disabled={!enableZoom || currentScale <= minScale}\n >\n −\n </Button>\n <Typography variant=\"body\" style={{ minWidth: 50, textAlign: 'center' }}>\n {Math.round(currentScale * 100)}%\n </Typography>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleZoomIn}\n disabled={!enableZoom || currentScale >= maxScale}\n >\n +\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onPress={handleReset}\n >\n ⟲\n </Button>\n </HStack>\n )}\n </HStack>\n )}\n\n {/* Diagram Container */}\n <View\n style={[\n styles.diagramContainer,\n {\n width,\n height,\n backgroundColor: theme.colors.muted,\n },\n ]}\n >\n <TouchableOpacity\n activeOpacity={1}\n onPress={handleDoubleTap}\n style={styles.touchable}\n >\n <Animated.View\n style={[\n styles.content,\n {\n width: contentWidth,\n height: contentHeight,\n },\n animatedStyle,\n ]}\n {...panResponder.panHandlers}\n >\n {children}\n </Animated.View>\n </TouchableOpacity>\n </View>\n\n {/* Scale Indicator */}\n <Typography\n variant=\"caption\"\n color={theme.colors['muted-foreground']}\n style={{ textAlign: 'center' }}\n >\n Scale: {currentScale.toFixed(2)}x • Double-tap to {currentScale > initialScale ? 'reset' : 'zoom'}\n </Typography>\n </VStack>\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n diagramContainer: {\n overflow: 'hidden',\n borderRadius: 8,\n },\n touchable: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n content: {\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nScaledDiagram.displayName = 'ScaledDiagram';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,SAAS,MAAM,kBAA6B;AAarC,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACE,oCAAC,UAAO,SAAS,GAAG,OAAO,CAAC,OAAO,WAAW,KAAkB,KAC7D,SACC,oCAAC,QAAK,OAAO,OAAO,kBAClB,oCAAC,cAAW,SAAQ,WACjB,OACA,YAAY,oCAAC,cAAW,SAAQ,SAAQ,OAAM,aAAU,IAAE,CAC7D,CACF,GAGD,UAEA,QACC,oCAAC,cAAW,SAAQ,WAAU,OAAM,aACjC,KACH,IACE,aACF,oCAAC,cAAW,SAAQ,WAAU,OAAM,aACjC,UACH,IACE,IACN;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,cAAc;AAAA,EAChB;AACF,CAAC;AAED,UAAU,cAAc;;;ACzDxB,OAAOA,YAAW;AAClB,SAAS,QAAAC,OAAM,cAAAC,mBAA6B;AAkBrC,IAAM,oBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,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,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW;AAAA;AAAA,IAEvC;AAAA,EACH,GACC,YACC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,CAACE,QAAO,UAAU,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,CAAC;AAAA;AAAA,IAEnE;AAAA,EACH,CAEJ;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,EACb;AACF,CAAC;AAED,kBAAkB,cAAc;;;ACzEhC,OAAOC,YAAW;AAClB,SAAS,QAAAC,OAAM,cAAAC,mBAA6B;AAuBrC,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAkB,KAChD,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAc,KAC5C,gBAAAF,OAAA,cAAC,cAAW,SAAU,MAAgB,SAAS,CACjD;AAAA,EAEJ;AAEA,QAAM,YAAa,OAAwB,WAAW;AAEtD,SACE,gBAAAA,OAAA,cAAC,UAAO,SAAS,GAAG,OAAO,CAACE,QAAO,WAAW,KAAkB,KAC7D,SACC,gBAAAF,OAAA,cAAC,SAAM,YACJ,KACH,GAED,UACA,YACC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,MAAM;AAAA;AAAA,IAElC;AAAA,EACH,IACE,aACF,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA;AAAA,IAEhD;AAAA,EACH,IACE,IACN;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AACF,CAAC;AAED,WAAW,cAAc;;;ACvFzB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,OAEK;AA4BA,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,gBAAgB,MAAM;AAC1B,QAAI,eAAe;AACjB,eAAS,KAAK,MAAM,aAAa,IAAI,aAAa;AAAA,IACpD;AACA,gBAAY;AAAA,EACd;AAEA,QAAM,gBAAoF;AAAA,IACxF,MAAM;AAAA,MACJ,IAAI,MAAM,OAAO;AAAA,MACjB,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,IAAI,MAAM,OAAO;AAAA,MACjB,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,IAAI,MAAM,OAAO;AAAA,MACjB,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,IAAI,MAAM,OAAO;AAAA,MACjB,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,EAAE,IAAI,OAAO,IAAI,cAAc,OAAO;AAE5C,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,SACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE,iBAAiB,KAAK;AAAA;AAAA,UACtB,aAAa;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA,cAAC,UAAO,SAAS,IAAI,OAAM,gBACzB,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,MAAM,EAAE,iBAAiB,GAAG,CAAC,KAChD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAiB,EAAE,KACxE,cAAc,OAAO,EAAE,IAC1B,CACF,GAEA,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,WACjB,SACC,gBAAAF,OAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAC9D,KACH,GAEF,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAChE,OACH,CACF,GAEC,eACC,gBAAAA,OAAA,cAAC,oBAAiB,SAAS,eAAe,OAAOE,QAAO,WACtD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,QAE/E,CACF,CAEJ;AAAA,EACF;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AACF,CAAC;AAED,MAAM,cAAc;;;AC/JpB,OAAOC,UAAS,iBAAiB;AACjC;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAYA,IAAM,WAAoC,CAAC;AAAA,EAChD,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,eAAe;AAAA,EACf;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,UAAUC,OAAM,OAAO,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;AAEpD,YAAU,MAAM;AACd,UAAM,YAAY,SAAS;AAAA,MACzB,SAAS,OAAO,SAAS;AAAA,QACvB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,OAAO;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,cAAU,MAAM;AAEhB,WAAO,MAAM,UAAU,KAAK;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,QAAQ,YAAY;AAAA,IACrC,YAAY,CAAC,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,MAAM,GAAG;AAAA,EACzB,CAAC;AAED,SACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,OAAO;AAAA,UACLE,QAAO;AAAA,UACP;AAAA,YACE,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,EACnB;AACF,CAAC;AAED,SAAS,cAAc;;;ACpFvB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA2BA,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,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,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,CAAC;AAAA,IAC9C;AACA,eAAW;AAAA,EACb;AAEA,QAAM,cAAc,MAAM;AACxB,qBAAiB,EAAE;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAkB,KAChD,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAkB,KAChD,gBAAAF,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAM;AAAA,MACN,OAAO;AAAA,QACLE,QAAO;AAAA,QACP;AAAA,UACE,iBAAiB,MAAM,OAAO;AAAA,UAC9B,aAAa,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,WAE/E;AAAA,IAEA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB;AAAA,QACA,sBAAsB,MAAM,OAAO,kBAAkB;AAAA,QACrD;AAAA,QACA,eAAc;AAAA,QACd,OAAO;AAAA,UACLE,QAAO;AAAA,UACP,EAAE,OAAO,MAAM,OAAO,WAAW;AAAA,QACnC;AAAA;AAAA,IACF;AAAA,IAEC,SAAS,MAAM,SAAS,KACvB,gBAAAF,OAAA,cAACG,mBAAA,EAAiB,SAAS,aAAa,OAAOD,QAAO,SACpD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,QAE/E,CACF;AAAA,EAEJ;AAEJ;AAEA,IAAME,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,EACX;AACF,CAAC;AAED,YAAY,cAAc;;;AC9I1B,OAAOC,UAAS,UAAU,cAAc;AACxC;AAAA,EACE,QAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EAEA;AAAA,EACA,oBAAAC;AAAA,EACA;AAAA,OACK;AAWA,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC5E,QAAM,aAAa,OAAa,IAAI;AAEpC,QAAM,cAAc,MAAM;AACxB,eAAW,SAAS,QAAQ,CAAC,GAAG,GAAG,OAAO,QAAQ,OAAO,UAAU;AACjE,kBAAY,EAAE,GAAG,OAAO,GAAG,OAAO,OAAO,OAAO,CAAC;AACjD,iBAAW,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,MAAM;AACxB,eAAW,KAAK;AAAA,EAClB;AAEA,QAAM,WAAW,SAAS,IAAI;AAC9B,QAAM,UAAU,SAAS,IAAI,SAAS,QAAQ;AAE9C,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA,eAAe;AAAA;AAAA,IAEd;AAAA,EACH,GAEA,gBAAAD,OAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA;AAAA,IAEhB,gBAAAA,OAAA,cAAC,4BAAyB,SAAS,eACjC,gBAAAA,OAAA,cAACE,OAAA,EAAK,OAAOC,QAAO,WAClB,gBAAAH,OAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP;AAAA,YACE,iBAAiB,MAAM,OAAO;AAAA,YAC9B,KAAK;AAAA,YACL,MAAM,UAAU;AAAA,UAClB;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAH,OAAA,cAAC,QAAK,OAAO,CAACG,QAAO,MAAM,EAAE,OAAO,MAAM,OAAO,WAAW,CAAC,KAC1D,OACH;AAAA,MACA,gBAAAH,OAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLC,QAAO;AAAA,YACP,EAAE,gBAAgB,MAAM,OAAO,WAAW;AAAA,UAC5C;AAAA;AAAA,MACF;AAAA,IACF,CACF,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF,CAAC;AAED,QAAQ,cAAc;;;ACvHtB,OAAOC,UAAS,YAAAC,WAAU,UAAAC,eAAc;AACxC;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,SAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA;AAAA,OACK;AAWA,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC5E,QAAM,aAAaC,QAAa,IAAI;AACpC,QAAM,eAAe,WAAW,IAAI,QAAQ,EAAE;AAE9C,QAAM,cAAc,MAAM;AACxB,eAAW,SAAS,QAAQ,CAAC,GAAG,GAAG,OAAO,QAAQ,OAAO,UAAU;AACjE,kBAAY,EAAE,GAAG,OAAO,GAAG,OAAO,OAAO,OAAO,CAAC;AACjD,iBAAW,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,MAAM;AACxB,eAAW,KAAK;AAAA,EAClB;AAGA,QAAM,WAAW,SAAS,IAAI,SAAS,SAAS;AAChD,QAAM,YAAY,WAAW,eAAe;AAC5C,QAAM,SAAS,YAAY,SAAS,IAAI,MAAM;AAE9C,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA;AAAA,IAEC;AAAA,EACH,GAEA,gBAAAD,OAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA;AAAA,IAEhB,gBAAAF,OAAA,cAACG,2BAAA,EAAyB,SAAS,eACjC,gBAAAH,OAAA,cAACI,OAAA,EAAK,OAAOC,QAAO,WAClB,gBAAAL,OAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP;AAAA,YACE,iBAAiB,MAAM,OAAO;AAAA,YAC9B,aAAa,MAAM,OAAO;AAAA,YAC1B,KAAK;AAAA,YACL,MAAM,SAAS;AAAA,YACf,UAAU,SAAS;AAAA,UACrB;AAAA,QACF;AAAA;AAAA,MAEC,aACC,gBAAAL,OAAA,cAACI,OAAA,EAAK,OAAO,CAACC,QAAO,SAAS,EAAE,mBAAmB,MAAM,OAAO,KAAK,CAAC,GAAG;AAAA,MAE3E,gBAAAL,OAAA,cAACI,OAAA,EAAK,OAAOC,QAAO,WACjB,OACH;AAAA,MACC,CAAC,aACA,gBAAAL,OAAA,cAACI,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,EAAE,gBAAgB,MAAM,OAAO,KAAK,CAAC,GAAG;AAAA,IAE5E,CACF,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AACF,CAAC;AAED,QAAQ,cAAc;;;ACtItB,OAAOC,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,SAAAC;AAAA,EACA,4BAAAC;AAAA,EACA;AAAA,OACK;AAuBA,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,SAAS,UAAU,IAAIC,OAAM,SAAS,KAAK;AAClD,QAAM,aAAaA,OAAM,OAAa,IAAI;AAC1C,QAAM,CAAC,UAAU,WAAW,IAAIA,OAAM,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC;AAEvE,QAAM,WAAW,MAAM;AACrB,eAAW,SAAS,QAAQ,CAAC,GAAG,GAAG,OAAO,QAAQ,OAAO,UAAU;AACjE,kBAAY,EAAE,GAAG,OAAO,GAAG,QAAQ,SAAS,GAAG,MAAM,CAAC;AACtD,iBAAW,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,MAAM;AACrB,eAAW,KAAK;AAAA,EAClB;AAEA,QAAM,eAAe,CAAC,SAAmB;AACvC,QAAI,KAAK,SAAU;AAEnB,QAAI,KAAK,QAAQ;AACf,eAAS,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ,KAAK,GAAG,CAAC;AAAA,IACxD;AACA,eAAW,IAAI;AACf,aAAS;AAAA,EACX;AAEA,SACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA;AAAA,IAEC;AAAA,EACH,GAEA,gBAAAD,OAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA;AAAA,IAEhB,gBAAAF,OAAA,cAACG,2BAAA,EAAyB,SAAS,YACjC,gBAAAH,OAAA,cAACI,OAAA,EAAK,OAAOC,QAAO,WAClB,gBAAAL,OAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP;AAAA,YACE,iBAAiB,MAAM,OAAO;AAAA,YAC9B,aAAa,MAAM,OAAO;AAAA,YAC1B,KAAK,SAAS;AAAA,YACd,MAAM,SAAS;AAAA,YACf,UAAU,KAAK,IAAI,SAAS,OAAO,GAAG;AAAA,UACxC;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAL,OAAA,cAAC,kBACE,MAAM,IAAI,CAAC,SACV,gBAAAA,OAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAK,KAAK;AAAA,UACV,SAAS,MAAM,aAAa,IAAI;AAAA,UAChC,UAAU,KAAK;AAAA,UACf,OAAO;AAAA,YACLI,QAAO;AAAA,YACP,EAAE,SAAS,KAAK,WAAW,MAAM,EAAE;AAAA,UACrC;AAAA;AAAA,QAEA,gBAAAL,OAAA,cAAC,UAAO,SAAS,IAAI,OAAM,YACxB,KAAK,MACN,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW;AAAA;AAAA,UAEvC,KAAK;AAAA,QACR,CACF;AAAA,MACF,CACD,CACH;AAAA,IACF,CACF,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAMK,UAASC,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AACF,CAAC;AAED,KAAK,cAAc;;;ACrJnB,OAAOC,aAAW;AAClB;AAAA,EACE,oBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAoBA,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,CAAC,MAAsB,UAAkB;AAC3D,QAAI,KAAK,QAAQ;AACf,eAAS,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,MAAM,MAAM,CAAC;AAAA,IAC/D;AACA,iBAAa,MAAM,KAAK;AAAA,EAC1B;AAEA,SACE,gBAAAC,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,OAAO,CAACC,SAAO,WAAW,KAAK;AAAA;AAAA,IAE/B,gBAAAF,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACvB,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,YAAM,SAAS,UAAU,MAAM,SAAS;AACxC,aACE,gBAAAA,QAAA,cAAC,UAAO,KAAK,OAAO,SAAS,GAAG,OAAM,YACnC,QAAQ,KACP,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA;AAAA,QAClD;AAAA,MAED,GAED,SACC,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,EAAE,OAAO,MAAM,OAAO,YAAY,YAAY,MAAM;AAAA;AAAA,QAE1D,KAAK;AAAA,MACR,IAEA,gBAAAA,QAAA,cAACG,mBAAA,EAAiB,SAAS,MAAM,YAAY,MAAM,KAAK,KACtD,gBAAAH,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA;AAAA,QAEpC,KAAK;AAAA,MACR,CACF,CAEJ;AAAA,IAEJ,CAAC,CACH;AAAA,EACF;AAEJ;AAEA,IAAME,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AACF,CAAC;AAED,WAAW,cAAc;;;AC3FzB,OAAOC,aAAW;AAClB;AAAA,EACE,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA2BA,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,CAAC,gBAAwB;AAC3C,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,OAAO,YAAY,CAAC;AAAA,IAC3D;AACA,eAAW,WAAW;AAAA,EACxB;AAEA,SACE,gBAAAC,QAAA,cAAC,UAAO,SAAS,GAAG,OAAO,QAAQ,CAACC,SAAO,WAAW,KAAK,IAAIA,SAAO,aACnE,QAAQ,IAAI,CAAC,WAAW;AACvB,UAAM,aAAa,UAAU,OAAO;AACpC,WACE,gBAAAD,QAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,KAAK,OAAO;AAAA,QACZ,SAAS,MAAM,YAAY,OAAO,KAAK;AAAA,QACvC,UAAU,OAAO;AAAA,QACjB,OAAO;AAAA,UACLD,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,aACb,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,YACjB,aAAa,MAAM,OAAO;AAAA,YAC1B,SAAS,OAAO,WAAW,MAAM;AAAA,UACnC;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAD,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,aACH,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,UACnB;AAAA;AAAA,QAEC,OAAO;AAAA,MACV;AAAA,IACF;AAAA,EAEJ,CAAC,CACH;AAEJ;AAEA,IAAMC,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AACF,CAAC;AAED,YAAY,cAAc;;;AClG1B,OAAOC,aAAqC;AAC5C,SAAS,QAAAC,cAAuB;AAqBzB,IAAM,gBAAN,cAA4BC,QAAM,UAAkD;AAAA,EAGzF,YAAY,OAA2B;AACrC,UAAM,KAAK;AAYb,SAAQ,QAAQ,MAAY;AAC1B,WAAK,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,IAC/B;AAbE,SAAK,QAAQ,EAAE,OAAO,KAAK;AAAA,EAC7B;AAAA,EAEA,OAAO,yBAAyB,OAAkC;AAChE,WAAO,EAAE,MAAM;AAAA,EACjB;AAAA,EAEA,kBAAkB,OAAc,WAA4B;AAC1D,SAAK,MAAM,UAAU,OAAO,SAAS;AAAA,EACvC;AAAA,EAMA,SAAoB;AAClB,UAAM,EAAE,MAAM,IAAI,KAAK;AACvB,UAAM,EAAE,UAAU,UAAU,MAAM,IAAI,KAAK;AAE3C,QAAI,OAAO;AACT,YAAM,kBAAkB,KAAK,eAAe,OAAO,QAAQ;AAC3D,UAAI,OAAO;AACT,eAAO,gBAAAA,QAAA,cAACC,QAAA,EAAK,SAAe,eAAgB;AAAA,MAC9C;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,OAAc,UAAqD;AACxF,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,OAAO,KAAK,KAAK;AAAA,IACnC;AACA,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AACA,WACE,gBAAAD,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,yBAAyB,MAAM,OAAO;AAAA,QAC/C,SAAS,KAAK;AAAA;AAAA,IAChB;AAAA,EAEJ;AACF;AAjDa,cACJ,cAAc;;;ACvBvB,OAAOE,WAAS,YAAAC,WAAU,UAAAC,eAAc;AACxC;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,QAAAC;AAAA,OACK;AAyCA,IAAM,uBAA4D,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAClD,QAAM,YAAYC,QAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AAEhD,QAAM,iBACJ,WACC,OACG;AAAA,IACE;AAAA,IACA,SAAS,YAAY,MAAM;AAAA,IAAC;AAAA,IAC5B;AAAA,EACF,IACA;AAEN,QAAM,mBAAmB,MAAiB;AACxC,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,EAAE,QAAQ,IAAI,OAAO,GAAG;AAAA,MACjC,KAAK;AACH,eAAO,EAAE,QAAQ,IAAI,MAAM,GAAG;AAAA,MAChC,KAAK;AACH,eAAO,EAAE,QAAQ,IAAI,WAAW,SAAS;AAAA,MAC3C,KAAK;AACH,eAAO,EAAE,KAAK,IAAI,OAAO,GAAG;AAAA,MAC9B,KAAK;AACH,eAAO,EAAE,KAAK,IAAI,MAAM,GAAG;AAAA,MAC7B,KAAK;AACH,eAAO,EAAE,KAAK,IAAI,WAAW,SAAS;AAAA,MACxC;AACE,eAAO,EAAE,QAAQ,IAAI,OAAO,GAAG;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,kBAAkB,CAAC,MAAc;AACrC,YAAQ,GAAG;AAAA,MACT,KAAK;AACH,eAAO,MAAM,OAAO;AAAA,MACtB,KAAK;AACH,eAAO,MAAM,OAAO;AAAA,MACtB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO,MAAM,OAAO;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B,UAAM,WAAW,CAAC;AAClB,kBAAc,QAAQ;AACtB,IAAAA,UAAS,OAAO,WAAW;AAAA,MACzB,SAAS,WAAW,IAAI;AAAA,MACxB,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAAA,EACX;AAGA,MAAI,mBAAmB,CAAC,WAAW,QAAQ,WAAW,IAAI;AACxD,WACE,gBAAAC,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAS,eAAe;AAAA,QACxB,OAAO;AAAA,UACLC,SAAO;AAAA,UACP,EAAE,iBAAiB,gBAAgB,eAAe,WAAW,SAAS,EAAE;AAAA,UACxE,iBAAiB;AAAA,UACjB;AAAA,QACF;AAAA,QACA,oBAAoB,eAAe,SAAS;AAAA;AAAA,MAE5C,gBAAAF,QAAA,cAACG,OAAA,EAAK,OAAOD,SAAO,QAAO,eAAe,QAAQ,GAAI;AAAA,IACxD;AAAA,EAEJ;AAGA,MAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,WACE,gBAAAF,QAAA,cAACI,QAAA,EAAK,OAAO,CAACF,SAAO,WAAW,iBAAiB,GAAG,KAAK,KAEtD,cAAc,QAAQ,SAAS,KAC9B,gBAAAF,QAAA,cAACI,QAAA,EAAK,OAAOF,SAAO,oBACjB,QAAQ,IAAI,CAAC,YAAY,UAAU;AAClC,YAAM,aAAa,UAAU,YAAY;AAAA,QACvC,YAAY,CAAC,GAAG,CAAC;AAAA,QACjB,aAAa,CAAC,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAAA,MAChD,CAAC;AACD,YAAM,UAAU,UAAU,YAAY;AAAA,QACpC,YAAY,CAAC,GAAG,KAAK,CAAC;AAAA,QACtB,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACvB,CAAC;AAED,aACE,gBAAAF,QAAA;AAAA,QAACD,UAAS;AAAA,QAAT;AAAA,UACC,KAAK,WAAW;AAAA,UAChB,OAAO;AAAA,YACLG,SAAO;AAAA,YACP,EAAE,SAAS,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE;AAAA,UACzC;AAAA;AAAA,QAEA,gBAAAF,QAAA;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,4BAAc,KAAK;AACnB,kBAAI,WAAW;AACb,yBAAS,KAAK,MAAM,WAAW,KAAK,IAAI;AAAA,kBACtC,UAAU,WAAW;AAAA,gBACvB,CAAC;AACH,yBAAW,UAAU;AAAA,YACvB;AAAA,YACA,OAAO;AAAA,cACLC,SAAO;AAAA,cACP,EAAE,iBAAiB,gBAAgB,WAAW,WAAW,SAAS,EAAE;AAAA,YACtE;AAAA;AAAA,UAEA,gBAAAF,QAAA,cAACG,OAAA,EAAK,OAAOD,SAAO,QAAO,WAAW,IAAK;AAAA,QAC7C;AAAA,QACA,gBAAAF,QAAA,cAACI,QAAA,EAAK,OAAOF,SAAO,kBAClB,gBAAAF,QAAA,cAACG,OAAA,EAAK,OAAOD,SAAO,SAAQ,WAAW,KAAM,CAC/C;AAAA,MACF;AAAA,IAEJ,CAAC,CACH,GAIF,gBAAAF,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,cAAI,QAAQ,WAAW,GAAG;AACxB,gBAAI,QAAQ,CAAC,EAAE;AACb,uBAAS,KAAK,MAAM,QAAQ,CAAC,EAAE,KAAK,IAAI;AAAA,gBACtC,UAAU,QAAQ,CAAC,EAAE;AAAA,cACvB,CAAC;AACH,oBAAQ,CAAC,EAAE,UAAU;AAAA,UACvB,OAAO;AACL,2BAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACLC,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,aACb,MAAM,OAAO,YACb,MAAM,OAAO;AAAA,UACnB;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,QAAA;AAAA,QAACD,UAAS;AAAA,QAAT;AAAA,UACC,OAAO;AAAA,YACLG,SAAO;AAAA,YACP;AAAA,cACE,WAAW;AAAA,gBACT;AAAA,kBACE,QAAQ,UAAU,YAAY;AAAA,oBAC5B,YAAY,CAAC,GAAG,CAAC;AAAA,oBACjB,aAAa,CAAC,QAAQ,OAAO;AAAA,kBAC/B,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA;AAAA,QACD;AAAA,MAED;AAAA,IACF,CACF;AAAA,EAEJ;AAEA,SAAO;AACT;AAEA,IAAMA,WAASG,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,IACpC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,kBAAkB;AAAA,IAChB,cAAc;AAAA,IACd,KAAK;AAAA,EACP;AAAA,EACA,WAAW;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF,CAAC;AAED,qBAAqB,cAAc;;;AC5RnC,OAAOC,aAAW;AAClB,SAAS,QAAAC,cAAkC;AA+B3C,IAAM,YAAqC;AAAA,EACzC,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT;AAEO,IAAM,OAA4B,CAAC;AAAA,EACxC,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,YAAuB;AAAA,IAC3B,eAAe;AAAA,IACf,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK,UAAU,GAAG;AAAA,EACpB;AAEA,MAAI,SAAS,QAAW;AACtB,cAAU,WAAW,SAAS,OAAO,IAAI,SAAS,QAAQ,IAAI;AAAA,EAChE;AACA,MAAI,WAAW,QAAW;AACxB,cAAU,aAAa,WAAW,OAAO,IAAI,WAAW,QAAQ,IAAI;AAAA,EACtE;AACA,MAAI,UAAU,QAAW;AACvB,cAAU,YAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,EAC5D;AAEA,SACE,gBAAAD,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,WAAW,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KAC/C,QACH;AAEJ;AAEA,KAAK,cAAc;;;AC/EnB,OAAOC,aAAW;AAClB,SAAS,QAAAC,cAAuB;AAiBhC,IAAMC,aAA2C;AAAA,EAC/C,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD,gBAAgB;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AACF,MAAM;AACJ,QAAM,gBAAgBF,QAAM,SAAS,QAAQ,QAAQ;AACrD,QAAM,WAAWE,WAAU,GAAG;AAG9B,MAAI,MAAM;AACR,UAAM,WAAsB;AAAA,MAC1B,eAAe;AAAA,MACf,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAEA,WACE,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,UAAU,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KAC9C,cAAc,IAAI,CAAC,OAAO,UACzB,gBAAAD,QAAA,cAACC,QAAA,EAAK,KAAK,OAAO,OAAO,EAAE,MAAM,IAAI,MAAM,SAAS,WAAW,EAAE,KAC9D,KACH,CACD,CACH;AAAA,EAEJ;AAGA,QAAM,iBAA4B;AAAA,IAChC,eAAe;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,EACP;AAEA,QAAM,YAAuB;AAAA,IAC3B,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AAEA,SACE,gBAAAD,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,gBAAgB,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KACpD,cAAc,IAAI,CAAC,OAAO,UACzB,gBAAAD,QAAA,cAACC,QAAA,EAAK,KAAK,OAAO,OAAO,aACtB,KACH,CACD,CACH;AAEJ;AAEA,WAAW,cAAc;;;AC/EzB,OAAOE,aAAW;AAClB,SAAS,QAAAC,cAAuB;AAoBhC,IAAM,aAA4C;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AACR;AAEA,IAAM,gBAAkD;AAAA,EACtD,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,SAAS;AAAA,EACT;AAAA,EACA;AACF,MAAM;AACJ,QAAM,eAAe,YAAY,QAAQ;AAEzC,QAAM,iBAA4B;AAAA,IAChC,OAAO;AAAA,IACP,UAAU,WAAW,YAAY;AAAA,IACjC,mBAAmB,cAAc,OAAO;AAAA,IACxC,GAAI,UAAU,EAAE,WAAW,SAAS;AAAA,EACtC;AAEA,SACE,gBAAAD,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,gBAAgB,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KACpD,QACH;AAEJ;AAEA,UAAU,cAAc;;;AC/DxB,OAAOC,aAAW;AAClB,SAAS,QAAAC,QAAiB,gBAAgC;AAqB1D,IAAMC,aAAqC;AAAA,EACzC,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,KAAQ;AAAA,EACtB;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4C;AAC1C,QAAM,WAAWA,WAAU,GAAG;AAG9B,MAAI,QAAQ,YAAY;AACtB,WACE,gBAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,oBAAoB,EAAE,KAAK,SAAS;AAAA,QACpC,uBAAuB;AAAA,UACrB,EAAE,KAAK,SAAS;AAAA,UAChB,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,QACzB;AAAA;AAAA,IACF;AAAA,EAEJ;AAGA,QAAM,iBAA4B;AAAA,IAChC,eAAe;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,EACP;AAEA,QAAM,gBAAgBA,QAAM,SAAS,QAAQ,QAAQ;AAErD,SACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,gBAAgB,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KACpD,cAAc,IAAI,CAAC,OAAO,UACzB,gBAAAD,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,QACL,MAAM,IAAI;AAAA,QACV,SAAS,WAAW;AAAA,MACtB;AAAA;AAAA,IAEC;AAAA,EACH,CACD,CACH;AAEJ;AAEA,KAAK,cAAc;;;ACrFnB,OAAOE,aAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AASP,IAAM,EAAE,OAAO,aAAa,IAAIC,YAAW,IAAI,QAAQ;AA2DhD,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,eAAe;AAAA,EACvB,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,aAAaC,QAAM;AAAA,IACvB,IAAIC,UAAS,MAAM,aAAa,UAAU,eAAe,CAAC,YAAY;AAAA,EACxE,EAAE;AAEF,EAAAD,QAAM,UAAU,MAAM;AACpB,IAAAC,UAAS,OAAO,YAAY;AAAA,MAC1B,SAAS,SAAS,IAAI,aAAa,UAAU,QAAQ,CAAC;AAAA,MACtD,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAAA,EACX,GAAG,CAAC,QAAQ,UAAU,YAAY,KAAK,CAAC;AAExC,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY;AACd,eAAS,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC;AAAA,IACtC;AACA,YAAQ;AAAA,EACV;AAEA,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE,gBAAAD,QAAA,cAACE,QAAA,EAAK,OAAOC,SAAO,WAEjB,eACC,gBAAAH,QAAA;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,OAAOD,SAAO;AAAA,MACd,eAAe;AAAA,MACf,SAAS;AAAA;AAAA,EACX,GAIF,gBAAAH,QAAA;AAAA,IAACC,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLE,SAAO;AAAA,QACP;AAAA,UACE;AAAA,UACA,iBAAiB,MAAM,OAAO;AAAA,UAC9B,CAAC,QAAQ,GAAG;AAAA,UACZ,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,UAC1B,iBAAiB,MAAM,OAAO;AAAA,UAC9B,kBAAkB,MAAM,OAAO;AAAA,QACjC;AAAA,QACA,aAAa,UAAUA,SAAO,aAAaA,SAAO;AAAA,QAClD;AAAA,MACF;AAAA;AAAA,IAGA,gBAAAH,QAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,SAAO;AAAA,UACP;AAAA,YACE,mBAAmB,MAAM,OAAO;AAAA,YAChC,iBAAiB,MAAM,OAAO;AAAA,UAChC;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAH,QAAA,cAAC,cAAW,SAAQ,QAAM,KAAM;AAAA,MAChC,gBAAAA,QAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,eAAa,QAExD;AAAA,IACF;AAAA,IAGA,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOG,SAAO,WAC/B,YACC,gBAAAH,QAAA,cAAC,kBAAa,IACZ,QACF,gBAAAA,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,SAAS,aAAa,IAE1D,QAEJ;AAAA,EACF,CACF;AAEJ;AAEA,IAAMG,WAASE,aAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,GAAGA,aAAW;AAAA,IACd,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,aAAW;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACrC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,EACpB;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,mBAAmB;AAAA,EACrB;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;AAED,UAAU,cAAc;;;AClNxB,OAAOC,aAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA8FA,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,CAAC,SAAyB;AAC5C,QAAI,KAAK,SAAU;AAEnB,QAAI,KAAK,OAAO;AACd,eAAS,KAAK,MAAM,KAAK,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,aAAa,KAAK,YAAY,CAAC;AAAA,IACtF;AAEA,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,QAAQ,KAAK,IAAI,aAAa,KAAK,YAAY,CAAC;AAAA,IACvF;AAEA,SAAK,UAAU;AAAA,EACjB;AAEA,QAAM,eAAe,CAAC,aAAiC;AACrD,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,UACL,iBAAiB,WAAW,MAAM,OAAO,UAAU;AAAA,UACnD,cAAc,MAAM,aAAa;AAAA,QACnC;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,mBAAmB;AAAA,UACnB,mBAAmB,WAAW,MAAM,OAAO,UAAU;AAAA,UACrD,iBAAiB;AAAA,UACjB,cAAc;AAAA,QAChB;AAAA,MACF;AACE,eAAO;AAAA,UACL,iBAAiB,WAAW,MAAM,OAAO,OAAO;AAAA,UAChD,cAAc,MAAM,aAAa;AAAA,QACnC;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,aAA8B;AAClD,QAAI,YAAY,WAAW,UAAU;AACnC,aAAO,MAAM,OAAO,oBAAoB;AAAA,IAC1C;AACA,WAAO,WAAW,MAAM,OAAO,UAAU,MAAM,OAAO;AAAA,EACxD;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,yBAAwB,CAChD;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,aAAa,CAAC,SAAyB;AAC3C,UAAM,WAAW,KAAK,YAAY;AAElC,WACE,gBAAAA,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,SAAS,MAAM,YAAY,IAAI;AAAA,QAC/B,UAAU,KAAK;AAAA,QACf,OAAO;AAAA,UACLD,SAAO;AAAA,UACP,aAAa,QAAQ;AAAA,UACrB,KAAK,YAAY,EAAE,SAAS,IAAI;AAAA,QAClC;AAAA,QACA,eAAe;AAAA;AAAA,MAEf,gBAAAF,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACvB,KAAK,QACJ,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,aAAa,QAAQ,EAAE,KAC/D,KAAK,IACR,GAEF,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,aAAa,QAAQ,EAAE,KAC/D,KAAK,KACR,GACC,KAAK,UAAU,UAAa,KAAK,QAAQ,KACxC,gBAAAA,QAAA,cAAC,SAAM,SAAQ,SAAQ,MAAK,QACzB,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAClC,CAEJ;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,gBAAgB,cAAc;AAChC,WACE,gBAAAA,QAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,YAAU;AAAA,QACV,gCAAgC;AAAA,QAChC,uBAAuB,CAACF,SAAO,qBAAqB,KAAK;AAAA;AAAA,MAExD,MAAM,IAAI,UAAU;AAAA,IACvB;AAAA,EAEJ;AAEA,SACE,gBAAAF,QAAA,cAAC,UAAO,SAAS,GAAG,OAAO,CAACE,SAAO,mBAAmB,GAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAE,KAC5E,MAAM,IAAI,UAAU,CACvB;AAEJ;AAEA,IAAMA,WAASG,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,qBAAqB;AAAA,IACnB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,EACpB;AACF,CAAC;AAED,WAAW,cAAc;;;ACrPzB,OAAOC,WAAS,YAAAC,WAAU,eAAe;AACzC;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EAGA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,OACK;AAiDA,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,EAAE;AAEjD,QAAM,iBAAiB,QAAQ,MAAM;AACnC,QAAI,UAAU;AACZ,aAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,IAC3D;AACA,WAAO,QAAQ,CAAC,KAAe,IAAI,CAAC;AAAA,EACtC,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,QAAM,kBAAkB,QAAQ,MAAM;AACpC,WAAO,QAAQ,OAAO,CAAC,QAAQ,eAAe,SAAS,IAAI,EAAE,CAAC;AAAA,EAChE,GAAG,CAAC,SAAS,cAAc,CAAC;AAE5B,QAAM,kBAAkB,QAAQ,MAAM;AACpC,QAAI,CAAC,YAAY,KAAK,EAAG,QAAO;AAChC,UAAM,QAAQ,YAAY,YAAY;AACtC,WAAO,QAAQ;AAAA,MACb,CAAC,QACC,IAAI,MAAM,YAAY,EAAE,SAAS,KAAK,KACtC,IAAI,UAAU,YAAY,EAAE,SAAS,KAAK;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,SAAS,WAAW,CAAC;AAEzB,QAAM,qBAAqB,CAAC,UAAkB;AAC5C,mBAAe,KAAK;AACpB,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,OAAO,OAAO,CAAC;AAAA,IACxE;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,eAAuB;AAC3C,QAAI,UAAU;AACZ,YAAM,gBAAgB;AACtB,UAAI;AAEJ,UAAI,cAAc,SAAS,UAAU,GAAG;AACtC,oBAAY,cAAc,OAAO,CAAC,OAAO,OAAO,UAAU;AAAA,MAC5D,OAAO;AACL,YAAI,iBAAiB,cAAc,UAAU,eAAe;AAC1D;AAAA,QACF;AACA,oBAAY,CAAC,GAAG,eAAe,UAAU;AAAA,MAC3C;AAEA,UAAI,aAAa;AACf,iBAAS,KAAK,MAAM,WAAW,IAAI;AAAA,UACjC,GAAG;AAAA,UACH,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AACA,iBAAW,SAAS;AAAA,IACtB,OAAO;AACL,UAAI,aAAa;AACf,iBAAS,KAAK,MAAM,WAAW,IAAI;AAAA,UACjC,GAAG;AAAA,UACH,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AACA,iBAAW,UAAU;AACrB,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,UAAU;AACZ,UAAI,aAAa;AACf,iBAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,OAAO,CAAC,GAAG,OAAO,CAAC;AAAA,MAC5E;AACA,iBAAW,CAAC,CAAC;AAAA,IACf,OAAO;AACL,UAAI,aAAa;AACf,iBAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,OAAO,QAAW,OAAO,CAAC;AAAA,MACnF;AACA,iBAAW,EAAE;AAAA,IACf;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,YAAY,CAAC,WAAW;AAC3B,qBAAe,EAAE;AACjB,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,cAAU,KAAK;AACf,mBAAe,EAAE;AAAA,EACnB;AAEA,QAAM,eAAe,CAAC,EAAE,KAAK,MAAoD;AAC/E,UAAM,aAAa,eAAe,SAAS,KAAK,EAAE;AAElD,WACE,gBAAAC,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLC,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,aACb,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,YACjB,mBAAmB,MAAM,OAAO;AAAA,UAClC;AAAA,QACF;AAAA,QACA,SAAS,MAAM,aAAa,KAAK,EAAE;AAAA;AAAA,MAEnC,gBAAAF,QAAA,cAAC,UAAO,SAAS,IAAI,OAAM,YACxB,KAAK,YACJ,gBAAAA,QAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLD,SAAO;AAAA,YACP;AAAA,cACE,iBAAiB,aACb,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,YACnB;AAAA,UACF;AAAA;AAAA,QAEA,gBAAAF,QAAA,cAACI,OAAA,EAAK,OAAO,EAAE,UAAU,GAAG,KAAG,WAAE;AAAA,MACnC,IAEA,gBAAAJ,QAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLD,SAAO;AAAA,YACP;AAAA,cACE,iBAAiB,aACb,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,YACnB;AAAA,UACF;AAAA;AAAA,QAEA,gBAAAF,QAAA,cAACI,OAAA,EAAK,OAAO,EAAE,UAAU,GAAG,KACzB,KAAK,MAAM,OAAO,CAAC,EAAE,YAAY,CACpC;AAAA,MACF,GAGF,gBAAAJ,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOE,SAAO,iBAChC,gBAAAF,QAAA;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLF,SAAO;AAAA,YACP;AAAA,cACE,OAAO,aACH,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,YACnB;AAAA,YACA;AAAA,UACF;AAAA,UACA,eAAe;AAAA;AAAA,QAEd,KAAK;AAAA,MACR,GACC,KAAK,YACJ,gBAAAF,QAAA;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLF,SAAO;AAAA,YACP;AAAA,cACE,OAAO,aACH,GAAG,MAAM,OAAO,oBAAoB,CAAC,OACrC,MAAM,OAAO,kBAAkB;AAAA,YACrC;AAAA,UACF;AAAA,UACA,eAAe;AAAA;AAAA,QAEd,KAAK;AAAA,MACR,CAEJ,GAEC,cACC,gBAAAF,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,EAAE,OAAO,MAAM,OAAO,oBAAoB,EAAE;AAAA;AAAA,QACpD;AAAA,MAED,CAEJ;AAAA,MAEC,KAAK,YACJ,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOE,SAAO,YAC/B,OAAO,QAAQ,KAAK,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAC3C,gBAAAF,QAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,SAAS,aAAa,cAAc;AAAA,UACpC,MAAK;AAAA;AAAA,QAEJ;AAAA,MACH,CACD,CACH;AAAA,IAEJ;AAAA,EAEJ;AAEA,MAAI,WAAW;AACb,WACE,gBAAAA,QAAA,cAACG,QAAA,EAAK,OAAO,CAACD,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,sBAAqB,CAC7C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACG,QAAA,EAAK,OAAO,CAACD,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,gBAAAA,QAAA,cAACG,QAAA,EAAK,OAAO,CAACD,SAAO,WAAW,KAAK,KAEnC,gBAAAF,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,eAAe;AAAA,MACf,OAAO;AAAA,QACLC,SAAO;AAAA,QACP;AAAA,UACE,aAAa,MAAM,OAAO;AAAA,UAC1B,iBAAiB,MAAM,OAAO;AAAA,UAC9B,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,QAAA,cAACG,QAAA,EAAK,OAAOD,SAAO,iBACjB,gBAAgB,WAAW,IAC1B,gBAAAF,QAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLF,SAAO;AAAA,UACP;AAAA,YACE,OAAO,MAAM,OAAO,kBAAkB;AAAA,UACxC;AAAA,UACA;AAAA,QACF;AAAA,QACA,eAAe;AAAA;AAAA,MAEd;AAAA,IACH,IAEA,gBAAAF,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOE,SAAO,qBAC/B,gBAAgB,IAAI,CAAC,QACpB,gBAAAF,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAK,IAAI;AAAA,QACT,OAAO;AAAA,UACLD,SAAO;AAAA,UACP,EAAE,iBAAiB,MAAM,OAAO,QAAQ;AAAA,QAC1C;AAAA;AAAA,MAEA,gBAAAF,QAAA;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLF,SAAO;AAAA,YACP,EAAE,OAAO,MAAM,OAAO,oBAAoB,EAAE;AAAA,UAC9C;AAAA,UACA,eAAe;AAAA;AAAA,QAEd,IAAI;AAAA,MACP;AAAA,IACF,CACD,GACA,YAAY,iBACX,gBAAAF,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAC5E,gBAAgB,QAAO,KAAE,aAC5B,CAEJ,CAEJ;AAAA,IAEC,gBAAgB,SAAS,KAAK,CAAC,YAC9B,gBAAAA,QAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAOC,SAAO;AAAA,QACd,SAAS,EAAE,KAAK,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,GAAG;AAAA;AAAA,MAEpD,gBAAAF,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA;AAAA,QAClD;AAAA,MAED;AAAA,IACF;AAAA,IAGF,gBAAAA,QAAA,cAACI,OAAA,EAAK,OAAO,CAACF,SAAO,SAAS,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,CAAC,KAAG,QAE5E;AAAA,EACF,GAGA,gBAAAF,QAAA;AAAA,IAACK;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAW;AAAA,MACX,eAAc;AAAA,MACd,gBAAgB;AAAA;AAAA,IAEhB,gBAAAL,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,CAACE,SAAO,gBAAgB,EAAE,iBAAiB,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,MAG3E,gBAAAF,QAAA,cAACG,QAAA,EAAK,OAAO,CAACD,SAAO,aAAa,EAAE,mBAAmB,MAAM,OAAO,OAAO,CAAC,KAC1E,gBAAAF,QAAA,cAAC,UAAO,SAAQ,SAAQ,SAAS,eAAa,QAE9C,GACA,gBAAAA,QAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAC9D,WAAW,iBAAiB,aAC/B,GACA,gBAAAA,QAAA,cAAC,UAAO,SAAQ,WAAU,SAAS,eAAa,MAEhD,CACF;AAAA,MAGC,cACC,gBAAAA,QAAA,cAACG,QAAA,EAAK,OAAOD,SAAO,mBAClB,gBAAAF,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,cAAc;AAAA,UACd,aAAY;AAAA,UACZ,aAAa;AAAA;AAAA,MACf,CACF;AAAA,MAID,gBAAgB,WAAW,IAC1B,gBAAAA,QAAA,cAAC,cAAW,SAAQ,uBAAsB,IAE1C,gBAAAA,QAAA;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,cAAc,CAAC,SAAS,KAAK;AAAA,UAC7B,YAAY;AAAA,UACZ,uBAAuBJ,SAAO;AAAA;AAAA,MAChC;AAAA,IAEJ;AAAA,EACF,CACF;AAEJ;AAEA,IAAMA,WAASK,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,mBAAmB;AAAA,EACrB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF,CAAC;AAED,eAAe,cAAc;;;ACxf7B,OAAOC,WAAS,YAAAC,WAAU,mBAAmB;AAC7C,SAAS,QAAAC,QAAM,cAAAC,cAAY,oBAAAC,0BAAmC;AAkDvD,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA,WAAW;AACb,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAG7B,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB;AAAA,IACzB,CAAC,OAAe,UAAyB;AACvC,wBAAkB,CAAC,SAAS;AAC1B,YAAI,UAAU,QAAQ,UAAU,MAAM,UAAU,OAAO;AACrD,gBAAM,OAAO,EAAE,GAAG,KAAK;AACvB,iBAAO,KAAK,KAAK;AACjB,iBAAO;AAAA,QACT;AACA,eAAO,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM;AAAA,MACnC,CAAC;AAGD,uBAAiB,OAAO,UAAU,QAAQ,OAAO,KAAK;AAGtD,eAAS,KAAK,aAAa;AAAA,QACzB;AAAA,QACA;AAAA,QACA,OAAO,UAAU,QAAQ,OAAO;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,gBAAgB,UAAU,QAAQ,KAAK;AAAA,EAC1C;AAEA,QAAM,iBAAiB,YAAY,MAAM;AACvC,sBAAkB,CAAC,CAAC;AAGpB,iBAAa;AAGb,aAAS,KAAK,oBAAoB,EAAE,QAAQ,MAAM,CAAC;AAAA,EACrD,GAAG,CAAC,YAAY,UAAU,QAAQ,KAAK,CAAC;AAExC,QAAM,oBAAoB,OAAO,KAAK,cAAc,EAAE;AAEtD,QAAM,qBAAqB,CAAC,WAA6C;AACvE,WAAO;AAAA,MACL,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,MAC7B,GAAI,OAAO,SAAS,IAAI,CAAC,SAAS;AAAA,QAChC,OAAO;AAAA,QACP,OAAO;AAAA,MACT,EAAE,KAAK,CAAC;AAAA,IACV;AAAA,EACF;AAGA,MAAI,YAAY,SAAS;AACvB,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAM;AAAA,QACN,OAAO,CAACC,SAAO,gBAAgB,SAAS,CAAC,CAAC;AAAA;AAAA,MAEzC,YACC,gBAAAD,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KAAG,WAEvE;AAAA,MAED,QAAQ,IAAI,CAAC,WACZ,gBAAAA,QAAA,cAAC,UAAO,KAAK,OAAO,OAAO,SAAS,GAAG,OAAM,YAC3C,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,QAErC,OAAO;AAAA,QAAM;AAAA,MAChB,GACA,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOC,SAAO,aAChC,gBAAAD,QAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,SAAS,MAAM,mBAAmB,OAAO,OAAO,IAAI;AAAA,UACpD,OAAO;AAAA,YACLD,SAAO;AAAA,YACP;AAAA,cACE,iBAAiB,CAAC,eAAe,OAAO,KAAK,IACzC,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,cACjB,aAAa,MAAM,OAAO;AAAA,YAC5B;AAAA,UACF;AAAA;AAAA,QAEA,gBAAAD,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO;AAAA,cACL,OAAO,CAAC,eAAe,OAAO,KAAK,IAC/B,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO,kBAAkB;AAAA,YACrC;AAAA;AAAA,UACD;AAAA,QAED;AAAA,MACF,GACC,OAAO,SAAS,IAAI,CAAC,WACpB,gBAAAA,QAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,SAAS,MAAM,mBAAmB,OAAO,OAAO,MAAM;AAAA,UACtD,OAAO;AAAA,YACLD,SAAO;AAAA,YACPA,SAAO;AAAA,YACP;AAAA,cACE,iBACE,eAAe,OAAO,KAAK,MAAM,SAC7B,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,cACnB,aAAa,MAAM,OAAO;AAAA,YAC5B;AAAA,UACF;AAAA;AAAA,QAEA,gBAAAD,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO;AAAA,cACL,OACE,eAAe,OAAO,KAAK,MAAM,SAC7B,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO,kBAAkB;AAAA,YACvC;AAAA;AAAA,UAEC;AAAA,QACH;AAAA,MACF,CACD,CACH,CACF,CACD;AAAA,MAGA,oBAAoB,KACnB,gBAAAA,QAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,kBAAgB,OAE3D;AAAA,IAEJ;AAAA,EAEJ;AAGA,MAAI,YAAY,YAAY;AAC1B,WACE,gBAAAA,QAAA,cAAC,UAAO,SAAS,IAAI,OAAO,CAACC,SAAO,mBAAmB,SAAS,CAAC,CAAC,KAC/D,YACC,gBAAAD,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACxB,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KAAG,WAEvE,GACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MACvC;AAAA,IAED,CACF,GAED,QAAQ,IAAI,CAAC,WACZ,gBAAAA,QAAA,cAAC,UAAO,KAAK,OAAO,OAAO,SAAS,KAClC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MAErC,OAAO;AAAA,IACV,GACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,eAAe,OAAO,KAAK,KAAK;AAAA,QACvC,UAAU,CAAC,aACT,mBAAmB,OAAO,OAAO,QAAQ;AAAA,QAE3C,SAAS,mBAAmB,MAAM;AAAA;AAAA,IACpC,CACF,CACD,GACA,oBAAoB,KACnB,gBAAAA,QAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,kBAAgB,WAE3D,CAEJ;AAAA,EAEJ;AAGA,MAAI,YAAY,WAAW;AACzB,WACE,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAM;AAAA,QACN,OAAO,CAACC,SAAO,kBAAkB,SAAS,CAAC,CAAC;AAAA;AAAA,MAE3C,YACC,gBAAAD,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KAAG,WAEvE;AAAA,MAED,QAAQ,IAAI,CAAC,WACZ,gBAAAA,QAAA,cAACG,QAAA,EAAK,KAAK,OAAO,OAAO,OAAOF,SAAO,iBACrC,gBAAAD,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,eAAe,OAAO,KAAK,KAAK;AAAA,UACvC,UAAU,CAAC,aACT,mBAAmB,OAAO,OAAO,QAAQ;AAAA,UAE3C,SAAS;AAAA,YACP,EAAE,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG;AAAA,YAC7C,GAAI,OAAO,SAAS,IAAI,CAAC,SAAS;AAAA,cAChC,OAAO;AAAA,cACP,OAAO;AAAA,YACT,EAAE,KAAK,CAAC;AAAA,UACV;AAAA;AAAA,MACF,CACF,CACD;AAAA,MAGA,oBAAoB,KACnB,gBAAAA,QAAA,cAAAA,QAAA,gBACG,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;AACtD,cAAM,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AACvD,eACE,gBAAAA,QAAA;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,SAAS,MAAM,mBAAmB,OAAO,IAAI;AAAA;AAAA,UAE7C,gBAAAF,QAAA,cAAC,SAAM,SAAQ,WAAU,MAAK,QAC3B,WAAW,OAAM,MAAG,OAAM,SAC7B;AAAA,QACF;AAAA,MAEJ,CAAC,GACD,gBAAAA,QAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,kBAAgB,WAE3D,CACF;AAAA,IAEJ;AAAA,EAEJ;AAGA,SACE,gBAAAA,QAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLF,SAAO;AAAA,QACP;AAAA,UACE,iBAAiB,MAAM,OAAO;AAAA,UAC9B,aAAa,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAD,QAAA,cAAC,UAAO,SAAS,IAAI,OAAM,UAAS,OAAOC,SAAO,kBAC/C,YACC,gBAAAD,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACxB,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KAAG,WAEvE,GACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MACvC;AAAA,IAED,CACF,GAID,QAAQ,IAAI,CAAC,WACZ,gBAAAA,QAAA,cAAC,UAAO,KAAK,OAAO,OAAO,SAAS,KAClC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MAErC,OAAO;AAAA,IACV,GACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,eAAe,OAAO,KAAK,KAAK;AAAA,QACvC,UAAU,CAAC,aACT,mBAAmB,OAAO,OAAO,QAAQ;AAAA,QAE3C,SAAS,mBAAmB,MAAM;AAAA;AAAA,IACpC,CACF,CACD,GAGA,oBAAoB,KACnB,gBAAAA,QAAA,cAAC,UAAO,SAAS,IAAI,OAAM,UAAS,OAAOC,SAAO,gBAChD,gBAAAD,QAAA,cAAC,SAAM,SAAQ,WAAU,MAAK,QAC3B,mBAAkB,SACrB,GACA,gBAAAA,QAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,kBAAgB,WAE3D,CACF,CAEJ;AAAA,EACF;AAEJ;AAEA,IAAMC,WAASG,aAAW,OAAO;AAAA,EAC/B,gBAAgB;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,YAAY;AAAA,EACd;AACF,CAAC;AAED,YAAY,cAAc;;;ACnZ1B,OAAOC,WAAS,WAAAC,UAAS,eAAAC,oBAAmB;AAC5C,SAAS,QAAAC,QAAM,cAAAC,cAAuB,oBAAAC,0BAAwB;AAyD9D,IAAM,uBAAuB,CAAC,UAAyD;AAAA,EACrF,EAAE,OAAO,IAAI,OAAO,MAAM,OAAO,MAAM;AAAA,EACvC,EAAE,OAAO,IAAI,OAAO,MAAM,OAAO,QAAQ;AAAA,EACzC,EAAE,OAAO,KAAK,OAAO,MAAM,OAAO,QAAQ;AAC5C;AAEA,SAAS,iBACP,OACA,KACA,YACA,OACQ;AACR,QAAM,aAAc,QAAQ,MAAO;AACnC,aAAW,aAAa,YAAY;AAClC,QAAI,cAAc,UAAU,OAAO;AACjC,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACA,SAAO,WAAW,WAAW,SAAS,CAAC,GAAG,SAAS,MAAM,OAAO;AAClE;AAEO,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,MAAM;AAAA,EACN,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,aAAaC;AAAA,IACjB,MAAM,kBAAkB,qBAAqB,KAAK;AAAA,IAClD,CAAC,gBAAgB,KAAK;AAAA,EACxB;AAEA,QAAM,eAAeC;AAAA,IACnB,CAAC,WAAwB;AACvB,UAAI,OAAO,OAAO;AAChB,iBAAS,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE,OAAO,OAAO,CAAC;AAAA,MACvD;AACA,UAAI,OAAO,aAAa;AACtB,iBAAS,KAAK,eAAe,EAAE,IAAI,OAAO,YAAY,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,IACA,CAAC,UAAU,OAAO,MAAM;AAAA,EAC1B;AAGA,QAAM,gBAAgB,CAAC,WAAwB,MAAM;AACnD,iBAAa,MAAM;AAAA,EACrB;AAEA,QAAM,aAAaD,SAAQ,MAAM;AAC/B,UAAM,QAAQ,MAAM;AACpB,QAAI,SAAS,EAAG,QAAO;AACvB,WAAO,KAAK,IAAI,KAAK,KAAM,QAAQ,OAAO,QAAS,KAAK,CAAC,GAAG,GAAG;AAAA,EACjE,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC;AAEpB,QAAM,cAAcA;AAAA,IAClB,MAAM,iBAAiB,OAAO,KAAK,YAAY,KAAK;AAAA,IACpD,CAAC,OAAO,KAAK,YAAY,KAAK;AAAA,EAChC;AAEA,QAAM,eAAeA,SAAQ,MAAM;AACjC,UAAM,YAAY,OAAO,UAAU,KAAK,IAAI,MAAM,SAAS,IAAI,MAAM,QAAQ,CAAC;AAC9E,WAAO,OAAO,GAAG,SAAS,GAAG,IAAI,KAAK;AAAA,EACxC,GAAG,CAAC,OAAO,IAAI,CAAC;AAEhB,MAAI,WAAW;AACb,WACE,gBAAAE,QAAA,cAAC,QAAK,OAAO,CAACC,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,QAAA,cAAC,gBAAa,SAAQ,oBAAmB,CAC3C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACC,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,MAAI,YAAY,aAAa;AAC3B,UAAM,iBAAiB,KAAK,MAAO,aAAa,MAAO,QAAQ;AAE/D,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACC,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,QAAA,cAAC,UAAO,SAAS,MACb,SAAS,cACT,gBAAAA,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAM,YACnC,SACC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MAErC;AAAA,IACH,GAED,aACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,YAAY,MAAM,KACnD,YACH,CAEJ,GAEF,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOC,SAAO,qBAC/B,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ;AAChD,YAAM,WAAW,MAAM;AACvB,YAAM,WAAW,WACb;AAAA,SACI,MAAM,KAAK,WAAY;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,MACF,IACA;AACJ,aACE,gBAAAD,QAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAO;AAAA,YACLD,SAAO;AAAA,YACP;AAAA,cACE,iBAAiB,WACb,WACA,MAAM,OAAO;AAAA,YACnB;AAAA,UACF;AAAA;AAAA,MACF;AAAA,IAEJ,CAAC,CACH,GAEC,WAAW,KAAK,CAAC,MAAM,EAAE,KAAK,KAC7B,gBAAAD,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAOC,SAAO,mBAC3C,WAAW,IAAI,CAAC,GAAG,QAClB,gBAAAD,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,SAAQ;AAAA,QACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,MAErC,EAAE,SAAS;AAAA,IACd,CACD,CACH,GAED,WAAW,QAAQ,SAAS,KAC3B,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOC,SAAO,oBAC/B,QAAQ,IAAI,CAAC,QAAQ,QACpB,gBAAAD,QAAA,cAACG,oBAAA,EAAiB,KAAK,KAAK,SAAS,cAAc,MAAM,KACvD,gBAAAH,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,OAAO,WAAW;AAAA,QAC3B,MAAK;AAAA;AAAA,MAEJ,OAAO;AAAA,IACV,CACF,CACD,CACH,CAEJ,CACF;AAAA,EAEJ;AAGA,SACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACC,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,QAAA,cAAC,UAAO,SAAS,MACb,SAAS,cACT,gBAAAA,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAM,YACnC,SACC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,MAAM,OAAO,kBAAkB;AAAA;AAAA,IAErC;AAAA,EACH,GAED,aACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,YAAY,MAAM,KACnD,YACH,CAEJ,GAEF,gBAAAA,QAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLD,SAAO;AAAA,QACP;AAAA,UACE,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAD,QAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACLD,SAAO;AAAA,UACP;AAAA,YACE,OAAO,GAAG,UAAU;AAAA,YACpB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EACF,GAEA,gBAAAD,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAOC,SAAO,eAC5C,gBAAAD,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KACjE,KACA,OAAO,IAAI,IAAI,KAAK,EACvB,GACA,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,MAAM,OAAO,kBAAkB,KACjE,KACA,OAAO,IAAI,IAAI,KAAK,EACvB,CACF,GACC,WAAW,QAAQ,SAAS,KAC3B,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOC,SAAO,oBAC/B,QAAQ,IAAI,CAAC,QAAQ,QACpB,gBAAAD,QAAA,cAACG,oBAAA,EAAiB,KAAK,KAAK,SAAS,cAAc,MAAM,KACvD,gBAAAH,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,OAAO,WAAW;AAAA,MAC3B,MAAK;AAAA;AAAA,IAEJ,OAAO;AAAA,EACV,CACF,CACD,CACH,CAEJ,CACF;AAEJ;AAEA,IAAMC,WAASG,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,kBAAkB;AAAA,IAChB,WAAW;AAAA,EACb;AACF,CAAC;AAED,MAAM,cAAc;;;AC9VpB,OAAOC,aAAW;AAClB,SAAS,QAAAC,QAAM,oBAAAC,oBAAkB,cAAAC,oBAA6B;AAoCvD,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AACd,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,mBAAmB,CAAC,SAAiB;AACzC,QAAI,OAAO,KAAK,OAAO,cAAc,SAAS,aAAa;AACzD;AAAA,IACF;AAEA,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,WAAW,CAAC;AAAA,IACzD;AACA,mBAAe,IAAI;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,oBAAmB,CAC3C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAkB,MAAgB;AACtC,UAAM,QAAkB,CAAC;AACzB,UAAM,cAAc,KAAK,MAAM,kBAAkB,CAAC;AAClD,QAAI,YAAY,KAAK,IAAI,GAAG,cAAc,WAAW;AACrD,UAAM,UAAU,KAAK,IAAI,YAAY,YAAY,kBAAkB,CAAC;AAEpE,QAAI,UAAU,YAAY,IAAI,iBAAiB;AAC7C,kBAAY,KAAK,IAAI,GAAG,UAAU,kBAAkB,CAAC;AAAA,IACvD;AAEA,aAAS,IAAI,WAAW,KAAK,SAAS,KAAK;AACzC,YAAM,KAAK,CAAC;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,gBAAgB;AACrC,QAAM,YAAY,cAAc;AAChC,QAAM,YAAY,cAAc;AAEhC,SACE,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,UAAS,SAAQ,UAAS,OAAO,CAACE,SAAO,WAAW,SAAS,CAAC,CAAC,KACtF,iBACC,gBAAAF,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAU,CAAC;AAAA,MACX,SAAS,MAAM,iBAAiB,CAAC;AAAA;AAAA,IAEhC;AAAA,EACH,GAGF,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAU,CAAC;AAAA,MACX,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA;AAAA,IAE9C;AAAA,EACH,GAEC,aAAa,CAAC,IAAI,KACjB,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,YAClB,gBAAAF,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,MAAM,OAAO,kBAAkB,KAAG,KAEpE,CACF,GAGD,aAAa,IAAI,CAAC,SAAS;AAC1B,UAAM,WAAW,SAAS;AAC1B,WACE,gBAAAA,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,SAAS,MAAM,iBAAiB,IAAI;AAAA,QACpC,OAAO;AAAA,UACLD,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,WACb,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,YACjB,aAAa,MAAM,OAAO;AAAA,UAC5B;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAF,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,WACH,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,UACnB;AAAA;AAAA,QAEC;AAAA,MACH;AAAA,IACF;AAAA,EAEJ,CAAC,GAEA,aAAa,aAAa,SAAS,CAAC,IAAI,cACvC,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,YAClB,gBAAAF,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,MAAM,OAAO,kBAAkB,KAAG,KAEpE,CACF,GAGF,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAU,CAAC;AAAA,MACX,SAAS,MAAM,iBAAiB,cAAc,CAAC;AAAA;AAAA,IAE9C;AAAA,EACH,GAEC,iBACC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAU,CAAC;AAAA,MACX,SAAS,MAAM,iBAAiB,UAAU;AAAA;AAAA,IAEzC;AAAA,EACH,CAEJ;AAEJ;AAEA,IAAME,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,WAAW,cAAc;;;AC3NzB,OAAOC,aAAW;AAClB,SAAS,QAAAC,QAAM,cAAAC,oBAA6B;AAyC5C,IAAM,gBAAgB,CAAC,YAAuC;AAC5D,QAAM,WAA8B,CAAC;AACrC,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,MAAI,IAAI;AAER,SAAO,IAAI,MAAM,QAAQ;AACvB,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,cAAc,KAAK,KAAK;AAG9B,QAAI,gBAAgB,IAAI;AACtB;AACA;AAAA,IACF;AAGA,QAAI,qBAAqB,KAAK,WAAW,GAAG;AAC1C,eAAS,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC;AACA;AAAA,IACF;AAGA,UAAM,eAAe,YAAY,MAAM,mBAAmB;AAC1D,QAAI,cAAc;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,OAAO,aAAa,CAAC,EAAE;AAAA,QACvB,SAAS,oBAAoB,aAAa,CAAC,CAAC;AAAA,MAC9C,CAAC;AACD;AACA;AAAA,IACF;AAGA,UAAM,iBAAiB,YAAY,MAAM,WAAW;AACpD,QAAI,gBAAgB;AAClB,YAAM,WAAW,eAAe,CAAC,KAAK;AACtC,YAAM,YAAsB,CAAC;AAC7B;AACA,aAAO,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,GAAG;AAC1D,kBAAU,KAAK,MAAM,CAAC,CAAC;AACvB;AAAA,MACF;AACA,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN;AAAA,QACA,SAAS,UAAU,KAAK,IAAI;AAAA,MAC9B,CAAC;AACD;AACA;AAAA,IACF;AAGA,QAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,YAAM,aAAuB,CAAC;AAC9B,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,GAAG;AAC1D,mBAAW,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;AACnD;AAAA,MACF;AACA,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,oBAAoB,WAAW,KAAK,GAAG,CAAC;AAAA,MACnD,CAAC;AACD;AAAA,IACF;AAGA,UAAM,mBAAmB,YAAY,MAAM,kBAAkB;AAC7D,QAAI,kBAAkB;AACpB,YAAM,QAAkB,CAAC;AACzB,aAAO,IAAI,MAAM,QAAQ;AACvB,cAAM,cAAc,MAAM,CAAC,EAAE,KAAK;AAClC,cAAM,YAAY,YAAY,MAAM,gBAAgB;AACpD,YAAI,WAAW;AACb,gBAAM,KAAK,oBAAoB,UAAU,CAAC,CAAC,CAAC;AAC5C;AAAA,QACF,WAAW,gBAAgB,IAAI;AAC7B;AACA;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAAA,MACF;AACA,eAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,MAAM,MAAM,CAAC;AACpD;AAAA,IACF;AAGA,UAAM,qBAAqB,YAAY,MAAM,mBAAmB;AAChE,QAAI,oBAAoB;AACtB,YAAM,QAAkB,CAAC;AACzB,aAAO,IAAI,MAAM,QAAQ;AACvB,cAAM,cAAc,MAAM,CAAC,EAAE,KAAK;AAClC,cAAM,YAAY,YAAY,MAAM,mBAAmB;AACvD,YAAI,WAAW;AACb,gBAAM,KAAK,oBAAoB,UAAU,CAAC,CAAC,CAAC;AAC5C;AAAA,QACF,WAAW,gBAAgB,IAAI;AAC7B;AACA;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAAA,MACF;AACA,eAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,OAAO,MAAM,CAAC;AACrD;AAAA,IACF;AAGA,UAAM,iBAA2B,CAAC;AAClC,WAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AACjD,qBAAe,KAAK,MAAM,CAAC,CAAC;AAC5B;AAAA,IACF;AACA,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,oBAAoB,eAAe,KAAK,GAAG,CAAC;AAAA,IACvD,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKA,IAAM,sBAAsB,CAAC,SAAyB;AAEpD,MAAI,SAAS,KAAK,QAAQ,cAAc,gBAAM;AAG9C,WAAS,OAAO,QAAQ,gCAAgC,kBAAQ;AAGhE,WAAS,OAAO,QAAQ,0BAA0B,kBAAQ;AAG1D,WAAS,OAAO,QAAQ,4BAA4B,oBAAU;AAG9D,WAAS,OAAO,QAAQ,6BAA6B,aAAa;AAElE,SAAO;AACT;AAKA,IAAM,sBAAsB,CAAC,SAAiB,UAAwD;AACpG,QAAM,QAA2B,CAAC;AAClC,MAAI,YAAY;AAChB,MAAI,MAAM;AAEV,QAAM,WAAW;AAAA,IACf,EAAE,OAAO,cAAc,MAAM,OAAgB;AAAA,IAC7C,EAAE,OAAO,cAAc,MAAM,OAAgB;AAAA,IAC7C,EAAE,OAAO,cAAc,MAAM,SAAkB;AAAA,EACjD;AAEA,SAAO,UAAU,SAAS,GAAG;AAC3B,QAAI,gBAAoG;AAExG,eAAW,WAAW,UAAU;AAC9B,cAAQ,MAAM,YAAY;AAC1B,YAAM,QAAQ,QAAQ,MAAM,KAAK,SAAS;AAC1C,UAAI,UAAU,kBAAkB,QAAQ,MAAM,QAAQ,cAAc,QAAQ;AAC1E,wBAAgB,EAAE,OAAO,MAAM,OAAO,OAAO,MAAM,QAAQ,KAAK;AAAA,MAClE;AAAA,IACF;AAEA,QAAI,eAAe;AAEjB,UAAI,cAAc,QAAQ,GAAG;AAC3B,cAAM;AAAA,UACJ,gBAAAC,QAAA,cAAC,cAAW,KAAK,OAAO,SAAQ,UAC7B,UAAU,MAAM,GAAG,cAAc,KAAK,CACzC;AAAA,QACF;AAAA,MACF;AAGA,YAAMC,WAAU,cAAc,MAAM,CAAC;AACrC,cAAQ,cAAc,MAAM;AAAA,QAC1B,KAAK;AACH,gBAAM;AAAA,YACJ,gBAAAD,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAO;AAAA,kBACL,YAAY;AAAA,kBACZ,iBAAiB,MAAM,OAAO;AAAA,kBAC9B,mBAAmB;AAAA,kBACnB,iBAAiB;AAAA,kBACjB,cAAc;AAAA,gBAChB;AAAA;AAAA,cAECC;AAAA,YACH;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,gBAAM;AAAA,YACJ,gBAAAD,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAO,EAAE,YAAY,MAAM;AAAA;AAAA,cAE1BC;AAAA,YACH;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,gBAAM;AAAA,YACJ,gBAAAD,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAO,EAAE,WAAW,SAAS;AAAA;AAAA,cAE5BC;AAAA,YACH;AAAA,UACF;AACA;AAAA,MACJ;AAEA,kBAAY,UAAU,MAAM,cAAc,QAAQ,cAAc,MAAM,CAAC,EAAE,MAAM;AAAA,IACjF,OAAO;AAEL,YAAM;AAAA,QACJ,gBAAAD,QAAA,cAAC,cAAW,KAAK,OAAO,SAAQ,UAC7B,SACH;AAAA,MACF;AACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAWA,QAAM,QAAQ,MAAM,cAAc,OAAO,GAAG,CAAC,OAAO,CAAC;AAEtE,MAAI,WAAW;AACb,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACE,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,sBAAqB,CAC7C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACE,SAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,gBAA2C;AAAA,IAC/C,MAAM,EAAE,SAAS,EAAE;AAAA,IACnB,IAAI,EAAE,SAAS,GAAG;AAAA,IAClB,IAAI,EAAE,SAAS,GAAG;AAAA,IAClB,IAAI,EAAE,SAAS,GAAG;AAAA,EACpB;AAEA,QAAM,gBAAgB,CAAC,SAA0B,UAAmC;AAClF,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,cAAM,aAAiE;AAAA,UACrE,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AACA,eACE,gBAAAA,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,SAAS,WAAW,QAAQ,KAAK,KAAK;AAAA,YACtC,OAAO;AAAA,cACLE,SAAO;AAAA,cACP,QAAQ,QAAQ,KAAK,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA,YACjE;AAAA;AAAA,UAEC,QAAQ;AAAA,QACX;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAF,QAAA,cAACG,QAAA,EAAK,KAAK,OAAO,OAAOD,SAAO,aAC7B,oBAAoB,QAAQ,SAAS,KAAK,CAC7C;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAF,QAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,cACLD,SAAO;AAAA,cACP,EAAE,iBAAiB,MAAM,OAAO,MAAM;AAAA,YACxC;AAAA;AAAA,UAEC,QAAQ,YACP,gBAAAF,QAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,OAAO;AAAA,gBACL,OAAO,MAAM,OAAO,kBAAkB;AAAA,gBACtC,cAAc;AAAA,gBACd,eAAe;AAAA,cACjB;AAAA;AAAA,YAEC,QAAQ;AAAA,UACX;AAAA,UAEF,gBAAAA,QAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,OAAO,MAAM,OAAO;AAAA,cACtB;AAAA;AAAA,YAEC,QAAQ;AAAA,UACX;AAAA,QACF;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAA,QAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,cACLD,SAAO;AAAA,cACP;AAAA,gBACE,iBAAiB,MAAM,OAAO;AAAA,gBAC9B,iBAAiB,MAAM,OAAO;AAAA,cAChC;AAAA,YACF;AAAA;AAAA,UAEA,gBAAAF,QAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA;AAAA,YAEhD,QAAQ;AAAA,UACX;AAAA,QACF;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAA,QAAA,cAACG,QAAA,EAAK,KAAK,OAAO,OAAOD,SAAO,QAC7B,QAAQ,MAAM,IAAI,CAAC,MAAM,cACxB,gBAAAF,QAAA,cAACG,QAAA,EAAK,KAAK,WAAW,OAAOD,SAAO,YAClC,gBAAAF,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO;AAAA,cACLE,SAAO;AAAA,cACP,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,YAChC;AAAA;AAAA,UAEC,QAAQ,UAAU,GAAG,YAAY,CAAC,MAAM;AAAA,QAC3C,GACA,gBAAAF,QAAA,cAACG,QAAA,EAAK,OAAOD,SAAO,mBACjB,oBAAoB,MAAM,KAAK,CAClC,CACF,CACD,CACH;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAF,QAAA;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,cACLD,SAAO;AAAA,cACP,EAAE,iBAAiB,MAAM,OAAO,OAAO;AAAA,YACzC;AAAA;AAAA,QACF;AAAA,MAGJ;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,SACE,gBAAAF,QAAA,cAAC,QAAK,OAAO,CAACE,SAAO,WAAW,SAAS,CAAC,CAAC,GAAG,SAAQ,UACpD,gBAAAF,QAAA,cAAC,UAAO,SAAS,IAAI,OAAO,CAACE,SAAO,SAAS,cAAc,OAAO,CAAC,KAChE,SAAS,IAAI,CAAC,SAAS,UAAU,cAAc,SAAS,KAAK,CAAC,CACjE,CACF;AAEJ;AAEA,IAAMA,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,gBAAgB;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,gBAAgB,cAAc;;;AC5e9B,OAAOC,aAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAyCA,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,MAAM;AACJ,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAc,gBAAgB;AACpC,QAAM,aAAa,gBAAgB,aAAa;AAEhD,QAAM,aAAa,MAAM;AACvB,QAAI,aAAa;AACf,eAAS,KAAK,oBAAoB,EAAE,MAAM,aAAa,OAAO,CAAC;AAC/D,iBAAW;AAAA,IACb,OAAO;AACL,eAAS,KAAK,kBAAkB,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC;AACjE,eAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,cAAc,YAAY;AAC5B,eAAS,KAAK,sBAAsB,EAAE,MAAM,aAAa,OAAO,CAAC;AACjE,mBAAa;AAAA,IACf,OAAO;AACL,eAAS,KAAK,kBAAkB,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC;AACjE,eAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,WAAmC;AAC7D,QAAI,OAAO,OAAO;AAChB,eAAS,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE,MAAM,aAAa,OAAO,CAAC;AAAA,IACnE;AAAA,EACF;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,uBAAuB,eAAe,OAAO,CAAC,WAAW,CAAC,OAAO,MAAM,KAAK,CAAC;AAEnF,SACE,gBAAAA,QAAA,cAAC,UAAO,SAAS,IAAI,SAAQ,iBAAgB,OAAO,CAACE,SAAO,WAAW,KAAkB,KACvF,gBAAAF,QAAA,cAAC,UAAO,SAAS,KACb,eAAe,cAAe,CAAC,cAC/B,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU,eAAe,CAAC,aAAa,OAAO,CAAC;AAAA,MAC/C,QAAQ,cAAc,kBAAkB;AAAA;AAAA,IAEvC,cAAc,cAAc;AAAA,EAC/B,IACE,MAEH,qBAAqB,IAAI,CAAC,QAAQ,UACjC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,GAAG,OAAO,KAAK,IAAI,KAAK;AAAA,MAC7B,SAAS,OAAO,WAAW;AAAA,MAC3B,SAAS,MAAM,mBAAmB,MAAM;AAAA,MACxC,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA;AAAA,IAEd,OAAO;AAAA,EACV,CACD,CACH,GAEA,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU,CAAC;AAAA,MACX,QAAQ,cAAc,aAAa,oBAAoB;AAAA;AAAA,IAEtD,cAAc,aAAa,gBAAgB;AAAA,EAC9C,CACF;AAEJ;AAEA,IAAME,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,IACP,iBAAiB;AAAA,EACnB;AACF,CAAC;AAED,iBAAiB,cAAc;;;ACjK/B,OAAOC,aAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AAiCA,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,YAAa,cAAc,KAAK,MAAM,SAAU;AAEtD,QAAM,kBAAkB,CAAC,UAAkB;AACzC,QAAI,CAAC,gBAAiB;AACtB,QAAI,QAAQ,YAAa;AAEzB,aAAS,KAAK,yBAAyB,EAAE,MAAM,OAAO,OAAO,CAAC;AAC9D,kBAAc,KAAK;AAAA,EACrB;AAEA,QAAM,gBAAgB,CAAC,UAAsD;AAC3E,QAAI,UAAU,YAAa,QAAO;AAClC,QAAI,QAAQ,YAAa,QAAO;AAChC,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,CAAC,WAA+C;AACnE,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO;AAAA,UACL,YAAY,MAAM,OAAO;AAAA,UACzB,MAAM,MAAM,OAAO,oBAAoB;AAAA,UACvC,QAAQ,MAAM,OAAO;AAAA,QACvB;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,YAAY,MAAM,OAAO;AAAA,UACzB,MAAM,MAAM,OAAO,oBAAoB;AAAA,UACvC,QAAQ,MAAM,OAAO;AAAA,QACvB;AAAA,MACF,KAAK;AAAA,MACL;AACE,eAAO;AAAA,UACL,YAAY,MAAM,OAAO;AAAA,UACzB,MAAM,MAAM,OAAO,kBAAkB;AAAA,UACrC,QAAQ,MAAM,OAAO;AAAA,QACvB;AAAA,IACJ;AAAA,EACF;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,aAAa,MACjB,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,SAAQ,UAAS,OAAOE,SAAO,iBAChD,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,SAAS,cAAc,KAAK;AAClC,UAAM,SAAS,aAAa,MAAM;AAClC,UAAM,WAAW,mBAAmB,SAAS;AAE7C,WACE,gBAAAF,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,SAAS,MAAM,gBAAgB,KAAK;AAAA,QACpC,UAAU,CAAC;AAAA,QACX,OAAO;AAAA,UACLD,SAAO;AAAA,UACP;AAAA,YACE,iBAAiB,OAAO;AAAA,YACxB,aAAa,OAAO;AAAA,UACtB;AAAA,UACA,YAAYA,SAAO;AAAA,QACrB;AAAA,QACA,eAAe;AAAA;AAAA,MAEd,WAAW,cACV,gBAAAF,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,OAAO,MAAM,YAAY,MAAM,KAAG,QAEhF,IAEA,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,UAAU,EAAE,iBAAiB,OAAO,WAAW,CAAC,GAAG;AAAA,IAE5E;AAAA,EAEJ,CAAC,CACH;AAGF,QAAM,gBAAgB,MACpB,gBAAAF,QAAA,cAAC,UAAO,SAAS,IAAI,SAAQ,UAAS,OAAOE,SAAO,oBACjD,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,SAAS,cAAc,KAAK;AAClC,UAAM,SAAS,aAAa,MAAM;AAClC,UAAM,WAAW,mBAAmB,SAAS;AAE7C,WACE,gBAAAF,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,SAAS,MAAM,gBAAgB,KAAK;AAAA,QACpC,UAAU,CAAC;AAAA,QACX,eAAe;AAAA,QACf,OAAOD,SAAO;AAAA;AAAA,MAEd,gBAAAF,QAAA,cAAC,UAAO,OAAM,UAAS,SAAS,KAC9B,gBAAAA,QAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLC,SAAO;AAAA,YACP;AAAA,cACE,iBAAiB,OAAO;AAAA,cACxB,aAAa,OAAO;AAAA,YACtB;AAAA,YACA,YAAYA,SAAO;AAAA,UACrB;AAAA;AAAA,QAEA,gBAAAF,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,OAAO,MAAM,YAAY,MAAM,KACvE,WAAW,cAAc,WAAM,QAAQ,CAC1C;AAAA,MACF,GACC,cACC,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,WAAW,WAAW,MAAM,OAAO,aAAa,MAAM,OAAO,kBAAkB;AAAA,YACtF,YAAY,WAAW,WAAW,QAAQ;AAAA,YAC1C,WAAW;AAAA,YACX,UAAU;AAAA,UACZ;AAAA,UACA,eAAe;AAAA;AAAA,QAEd,KAAK;AAAA,MACR,GAED,oBAAoB,KAAK,eACxB,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,MAAM,OAAO,kBAAkB;AAAA,YACtC,UAAU;AAAA,YACV,WAAW;AAAA,YACX,UAAU;AAAA,UACZ;AAAA,UACA,eAAe;AAAA;AAAA,QAEd,KAAK;AAAA,MACR,GAED,KAAK,YACJ,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,OAAO;AAAA,YACL,OAAO,MAAM,OAAO,kBAAkB;AAAA,YACtC,UAAU;AAAA,YACV,WAAW;AAAA,UACb;AAAA;AAAA,QACD;AAAA,MAED,CAEJ;AAAA,IACF;AAAA,EAEJ,CAAC,CACH;AAGF,QAAM,YAAY,MAChB,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAOE,SAAO,gBAChC,gBAAAF,QAAA,cAAC,eAAY,UAAoB,WAAW,OAAO,MAAK,MAAK,GAC5D,cACC,gBAAAA,QAAA,cAAC,UAAO,SAAQ,mBACd,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,SAC1E,cAAc,GAAE,QAAK,MAAM,MACnC,GACA,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAC5E,KAAK,MAAM,QAAQ,GAAE,GACxB,CACF,GAED,cACC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,YAAY,WAAW,UAAU,WAAW,EAAE;AAAA;AAAA,IAE1E,MAAM,WAAW,GAAG;AAAA,EACvB,GAED,oBAAoB,MAAM,WAAW,GAAG,eACvC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,GAAG,WAAW,SAAS;AAAA;AAAA,IAErE,MAAM,WAAW,EAAE;AAAA,EACtB,CAEJ;AAGF,SACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAkB,KAC/C,YAAY,UAAU,WAAW,GACjC,YAAY,aAAa,cAAc,GACvC,YAAY,SAAS,UAAU,CAClC;AAEJ;AAEA,IAAMA,WAASE,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,iBAAiB;AAAA,EACnB;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW,CAAC,EAAE,OAAO,KAAK,CAAC;AAAA,EAC7B;AAAA,EACA,cAAc;AAAA,IACZ,iBAAiB;AAAA,EACnB;AACF,CAAC;AAED,eAAe,cAAc;;;ACrT7B,OAAOC,aAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,OAEK;AA2CA,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,CAAC,UAAU,WAAW,IAAIC,QAAM,SAAmB,cAAc;AACvE,QAAM,CAAC,YAAY,aAAa,IAAIA,QAAM,SAAS,KAAK;AAExD,EAAAA,QAAM,UAAU,MAAM;AACpB,gBAAY,cAAc;AAAA,EAC5B,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,kBAAkBA,QAAM,QAAQ,MAAM;AAC1C,QAAI,CAAC,QAAS,QAAO;AACrB,WAAO,CAAC,GAAG,OAAO,EAAE,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,EACpD,GAAG,CAAC,SAAS,OAAO,CAAC;AAErB,QAAM,qBAAqB,MAA6C;AACtE,YAAQ,YAAY;AAAA,MAClB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,iBAAiB,CAAC,WAInB;AACH,UAAM,aAAa,SAAS,SAAS,OAAO,KAAK;AAEjD,QAAI,qBAAqB,YAAY;AACnC,UAAI,OAAO,SAAS;AAClB,eAAO;AAAA,UACL,iBAAiB,MAAM,OAAO;AAAA,UAC9B,aAAa,MAAM,OAAO;AAAA,UAC1B,WAAW,MAAM,OAAO,oBAAoB;AAAA,QAC9C;AAAA,MACF;AACA,UAAI,cAAc,CAAC,OAAO,SAAS;AACjC,eAAO;AAAA,UACL,iBAAiB,MAAM,OAAO;AAAA,UAC9B,aAAa,MAAM,OAAO;AAAA,UAC1B,WAAW,MAAM,OAAO,kBAAkB;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY;AACd,aAAO;AAAA,QACL,iBAAiB,MAAM,OAAO;AAAA,QAC9B,aAAa,MAAM,OAAO;AAAA,QAC1B,WAAW,MAAM,OAAO,oBAAoB;AAAA,MAC9C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,iBAAiB,MAAM,OAAO;AAAA,MAC9B,aAAa,MAAM,OAAO;AAAA,MAC1B,WAAW,MAAM,OAAO;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,WAAuB;AAC3C,QAAI,qBAAqB,WAAY;AAErC,QAAI;AAEJ,QAAI,eAAe;AACjB,oBAAc,SAAS,SAAS,OAAO,KAAK,IACxC,SAAS,OAAO,CAAC,MAAM,MAAM,OAAO,KAAK,IACzC,CAAC,GAAG,UAAU,OAAO,KAAK;AAAA,IAChC,OAAO;AACL,oBAAc,SAAS,SAAS,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK;AAClE,oBAAc,IAAI;AAAA,IACpB;AAEA,gBAAY,WAAW;AAEvB,aAAS,KAAK,kBAAkB;AAAA,MAC9B;AAAA,MACA,UAAU;AAAA,MACV,SAAS,OAAO;AAAA,MAChB;AAAA,IACF,CAAC;AAED,eAAW,WAAW;AAAA,EACxB;AAEA,QAAM,YAAY,SAAS,SAAS,KAAK,SAAS,MAAM,CAAC,UAAU;AACjE,UAAM,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AACpD,WAAO,QAAQ;AAAA,EACjB,CAAC,KAAK,SAAS,WAAW,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAE3D,MAAI,WAAW;AACb,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,uBAAsB,CAC9C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,KAAK,KACnC,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,CAACE,SAAO,WAAW,KAAkB,GAAG,SAAQ,QAC3D,gBAAAF,QAAA,cAAC,UAAO,SAAS,MAEf,gBAAAA,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAM,aAClC,mBAAmB,UAAa,aAChC,gBAAAA,QAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACvB,mBAAmB,UAAa,mBAAmB,UAClD,gBAAAA,QAAA,cAAC,SAAM,SAAQ,aAAY,MAAK,QAC7B,gBAAe,OAAI,cACtB,GAED,YACC,gBAAAA,QAAA,cAAC,SAAM,SAAQ,WAAU,MAAK,QAC3B,QACH,CAEJ,GAED,cACC,gBAAAA,QAAA,cAAC,SAAM,SAAS,mBAAmB,GAAG,MAAK,QACxC,UACH,CAEJ,GAGA,gBAAAA,QAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAC9D,QACH,GAEC,iBACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,uBAElF,GAIF,gBAAAA,QAAA,cAAC,UAAO,SAAS,KACd,gBAAgB,IAAI,CAAC,WAAW;AAC/B,UAAMG,SAAQ,eAAe,MAAM;AACnC,UAAM,aAAa,SAAS,SAAS,OAAO,KAAK;AAEjD,WACE,gBAAAH,QAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,KAAK,OAAO;AAAA,QACZ,SAAS,MAAM,aAAa,MAAM;AAAA,QAClC,eAAe;AAAA,QACf,OAAO;AAAA,UACLF,SAAO;AAAA,UACP;AAAA,YACE,iBAAiBC,OAAM;AAAA,YACvB,aAAaA,OAAM;AAAA,UACrB;AAAA,QACF;AAAA;AAAA,MAEA,gBAAAH,QAAA,cAAC,UAAO,SAAS,IAAI,OAAM,YACzB,gBAAAA,QAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACLC,SAAO;AAAA,YACP;AAAA,cACE,aAAa,aAAaC,OAAM,YAAY,MAAM,OAAO;AAAA,cACzD,iBAAiB,aAAaA,OAAM,YAAY;AAAA,YAClD;AAAA,YACA,gBAAgBD,SAAO,iBAAiBA,SAAO;AAAA,UACjD;AAAA;AAAA,QAEC,cACC,gBAAAF,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAOG,OAAM,iBAAiB,YAAY,MAAM,KAAG,QAE1F;AAAA,MAEJ,GACA,gBAAAH,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAOG,OAAM,WAAW,MAAM,EAAE,KACjE,OAAO,KACV,GACC,qBAAqB,cAAc,OAAO,WACzC,gBAAAH,QAAA,cAAC,SAAM,SAAQ,WAAU,MAAK,QAAK,SAEnC,CAEJ;AAAA,IACF;AAAA,EAEJ,CAAC,CACH,GAGC,qBAAqB,cACpB,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,mBAClB,gBAAAF,QAAA,cAAC,SAAM,SAAS,YAAY,YAAY,SAAS,MAAK,QACnD,YAAY,aAAa,WAC5B,CACF,IAIA,mBAAoB,qBAAqB,gBAAiB,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,SAAS,SAAS,EAAE,KAAK,CAAC,MACxI,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,sBAAsB,EAAE,iBAAiB,MAAM,OAAO,MAAM,CAAC,KAChF,gBAAAF,QAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAC5E,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,eAAe,SAAS,SAAS,EAAE,KAAK,CAAC,GAAG,WACpF,CACF,CAEJ,CACF;AAEJ;AAEA,IAAME,WAASG,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,gBAAgB;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,YAAY;AAAA,IACZ,iBAAiB;AAAA,EACnB;AAAA,EACA,sBAAsB;AAAA,IACpB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AACF,CAAC;AAED,UAAU,cAAc;;;ACpUxB,OAAOC,WAAS,YAAAC,WAAU,eAAAC,oBAAmB;AAC7C,SAAS,QAAAC,QAAM,cAAAC,oBAA6B;AAgC5C,IAAM,UAA8C;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AAAA,EACP;AAAA,EACA;AACF,MAAM;AACJ,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAsB,oBAAI,IAAI,CAAC;AAEzE,QAAM,cAAcC;AAAA,IAClB,CAAC,OAAe;AACd,uBAAiB,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;AAChD,UAAI,YAAa,UAAS,KAAK,MAAM,WAAW,IAAI,EAAE,IAAI,SAAS,KAAK,CAAC;AACzE,iBAAW,IAAI,IAAI;AAAA,IACrB;AAAA,IACA,CAAC,aAAa,UAAU,QAAQ;AAAA,EAClC;AAEA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,OAAe;AACd,uBAAiB,CAAC,SAAS;AACzB,cAAM,OAAO,IAAI,IAAI,IAAI;AACzB,aAAK,OAAO,EAAE;AACd,eAAO;AAAA,MACT,CAAC;AACD,UAAI,YAAa,UAAS,KAAK,MAAM,WAAW,IAAI,EAAE,IAAI,SAAS,MAAM,CAAC;AAC1E,iBAAW,IAAI,KAAK;AAAA,IACtB;AAAA,IACA,CAAC,aAAa,UAAU,QAAQ;AAAA,EAClC;AAEA,QAAM,aAAa,QAAQ,IAAI,KAAK;AAGpC,MAAI,WAAW,aAAa,QAAQ,WAAW,GAAG;AAChD,UAAM,CAAC,KAAK,OAAO,QAAQ,IAAI,IAAI;AACnC,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,kBAAkB,KAAK,KAE1C,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAAc,GAClC,gBAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,IAAI;AAAA,QACV,OAAO,IAAI;AAAA,QACX,MAAM;AAAA,QACN,SAAS,IAAI;AAAA,QACb,SAAS,cAAc,IAAI,IAAI,EAAE;AAAA,QACjC,SAAS,MAAM,YAAY,IAAI,EAAE;AAAA,QACjC,WAAW,MAAM,cAAc,IAAI,EAAE;AAAA,QACrC;AAAA;AAAA,IACF,GACA,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAAc,CACpC,GAGA,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAClB,gBAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,QACd,SAAS,cAAc,IAAI,KAAK,EAAE;AAAA,QAClC,SAAS,MAAM,YAAY,KAAK,EAAE;AAAA,QAClC,WAAW,MAAM,cAAc,KAAK,EAAE;AAAA,QACtC;AAAA;AAAA,IACF,GACA,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,eAAe,GACnC,gBAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,QACf,SAAS,cAAc,IAAI,MAAM,EAAE;AAAA,QACnC,SAAS,MAAM,YAAY,MAAM,EAAE;AAAA,QACnC,WAAW,MAAM,cAAc,MAAM,EAAE;AAAA,QACvC;AAAA;AAAA,IACF,CACF,GAGA,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAAc,GAClC,gBAAAF,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,OAAO;AAAA,QACb,OAAO,OAAO;AAAA,QACd,MAAM;AAAA,QACN,SAAS,OAAO;AAAA,QAChB,SAAS,cAAc,IAAI,OAAO,EAAE;AAAA,QACpC,SAAS,MAAM,YAAY,OAAO,EAAE;AAAA,QACpC,WAAW,MAAM,cAAc,OAAO,EAAE;AAAA,QACxC;AAAA;AAAA,IACF,GACA,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,cAAc,CACpC,CACF;AAAA,EAEJ;AAEA,QAAM,iBAAiB,WAAW,aAC9BA,SAAO,oBACPA,SAAO;AAEX,SACE,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAO,CAAC,gBAAgB,KAAK,KAChC,QAAQ,IAAI,CAAC,WACZ,gBAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,MAChB,SAAS,cAAc,IAAI,OAAO,EAAE;AAAA,MACpC,SAAS,MAAM,YAAY,OAAO,EAAE;AAAA,MACpC,WAAW,MAAM,cAAc,OAAO,EAAE;AAAA,MACxC;AAAA;AAAA,EACF,CACD,CACH;AAEJ;AAEA,IAAME,WAASC,aAAW,OAAO;AAAA,EAC/B,qBAAqB;AAAA,IACnB,eAAe;AAAA,IACf,KAAK;AAAA,EACP;AAAA,EACA,mBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,KAAK;AAAA,EACP;AAAA,EACA,kBAAkB;AAAA,IAChB,KAAK;AAAA,EACP;AAAA,EACA,YAAY;AAAA,IACV,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF,CAAC;AAED,cAAc,cAAc;;;ACnM5B,OAAOC,WAAS,YAAAC,WAAU,eAAAC,oBAAmB;AAC7C,SAAS,QAAAC,QAAM,cAAAC,oBAA6B;AAqB5C,IAAMC,WAAkF;AAAA,EACtF,IAAI,EAAE,QAAQ,MAAM,gBAAgB,IAAI;AAAA,EACxC,IAAI,EAAE,QAAQ,MAAM,gBAAgB,IAAI;AAAA,EACxC,IAAI,EAAE,QAAQ,MAAM,gBAAgB,IAAI;AAC1C;AAEA,IAAM,aAA4C;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAEO,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA,OAAO;AAAA;AAAA,EAEP,mBAAmB;AAAA,EACnB;AAAA,EACA;AACF,MAAM;AACJ,QAAM,WAAW,YAAY;AAC7B,QAAM,QAAQA,SAAQ,IAAI;AAC1B,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,UAA6B,oBAAI,IAAI,CAAC;AAEtF,QAAM,cAAcC;AAAA,IAClB,CAAC,cAA6B;AAC5B,0BAAoB,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,IAAI,SAAS,CAAC;AAC1D,UAAI,eAAgB,UAAS,KAAK,MAAM,cAAc,IAAI,EAAE,WAAW,SAAS,KAAK,CAAC;AACtF,oBAAc,WAAW,IAAI;AAAA,IAC/B;AAAA,IACA,CAAC,gBAAgB,UAAU,WAAW;AAAA,EACxC;AAEA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,cAA6B;AAC5B,0BAAoB,CAAC,SAAS;AAC5B,cAAM,OAAO,IAAI,IAAI,IAAI;AACzB,aAAK,OAAO,SAAS;AACrB,eAAO;AAAA,MACT,CAAC;AACD,UAAI,eAAgB,UAAS,KAAK,MAAM,cAAc,IAAI,EAAE,WAAW,SAAS,MAAM,CAAC;AACvF,oBAAc,WAAW,KAAK;AAAA,IAChC;AAAA,IACA,CAAC,gBAAgB,UAAU,WAAW;AAAA,EACxC;AAEA,QAAM,eAAe,CAAC,cACpB,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,WAAW,SAAS;AAAA,MAC1B,MAAM,MAAM;AAAA,MACZ,SAAQ;AAAA,MACR,SAAS,iBAAiB,IAAI,SAAS;AAAA,MACvC,SAAS,MAAM,YAAY,SAAS;AAAA,MACpC,WAAW,MAAM,cAAc,SAAS;AAAA,MACxC;AAAA;AAAA,EACF;AAGF,SACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,CAACC,SAAO,WAAW,EAAE,OAAO,MAAM,eAAe,GAAG,KAAK,KAEpE,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAAO,GAC1B,aAAa,IAAI,GAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAAO,CAC7B,GAGA,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OACjB,aAAa,MAAM,GACpB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,UAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,WAAW,CACjC,GACC,aAAa,OAAO,CACvB,GAGA,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAClB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAAO,GAC1B,aAAa,MAAM,GACpB,gBAAAF,QAAA,cAACC,QAAA,EAAK,OAAOC,SAAO,OAAO,CAC7B,CACF;AAEJ;AAEA,IAAMA,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,KAAK;AAAA,IACH,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF,CAAC;AAED,KAAK,cAAc;;;AC7InB,OAAOC,WAAS,YAAAC,WAAU,eAAAC,oBAAmB;AAC7C,SAAS,QAAAC,QAAM,cAAAC,oBAA6B;AAwDrC,IAAM,wBAA8D,CAAC;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe,CAAC;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAChB,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,OAAO,QAAQ,IAAIC;AAAA,IACxB,aAAa,SAAS,IAClB,eACA,WAAW,IACT,MAAM,KAAK,EAAE,QAAQ,SAAS,GAAG,CAAC,GAAG,OAAO;AAAA,MAC1C,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3B,MAAM,CAAC;AAAA,IACT,EAAE,IACF,CAAC;AAAA,EACT;AAEA,QAAM,aAAaC,aAAY,MAAM;AACnC,WAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EACtE,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgBA,aAAY,MAAM;AACtC,QAAI,MAAM,UAAU,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM,UAA0B;AAAA,MAC9B,IAAI,WAAW;AAAA,MACf,MAAM,CAAC;AAAA,IACT;AAEA,UAAM,WAAW,CAAC,GAAG,OAAO,OAAO;AACnC,aAAS,QAAQ;AAEjB,aAAS,KAAK,MAAM,QAAQ,IAAI;AAAA,MAC9B;AAAA,MACA,MAAM;AAAA,MACN,OAAO,SAAS,SAAS;AAAA,MACzB,YAAY,SAAS;AAAA,IACvB,CAAC;AAED,eAAW,QAAQ;AAAA,EACrB,GAAG,CAAC,OAAO,UAAU,YAAY,QAAQ,UAAU,UAAU,QAAQ,CAAC;AAEtE,QAAM,mBAAmBA,aAAY,CAAC,UAAkB;AACtD,QAAI,MAAM,UAAU,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,KAAK;AAC/B,UAAM,WAAW,MAAM,OAAO,CAAC,GAAG,MAAM,MAAM,KAAK;AACnD,aAAS,QAAQ;AAEjB,aAAS,KAAK,MAAM,WAAW,IAAI;AAAA,MACjC;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,YAAY,SAAS;AAAA,IACvB,CAAC;AAED,eAAW,QAAQ;AAAA,EACrB,GAAG,CAAC,OAAO,UAAU,QAAQ,aAAa,UAAU,QAAQ,CAAC;AAE7D,QAAM,mBAAmBA,aAAY,CAAC,OAAe,SAAkC;AACrF,UAAM,WAAW,MAAM;AAAA,MAAI,CAAC,MAAM,MAChC,MAAM,QAAQ,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI;AAAA,IAC/D;AACA,aAAS,QAAQ;AAEjB,aAAS,KAAK,MAAM,WAAW,IAAI;AAAA,MACjC;AAAA,MACA,MAAM,SAAS,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,IACF,CAAC;AAED,eAAW,QAAQ;AAAA,EACrB,GAAG,CAAC,OAAO,QAAQ,aAAa,UAAU,QAAQ,CAAC;AAEnD,QAAM,SAAS,MAAM,SAAS;AAC9B,QAAM,YAAY,MAAM,SAAS;AAEjC,MAAI,WAAW;AACb,WACE,gBAAAC,QAAA,cAACC,QAAA,EAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,GAAI,SAAS,CAAC,EAAG,KACnD,gBAAAF,QAAA,cAAC,gBAAa,SAAQ,sBAAqB,CAC7C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAACC,QAAA,EAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,GAAI,SAAS,CAAC,EAAG,KACnD,gBAAAF,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,SACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,EAAE,GAAGE,SAAO,WAAW,GAAI,SAAS,CAAC,EAAG,GAAG,SAAQ,QAC9D,gBAAAF,QAAA,cAAC,UAAO,SAAS,OAEb,SAAS,gBACT,gBAAAA,QAAA,cAAC,UAAO,SAAS,KACd,SACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAC9D,KACH,GAED,eACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,MAAM,OAAO,kBAAkB,KAC9D,WACH,CAEJ,GAID,MAAM,WAAW,IAChB,gBAAAA,QAAA,cAAC,cAAW,SAAQ,0CAAyC,IAE7D,gBAAAA,QAAA,cAAC,UAAO,SAAS,MACd,MAAM,IAAI,CAAC,MAAM,UAChB,gBAAAA,QAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK,KAAK;AAAA,MACV,OAAO;AAAA,QACL,GAAGC,SAAO;AAAA,QACV,aAAa,MAAM,OAAO;AAAA,MAC5B;AAAA;AAAA,IAEA,gBAAAF,QAAA,cAAC,UAAO,SAAS,MAEf,gBAAAA,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAM,YACpC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,SAAQ,OAAO,MAAM,OAAO,kBAAkB,KAAG,SAC7D,QAAQ,CAChB,GACC,aACC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAAS,MAAM,iBAAiB,KAAK;AAAA,QACrC,QAAQ;AAAA,QACR,eAAe;AAAA,UACb;AAAA,UACA,QAAQ,KAAK;AAAA,UACb;AAAA,QACF;AAAA;AAAA,MAEC;AAAA,MAAW;AAAA,MAAE;AAAA,IAChB,CAEJ,GAGC,WAAW,MAAM,OAAO;AAAA,MACvB,QAAQ,MAAM,iBAAiB,KAAK;AAAA,MACpC,QAAQ,CAAC,SAAS,iBAAiB,OAAO,IAAI;AAAA,IAChD,CAAC,CACH;AAAA,EACF,CACD,CACH,GAID,UACC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,eAAe;AAAA,QACb;AAAA,QACA,cAAc,MAAM;AAAA,MACtB;AAAA;AAAA,IACD;AAAA,IACI;AAAA,EACL,GAIF,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,MAAM,OAAO,kBAAkB;AAAA,MACtC,OAAO,EAAE,WAAW,QAAQ;AAAA;AAAA,IAE3B,MAAM;AAAA,IAAO;AAAA,IAAI;AAAA,IAAS;AAAA,EAC7B,CACF,CACF;AAEJ;AAEA,IAAME,WAASC,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AACF,CAAC;AAED,sBAAsB,cAAc;;;ACnRpC,OAAOC,WAAS,UAAAC,SAAQ,YAAAC,WAAU,eAAAC,oBAAmB;AACrD;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,YAAAC;AAAA,EACA;AAAA,EAGA,cAAAC;AAAA,EACA,oBAAAC;AAAA,OACK;AAYP,IAAM,EAAE,OAAOC,cAAa,IAAIC,YAAW,IAAI,QAAQ;AAwChD,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,QAAQD,gBAAe;AAAA,EACvB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf;AAAA,EACA,kBAAkB;AAAA,EAClB,cAAc;AAChB,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,QAAQE,QAAO,IAAIC,UAAS,MAAM,YAAY,CAAC,EAAE;AACvD,QAAM,aAAaD,QAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AACjD,QAAM,aAAaD,QAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AAEjD,QAAM,CAAC,cAAc,eAAe,IAAIC,UAAS,YAAY;AAC7D,QAAM,gBAAgBF,QAAO,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAG3C,QAAM,QAAQG,aAAY,CAAC,OAAe,KAAa,QAAgB;AACrE,WAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAAA,EAC3C,GAAG,CAAC,CAAC;AAGL,QAAM,YAAYA,aAAY,CAAC,aAAqB;AAClD,UAAM,cAAc,eAAe;AACnC,UAAM,eAAe,gBAAgB;AACrC,UAAM,OAAO,KAAK,IAAI,IAAI,cAAc,SAAS,CAAC;AAClD,UAAM,OAAO,KAAK,IAAI,IAAI,eAAe,UAAU,CAAC;AACpD,WAAO,EAAE,MAAM,KAAK;AAAA,EACtB,GAAG,CAAC,cAAc,eAAe,OAAO,MAAM,CAAC;AAE/C,QAAM,eAAeA,aAAY,MAAM;AACrC,QAAI,CAAC,WAAY;AAEjB,UAAM,WAAW,MAAM,eAAe,MAAM,UAAU,QAAQ;AAC9D,oBAAgB,QAAQ;AAExB,IAAAF,UAAS,OAAO,OAAO;AAAA,MACrB,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACZ,CAAC,EAAE,MAAM;AAET,aAAS,KAAK,MAAM,WAAW,YAAY;AAAA,MACzC;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,UAAU,UAAU,YAAY,QAAQ,aAAa,OAAO,UAAU,KAAK,CAAC;AAE9F,QAAM,gBAAgBE,aAAY,MAAM;AACtC,QAAI,CAAC,WAAY;AAEjB,UAAM,WAAW,MAAM,eAAe,MAAM,UAAU,QAAQ;AAC9D,oBAAgB,QAAQ;AAGxB,QAAI,YAAY,cAAc;AAC5B,oBAAc,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AACrC,MAAAF,UAAS,SAAS;AAAA,QAChBA,UAAS,OAAO,YAAY;AAAA,UAC1B,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,UAAU;AAAA,QACZ,CAAC;AAAA,QACDA,UAAS,OAAO,YAAY;AAAA,UAC1B,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAC,EAAE,MAAM;AAAA,IACX;AAEA,IAAAA,UAAS,OAAO,OAAO;AAAA,MACrB,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACZ,CAAC,EAAE,MAAM;AAET,aAAS,KAAK,MAAM,WAAW,aAAa;AAAA,MAC1C;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,UAAU,UAAU,cAAc,YAAY,QAAQ,aAAa,OAAO,YAAY,YAAY,UAAU,KAAK,CAAC;AAEpI,QAAM,cAAcE,aAAY,MAAM;AACpC,oBAAgB,YAAY;AAC5B,kBAAc,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAErC,IAAAF,UAAS,SAAS;AAAA,MAChBA,UAAS,OAAO,OAAO;AAAA,QACrB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ,CAAC;AAAA,MACDA,UAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ,CAAC;AAAA,MACDA,UAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,CAAC,EAAE,MAAM;AAET,aAAS,KAAK,MAAM,WAAW,UAAU;AAAA,MACvC;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,QAAQ,aAAa,OAAO,YAAY,YAAY,QAAQ,CAAC;AAE/E,QAAM,kBAAkBE,aAAY,MAAM;AACxC,QAAI,CAAC,gBAAiB;AAEtB,QAAI,eAAe,cAAc;AAC/B,kBAAY;AAAA,IACd,OAAO;AACL,YAAM,WAAW,MAAM,eAAe,GAAG,UAAU,QAAQ;AAC3D,sBAAgB,QAAQ;AAExB,MAAAF,UAAS,OAAO,OAAO;AAAA,QACrB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ,CAAC,EAAE,MAAM;AAAA,IACX;AAAA,EACF,GAAG,CAAC,cAAc,cAAc,iBAAiB,UAAU,UAAU,aAAa,OAAO,KAAK,CAAC;AAE/F,QAAM,eAAeD;AAAA,IACnB,aAAa,OAAO;AAAA,MAClB,8BAA8B,MAAM;AAAA,MACpC,6BAA6B,MAAM,aAAa,eAAe;AAAA,MAC/D,qBAAqB,MAAM;AACzB,sBAAc,UAAU;AAAA,UACtB,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACA,oBAAoB,CAAC,QAA+B,iBAA2C;AAC7F,YAAI,CAAC,aAAa,gBAAgB,EAAG;AAErC,cAAM,EAAE,MAAM,KAAK,IAAI,UAAU,YAAY;AAE7C,cAAM,OAAO;AAAA,UACX,aAAa;AAAA,UACb,CAAC,OAAO,cAAc,QAAQ;AAAA,UAC9B,OAAO,cAAc,QAAQ;AAAA,QAC/B;AACA,cAAM,OAAO;AAAA,UACX,aAAa;AAAA,UACb,CAAC,OAAO,cAAc,QAAQ;AAAA,UAC9B,OAAO,cAAc,QAAQ;AAAA,QAC/B;AAEA,mBAAW,SAAS,IAAI;AACxB,mBAAW,SAAS,IAAI;AAAA,MAC1B;AAAA,MACA,uBAAuB,CAAC,QAA+B,iBAA2C;AAChG,YAAI,CAAC,aAAa,gBAAgB,EAAG;AAErC,cAAM,EAAE,MAAM,KAAK,IAAI,UAAU,YAAY;AAE7C,sBAAc,QAAQ,IAAI;AAAA,UACxB,cAAc,QAAQ,IAAI,aAAa;AAAA,UACvC,CAAC;AAAA,UACD;AAAA,QACF;AACA,sBAAc,QAAQ,IAAI;AAAA,UACxB,cAAc,QAAQ,IAAI,aAAa;AAAA,UACvC,CAAC;AAAA,UACD;AAAA,QACF;AAEA,mBAAW,UAAU,cAAc,QAAQ,CAAC;AAC5C,mBAAW,SAAS,CAAC;AACrB,mBAAW,UAAU,cAAc,QAAQ,CAAC;AAC5C,mBAAW,SAAS,CAAC;AAErB,iBAAS,KAAK,MAAM,WAAW,QAAQ;AAAA,UACrC;AAAA,UACA,GAAG,cAAc,QAAQ;AAAA,UACzB,GAAG,cAAc,QAAQ;AAAA,UACzB,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,EAAE;AAEF,MAAI,WAAW;AACb,WACE,gBAAAI,QAAA,cAAC,QAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,OAAO,QAAQ,GAAI,SAAS,CAAC,EAAG,GAAG,SAAQ,QAC7E,gBAAAD,QAAA,cAAC,gBAAa,SAAQ,sBAAqB,CAC7C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,OAAO,QAAQ,GAAI,SAAS,CAAC,EAAG,GAAG,SAAQ,QAC7E,gBAAAD,QAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,MAAI,CAAC,UAAU;AACb,WACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,OAAO,QAAQ,GAAI,SAAS,CAAC,EAAG,GAAG,SAAQ,QAC7E,gBAAAD,QAAA,cAAC,cAAW,SAAQ,sBAAqB,CAC3C;AAAA,EAEJ;AAEA,QAAM,gBAAgB;AAAA,IACpB,WAAW;AAAA,MACT,EAAE,MAAM;AAAA,MACR,EAAE,WAAW;AAAA,MACb,EAAE,WAAW;AAAA,IACf;AAAA,EACF;AAEA,SACE,gBAAAA,QAAA,cAAC,QAAK,OAAO,EAAE,GAAGC,SAAO,WAAW,OAAO,GAAI,SAAS,CAAC,EAAG,GAAG,SAAQ,QACrE,gBAAAD,QAAA,cAAC,UAAO,SAAS,OAEb,SAAS,iBACT,gBAAAA,QAAA,cAAC,UAAO,SAAQ,iBAAgB,OAAM,YACnC,SACC,gBAAAA,QAAA,cAAC,cAAW,SAAQ,MAAK,OAAO,EAAE,OAAO,MAAM,OAAO,WAAW,KAC9D,KACH,GAED,gBACC,gBAAAA,QAAA,cAAC,UAAO,SAAS,KACf,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS;AAAA,MACT,UAAU,CAAC,cAAc,gBAAgB;AAAA;AAAA,IAC1C;AAAA,EAED,GACA,gBAAAA,QAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,UAAU,IAAI,WAAW,SAAS,KACnE,KAAK,MAAM,eAAe,GAAG,GAAE,GAClC,GACA,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS;AAAA,MACT,UAAU,CAAC,cAAc,gBAAgB;AAAA;AAAA,IAC1C;AAAA,EAED,GACA,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS;AAAA;AAAA,IACV;AAAA,EAED,CACF,CAEJ,GAIF,gBAAAA,QAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACLD,SAAO;AAAA,QACP;AAAA,UACE;AAAA,UACA;AAAA,UACA,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAD,QAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,eAAe;AAAA,QACf,SAAS;AAAA,QACT,OAAOF,SAAO;AAAA;AAAA,MAEd,gBAAAD,QAAA;AAAA,QAACH,UAAS;AAAA,QAAT;AAAA,UACC,OAAO;AAAA,YACLI,SAAO;AAAA,YACP;AAAA,cACE,OAAO;AAAA,cACP,QAAQ;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,UACC,GAAG,aAAa;AAAA;AAAA,QAEhB;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAGA,gBAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,MAAM,OAAO,kBAAkB;AAAA,MACtC,OAAO,EAAE,WAAW,SAAS;AAAA;AAAA,IAC9B;AAAA,IACS,aAAa,QAAQ,CAAC;AAAA,IAAE;AAAA,IAAmB,eAAe,eAAe,UAAU;AAAA,EAC7F,CACF,CACF;AAEJ;AAEA,IAAMC,WAASG,aAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AACF,CAAC;AAED,cAAc,cAAc;","names":["React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","View","StyleSheet","TouchableOpacity","React","TouchableOpacity","View","styles","StyleSheet","React","useState","useRef","View","StyleSheet","Modal","TouchableOpacity","TouchableWithoutFeedback","useState","useRef","React","TouchableOpacity","Modal","TouchableWithoutFeedback","View","styles","StyleSheet","React","View","TouchableOpacity","StyleSheet","Modal","TouchableWithoutFeedback","React","TouchableOpacity","Modal","TouchableWithoutFeedback","View","styles","StyleSheet","React","TouchableOpacity","ScrollView","StyleSheet","React","ScrollView","styles","TouchableOpacity","StyleSheet","React","TouchableOpacity","StyleSheet","React","styles","TouchableOpacity","StyleSheet","React","View","React","View","React","useState","useRef","View","TouchableOpacity","Animated","StyleSheet","Text","useState","useRef","Animated","React","TouchableOpacity","styles","Text","View","StyleSheet","React","View","React","View","gapValues","React","View","React","View","gapValues","React","View","StyleSheet","TouchableOpacity","Animated","Dimensions","Dimensions","React","Animated","View","styles","TouchableOpacity","StyleSheet","React","View","StyleSheet","TouchableOpacity","ScrollView","React","View","styles","TouchableOpacity","ScrollView","StyleSheet","React","useState","View","TouchableOpacity","Text","StyleSheet","Modal","FlatList","useState","React","TouchableOpacity","styles","View","Text","Modal","FlatList","StyleSheet","React","useState","View","StyleSheet","TouchableOpacity","useState","React","styles","TouchableOpacity","View","StyleSheet","React","useMemo","useCallback","View","StyleSheet","TouchableOpacity","useMemo","useCallback","React","styles","View","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","View","StyleSheet","React","content","styles","View","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","style","TouchableOpacity","StyleSheet","React","useState","useCallback","View","StyleSheet","useState","useCallback","React","View","styles","StyleSheet","React","useState","useCallback","View","StyleSheet","sizeMap","useState","useCallback","React","View","styles","StyleSheet","React","useState","useCallback","View","StyleSheet","useState","useCallback","React","View","styles","StyleSheet","React","useRef","useState","useCallback","View","StyleSheet","Animated","Dimensions","TouchableOpacity","SCREEN_WIDTH","Dimensions","useRef","Animated","useState","useCallback","React","styles","View","TouchableOpacity","StyleSheet"]}