@almadar/mobile 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
  2. package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
  3. package/dist/chunk-5U5Z65ZO.js.map +1 -0
  4. package/dist/chunk-A56SRZKI.js +59 -0
  5. package/dist/chunk-A56SRZKI.js.map +1 -0
  6. package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
  7. package/dist/chunk-BFRVXKSP.js.map +1 -0
  8. package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
  9. package/dist/chunk-ETD72PHO.js.map +1 -0
  10. package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
  11. package/dist/chunk-GMR5FKKB.js.map +1 -0
  12. package/dist/chunk-K2JGK2QD.js +17 -0
  13. package/dist/chunk-K2JGK2QD.js.map +1 -0
  14. package/dist/chunk-MLTSQPVN.js +337 -0
  15. package/dist/chunk-MLTSQPVN.js.map +1 -0
  16. package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
  17. package/dist/chunk-PBO6ZN2M.js.map +1 -0
  18. package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
  19. package/dist/chunk-QUFLYKWA.js.map +1 -0
  20. package/dist/chunk-TRYFJDL3.js +7 -0
  21. package/dist/chunk-TRYFJDL3.js.map +1 -0
  22. package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
  23. package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
  24. package/dist/components/atoms/DayCell.d.ts +18 -0
  25. package/dist/components/atoms/DayCell.d.ts.map +1 -0
  26. package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
  27. package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
  28. package/dist/components/atoms/RangeSlider.d.ts +20 -0
  29. package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
  30. package/dist/components/atoms/StatusDot.d.ts +16 -0
  31. package/dist/components/atoms/StatusDot.d.ts.map +1 -0
  32. package/dist/components/atoms/TextHighlight.d.ts +17 -0
  33. package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
  34. package/dist/components/atoms/ThemeToggle.d.ts +13 -0
  35. package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
  36. package/dist/components/atoms/TrendIndicator.d.ts +16 -0
  37. package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
  38. package/dist/components/atoms/TypewriterText.d.ts +16 -0
  39. package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
  40. package/dist/components/atoms/index.d.ts +18 -0
  41. package/dist/components/atoms/index.d.ts.map +1 -1
  42. package/dist/components/atoms/index.js +30 -10
  43. package/dist/components/index.js +59 -18
  44. package/dist/components/molecules/Accordion.d.ts +20 -0
  45. package/dist/components/molecules/Accordion.d.ts.map +1 -0
  46. package/dist/components/molecules/CalendarGrid.d.ts +22 -0
  47. package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
  48. package/dist/components/molecules/Carousel.d.ts +17 -0
  49. package/dist/components/molecules/Carousel.d.ts.map +1 -0
  50. package/dist/components/molecules/DataGrid.d.ts +43 -0
  51. package/dist/components/molecules/DataGrid.d.ts.map +1 -0
  52. package/dist/components/molecules/DataList.d.ts +43 -0
  53. package/dist/components/molecules/DataList.d.ts.map +1 -0
  54. package/dist/components/molecules/FlipCard.d.ts +16 -0
  55. package/dist/components/molecules/FlipCard.d.ts.map +1 -0
  56. package/dist/components/molecules/Lightbox.d.ts +19 -0
  57. package/dist/components/molecules/Lightbox.d.ts.map +1 -0
  58. package/dist/components/molecules/NumberStepper.d.ts +19 -0
  59. package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
  60. package/dist/components/molecules/PullToRefresh.d.ts +14 -0
  61. package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
  62. package/dist/components/molecules/SortableList.d.ts +17 -0
  63. package/dist/components/molecules/SortableList.d.ts.map +1 -0
  64. package/dist/components/molecules/StarRating.d.ts +19 -0
  65. package/dist/components/molecules/StarRating.d.ts.map +1 -0
  66. package/dist/components/molecules/SwipeableRow.d.ts +20 -0
  67. package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
  68. package/dist/components/molecules/index.d.ts +24 -0
  69. package/dist/components/molecules/index.d.ts.map +1 -1
  70. package/dist/components/molecules/index.js +30 -5
  71. package/dist/components/organisms/FormSection.d.ts +7 -0
  72. package/dist/components/organisms/FormSection.d.ts.map +1 -1
  73. package/dist/components/organisms/index.d.ts +0 -4
  74. package/dist/components/organisms/index.d.ts.map +1 -1
  75. package/dist/components/organisms/index.js +4 -8
  76. package/dist/index.js +72 -26
  77. package/dist/index.js.map +1 -1
  78. package/dist/lib/getNestedValue.d.ts +5 -0
  79. package/dist/lib/getNestedValue.d.ts.map +1 -0
  80. package/dist/lib/index.d.ts +1 -0
  81. package/dist/lib/index.d.ts.map +1 -1
  82. package/dist/lib/index.js +6 -2
  83. package/dist/providers/ThemeProvider.d.ts +7 -0
  84. package/dist/providers/ThemeProvider.d.ts.map +1 -1
  85. package/dist/providers/index.d.ts +2 -2
  86. package/dist/providers/index.d.ts.map +1 -1
  87. package/dist/providers/index.js +8 -4
  88. package/package.json +30 -29
  89. package/dist/chunk-6RVITGGH.js +0 -167
  90. package/dist/chunk-6RVITGGH.js.map +0 -1
  91. package/dist/chunk-7C5JCLLY.js.map +0 -1
  92. package/dist/chunk-DMLYJFYQ.js.map +0 -1
  93. package/dist/chunk-DY52O4T3.js.map +0 -1
  94. package/dist/chunk-LFHVNHVA.js.map +0 -1
  95. package/dist/chunk-T77JPOTP.js.map +0 -1
  96. package/dist/chunk-VLUJ7BXN.js +0 -36
  97. package/dist/chunk-VLUJ7BXN.js.map +0 -1
  98. package/dist/chunk-YMJZLYLV.js.map +0 -1
  99. package/dist/components/organisms/EntityCard.d.ts +0 -11
  100. package/dist/components/organisms/EntityCard.d.ts.map +0 -1
  101. package/dist/components/organisms/EntityList.d.ts +0 -17
  102. package/dist/components/organisms/EntityList.d.ts.map +0 -1
  103. /package/dist/{chunk-S2IT7WZT.js.map → chunk-5JVEVV74.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ErrorState,
3
3
  LoadingState
4
- } from "./chunk-7C5JCLLY.js";
4
+ } from "./chunk-QUFLYKWA.js";
5
5
  import {
6
6
  useEventBus
7
7
  } from "./chunk-YTVYMEKU.js";
@@ -90,87 +90,7 @@ var styles = StyleSheet.create({
90
90
  });
91
91
  Checkbox.displayName = "Checkbox";
92
92
 
93
- // src/components/atoms/Icon.tsx
94
- import React2 from "react";
95
- import { View as View2, Text, StyleSheet as StyleSheet2 } from "react-native";
96
- var iconMap = {
97
- home: "\u{1F3E0}",
98
- user: "\u{1F464}",
99
- settings: "\u2699\uFE0F",
100
- "arrow-right": "\u2192",
101
- "arrow-left": "\u2190",
102
- check: "\u2713",
103
- x: "\u2715",
104
- plus: "+",
105
- minus: "\u2212",
106
- search: "\u{1F50D}",
107
- menu: "\u2630",
108
- "more-vertical": "\u22EE",
109
- "chevron-right": "\u203A",
110
- "chevron-left": "\u2039",
111
- "chevron-down": "\u2304",
112
- "chevron-up": "\u2303"
113
- };
114
- var Icon = ({
115
- name,
116
- size = 24,
117
- color = "#374151",
118
- style
119
- }) => {
120
- return /* @__PURE__ */ React2.createElement(View2, { style: [styles2.container, { width: size, height: size }, style] }, /* @__PURE__ */ React2.createElement(Text, { style: [
121
- styles2.icon,
122
- { fontSize: size * 0.7, color, lineHeight: size }
123
- ] }, iconMap[name] || "?"));
124
- };
125
- var styles2 = StyleSheet2.create({
126
- container: {
127
- alignItems: "center",
128
- justifyContent: "center"
129
- },
130
- icon: {
131
- textAlign: "center"
132
- }
133
- });
134
- Icon.displayName = "Icon";
135
-
136
- // src/components/atoms/Divider.tsx
137
- import React3 from "react";
138
- import { View as View3, StyleSheet as StyleSheet3 } from "react-native";
139
- var Divider = ({
140
- orientation = "horizontal",
141
- thickness = 1,
142
- style
143
- }) => {
144
- const theme = useTheme();
145
- return /* @__PURE__ */ React3.createElement(
146
- View3,
147
- {
148
- style: [
149
- orientation === "horizontal" ? styles3.horizontal : styles3.vertical,
150
- {
151
- backgroundColor: theme.colors.border,
152
- ...orientation === "horizontal" ? { height: thickness } : { width: thickness }
153
- },
154
- style
155
- ]
156
- }
157
- );
158
- };
159
- var styles3 = StyleSheet3.create({
160
- horizontal: {
161
- width: "100%",
162
- marginVertical: 8
163
- },
164
- vertical: {
165
- height: "100%",
166
- marginHorizontal: 8
167
- }
168
- });
169
- Divider.displayName = "Divider";
170
-
171
93
  export {
172
- Checkbox,
173
- Icon,
174
- Divider
94
+ Checkbox
175
95
  };
176
- //# sourceMappingURL=chunk-LFHVNHVA.js.map
96
+ //# sourceMappingURL=chunk-GMR5FKKB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/atoms/Checkbox.tsx"],"sourcesContent":["import React from 'react';\nimport { \n TouchableOpacity, \n View, \n StyleSheet, \n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { LoadingState } from '../molecules/LoadingState';\nimport { ErrorState } from '../molecules/ErrorState';\n\nexport interface CheckboxProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n /** Payload to include with the change event */\n actionPayload?: Record<string, unknown>;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n onChange,\n disabled = false,\n size = 'md',\n style,\n isLoading,\n error,\n changeEvent,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (disabled || isLoading) return;\n \n const newValue = !checked;\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { ...actionPayload, checked: newValue });\n }\n onChange?.(newValue);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const sizeStyles: Record<string, { box: number; check: number }> = {\n sm: { box: 18, check: 10 },\n md: { box: 24, check: 14 },\n lg: { box: 32, check: 18 },\n };\n\n const { box, check } = sizeStyles[size];\n\n return (\n <TouchableOpacity\n onPress={handlePress}\n disabled={disabled}\n activeOpacity={0.8}\n style={[\n styles.container,\n {\n width: box,\n height: box,\n borderRadius: theme.borderRadius.sm,\n borderWidth: 2,\n borderColor: checked \n ? theme.colors.primary \n : theme.colors.border,\n backgroundColor: checked \n ? theme.colors.primary \n : theme.colors.card,\n opacity: disabled ? 0.5 : 1,\n },\n style,\n ]}\n >\n {checked && (\n <View\n style={{\n width: check,\n height: check,\n backgroundColor: theme.colors['primary-foreground'],\n transform: [{ rotate: '45deg' }],\n }}\n />\n )}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nCheckbox.displayName = 'Checkbox';\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAwBA,IAAM,WAAoC,CAAC;AAAA,EAChD,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY,UAAW;AAE3B,UAAM,WAAW,CAAC;AAClB,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,GAAG,eAAe,SAAS,SAAS,CAAC;AAAA,IAC5E;AACA,eAAW,QAAQ;AAAA,EACrB;AAEA,MAAI,WAAW;AACb,WACE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,KAAK,KACnC,oCAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,KAAK,KACnC,oCAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,aAA6D;AAAA,IACjE,IAAI,EAAE,KAAK,IAAI,OAAO,GAAG;AAAA,IACzB,IAAI,EAAE,KAAK,IAAI,OAAO,GAAG;AAAA,IACzB,IAAI,EAAE,KAAK,IAAI,OAAO,GAAG;AAAA,EAC3B;AAEA,QAAM,EAAE,KAAK,MAAM,IAAI,WAAW,IAAI;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,eAAe;AAAA,MACf,OAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc,MAAM,aAAa;AAAA,UACjC,aAAa;AAAA,UACb,aAAa,UACT,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,UACjB,iBAAiB,UACb,MAAM,OAAO,UACb,MAAM,OAAO;AAAA,UACjB,SAAS,WAAW,MAAM;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC,WACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB,MAAM,OAAO,oBAAoB;AAAA,UAClD,WAAW,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,QACjC;AAAA;AAAA,IACF;AAAA,EAEJ;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,SAAS,cAAc;","names":[]}
@@ -0,0 +1,17 @@
1
+ // src/lib/getNestedValue.ts
2
+ function getNestedValue(obj, path) {
3
+ if (obj === null || obj === void 0 || !path) return void 0;
4
+ if (!path.includes(".")) return obj[path];
5
+ const parts = path.split(".");
6
+ let value = obj;
7
+ for (const part of parts) {
8
+ if (value === null || value === void 0 || typeof value !== "object") return void 0;
9
+ value = value[part];
10
+ }
11
+ return value;
12
+ }
13
+
14
+ export {
15
+ getNestedValue
16
+ };
17
+ //# sourceMappingURL=chunk-K2JGK2QD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/getNestedValue.ts"],"sourcesContent":["/**\n * Safely retrieves nested values from objects using dot-notation paths.\n */\nexport function getNestedValue(\n obj: Record<string, unknown> | null | undefined,\n path: string\n): unknown {\n if (obj === null || obj === undefined || !path) return undefined;\n if (!path.includes('.')) return obj[path];\n\n const parts = path.split('.');\n let value: unknown = obj;\n\n for (const part of parts) {\n if (value === null || value === undefined || typeof value !== 'object') return undefined;\n value = (value as Record<string, unknown>)[part];\n }\n\n return value;\n}\n"],"mappings":";AAGO,SAAS,eACd,KACA,MACS;AACT,MAAI,QAAQ,QAAQ,QAAQ,UAAa,CAAC,KAAM,QAAO;AACvD,MAAI,CAAC,KAAK,SAAS,GAAG,EAAG,QAAO,IAAI,IAAI;AAExC,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,QAAiB;AAErB,aAAW,QAAQ,OAAO;AACxB,QAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,SAAU,QAAO;AAC/E,YAAS,MAAkC,IAAI;AAAA,EACjD;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,337 @@
1
+ import {
2
+ Typography
3
+ } from "./chunk-QUFLYKWA.js";
4
+ import {
5
+ useEventBus
6
+ } from "./chunk-YTVYMEKU.js";
7
+ import {
8
+ useTheme
9
+ } from "./chunk-CUAWHLEK.js";
10
+
11
+ // src/components/atoms/Label.tsx
12
+ import React from "react";
13
+ import { Text, StyleSheet } from "react-native";
14
+ var Label = ({
15
+ children,
16
+ required = false,
17
+ disabled = false,
18
+ style
19
+ }) => {
20
+ const theme = useTheme();
21
+ return /* @__PURE__ */ React.createElement(
22
+ Text,
23
+ {
24
+ style: [
25
+ styles.label,
26
+ {
27
+ color: disabled ? theme.colors["muted-foreground"] : theme.colors.foreground
28
+ },
29
+ style
30
+ ]
31
+ },
32
+ children,
33
+ required && /* @__PURE__ */ React.createElement(Text, { style: [styles.required, { color: theme.colors.error }] }, " *")
34
+ );
35
+ };
36
+ var styles = StyleSheet.create({
37
+ label: {
38
+ fontSize: 14,
39
+ fontWeight: "500",
40
+ marginBottom: 6
41
+ },
42
+ required: {
43
+ fontWeight: "400"
44
+ }
45
+ });
46
+ Label.displayName = "Label";
47
+
48
+ // src/components/atoms/Spinner.tsx
49
+ import React2 from "react";
50
+ import { ActivityIndicator, StyleSheet as StyleSheet2, View } from "react-native";
51
+ var Spinner = ({
52
+ size = "md",
53
+ color,
54
+ style
55
+ }) => {
56
+ const theme = useTheme();
57
+ const sizeMap2 = {
58
+ sm: 16,
59
+ md: 24,
60
+ lg: 32
61
+ };
62
+ return /* @__PURE__ */ React2.createElement(View, { style: [styles2.container, style] }, /* @__PURE__ */ React2.createElement(
63
+ ActivityIndicator,
64
+ {
65
+ size: sizeMap2[size],
66
+ color: color || theme.colors.primary
67
+ }
68
+ ));
69
+ };
70
+ var styles2 = StyleSheet2.create({
71
+ container: {
72
+ alignItems: "center",
73
+ justifyContent: "center"
74
+ }
75
+ });
76
+ Spinner.displayName = "Spinner";
77
+
78
+ // src/components/atoms/DayCell.tsx
79
+ import React3 from "react";
80
+ import { Pressable, StyleSheet as StyleSheet3 } from "react-native";
81
+ var DayCell = ({
82
+ date,
83
+ isToday = false,
84
+ isSelected = false,
85
+ isDisabled = false,
86
+ hasEvents = false,
87
+ onClick,
88
+ action,
89
+ actionPayload,
90
+ style
91
+ }) => {
92
+ const theme = useTheme();
93
+ const eventBus = useEventBus();
94
+ const handlePress = () => {
95
+ if (isDisabled) return;
96
+ if (action) {
97
+ eventBus.emit(`UI:${action}`, actionPayload);
98
+ }
99
+ onClick?.();
100
+ };
101
+ return /* @__PURE__ */ React3.createElement(
102
+ Pressable,
103
+ {
104
+ onPress: handlePress,
105
+ disabled: isDisabled,
106
+ style: [
107
+ styles3.cell,
108
+ {
109
+ borderRadius: theme.borderRadius.md
110
+ },
111
+ isToday && {
112
+ borderWidth: 2,
113
+ borderColor: theme.colors.primary
114
+ },
115
+ isSelected && {
116
+ backgroundColor: theme.colors.primary
117
+ },
118
+ isDisabled && {
119
+ opacity: 0.3
120
+ },
121
+ style
122
+ ]
123
+ },
124
+ /* @__PURE__ */ React3.createElement(
125
+ Typography,
126
+ {
127
+ variant: "body",
128
+ style: [
129
+ styles3.dateText,
130
+ {
131
+ color: isSelected ? theme.colors["primary-foreground"] : isDisabled ? theme.colors["muted-foreground"] : theme.colors.foreground
132
+ }
133
+ ]
134
+ },
135
+ date
136
+ ),
137
+ hasEvents && /* @__PURE__ */ React3.createElement(
138
+ Pressable,
139
+ {
140
+ style: [
141
+ styles3.eventDot,
142
+ {
143
+ backgroundColor: isSelected ? theme.colors["primary-foreground"] : theme.colors.primary
144
+ }
145
+ ]
146
+ }
147
+ )
148
+ );
149
+ };
150
+ var styles3 = StyleSheet3.create({
151
+ cell: {
152
+ width: 40,
153
+ height: 40,
154
+ alignItems: "center",
155
+ justifyContent: "center"
156
+ },
157
+ dateText: {
158
+ fontSize: 14,
159
+ fontWeight: "400"
160
+ },
161
+ eventDot: {
162
+ position: "absolute",
163
+ bottom: 4,
164
+ width: 4,
165
+ height: 4,
166
+ borderRadius: 2
167
+ }
168
+ });
169
+ DayCell.displayName = "DayCell";
170
+
171
+ // src/components/atoms/InfiniteScrollSentinel.tsx
172
+ import React4, { useEffect } from "react";
173
+ import { View as View2, StyleSheet as StyleSheet4 } from "react-native";
174
+ var InfiniteScrollSentinel = ({
175
+ loadMoreEvent,
176
+ loadMorePayload,
177
+ isLoading = false,
178
+ hasMore = true,
179
+ onLoadMore,
180
+ style
181
+ }) => {
182
+ const theme = useTheme();
183
+ const eventBus = useEventBus();
184
+ useEffect(() => {
185
+ if (hasMore && !isLoading) {
186
+ if (loadMoreEvent) {
187
+ eventBus.emit(`UI:${loadMoreEvent}`, loadMorePayload);
188
+ }
189
+ onLoadMore?.();
190
+ }
191
+ }, [hasMore, isLoading, loadMoreEvent, loadMorePayload, onLoadMore, eventBus]);
192
+ if (!hasMore) {
193
+ return /* @__PURE__ */ React4.createElement(View2, { style: [styles4.container, style] }, /* @__PURE__ */ React4.createElement(Typography, { variant: "caption", style: { color: theme.colors["muted-foreground"] } }, "No more items"));
194
+ }
195
+ if (isLoading) {
196
+ return /* @__PURE__ */ React4.createElement(View2, { style: [styles4.container, style] }, /* @__PURE__ */ React4.createElement(Spinner, { size: "sm" }));
197
+ }
198
+ return /* @__PURE__ */ React4.createElement(View2, { style: [styles4.sentinel, style] });
199
+ };
200
+ var styles4 = StyleSheet4.create({
201
+ container: {
202
+ padding: 16,
203
+ alignItems: "center",
204
+ justifyContent: "center"
205
+ },
206
+ sentinel: {
207
+ height: 1
208
+ }
209
+ });
210
+ InfiniteScrollSentinel.displayName = "InfiniteScrollSentinel";
211
+
212
+ // src/components/atoms/game/ControlButton.tsx
213
+ import React5, { useState, useCallback } from "react";
214
+ import {
215
+ TouchableOpacity,
216
+ Text as Text2,
217
+ StyleSheet as StyleSheet5
218
+ } from "react-native";
219
+ var sizeMap = {
220
+ sm: { width: 40, height: 40, fontSize: 14 },
221
+ md: { width: 56, height: 56, fontSize: 16 },
222
+ lg: { width: 72, height: 72, fontSize: 20 },
223
+ xl: { width: 96, height: 96, fontSize: 24 }
224
+ };
225
+ var shapeMap = {
226
+ circle: 9999,
227
+ rounded: 12,
228
+ square: 4
229
+ };
230
+ var variantMap = {
231
+ primary: {
232
+ backgroundColor: "#2563eb",
233
+ borderColor: "#60a5fa",
234
+ textColor: "#ffffff"
235
+ },
236
+ secondary: {
237
+ backgroundColor: "#374151",
238
+ borderColor: "#6b7280",
239
+ textColor: "#ffffff"
240
+ },
241
+ ghost: {
242
+ backgroundColor: "transparent",
243
+ borderColor: "rgba(255,255,255,0.3)",
244
+ textColor: "#ffffff"
245
+ }
246
+ };
247
+ var ControlButton = ({
248
+ label,
249
+ icon,
250
+ size = "md",
251
+ shape = "circle",
252
+ variant = "secondary",
253
+ onPress,
254
+ onRelease,
255
+ pressEvent,
256
+ releaseEvent,
257
+ pressed,
258
+ disabled,
259
+ style
260
+ }) => {
261
+ useTheme();
262
+ const eventBus = useEventBus();
263
+ const [isPressed, setIsPressed] = useState(false);
264
+ const actualPressed = pressed ?? isPressed;
265
+ const sizeConfig = sizeMap[size] ?? sizeMap.md;
266
+ const borderRadius = shapeMap[shape] ?? shapeMap.circle;
267
+ const variantConfig = variantMap[variant] ?? variantMap.secondary;
268
+ const handlePressIn = useCallback(
269
+ (_e) => {
270
+ if (disabled) return;
271
+ setIsPressed(true);
272
+ if (pressEvent) eventBus.emit(`UI:${pressEvent}`, {});
273
+ onPress?.();
274
+ },
275
+ [disabled, pressEvent, eventBus, onPress]
276
+ );
277
+ const handlePressOut = useCallback(
278
+ (_e) => {
279
+ if (disabled) return;
280
+ setIsPressed(false);
281
+ if (releaseEvent) eventBus.emit(`UI:${releaseEvent}`, {});
282
+ onRelease?.();
283
+ },
284
+ [disabled, releaseEvent, eventBus, onRelease]
285
+ );
286
+ return /* @__PURE__ */ React5.createElement(
287
+ TouchableOpacity,
288
+ {
289
+ activeOpacity: 0.8,
290
+ disabled,
291
+ onPressIn: handlePressIn,
292
+ onPressOut: handlePressOut,
293
+ style: [
294
+ styles5.button,
295
+ {
296
+ width: sizeConfig.width,
297
+ height: sizeConfig.height,
298
+ borderRadius,
299
+ backgroundColor: variantConfig.backgroundColor,
300
+ borderColor: variantConfig.borderColor,
301
+ opacity: disabled ? 0.5 : 1,
302
+ transform: [{ scale: actualPressed ? 0.95 : 1 }]
303
+ },
304
+ style
305
+ ]
306
+ },
307
+ icon ? /* @__PURE__ */ React5.createElement(Text2, { style: { fontSize: sizeConfig.fontSize * 1.5 } }, icon) : label ? /* @__PURE__ */ React5.createElement(
308
+ Text2,
309
+ {
310
+ style: {
311
+ fontSize: sizeConfig.fontSize,
312
+ color: variantConfig.textColor,
313
+ fontWeight: "700"
314
+ }
315
+ },
316
+ label
317
+ ) : null
318
+ );
319
+ };
320
+ var styles5 = StyleSheet5.create({
321
+ button: {
322
+ justifyContent: "center",
323
+ alignItems: "center",
324
+ borderWidth: 2,
325
+ userSelect: "none"
326
+ }
327
+ });
328
+ ControlButton.displayName = "ControlButton";
329
+
330
+ export {
331
+ Label,
332
+ Spinner,
333
+ DayCell,
334
+ InfiniteScrollSentinel,
335
+ ControlButton
336
+ };
337
+ //# sourceMappingURL=chunk-MLTSQPVN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/atoms/Label.tsx","../src/components/atoms/Spinner.tsx","../src/components/atoms/DayCell.tsx","../src/components/atoms/InfiniteScrollSentinel.tsx","../src/components/atoms/game/ControlButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, StyleSheet, TextStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface LabelProps {\n children: React.ReactNode;\n required?: boolean;\n disabled?: boolean;\n style?: TextStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Label: React.FC<LabelProps> = ({\n children,\n required = false,\n disabled = false,\n style,\n}) => {\n const theme = useTheme();\n\n return (\n <Text\n style={[\n styles.label,\n {\n color: disabled \n ? theme.colors['muted-foreground'] \n : theme.colors.foreground,\n },\n style,\n ]}\n >\n {children}\n {required && (\n <Text style={[styles.required, { color: theme.colors.error }]}>\n {' *'}\n </Text>\n )}\n </Text>\n );\n};\n\nconst styles = StyleSheet.create({\n label: {\n fontSize: 14,\n fontWeight: '500',\n marginBottom: 6,\n },\n required: {\n fontWeight: '400',\n },\n});\n\nLabel.displayName = 'Label';\n","import React from 'react';\nimport { ActivityIndicator, StyleSheet, View, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface SpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color,\n style,\n}) => {\n const theme = useTheme();\n\n const sizeMap: Record<string, number> = {\n sm: 16,\n md: 24,\n lg: 32,\n };\n\n return (\n <View style={[styles.container, style]}>\n <ActivityIndicator\n size={sizeMap[size]}\n color={color || theme.colors.primary}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nSpinner.displayName = 'Spinner';\n","import React from 'react';\nimport { Pressable, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from './Typography';\n\nexport interface DayCellProps {\n date: number;\n isToday?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n hasEvents?: boolean;\n onClick?: () => void;\n action?: string;\n actionPayload?: Record<string, unknown>;\n style?: ViewStyle;\n isLoading?: boolean;\n error?: Error | null;\n entity?: string;\n}\n\nexport const DayCell: React.FC<DayCellProps> = ({\n date,\n isToday = false,\n isSelected = false,\n isDisabled = false,\n hasEvents = false,\n onClick,\n action,\n actionPayload,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handlePress = () => {\n if (isDisabled) return;\n if (action) {\n eventBus.emit(`UI:${action}`, actionPayload);\n }\n onClick?.();\n };\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={isDisabled}\n style={[\n styles.cell,\n {\n borderRadius: theme.borderRadius.md,\n },\n isToday && {\n borderWidth: 2,\n borderColor: theme.colors.primary,\n },\n isSelected && {\n backgroundColor: theme.colors.primary,\n },\n isDisabled && {\n opacity: 0.3,\n },\n style,\n ]}\n >\n <Typography\n variant=\"body\"\n style={[\n styles.dateText,\n {\n color: isSelected\n ? theme.colors['primary-foreground']\n : isDisabled\n ? theme.colors['muted-foreground']\n : theme.colors.foreground,\n },\n ]}\n >\n {date}\n </Typography>\n {hasEvents && (\n <Pressable\n style={[\n styles.eventDot,\n {\n backgroundColor: isSelected\n ? theme.colors['primary-foreground']\n : theme.colors.primary,\n },\n ]}\n />\n )}\n </Pressable>\n );\n};\n\nconst styles = StyleSheet.create({\n cell: {\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n },\n dateText: {\n fontSize: 14,\n fontWeight: '400',\n },\n eventDot: {\n position: 'absolute',\n bottom: 4,\n width: 4,\n height: 4,\n borderRadius: 2,\n },\n});\n\nDayCell.displayName = 'DayCell';\n","import React, { useEffect } from 'react';\nimport { View, StyleSheet, ViewStyle } from 'react-native';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Spinner } from './Spinner';\nimport { Typography } from './Typography';\nimport { useTheme } from '../../providers/ThemeContext';\n\nexport interface InfiniteScrollSentinelProps {\n loadMoreEvent?: string;\n loadMorePayload?: Record<string, unknown>;\n isLoading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n style?: ViewStyle;\n error?: Error | null;\n entity?: string;\n}\n\nexport const InfiniteScrollSentinel: React.FC<InfiniteScrollSentinelProps> = ({\n loadMoreEvent,\n loadMorePayload,\n isLoading = false,\n hasMore = true,\n onLoadMore,\n style,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n useEffect(() => {\n if (hasMore && !isLoading) {\n if (loadMoreEvent) {\n eventBus.emit(`UI:${loadMoreEvent}`, loadMorePayload);\n }\n onLoadMore?.();\n }\n }, [hasMore, isLoading, loadMoreEvent, loadMorePayload, onLoadMore, eventBus]);\n\n if (!hasMore) {\n return (\n <View style={[styles.container, style]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['muted-foreground'] }}>\n No more items\n </Typography>\n </View>\n );\n }\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <Spinner size=\"sm\" />\n </View>\n );\n }\n\n return <View style={[styles.sentinel, style]} />;\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n alignItems: 'center',\n justifyContent: 'center',\n },\n sentinel: {\n height: 1,\n },\n});\n\nInfiniteScrollSentinel.displayName = 'InfiniteScrollSentinel';\n","import React, { useState, useCallback } from 'react';\nimport { \n TouchableOpacity, \n Text, \n StyleSheet, \n GestureResponderEvent,\n ViewStyle \n} from 'react-native';\nimport { useTheme } from '../../../providers/ThemeContext';\nimport { useEventBus } from '../../../hooks/useEventBus';\n\nexport interface ControlButtonProps {\n /** Button label text */\n label?: string;\n /** Icon component or emoji */\n icon?: React.ReactNode;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg' | 'xl' | string;\n /** Shape variant */\n shape?: 'circle' | 'rounded' | 'square' | string;\n /** Visual variant */\n variant?: 'primary' | 'secondary' | 'ghost' | string;\n /** Called when button is pressed */\n onPress?: () => void;\n /** Called when button is released */\n onRelease?: () => void;\n /** Declarative event name emitted on press via useEventBus */\n pressEvent?: string;\n /** Declarative event name emitted on release via useEventBus */\n releaseEvent?: string;\n /** Whether the button is currently pressed */\n pressed?: boolean;\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Additional styles */\n style?: ViewStyle;\n}\n\nconst sizeMap: Record<string, { width: number; height: number; fontSize: number }> = {\n sm: { width: 40, height: 40, fontSize: 14 },\n md: { width: 56, height: 56, fontSize: 16 },\n lg: { width: 72, height: 72, fontSize: 20 },\n xl: { width: 96, height: 96, fontSize: 24 },\n};\n\nconst shapeMap: Record<string, number> = {\n circle: 9999,\n rounded: 12,\n square: 4,\n};\n\nconst variantMap: Record<string, { backgroundColor: string; borderColor: string; textColor: string }> = {\n primary: { \n backgroundColor: '#2563eb', \n borderColor: '#60a5fa',\n textColor: '#ffffff',\n },\n secondary: { \n backgroundColor: '#374151', \n borderColor: '#6b7280',\n textColor: '#ffffff',\n },\n ghost: { \n backgroundColor: 'transparent', \n borderColor: 'rgba(255,255,255,0.3)',\n textColor: '#ffffff',\n },\n};\n\nexport const ControlButton: React.FC<ControlButtonProps> = ({\n label,\n icon,\n size = 'md',\n shape = 'circle',\n variant = 'secondary',\n onPress,\n onRelease,\n pressEvent,\n releaseEvent,\n pressed,\n disabled,\n style,\n}) => {\n useTheme(); // Theme hook required by pattern\n const eventBus = useEventBus();\n const [isPressed, setIsPressed] = useState(false);\n const actualPressed = pressed ?? isPressed;\n\n const sizeConfig = sizeMap[size] ?? sizeMap.md;\n const borderRadius = shapeMap[shape] ?? shapeMap.circle;\n const variantConfig = variantMap[variant] ?? variantMap.secondary;\n\n const handlePressIn = useCallback(\n (_e: GestureResponderEvent) => {\n if (disabled) return;\n setIsPressed(true);\n if (pressEvent) eventBus.emit(`UI:${pressEvent}`, {});\n onPress?.();\n },\n [disabled, pressEvent, eventBus, onPress]\n );\n\n const handlePressOut = useCallback(\n (_e: GestureResponderEvent) => {\n if (disabled) return;\n setIsPressed(false);\n if (releaseEvent) eventBus.emit(`UI:${releaseEvent}`, {});\n onRelease?.();\n },\n [disabled, releaseEvent, eventBus, onRelease]\n );\n\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={disabled}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n style={[\n styles.button,\n {\n width: sizeConfig.width,\n height: sizeConfig.height,\n borderRadius,\n backgroundColor: variantConfig.backgroundColor,\n borderColor: variantConfig.borderColor,\n opacity: disabled ? 0.5 : 1,\n transform: [{ scale: actualPressed ? 0.95 : 1 }],\n },\n style as never,\n ]}\n >\n {icon ? (\n <Text style={{ fontSize: sizeConfig.fontSize * 1.5 }}>\n {icon as string}\n </Text>\n ) : label ? (\n <Text\n style={{\n fontSize: sizeConfig.fontSize,\n color: variantConfig.textColor,\n fontWeight: '700',\n }}\n >\n {label}\n </Text>\n ) : null}\n </TouchableOpacity>\n );\n};\n\nconst styles = StyleSheet.create({\n button: {\n justifyContent: 'center',\n alignItems: 'center',\n borderWidth: 2,\n userSelect: 'none',\n },\n});\n\nControlButton.displayName = 'ControlButton';\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,SAAS,MAAM,kBAA6B;AAYrC,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,UACE,OAAO,WACH,MAAM,OAAO,kBAAkB,IAC/B,MAAM,OAAO;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC;AAAA,IACA,YACC,oCAAC,QAAK,OAAO,CAAC,OAAO,UAAU,EAAE,OAAO,MAAM,OAAO,MAAM,CAAC,KACzD,IACH;AAAA,EAEJ;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,EACd;AACF,CAAC;AAED,MAAM,cAAc;;;ACtDpB,OAAOA,YAAW;AAClB,SAAS,mBAAmB,cAAAC,aAAY,YAAuB;AAWxD,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAO;AAAA,EACP;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,QAAMC,WAAkC;AAAA,IACtC,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE,gBAAAC,OAAA,cAAC,QAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAD,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAMD,SAAQ,IAAI;AAAA,MAClB,OAAO,SAAS,MAAM,OAAO;AAAA;AAAA,EAC/B,CACF;AAEJ;AAEA,IAAME,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF,CAAC;AAED,QAAQ,cAAc;;;AC1CtB,OAAOC,YAAW;AAClB,SAAS,WAAW,cAAAC,mBAA6B;AAoB1C,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,MAAM;AACxB,QAAI,WAAY;AAChB,QAAI,QAAQ;AACV,eAAS,KAAK,MAAM,MAAM,IAAI,aAAa;AAAA,IAC7C;AACA,cAAU;AAAA,EACZ;AAEA,SACE,gBAAAC,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE,cAAc,MAAM,aAAa;AAAA,QACnC;AAAA,QACA,WAAW;AAAA,UACT,aAAa;AAAA,UACb,aAAa,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA,cAAc;AAAA,UACZ,iBAAiB,MAAM,OAAO;AAAA,QAChC;AAAA,QACA,cAAc;AAAA,UACZ,SAAS;AAAA,QACX;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAD,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO;AAAA,UACLC,QAAO;AAAA,UACP;AAAA,YACE,OAAO,aACH,MAAM,OAAO,oBAAoB,IACjC,aACE,MAAM,OAAO,kBAAkB,IAC/B,MAAM,OAAO;AAAA,UACrB;AAAA,QACF;AAAA;AAAA,MAEC;AAAA,IACH;AAAA,IACC,aACC,gBAAAD,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACLC,QAAO;AAAA,UACP;AAAA,YACE,iBAAiB,aACb,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,UACnB;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEJ;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF,CAAC;AAED,QAAQ,cAAc;;;ACpHtB,OAAOC,UAAS,iBAAiB;AACjC,SAAS,QAAAC,OAAM,cAAAC,mBAA6B;AAiBrC,IAAM,yBAAgE,CAAC;AAAA,EAC5E;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,YAAU,MAAM;AACd,QAAI,WAAW,CAAC,WAAW;AACzB,UAAI,eAAe;AACjB,iBAAS,KAAK,MAAM,aAAa,IAAI,eAAe;AAAA,MACtD;AACA,mBAAa;AAAA,IACf;AAAA,EACF,GAAG,CAAC,SAAS,WAAW,eAAe,iBAAiB,YAAY,QAAQ,CAAC;AAE7E,MAAI,CAAC,SAAS;AACZ,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAAG,eAElF,CACF;AAAA,EAEJ;AAEA,MAAI,WAAW;AACb,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,WAAQ,MAAK,MAAK,CACrB;AAAA,EAEJ;AAEA,SAAO,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,UAAU,KAAK,GAAG;AAChD;AAEA,IAAMA,UAASC,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,EACV;AACF,CAAC;AAED,uBAAuB,cAAc;;;ACtErC,OAAOC,UAAS,UAAU,mBAAmB;AAC7C;AAAA,EACE;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,OAGK;AA+BP,IAAM,UAA+E;AAAA,EACnF,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,EAC1C,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,EAC1C,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAAA,EAC1C,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,UAAU,GAAG;AAC5C;AAEA,IAAM,WAAmC;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AACV;AAEA,IAAM,aAAkG;AAAA,EACtG,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF;AAEO,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,WAAS;AACT,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,gBAAgB,WAAW;AAEjC,QAAM,aAAa,QAAQ,IAAI,KAAK,QAAQ;AAC5C,QAAM,eAAe,SAAS,KAAK,KAAK,SAAS;AACjD,QAAM,gBAAgB,WAAW,OAAO,KAAK,WAAW;AAExD,QAAM,gBAAgB;AAAA,IACpB,CAAC,OAA8B;AAC7B,UAAI,SAAU;AACd,mBAAa,IAAI;AACjB,UAAI,WAAY,UAAS,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC;AACpD,gBAAU;AAAA,IACZ;AAAA,IACA,CAAC,UAAU,YAAY,UAAU,OAAO;AAAA,EAC1C;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,OAA8B;AAC7B,UAAI,SAAU;AACd,mBAAa,KAAK;AAClB,UAAI,aAAc,UAAS,KAAK,MAAM,YAAY,IAAI,CAAC,CAAC;AACxD,kBAAY;AAAA,IACd;AAAA,IACA,CAAC,UAAU,cAAc,UAAU,SAAS;AAAA,EAC9C;AAEA,SACE,gBAAAC,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAe;AAAA,MACf;AAAA,MACA,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,QACLC,QAAO;AAAA,QACP;AAAA,UACE,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,UACnB;AAAA,UACA,iBAAiB,cAAc;AAAA,UAC/B,aAAa,cAAc;AAAA,UAC3B,SAAS,WAAW,MAAM;AAAA,UAC1B,WAAW,CAAC,EAAE,OAAO,gBAAgB,OAAO,EAAE,CAAC;AAAA,QACjD;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC,OACC,gBAAAD,OAAA,cAACE,OAAA,EAAK,OAAO,EAAE,UAAU,WAAW,WAAW,IAAI,KAChD,IACH,IACE,QACF,gBAAAF,OAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU,WAAW;AAAA,UACrB,OAAO,cAAc;AAAA,UACrB,YAAY;AAAA,QACd;AAAA;AAAA,MAEC;AAAA,IACH,IACE;AAAA,EACN;AAEJ;AAEA,IAAMD,UAASE,YAAW,OAAO;AAAA,EAC/B,QAAQ;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AACF,CAAC;AAED,cAAc,cAAc;","names":["React","StyleSheet","sizeMap","React","styles","StyleSheet","React","StyleSheet","React","styles","StyleSheet","React","View","StyleSheet","React","View","styles","StyleSheet","React","Text","StyleSheet","React","styles","Text","StyleSheet"]}