@campxdev/react-native-blueprint 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +358 -0
  3. package/lib/module/app/_layout.js +23 -0
  4. package/lib/module/app/_layout.js.map +1 -0
  5. package/lib/module/assets/icons/weather_icons/drizzle.png +0 -0
  6. package/lib/module/assets/icons/weather_icons/foggy.png +0 -0
  7. package/lib/module/assets/icons/weather_icons/freezing_rain.png +0 -0
  8. package/lib/module/assets/icons/weather_icons/partly_cloudy.png +0 -0
  9. package/lib/module/assets/icons/weather_icons/rainy.png +0 -0
  10. package/lib/module/assets/icons/weather_icons/showers.png +0 -0
  11. package/lib/module/assets/icons/weather_icons/sunny_weather.png +0 -0
  12. package/lib/module/assets/icons/weather_icons/thunderstorm.png +0 -0
  13. package/lib/module/assets/icons/weather_icons/thunderstorm_hail.png +0 -0
  14. package/lib/module/components/theme-config.js +265 -0
  15. package/lib/module/components/theme-config.js.map +1 -0
  16. package/lib/module/components/ui/Accordion.js +228 -0
  17. package/lib/module/components/ui/Accordion.js.map +1 -0
  18. package/lib/module/components/ui/Alert-Dialog.js +266 -0
  19. package/lib/module/components/ui/Alert-Dialog.js.map +1 -0
  20. package/lib/module/components/ui/Alert.js +107 -0
  21. package/lib/module/components/ui/Alert.js.map +1 -0
  22. package/lib/module/components/ui/AppBar.js +403 -0
  23. package/lib/module/components/ui/AppBar.js.map +1 -0
  24. package/lib/module/components/ui/Aspect-Ratio.js +27 -0
  25. package/lib/module/components/ui/Aspect-Ratio.js.map +1 -0
  26. package/lib/module/components/ui/Avatar.js +97 -0
  27. package/lib/module/components/ui/Avatar.js.map +1 -0
  28. package/lib/module/components/ui/Badge.js +127 -0
  29. package/lib/module/components/ui/Badge.js.map +1 -0
  30. package/lib/module/components/ui/Bottom-Sheet.js +144 -0
  31. package/lib/module/components/ui/Bottom-Sheet.js.map +1 -0
  32. package/lib/module/components/ui/Button.js +88 -0
  33. package/lib/module/components/ui/Button.js.map +1 -0
  34. package/lib/module/components/ui/Card.js +176 -0
  35. package/lib/module/components/ui/Card.js.map +1 -0
  36. package/lib/module/components/ui/Checkbox.js +65 -0
  37. package/lib/module/components/ui/Checkbox.js.map +1 -0
  38. package/lib/module/components/ui/Collapsible.js +42 -0
  39. package/lib/module/components/ui/Collapsible.js.map +1 -0
  40. package/lib/module/components/ui/Context-Menu.js +287 -0
  41. package/lib/module/components/ui/Context-Menu.js.map +1 -0
  42. package/lib/module/components/ui/Custom-Card.js +202 -0
  43. package/lib/module/components/ui/Custom-Card.js.map +1 -0
  44. package/lib/module/components/ui/Dialog.js +202 -0
  45. package/lib/module/components/ui/Dialog.js.map +1 -0
  46. package/lib/module/components/ui/Dropdown-Menu.js +421 -0
  47. package/lib/module/components/ui/Dropdown-Menu.js.map +1 -0
  48. package/lib/module/components/ui/Floating-Action.js +50 -0
  49. package/lib/module/components/ui/Floating-Action.js.map +1 -0
  50. package/lib/module/components/ui/Greeting-Card.js +392 -0
  51. package/lib/module/components/ui/Greeting-Card.js.map +1 -0
  52. package/lib/module/components/ui/Hover-Card.js +96 -0
  53. package/lib/module/components/ui/Hover-Card.js.map +1 -0
  54. package/lib/module/components/ui/Icon.js +73 -0
  55. package/lib/module/components/ui/Icon.js.map +1 -0
  56. package/lib/module/components/ui/Input.js +74 -0
  57. package/lib/module/components/ui/Input.js.map +1 -0
  58. package/lib/module/components/ui/Label.js +44 -0
  59. package/lib/module/components/ui/Label.js.map +1 -0
  60. package/lib/module/components/ui/Menubar.js +375 -0
  61. package/lib/module/components/ui/Menubar.js.map +1 -0
  62. package/lib/module/components/ui/Native-Only-Animated-View.js +41 -0
  63. package/lib/module/components/ui/Native-Only-Animated-View.js.map +1 -0
  64. package/lib/module/components/ui/NavBar.js +352 -0
  65. package/lib/module/components/ui/NavBar.js.map +1 -0
  66. package/lib/module/components/ui/Popover.js +101 -0
  67. package/lib/module/components/ui/Popover.js.map +1 -0
  68. package/lib/module/components/ui/Progress.js +124 -0
  69. package/lib/module/components/ui/Progress.js.map +1 -0
  70. package/lib/module/components/ui/Radio-Group.js +75 -0
  71. package/lib/module/components/ui/Radio-Group.js.map +1 -0
  72. package/lib/module/components/ui/Select.js +269 -0
  73. package/lib/module/components/ui/Select.js.map +1 -0
  74. package/lib/module/components/ui/Separator.js +58 -0
  75. package/lib/module/components/ui/Separator.js.map +1 -0
  76. package/lib/module/components/ui/SizedBox.js +101 -0
  77. package/lib/module/components/ui/SizedBox.js.map +1 -0
  78. package/lib/module/components/ui/Skeleton.js +57 -0
  79. package/lib/module/components/ui/Skeleton.js.map +1 -0
  80. package/lib/module/components/ui/Slider.js +169 -0
  81. package/lib/module/components/ui/Slider.js.map +1 -0
  82. package/lib/module/components/ui/Switch.js +55 -0
  83. package/lib/module/components/ui/Switch.js.map +1 -0
  84. package/lib/module/components/ui/Table.js +150 -0
  85. package/lib/module/components/ui/Table.js.map +1 -0
  86. package/lib/module/components/ui/Tabs.js +106 -0
  87. package/lib/module/components/ui/Tabs.js.map +1 -0
  88. package/lib/module/components/ui/Text.js +69 -0
  89. package/lib/module/components/ui/Text.js.map +1 -0
  90. package/lib/module/components/ui/Textarea.js +88 -0
  91. package/lib/module/components/ui/Textarea.js.map +1 -0
  92. package/lib/module/components/ui/Theme-Toggle.js +156 -0
  93. package/lib/module/components/ui/Theme-Toggle.js.map +1 -0
  94. package/lib/module/components/ui/Toast.js +101 -0
  95. package/lib/module/components/ui/Toast.js.map +1 -0
  96. package/lib/module/components/ui/Toggle-Group.js +129 -0
  97. package/lib/module/components/ui/Toggle-Group.js.map +1 -0
  98. package/lib/module/components/ui/Toggle.js +106 -0
  99. package/lib/module/components/ui/Toggle.js.map +1 -0
  100. package/lib/module/components/ui/Tooltip.js +106 -0
  101. package/lib/module/components/ui/Tooltip.js.map +1 -0
  102. package/lib/module/components/ui/index.js +45 -0
  103. package/lib/module/components/ui/index.js.map +1 -0
  104. package/lib/module/index.js +19 -0
  105. package/lib/module/index.js.map +1 -0
  106. package/lib/module/lib/ThemeProvider.js +173 -0
  107. package/lib/module/lib/ThemeProvider.js.map +1 -0
  108. package/lib/module/lib/cornerRadius.js +164 -0
  109. package/lib/module/lib/cornerRadius.js.map +1 -0
  110. package/lib/module/lib/fonts.js +25 -0
  111. package/lib/module/lib/fonts.js.map +1 -0
  112. package/lib/module/lib/theme.js +212 -0
  113. package/lib/module/lib/theme.js.map +1 -0
  114. package/lib/module/lib/utils.js +137 -0
  115. package/lib/module/lib/utils.js.map +1 -0
  116. package/lib/module/package.json +1 -0
  117. package/package.json +208 -0
  118. package/src/app/_layout.tsx +25 -0
  119. package/src/assets/icons/weather_icons/drizzle.png +0 -0
  120. package/src/assets/icons/weather_icons/foggy.png +0 -0
  121. package/src/assets/icons/weather_icons/freezing_rain.png +0 -0
  122. package/src/assets/icons/weather_icons/partly_cloudy.png +0 -0
  123. package/src/assets/icons/weather_icons/rainy.png +0 -0
  124. package/src/assets/icons/weather_icons/showers.png +0 -0
  125. package/src/assets/icons/weather_icons/sunny_weather.png +0 -0
  126. package/src/assets/icons/weather_icons/thunderstorm.png +0 -0
  127. package/src/assets/icons/weather_icons/thunderstorm_hail.png +0 -0
  128. package/src/components/theme-config.ts +331 -0
  129. package/src/components/ui/Accordion.tsx +253 -0
  130. package/src/components/ui/Alert-Dialog.tsx +295 -0
  131. package/src/components/ui/Alert.tsx +137 -0
  132. package/src/components/ui/AppBar.tsx +551 -0
  133. package/src/components/ui/Aspect-Ratio.tsx +25 -0
  134. package/src/components/ui/Avatar.tsx +103 -0
  135. package/src/components/ui/Badge.tsx +121 -0
  136. package/src/components/ui/Bottom-Sheet.tsx +224 -0
  137. package/src/components/ui/Button.tsx +100 -0
  138. package/src/components/ui/Card.tsx +185 -0
  139. package/src/components/ui/Checkbox.tsx +81 -0
  140. package/src/components/ui/Collapsible.tsx +40 -0
  141. package/src/components/ui/Context-Menu.tsx +407 -0
  142. package/src/components/ui/Custom-Card.tsx +226 -0
  143. package/src/components/ui/Dialog.tsx +240 -0
  144. package/src/components/ui/Dropdown-Menu.tsx +544 -0
  145. package/src/components/ui/Floating-Action.tsx +54 -0
  146. package/src/components/ui/Greeting-Card.tsx +471 -0
  147. package/src/components/ui/Hover-Card.tsx +101 -0
  148. package/src/components/ui/Icon.tsx +75 -0
  149. package/src/components/ui/Input.tsx +90 -0
  150. package/src/components/ui/Label.tsx +48 -0
  151. package/src/components/ui/Menubar.tsx +509 -0
  152. package/src/components/ui/Native-Only-Animated-View.tsx +37 -0
  153. package/src/components/ui/NavBar.tsx +397 -0
  154. package/src/components/ui/Popover.tsx +110 -0
  155. package/src/components/ui/Progress.tsx +138 -0
  156. package/src/components/ui/Radio-Group.tsx +79 -0
  157. package/src/components/ui/Select.tsx +344 -0
  158. package/src/components/ui/Separator.tsx +68 -0
  159. package/src/components/ui/SizedBox.tsx +116 -0
  160. package/src/components/ui/Skeleton.tsx +55 -0
  161. package/src/components/ui/Slider.tsx +222 -0
  162. package/src/components/ui/Switch.tsx +67 -0
  163. package/src/components/ui/Table.tsx +170 -0
  164. package/src/components/ui/Tabs.tsx +119 -0
  165. package/src/components/ui/Text.tsx +73 -0
  166. package/src/components/ui/Textarea.tsx +93 -0
  167. package/src/components/ui/Theme-Toggle.tsx +204 -0
  168. package/src/components/ui/Toast.tsx +127 -0
  169. package/src/components/ui/Toggle-Group.tsx +160 -0
  170. package/src/components/ui/Toggle.tsx +122 -0
  171. package/src/components/ui/Tooltip.tsx +117 -0
  172. package/src/components/ui/index.ts +42 -0
  173. package/src/index.tsx +24 -0
  174. package/src/lib/ThemeProvider.tsx +204 -0
  175. package/src/lib/cornerRadius.ts +160 -0
  176. package/src/lib/fonts.ts +28 -0
  177. package/src/lib/theme.ts +151 -0
  178. package/src/lib/utils.ts +146 -0
@@ -0,0 +1,403 @@
1
+ "use strict";
2
+
3
+ import { ArrowLeft, Menu, MoreVertical } from 'lucide-react-native';
4
+ import { cssInterop, useColorScheme } from 'nativewind';
5
+ import * as React from 'react';
6
+ import { Platform, Pressable as RNPressable, View as RNView, StatusBar } from 'react-native';
7
+ import { SafeAreaView } from 'react-native-safe-area-context';
8
+ import { cn } from "../../lib/utils.js";
9
+ import { Icon } from "./Icon.js";
10
+ import { Text } from "./Text.js";
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
+ const View = cssInterop(RNView, {
13
+ className: 'style'
14
+ });
15
+ const Pressable = cssInterop(RNPressable, {
16
+ className: 'style'
17
+ });
18
+
19
+ /**
20
+ * Configuration for an action item in the AppBar
21
+ *
22
+ * @property {LucideIcon} icon - Icon component from lucide-react-native
23
+ * @property {() => void} [onPress] - Callback when action is pressed
24
+ * @property {string} [label] - Accessibility label for the action
25
+ * @property {string} [className] - Additional classes for the action button container
26
+ * @property {string} [iconClassName] - Additional classes for the icon
27
+ * @property {boolean} [disabled] - Whether the action is disabled
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * const actions: AppBarAction[] = [
32
+ * { icon: Search, onPress: handleSearch, label: 'Search' },
33
+ * { icon: MoreVertical, onPress: handleMore, label: 'More options' }
34
+ * ];
35
+ * ```
36
+ */
37
+
38
+ /**
39
+ * Props for AppBar component - A flexible top app bar following Material Design guidelines
40
+ *
41
+ * @property {string | React.ReactNode} [title] - AppBar title text or custom component
42
+ * @property {string} [subtitle] - Optional subtitle text displayed below title
43
+ *
44
+ * @property {React.ReactNode} [leading] - Custom leading widget (can include multiple icons or custom components, overrides default back button)
45
+ * @property {boolean} [showLeading=true] - Whether to show the leading widget
46
+ * @property {() => void} [onLeadingPress] - Callback when leading icon is pressed (only used if no custom leading provided)
47
+ * @property {LucideIcon} [leadingIcon=ArrowLeft] - Icon for the leading button (only used if no custom leading provided)
48
+ *
49
+ * @property {React.ReactNode} [center] - Custom center component (overrides title/subtitle, can include images, text, or complex layouts)
50
+ *
51
+ * @property {AppBarAction[]} [actions=[]] - Array of action items to display on the right (supports multiple icons)
52
+ *
53
+ * @property {string} [className] - Additional classes for the root container
54
+ * @property {string} [titleClassName] - Additional classes for the title text
55
+ * @property {string} [subtitleClassName] - Additional classes for the subtitle text
56
+ * @property {string} [contentClassName] - Additional classes for the content container
57
+ * @property {string} [leadingClassName] - Additional classes for the leading section container
58
+ * @property {string} [centerClassName] - Additional classes for the center section container
59
+ * @property {string} [actionsClassName] - Additional classes for the actions section container
60
+ *
61
+ * @property {boolean} [centerTitle=false] - Whether to center the title
62
+ * @property {number} [elevation=4] - Elevation level for shadow (0 = no shadow)
63
+ * @property {boolean} [transparent=false] - Whether the AppBar background is transparent
64
+ *
65
+ * @property {boolean} [useSafeArea=true] - Whether to respect safe area insets
66
+ *
67
+ * @property {string} [backgroundColor] - Custom background color class
68
+ * @property {string} [foregroundColor] - Custom foreground/text color class
69
+ *
70
+ * @property {'default' | 'light-content' | 'dark-content'} [statusBarStyle] - Status bar text color (auto-adjusts based on theme if not set)
71
+ * @property {string} [statusBarColor] - Status bar background color (Android)
72
+ *
73
+ * @property {number} [height] - Custom height in pixels (default: 56px per Material Design)
74
+ *
75
+ * @property {React.ReactNode} [bottom] - Additional content below main app bar (e.g., tabs, search)
76
+ *
77
+ * @example
78
+ * ```tsx
79
+ * // Simple app bar with title
80
+ * <AppBar title="Home" />
81
+ *
82
+ * // With custom center containing image and text
83
+ * <AppBar
84
+ * center={
85
+ * <View className="flex-row items-center gap-2">
86
+ * <Image source={logo} className="w-8 h-8" />
87
+ * <Text className="text-lg font-bold">MyApp</Text>
88
+ * </View>
89
+ * }
90
+ * />
91
+ *
92
+ * // With multiple leading icons
93
+ * <AppBar
94
+ * title="Settings"
95
+ * leading={
96
+ * <View className="flex-row items-center">
97
+ * <IconButton icon={Menu} onPress={openMenu} />
98
+ * <IconButton icon={ArrowLeft} onPress={goBack} />
99
+ * </View>
100
+ * }
101
+ * actions={[
102
+ * { icon: Search, onPress: handleSearch },
103
+ * { icon: Settings, onPress: openSettings },
104
+ * { icon: MoreVertical, onPress: handleMore }
105
+ * ]}
106
+ * />
107
+ * ```
108
+ */
109
+
110
+ /**
111
+ * A flexible top app bar component following Material Design guidelines
112
+ *
113
+ * Provides consistent navigation and actions across your app with support for:
114
+ * - Customizable leading navigation (back button, menu, custom widget)
115
+ * - Title and subtitle with flexible positioning
116
+ * - Action buttons on the right side
117
+ * - Safe area insets handling
118
+ * - Platform-specific status bar configuration
119
+ * - Transparent overlay mode
120
+ * - Bottom content slot for tabs or search bars
121
+ *
122
+ * @component
123
+ * @example
124
+ * ```tsx
125
+ * // Basic with back button
126
+ * <AppBar
127
+ * title="Profile"
128
+ * onLeadingPress={() => navigation.goBack()}
129
+ * />
130
+ *
131
+ * // With menu and actions
132
+ * <AppBar
133
+ * title="Home"
134
+ * leadingIcon={Menu}
135
+ * onLeadingPress={openDrawer}
136
+ * actions={[
137
+ * { icon: Search, onPress: handleSearch },
138
+ * { icon: Settings, onPress: openSettings }
139
+ * ]}
140
+ * />
141
+ *
142
+ * // Transparent overlay (for use over content)
143
+ * <AppBar
144
+ * title="Photo"
145
+ * transparent
146
+ * foregroundColor="text-white"
147
+ * statusBarStyle="light-content"
148
+ * />
149
+ * ```
150
+ *
151
+ * @accessibility
152
+ * - Leading button includes "Navigate back" accessibility label
153
+ * - Action buttons support custom accessibility labels
154
+ * - Proper button role for all interactive elements
155
+ */
156
+ const AppBar = /*#__PURE__*/React.forwardRef(({
157
+ title,
158
+ subtitle,
159
+ leading,
160
+ showLeading = true,
161
+ onLeadingPress,
162
+ leadingIcon = ArrowLeft,
163
+ center,
164
+ actions = [],
165
+ className,
166
+ titleClassName,
167
+ subtitleClassName,
168
+ contentClassName,
169
+ leadingClassName,
170
+ centerClassName,
171
+ actionsClassName,
172
+ centerTitle = false,
173
+ elevation = 4,
174
+ transparent = false,
175
+ useSafeArea = true,
176
+ backgroundColor,
177
+ foregroundColor,
178
+ statusBarStyle,
179
+ statusBarColor,
180
+ height,
181
+ bottom
182
+ }, ref) => {
183
+ // Get the current color scheme for dark mode support
184
+ const {
185
+ colorScheme
186
+ } = useColorScheme();
187
+ const isDark = colorScheme === 'dark';
188
+
189
+ // Default height following Material Design guidelines
190
+ const defaultHeight = 56;
191
+ const appBarHeight = height ?? defaultHeight;
192
+
193
+ // Determine status bar style based on theme if not explicitly set
194
+ const defaultStatusBarStyle = transparent ? 'light-content' // Transparent bars usually overlay content, so use light text
195
+ : isDark ? 'light-content' : 'dark-content';
196
+ const resolvedStatusBarStyle = statusBarStyle ?? defaultStatusBarStyle;
197
+
198
+ // Background color
199
+ const bgColor = transparent ? 'bg-transparent' : backgroundColor || 'bg-background';
200
+
201
+ // Shadow/elevation styles
202
+ const elevationStyle = !transparent && elevation > 0 ? 'border-b border-border shadow-sm' : '';
203
+
204
+ // Render center/title content
205
+ const renderCenter = () => {
206
+ // If custom center is provided, use it
207
+ if (center) {
208
+ return /*#__PURE__*/_jsx(View, {
209
+ className: cn('flex-1 justify-center', centerClassName),
210
+ children: center
211
+ });
212
+ }
213
+
214
+ // Otherwise fall back to title/subtitle
215
+ if (!title) return null;
216
+ if (typeof title === 'string') {
217
+ return /*#__PURE__*/_jsxs(View, {
218
+ className: cn('flex-1 justify-center', subtitle && 'gap-0.5', centerClassName),
219
+ children: [/*#__PURE__*/_jsx(Text, {
220
+ className: cn('text-xl font-semibold', foregroundColor || 'text-foreground', titleClassName),
221
+ numberOfLines: 1,
222
+ ellipsizeMode: "tail",
223
+ children: title
224
+ }), subtitle && /*#__PURE__*/_jsx(Text, {
225
+ className: cn('text-xs', foregroundColor ? 'opacity-70' : 'text-muted-foreground', subtitleClassName),
226
+ numberOfLines: 1,
227
+ ellipsizeMode: "tail",
228
+ children: subtitle
229
+ })]
230
+ });
231
+ }
232
+ return /*#__PURE__*/_jsx(View, {
233
+ className: cn('flex-1 justify-center', centerClassName),
234
+ children: title
235
+ });
236
+ };
237
+
238
+ // Render leading icon/widget
239
+ const renderLeading = () => {
240
+ if (!showLeading) return null;
241
+ if (leading) {
242
+ return /*#__PURE__*/_jsx(View, {
243
+ className: cn('mr-2', leadingClassName),
244
+ children: leading
245
+ });
246
+ }
247
+ if (onLeadingPress) {
248
+ const LeadingIcon = leadingIcon;
249
+ return /*#__PURE__*/_jsx(Pressable, {
250
+ onPress: onLeadingPress,
251
+ className: cn('mr-2 -ml-2 h-10 w-10 items-center justify-center rounded-full active:bg-accent/50', leadingClassName),
252
+ accessibilityRole: "button",
253
+ accessibilityLabel: "Navigate back",
254
+ children: /*#__PURE__*/_jsx(Icon, {
255
+ as: LeadingIcon,
256
+ size: 24,
257
+ className: cn(foregroundColor || 'text-foreground')
258
+ })
259
+ });
260
+ }
261
+ return null;
262
+ };
263
+
264
+ // Render action items
265
+ const renderActions = () => {
266
+ if (!actions || actions.length === 0) return null;
267
+ return /*#__PURE__*/_jsx(View, {
268
+ className: cn('flex-row items-center gap-1', actionsClassName),
269
+ children: actions.map((action, index) => {
270
+ const ActionIcon = action.icon;
271
+ return /*#__PURE__*/_jsx(Pressable, {
272
+ onPress: action.onPress,
273
+ disabled: action.disabled,
274
+ className: cn('h-10 w-10 items-center justify-center rounded-full active:bg-accent/50', action.disabled && 'opacity-50', action.className),
275
+ accessibilityRole: "button",
276
+ accessibilityLabel: action.label || `Action ${index + 1}`,
277
+ children: /*#__PURE__*/_jsx(Icon, {
278
+ as: ActionIcon,
279
+ size: 24,
280
+ className: cn(foregroundColor || 'text-foreground', action.iconClassName)
281
+ })
282
+ }, index);
283
+ })
284
+ });
285
+ };
286
+ return /*#__PURE__*/_jsxs(_Fragment, {
287
+ children: [Platform.OS !== 'web' && /*#__PURE__*/_jsx(StatusBar, {
288
+ barStyle: resolvedStatusBarStyle,
289
+ backgroundColor: statusBarColor || 'transparent',
290
+ translucent: useSafeArea
291
+ }), useSafeArea ? /*#__PURE__*/_jsx(SafeAreaView, {
292
+ edges: ['top'],
293
+ children: /*#__PURE__*/_jsxs(View, {
294
+ ref: ref,
295
+ className: cn(bgColor, elevationStyle, className),
296
+ children: [/*#__PURE__*/_jsxs(View, {
297
+ className: cn('flex-row items-center justify-between px-4', contentClassName),
298
+ style: {
299
+ height: appBarHeight
300
+ },
301
+ children: [renderLeading(), /*#__PURE__*/_jsx(View, {
302
+ className: cn('flex-1', centerTitle && 'items-center', !centerTitle && 'items-start'),
303
+ children: renderCenter()
304
+ }), renderActions()]
305
+ }), bottom && /*#__PURE__*/_jsx(View, {
306
+ className: "pb-2",
307
+ children: bottom
308
+ })]
309
+ })
310
+ }) : /*#__PURE__*/_jsxs(View, {
311
+ ref: ref,
312
+ className: cn(bgColor, elevationStyle, className),
313
+ children: [/*#__PURE__*/_jsxs(View, {
314
+ className: cn('flex-row items-center justify-between px-4', contentClassName),
315
+ style: {
316
+ height: appBarHeight
317
+ },
318
+ children: [renderLeading(), /*#__PURE__*/_jsx(View, {
319
+ className: cn('flex-1', centerTitle && 'items-center', !centerTitle && 'items-start'),
320
+ children: renderCenter()
321
+ }), renderActions()]
322
+ }), bottom && /*#__PURE__*/_jsx(View, {
323
+ className: "pb-2",
324
+ children: bottom
325
+ })]
326
+ })]
327
+ });
328
+ });
329
+ AppBar.displayName = 'AppBar';
330
+
331
+ /**
332
+ * Pre-configured AppBar variants for common use cases
333
+ *
334
+ * @example
335
+ * ```tsx
336
+ * // Simple app bar without navigation
337
+ * <AppBarVariants.Simple title="Home" />
338
+ *
339
+ * // With back button
340
+ * <AppBarVariants.WithBack title="Details" onLeadingPress={goBack} />
341
+ *
342
+ * // With menu drawer
343
+ * <AppBarVariants.WithMenu title="Main" onLeadingPress={openDrawer} />
344
+ *
345
+ * // Transparent overlay
346
+ * <AppBarVariants.Transparent title="Gallery" />
347
+ *
348
+ * // Centered title
349
+ * <AppBarVariants.Centered title="About" />
350
+ * ```
351
+ */
352
+ export const AppBarVariants = {
353
+ // Simple app bar with just a title
354
+ Simple: props => /*#__PURE__*/_jsx(AppBar, {
355
+ ...props,
356
+ showLeading: false
357
+ }),
358
+ // App bar with back button
359
+ WithBack: props => /*#__PURE__*/_jsx(AppBar, {
360
+ ...props,
361
+ showLeading: true
362
+ }),
363
+ // App bar with menu icon
364
+ WithMenu: props => /*#__PURE__*/_jsx(AppBar, {
365
+ ...props,
366
+ leadingIcon: Menu,
367
+ showLeading: true
368
+ }),
369
+ // Transparent app bar (for use over content)
370
+ Transparent: props => /*#__PURE__*/_jsx(AppBar, {
371
+ ...props,
372
+ transparent: true,
373
+ elevation: 0
374
+ }),
375
+ // Centered title app bar
376
+ Centered: props => /*#__PURE__*/_jsx(AppBar, {
377
+ ...props,
378
+ centerTitle: true
379
+ })
380
+ };
381
+
382
+ /**
383
+ * Common icons exported for convenience when configuring AppBar
384
+ *
385
+ * @example
386
+ * ```tsx
387
+ * import { AppBar, AppBarIcons } from './AppBar';
388
+ *
389
+ * <AppBar
390
+ * leadingIcon={AppBarIcons.Menu}
391
+ * actions={[
392
+ * { icon: AppBarIcons.MoreVertical, onPress: handleMore }
393
+ * ]}
394
+ * />
395
+ * ```
396
+ */
397
+ export const AppBarIcons = {
398
+ Menu,
399
+ ArrowLeft,
400
+ MoreVertical
401
+ };
402
+ export { AppBar };
403
+ //# sourceMappingURL=AppBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ArrowLeft","Menu","MoreVertical","cssInterop","useColorScheme","React","Platform","Pressable","RNPressable","View","RNView","StatusBar","SafeAreaView","cn","Icon","Text","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","className","AppBar","forwardRef","title","subtitle","leading","showLeading","onLeadingPress","leadingIcon","center","actions","titleClassName","subtitleClassName","contentClassName","leadingClassName","centerClassName","actionsClassName","centerTitle","elevation","transparent","useSafeArea","backgroundColor","foregroundColor","statusBarStyle","statusBarColor","height","bottom","ref","colorScheme","isDark","defaultHeight","appBarHeight","defaultStatusBarStyle","resolvedStatusBarStyle","bgColor","elevationStyle","renderCenter","children","numberOfLines","ellipsizeMode","renderLeading","LeadingIcon","onPress","accessibilityRole","accessibilityLabel","as","size","renderActions","length","map","action","index","ActionIcon","icon","disabled","label","iconClassName","OS","barStyle","translucent","edges","style","displayName","AppBarVariants","Simple","props","WithBack","WithMenu","Transparent","Centered","AppBarIcons"],"sourceRoot":"../../../../src","sources":["components/ui/AppBar.tsx"],"mappings":";;AACA,SAASA,SAAS,EAAEC,IAAI,EAAEC,YAAY,QAAQ,qBAAqB;AACnE,SAASC,UAAU,EAAEC,cAAc,QAAQ,YAAY;AACvD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SACEC,QAAQ,EACRC,SAAS,IAAIC,WAAW,EACxBC,IAAI,IAAIC,MAAM,EACdC,SAAS,QACJ,cAAc;AACrB,SAASC,YAAY,QAAQ,gCAAgC;AAC7D,SAASC,EAAE,QAAQ,oBAAiB;AACpC,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,IAAI,QAAQ,WAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAE9B,MAAMZ,IAAI,GAAGN,UAAU,CAACO,MAAM,EAAE;EAAEY,SAAS,EAAE;AAAQ,CAAC,CAAC;AACvD,MAAMf,SAAS,GAAGJ,UAAU,CAACK,WAAW,EAAE;EAAEc,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ import * as AspectRatioPrimitive from '@rn-primitives/aspect-ratio';
4
+
5
+ /**
6
+ * Maintains a consistent aspect ratio for its child content
7
+ *
8
+ * Displays content within a desired ratio (e.g., 16/9, 4/3, 1/1) regardless of available space.
9
+ * Commonly used for images, videos, and embedded content that require specific proportions.
10
+ *
11
+ * @component
12
+ * @example
13
+ * ```tsx
14
+ * // 16:9 aspect ratio for video container
15
+ * <AspectRatio ratio={16 / 9} className="bg-muted">
16
+ * <Image source={{uri: 'video-thumbnail.jpg'}} className="h-full w-full rounded-md object-cover" />
17
+ * </AspectRatio>
18
+ *
19
+ * // Square aspect ratio for avatars
20
+ * <AspectRatio ratio={1} className="w-full">
21
+ * <Image source={{uri: 'avatar.jpg'}} className="h-full w-full" />
22
+ * </AspectRatio>
23
+ * ```
24
+ */
25
+ const AspectRatio = AspectRatioPrimitive.Root;
26
+ export { AspectRatio };
27
+ //# sourceMappingURL=Aspect-Ratio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AspectRatioPrimitive","AspectRatio","Root"],"sourceRoot":"../../../../src","sources":["components/ui/Aspect-Ratio.tsx"],"mappings":";;AAAA,OAAO,KAAKA,oBAAoB,MAAM,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAGD,oBAAoB,CAACE,IAAI;AAE7C,SAASD,WAAW","ignoreList":[]}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ import * as React from 'react';
4
+ import { Image, View } from 'react-native';
5
+ import { cssInterop } from 'nativewind';
6
+ import { cn } from "../../lib/utils.js";
7
+ import * as Slot from '@rn-primitives/slot';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ cssInterop(View, {
10
+ className: 'style'
11
+ });
12
+ cssInterop(Slot.View, {
13
+ className: 'style'
14
+ });
15
+ cssInterop(Image, {
16
+ className: 'style'
17
+ });
18
+
19
+ /**
20
+ * Avatar container component
21
+ *
22
+ * Circular container for displaying user avatars with images or fallback initials.
23
+ * Use with AvatarImage and AvatarFallback for complete functionality.
24
+ *
25
+ * @component
26
+ * @example
27
+ * ```tsx
28
+ * <Avatar>
29
+ * <AvatarImage source={{ uri: userPhoto }} alt="User avatar" />
30
+ * <AvatarFallback>
31
+ * <Text>JD</Text>
32
+ * </AvatarFallback>
33
+ * </Avatar>
34
+ * ```
35
+ *
36
+ * @property {boolean} [asChild] - When true, merges props into immediate child
37
+ * @property {string} [className] - Additional Tailwind classes
38
+ */
39
+ const Avatar = /*#__PURE__*/React.forwardRef(({
40
+ className,
41
+ asChild = false,
42
+ ...props
43
+ }, ref) => {
44
+ const Component = asChild ? Slot.View : View;
45
+ return /*#__PURE__*/_jsx(Component, {
46
+ className: cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className),
47
+ ref: ref,
48
+ ...props
49
+ });
50
+ });
51
+ Avatar.displayName = 'Avatar';
52
+
53
+ /**
54
+ * AvatarImage - Image component for avatar
55
+ *
56
+ * Displays the user's profile image. Falls back to AvatarFallback if image fails to load.
57
+ *
58
+ * @property {ImageSource} source - Image source (local or remote URI)
59
+ * @property {string} [alt] - Alternative text for accessibility
60
+ * @property {string} [className] - Additional Tailwind classes
61
+ */
62
+ const AvatarImage = /*#__PURE__*/React.forwardRef(({
63
+ className,
64
+ ...props
65
+ }, ref) => {
66
+ return /*#__PURE__*/_jsx(Image, {
67
+ className: cn('aspect-square h-full w-full', className),
68
+ ref: ref,
69
+ ...props
70
+ });
71
+ });
72
+ AvatarImage.displayName = 'AvatarImage';
73
+
74
+ /**
75
+ * AvatarFallback - Fallback content when image is unavailable
76
+ *
77
+ * Typically displays user initials or an icon. Shows when AvatarImage fails to load
78
+ * or is not provided.
79
+ *
80
+ * @property {boolean} [asChild] - When true, merges props into immediate child
81
+ * @property {string} [className] - Additional Tailwind classes
82
+ */
83
+ const AvatarFallback = /*#__PURE__*/React.forwardRef(({
84
+ className,
85
+ asChild = false,
86
+ ...props
87
+ }, ref) => {
88
+ const Component = asChild ? Slot.View : View;
89
+ return /*#__PURE__*/_jsx(Component, {
90
+ className: cn('flex h-full w-full items-center justify-center rounded-full bg-muted', className),
91
+ ref: ref,
92
+ ...props
93
+ });
94
+ });
95
+ AvatarFallback.displayName = 'AvatarFallback';
96
+ export { Avatar, AvatarImage, AvatarFallback };
97
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Image","View","cssInterop","cn","Slot","jsx","_jsx","className","Avatar","forwardRef","asChild","props","ref","Component","displayName","AvatarImage","AvatarFallback"],"sourceRoot":"../../../../src","sources":["components/ui/Avatar.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,KAAK,EAAEC,IAAI,QAAQ,cAAc;AAC1C,SAASC,UAAU,QAAQ,YAAY;AACvC,SAASC,EAAE,QAAQ,oBAAiB;AAEpC,OAAO,KAAKC,IAAI,MAAM,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5CJ,UAAU,CAACD,IAAI,EAAE;EAAEM,SAAS,EAAE;AAAQ,CAAC,CAAC;AACxCL,UAAU,CAACE,IAAI,CAACH,IAAI,EAAE;EAAEM,SAAS,EAAE;AAAQ,CAAC,CAAC;AAC7CL,UAAU,CAACF,KAAK,EAAE;EAAEO,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,MAAM,gBAAGT,KAAK,CAACU,UAAU,CAG7B,CAAC;EAAEF,SAAS;EAAEG,OAAO,GAAG,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACnD,MAAMC,SAAS,GAAGH,OAAO,GAAGN,IAAI,CAACH,IAAI,GAAGA,IAAI;EAC5C,oBACEK,IAAA,CAACO,SAAS;IACRN,SAAS,EAAEJ,EAAE,CACX,+DAA+D,EAC/DI,SACF,CAAE;IACFK,GAAG,EAAEA,GAAW;IAAA,GACZD;EAAK,CACV,CAAC;AAEN,CAAC,CAAC;AACFH,MAAM,CAACM,WAAW,GAAG,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,gBAAGhB,KAAK,CAACU,UAAU,CAMlC,CAAC;EAAEF,SAAS;EAAE,GAAGI;AAAM,CAAC,EAAEC,GAAG,KAAK;EAClC,oBACEN,IAAA,CAACN,KAAK;IACJO,SAAS,EAAEJ,EAAE,CAAC,6BAA6B,EAAEI,SAAS,CAAE;IACxDK,GAAG,EAAEA,GAAI;IAAA,GACLD;EAAK,CACV,CAAC;AAEN,CAAC,CAAC;AACFI,WAAW,CAACD,WAAW,GAAG,aAAa;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,cAAc,gBAAGjB,KAAK,CAACU,UAAU,CAGrC,CAAC;EAAEF,SAAS;EAAEG,OAAO,GAAG,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACnD,MAAMC,SAAS,GAAGH,OAAO,GAAGN,IAAI,CAACH,IAAI,GAAGA,IAAI;EAC5C,oBACEK,IAAA,CAACO,SAAS;IACRN,SAAS,EAAEJ,EAAE,CACX,sEAAsE,EACtEI,SACF,CAAE;IACFK,GAAG,EAAEA,GAAI;IAAA,GACLD;EAAK,CACV,CAAC;AAEN,CAAC,CAAC;AACFK,cAAc,CAACF,WAAW,GAAG,gBAAgB;AAE7C,SAASN,MAAM,EAAEO,WAAW,EAAEC,cAAc","ignoreList":[]}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+
3
+ import * as Slot from '@rn-primitives/slot';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cssInterop } from 'nativewind';
6
+ import * as React from 'react';
7
+ import { View } from 'react-native';
8
+ import { cn } from "../../lib/utils.js";
9
+ import { TextClassContext } from "./Text.js";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ cssInterop(View, {
12
+ className: 'style'
13
+ });
14
+ cssInterop(Slot.View, {
15
+ className: 'style'
16
+ });
17
+
18
+ /**
19
+ * Badge container style variants
20
+ *
21
+ * @variant default - Primary badge with solid background
22
+ * @variant secondary - Secondary badge with muted background
23
+ * @variant destructive - Destructive badge with danger/error styling
24
+ * @variant outline - Badge with border and transparent background
25
+ */
26
+ const badgeVariants = cva('flex-row items-center rounded-full border border-border px-2.5 py-0.5 web:inline-flex', {
27
+ variants: {
28
+ variant: {
29
+ default: 'border-transparent bg-primary',
30
+ secondary: 'border-transparent bg-secondary',
31
+ destructive: 'border-transparent bg-destructive',
32
+ outline: 'border-border'
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ variant: 'default'
37
+ }
38
+ });
39
+
40
+ /**
41
+ * Badge text style variants for matching text colors with badge variants
42
+ * Applied through TextClassContext to child Text components
43
+ *
44
+ * Variants match badgeVariants to ensure proper contrast
45
+ * @see badgeVariants
46
+ */
47
+ const badgeTextVariants = cva('text-xs font-semibold', {
48
+ variants: {
49
+ variant: {
50
+ default: 'text-primary-foreground',
51
+ secondary: 'text-secondary-foreground',
52
+ destructive: 'text-destructive-foreground',
53
+ outline: 'text-foreground'
54
+ }
55
+ },
56
+ defaultVariants: {
57
+ variant: 'default'
58
+ }
59
+ });
60
+
61
+ /**
62
+ * Props for Badge component
63
+ *
64
+ * @extends SlottableViewProps - Includes all View props plus asChild for slot composition
65
+ * @extends VariantProps - Includes variant styling options from badgeVariants
66
+ *
67
+ * @property {string} [className] - Additional Tailwind classes for custom styling
68
+ * @property {boolean} [asChild] - When true, merges props into immediate child
69
+ * @property {'default' | 'secondary' | 'destructive' | 'outline'} [variant='default'] - Badge style variant
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * <Badge variant="default">
74
+ * <Text>New</Text>
75
+ * </Badge>
76
+ * ```
77
+ */
78
+
79
+ /**
80
+ * A compact badge component for displaying status, labels, or counts
81
+ *
82
+ * Small, pill-shaped component for highlighting information. Supports multiple
83
+ * variants for different contexts and automatically styles child Text components.
84
+ *
85
+ * @component
86
+ * @example
87
+ * ```tsx
88
+ * // Status badge
89
+ * <Badge variant="default">
90
+ * <Text>Active</Text>
91
+ * </Badge>
92
+ *
93
+ * // Count badge
94
+ * <Badge variant="destructive">
95
+ * <Text>5</Text>
96
+ * </Badge>
97
+ *
98
+ * // Outline badge
99
+ * <Badge variant="outline">
100
+ * <Text>Draft</Text>
101
+ * </Badge>
102
+ * ```
103
+ */
104
+ const Badge = /*#__PURE__*/React.forwardRef(({
105
+ className,
106
+ variant,
107
+ asChild = false,
108
+ ...props
109
+ }, ref) => {
110
+ const Component = asChild ? Slot.View : View;
111
+ return /*#__PURE__*/_jsx(TextClassContext.Provider, {
112
+ value: cn(badgeTextVariants({
113
+ variant
114
+ })),
115
+ children: /*#__PURE__*/_jsx(Component, {
116
+ className: cn(badgeVariants({
117
+ variant,
118
+ className
119
+ })),
120
+ ref: ref,
121
+ ...props
122
+ })
123
+ });
124
+ });
125
+ Badge.displayName = 'Badge';
126
+ export { Badge, badgeTextVariants, badgeVariants };
127
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Slot","cva","cssInterop","React","View","cn","TextClassContext","jsx","_jsx","className","badgeVariants","variants","variant","default","secondary","destructive","outline","defaultVariants","badgeTextVariants","Badge","forwardRef","asChild","props","ref","Component","Provider","value","children","displayName"],"sourceRoot":"../../../../src","sources":["components/ui/Badge.tsx"],"mappings":";;AAAA,OAAO,KAAKA,IAAI,MAAM,qBAAqB;AAE3C,SAASC,GAAG,QAA2B,0BAA0B;AACjE,SAASC,UAAU,QAAQ,YAAY;AACvC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,EAAE,QAAQ,oBAAiB;AACpC,SAASC,gBAAgB,QAAQ,WAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1CN,UAAU,CAACE,IAAI,EAAE;EAAEK,SAAS,EAAE;AAAQ,CAAC,CAAC;AACxCP,UAAU,CAACF,IAAI,CAACI,IAAI,EAAE;EAAEK,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGT,GAAG,CACvB,uFAAuF,EACvF;EACEU,QAAQ,EAAE;IACRC,OAAO,EAAE;MACPC,OAAO,EAAE,+BAA+B;MACxCC,SAAS,EAAE,iCAAiC;MAC5CC,WAAW,EAAE,mCAAmC;MAChDC,OAAO,EAAE;IACX;EACF,CAAC;EACDC,eAAe,EAAE;IACfL,OAAO,EAAE;EACX;AACF,CACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,iBAAiB,GAAGjB,GAAG,CAAC,uBAAuB,EAAE;EACrDU,QAAQ,EAAE;IACRC,OAAO,EAAE;MACPC,OAAO,EAAE,yBAAyB;MAClCC,SAAS,EAAE,2BAA2B;MACtCC,WAAW,EAAE,6BAA6B;MAC1CC,OAAO,EAAE;IACX;EACF,CAAC;EACDC,eAAe,EAAE;IACfL,OAAO,EAAE;EACX;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMO,KAAK,gBAAGhB,KAAK,CAACiB,UAAU,CAC5B,CAAC;EAAEX,SAAS;EAAEG,OAAO;EAAES,OAAO,GAAG,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EAC1D,MAAMC,SAAS,GAAGH,OAAO,GAAGrB,IAAI,CAACI,IAAI,GAAGA,IAAI;EAC5C,oBACEI,IAAA,CAACF,gBAAgB,CAACmB,QAAQ;IAACC,KAAK,EAAErB,EAAE,CAACa,iBAAiB,CAAC;MAAEN;IAAQ,CAAC,CAAC,CAAE;IAAAe,QAAA,eACnEnB,IAAA,CAACgB,SAAS;MACRf,SAAS,EAAEJ,EAAE,CAACK,aAAa,CAAC;QAAEE,OAAO;QAAEH;MAAU,CAAC,CAAC,CAAE;MACrDc,GAAG,EAAEA,GAAW;MAAA,GACZD;IAAK,CACV;EAAC,CACuB,CAAC;AAEhC,CACF,CAAC;AACDH,KAAK,CAACS,WAAW,GAAG,OAAO;AAE3B,SAAST,KAAK,EAAED,iBAAiB,EAAER,aAAa","ignoreList":[]}