@almadar/mobile 1.2.6 → 1.6.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.
- package/dist/chunk-4GLV4XIP.js +140 -0
- package/dist/chunk-4GLV4XIP.js.map +1 -0
- package/dist/{chunk-QUFLYKWA.js → chunk-A6AK75GP.js} +43 -554
- package/dist/chunk-A6AK75GP.js.map +1 -0
- package/dist/chunk-BUN5QD6C.js +525 -0
- package/dist/chunk-BUN5QD6C.js.map +1 -0
- package/dist/{chunk-PBO6ZN2M.js → chunk-C3USTXJ7.js} +1372 -2255
- package/dist/chunk-C3USTXJ7.js.map +1 -0
- package/dist/{chunk-5U5Z65ZO.js → chunk-DNC6CO6E.js} +58 -187
- package/dist/chunk-DNC6CO6E.js.map +1 -0
- package/dist/chunk-I6UYSB5R.js +935 -0
- package/dist/chunk-I6UYSB5R.js.map +1 -0
- package/dist/{chunk-ETD72PHO.js → chunk-SLYJ52HW.js} +30 -21
- package/dist/chunk-SLYJ52HW.js.map +1 -0
- package/dist/chunk-UIU7NWN2.js +924 -0
- package/dist/chunk-UIU7NWN2.js.map +1 -0
- package/dist/{chunk-BFRVXKSP.js → chunk-VNRKHWR7.js} +87 -4
- package/dist/chunk-VNRKHWR7.js.map +1 -0
- package/dist/{chunk-CA6Z3OTE.js → chunk-WHAG42QJ.js} +1 -1
- package/dist/chunk-WHAG42QJ.js.map +1 -0
- package/dist/{chunk-GMR5FKKB.js → chunk-XWPR5FXS.js} +2 -2
- package/dist/chunk-XWPR5FXS.js.map +1 -0
- package/dist/{chunk-MLTSQPVN.js → chunk-YWQRLHTP.js} +2 -2
- package/dist/chunk-YWQRLHTP.js.map +1 -0
- package/dist/components/atoms/Button.d.ts +3 -2
- package/dist/components/atoms/Button.d.ts.map +1 -1
- package/dist/components/atoms/Card.d.ts +3 -2
- package/dist/components/atoms/Card.d.ts.map +1 -1
- package/dist/components/atoms/Checkbox.d.ts +3 -2
- package/dist/components/atoms/Checkbox.d.ts.map +1 -1
- package/dist/components/atoms/DayCell.d.ts +3 -2
- package/dist/components/atoms/DayCell.d.ts.map +1 -1
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +3 -2
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -1
- package/dist/components/atoms/Radio.d.ts +3 -2
- package/dist/components/atoms/Radio.d.ts.map +1 -1
- package/dist/components/atoms/RangeSlider.d.ts +3 -2
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -1
- package/dist/components/atoms/Select.d.ts +3 -2
- package/dist/components/atoms/Select.d.ts.map +1 -1
- package/dist/components/atoms/Switch.d.ts +3 -2
- package/dist/components/atoms/Switch.d.ts.map +1 -1
- package/dist/components/atoms/TextHighlight.d.ts +3 -2
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -1
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts +25 -0
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts.map +1 -0
- package/dist/components/atoms/game/index.d.ts +2 -0
- package/dist/components/atoms/game/index.d.ts.map +1 -1
- package/dist/components/atoms/index.d.ts +4 -4
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +14 -9
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -20
- package/dist/components/molecules/Alert.d.ts +3 -2
- package/dist/components/molecules/Alert.d.ts.map +1 -1
- package/dist/components/molecules/DataGrid.d.ts +6 -5
- package/dist/components/molecules/DataGrid.d.ts.map +1 -1
- package/dist/components/molecules/DataList.d.ts +5 -4
- package/dist/components/molecules/DataList.d.ts.map +1 -1
- package/dist/components/molecules/NumberStepper.d.ts +3 -2
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -1
- package/dist/components/molecules/PullToRefresh.d.ts +3 -2
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -1
- package/dist/components/molecules/RelationSelect.d.ts +3 -2
- package/dist/components/molecules/RelationSelect.d.ts.map +1 -1
- package/dist/components/molecules/RepeatableFormSection.d.ts +6 -5
- package/dist/components/molecules/RepeatableFormSection.d.ts.map +1 -1
- package/dist/components/molecules/SortableList.d.ts +2 -1
- package/dist/components/molecules/SortableList.d.ts.map +1 -1
- package/dist/components/molecules/StarRating.d.ts +3 -2
- package/dist/components/molecules/StarRating.d.ts.map +1 -1
- package/dist/components/molecules/SwipeableRow.d.ts +3 -2
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -1
- package/dist/components/molecules/Toast.d.ts +3 -2
- package/dist/components/molecules/Toast.d.ts.map +1 -1
- package/dist/components/molecules/index.js +9 -6
- package/dist/components/organisms/CardGrid.d.ts +6 -5
- package/dist/components/organisms/CardGrid.d.ts.map +1 -1
- package/dist/components/organisms/ComponentPatterns.d.ts.map +1 -1
- package/dist/components/organisms/ContentRenderer.d.ts.map +1 -1
- package/dist/components/organisms/DataTable.d.ts +2 -4
- package/dist/components/organisms/DataTable.d.ts.map +1 -1
- package/dist/components/organisms/DocumentViewer.d.ts.map +1 -1
- package/dist/components/organisms/DrawerSlot.d.ts +5 -4
- package/dist/components/organisms/DrawerSlot.d.ts.map +1 -1
- package/dist/components/organisms/FormSection.d.ts +8 -1
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/Header.d.ts +3 -2
- package/dist/components/organisms/Header.d.ts.map +1 -1
- package/dist/components/organisms/LayoutPatterns.d.ts.map +1 -1
- package/dist/components/organisms/MasterDetail.d.ts.map +1 -1
- package/dist/components/organisms/MediaGallery.d.ts +2 -1
- package/dist/components/organisms/MediaGallery.d.ts.map +1 -1
- package/dist/components/organisms/ModalSlot.d.ts +5 -4
- package/dist/components/organisms/ModalSlot.d.ts.map +1 -1
- package/dist/components/organisms/PageHeader.d.ts +7 -0
- package/dist/components/organisms/PageHeader.d.ts.map +1 -1
- package/dist/components/organisms/SignaturePad.d.ts.map +1 -1
- package/dist/components/organisms/StatCard.d.ts +3 -2
- package/dist/components/organisms/StatCard.d.ts.map +1 -1
- package/dist/components/organisms/StateMachineView.d.ts.map +1 -1
- package/dist/components/organisms/Table.d.ts.map +1 -1
- package/dist/components/organisms/ToastSlot.d.ts +6 -5
- package/dist/components/organisms/ToastSlot.d.ts.map +1 -1
- package/dist/components/organisms/UISlotRenderer.d.ts +2 -1
- package/dist/components/organisms/UISlotRenderer.d.ts.map +1 -1
- package/dist/components/organisms/book/BookChapterView.d.ts +2 -1
- package/dist/components/organisms/book/BookChapterView.d.ts.map +1 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts +2 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts.map +1 -1
- package/dist/components/organisms/book/BookNavBar.d.ts +2 -1
- package/dist/components/organisms/book/BookNavBar.d.ts.map +1 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts +2 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts.map +1 -1
- package/dist/components/organisms/book/BookViewer.d.ts +2 -1
- package/dist/components/organisms/book/BookViewer.d.ts.map +1 -1
- package/dist/components/organisms/game/DialogueBox.d.ts.map +1 -1
- package/dist/components/organisms/game/InventoryPanel.d.ts.map +1 -1
- package/dist/components/organisms/game/physics-sim/SimulationCanvas.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionTile.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/CodeView.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateNode.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/TransitionArrow.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/VariablePanel.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +1 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +14 -10
- package/dist/components/organisms/layout/DashboardGrid.d.ts +3 -2
- package/dist/components/organisms/layout/DashboardGrid.d.ts.map +1 -1
- package/dist/components/templates/BattleTemplate.d.ts.map +1 -1
- package/dist/components/templates/index.js +26 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useTraitState.d.ts +3 -3
- package/dist/hooks/useTraitState.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -910
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +14 -16
- package/dist/chunk-5U5Z65ZO.js.map +0 -1
- package/dist/chunk-BFRVXKSP.js.map +0 -1
- package/dist/chunk-CA6Z3OTE.js.map +0 -1
- package/dist/chunk-ETD72PHO.js.map +0 -1
- package/dist/chunk-GMR5FKKB.js.map +0 -1
- package/dist/chunk-MLTSQPVN.js.map +0 -1
- package/dist/chunk-PBO6ZN2M.js.map +0 -1
- package/dist/chunk-QUFLYKWA.js.map +0 -1
|
@@ -3,12 +3,10 @@ import {
|
|
|
3
3
|
Card,
|
|
4
4
|
ErrorState,
|
|
5
5
|
HStack,
|
|
6
|
-
HealthBar,
|
|
7
6
|
LoadingState,
|
|
8
|
-
ScoreDisplay,
|
|
9
7
|
Typography,
|
|
10
8
|
VStack
|
|
11
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-A6AK75GP.js";
|
|
12
10
|
import {
|
|
13
11
|
useEventBus
|
|
14
12
|
} from "./chunk-YTVYMEKU.js";
|
|
@@ -16,31 +14,13 @@ import {
|
|
|
16
14
|
useTheme
|
|
17
15
|
} from "./chunk-CUAWHLEK.js";
|
|
18
16
|
|
|
19
|
-
// src/components/molecules/EmptyState.tsx
|
|
20
|
-
import React from "react";
|
|
21
|
-
import { StyleSheet } from "react-native";
|
|
22
|
-
var EmptyState = ({
|
|
23
|
-
message = "No data available",
|
|
24
|
-
icon
|
|
25
|
-
}) => {
|
|
26
|
-
return /* @__PURE__ */ React.createElement(VStack, { align: "center", spacing: 12, style: styles.container }, icon, /* @__PURE__ */ React.createElement(Typography, { variant: "body", color: "#6b7280" }, message));
|
|
27
|
-
};
|
|
28
|
-
var styles = StyleSheet.create({
|
|
29
|
-
container: {
|
|
30
|
-
padding: 32,
|
|
31
|
-
alignItems: "center",
|
|
32
|
-
justifyContent: "center"
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
EmptyState.displayName = "EmptyState";
|
|
36
|
-
|
|
37
17
|
// src/components/molecules/Modal.tsx
|
|
38
|
-
import
|
|
18
|
+
import React, { useCallback } from "react";
|
|
39
19
|
import {
|
|
40
20
|
Modal as RNModal,
|
|
41
21
|
View,
|
|
42
22
|
TouchableOpacity,
|
|
43
|
-
StyleSheet
|
|
23
|
+
StyleSheet
|
|
44
24
|
} from "react-native";
|
|
45
25
|
var Modal = ({
|
|
46
26
|
isOpen,
|
|
@@ -60,7 +40,7 @@ var Modal = ({
|
|
|
60
40
|
}
|
|
61
41
|
}, [closeOnBackdrop, onClose]);
|
|
62
42
|
const transparent = animationType !== "slide";
|
|
63
|
-
return /* @__PURE__ */
|
|
43
|
+
return /* @__PURE__ */ React.createElement(
|
|
64
44
|
RNModal,
|
|
65
45
|
{
|
|
66
46
|
visible: isOpen,
|
|
@@ -69,18 +49,18 @@ var Modal = ({
|
|
|
69
49
|
onRequestClose: onClose,
|
|
70
50
|
...modalProps
|
|
71
51
|
},
|
|
72
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ React.createElement(
|
|
73
53
|
TouchableOpacity,
|
|
74
54
|
{
|
|
75
|
-
style:
|
|
55
|
+
style: styles.overlay,
|
|
76
56
|
activeOpacity: 1,
|
|
77
57
|
onPress: handleBackdropPress
|
|
78
58
|
},
|
|
79
|
-
/* @__PURE__ */
|
|
59
|
+
/* @__PURE__ */ React.createElement(View, { style: styles.centeredView }, /* @__PURE__ */ React.createElement(TouchableOpacity, { activeOpacity: 1, onPress: (e) => e.stopPropagation() }, /* @__PURE__ */ React.createElement(Card, { style: [styles.modalCard, styles[size]] }, /* @__PURE__ */ React.createElement(VStack, { spacing: 16 }, title && /* @__PURE__ */ React.createElement(HStack, { justify: "space-between", align: "center" }, /* @__PURE__ */ React.createElement(Typography, { variant: "h4" }, title), showCloseButton && /* @__PURE__ */ React.createElement(TouchableOpacity, { onPress: onClose }, /* @__PURE__ */ React.createElement(Typography, { variant: "body", color: "#6b7280" }, "\u2715"))), /* @__PURE__ */ React.createElement(View, null, children), footer && /* @__PURE__ */ React.createElement(HStack, { justify: "flex-end", spacing: 12 }, footer)))))
|
|
80
60
|
)
|
|
81
61
|
);
|
|
82
62
|
};
|
|
83
|
-
var
|
|
63
|
+
var styles = StyleSheet.create({
|
|
84
64
|
overlay: {
|
|
85
65
|
flex: 1,
|
|
86
66
|
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
@@ -115,24 +95,24 @@ var ConfirmModal = ({
|
|
|
115
95
|
confirmLabel = "Confirm",
|
|
116
96
|
cancelLabel = "Cancel"
|
|
117
97
|
}) => {
|
|
118
|
-
return /* @__PURE__ */
|
|
98
|
+
return /* @__PURE__ */ React.createElement(
|
|
119
99
|
Modal,
|
|
120
100
|
{
|
|
121
101
|
isOpen,
|
|
122
102
|
onClose,
|
|
123
103
|
title,
|
|
124
|
-
footer: /* @__PURE__ */
|
|
104
|
+
footer: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { variant: "body", color: "#6b7280", onPress: onClose }, cancelLabel), /* @__PURE__ */ React.createElement(Typography, { variant: "body", color: "#ef4444", onPress: onConfirm }, confirmLabel))
|
|
125
105
|
},
|
|
126
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ React.createElement(Typography, { variant: "body" }, message)
|
|
127
107
|
);
|
|
128
108
|
};
|
|
129
109
|
ConfirmModal.displayName = "ConfirmModal";
|
|
130
110
|
|
|
131
111
|
// src/components/molecules/Drawer.tsx
|
|
132
|
-
import
|
|
112
|
+
import React2 from "react";
|
|
133
113
|
import {
|
|
134
114
|
View as View2,
|
|
135
|
-
StyleSheet as
|
|
115
|
+
StyleSheet as StyleSheet2,
|
|
136
116
|
TouchableOpacity as TouchableOpacity2,
|
|
137
117
|
Animated,
|
|
138
118
|
Dimensions
|
|
@@ -146,10 +126,10 @@ var Drawer = ({
|
|
|
146
126
|
placement = "right",
|
|
147
127
|
width = SCREEN_WIDTH * 0.8
|
|
148
128
|
}) => {
|
|
149
|
-
const translateX =
|
|
129
|
+
const translateX = React2.useRef(
|
|
150
130
|
new Animated.Value(placement === "right" ? SCREEN_WIDTH : -SCREEN_WIDTH)
|
|
151
131
|
).current;
|
|
152
|
-
|
|
132
|
+
React2.useEffect(() => {
|
|
153
133
|
Animated.timing(translateX, {
|
|
154
134
|
toValue: isOpen ? 0 : placement === "right" ? width : -width,
|
|
155
135
|
duration: 250,
|
|
@@ -157,18 +137,18 @@ var Drawer = ({
|
|
|
157
137
|
}).start();
|
|
158
138
|
}, [isOpen, placement, translateX, width]);
|
|
159
139
|
if (!isOpen) return null;
|
|
160
|
-
return /* @__PURE__ */
|
|
140
|
+
return /* @__PURE__ */ React2.createElement(View2, { style: styles2.overlay }, /* @__PURE__ */ React2.createElement(
|
|
161
141
|
TouchableOpacity2,
|
|
162
142
|
{
|
|
163
|
-
style:
|
|
143
|
+
style: styles2.backdrop,
|
|
164
144
|
activeOpacity: 1,
|
|
165
145
|
onPress: onClose
|
|
166
146
|
}
|
|
167
|
-
), /* @__PURE__ */
|
|
147
|
+
), /* @__PURE__ */ React2.createElement(
|
|
168
148
|
Animated.View,
|
|
169
149
|
{
|
|
170
150
|
style: [
|
|
171
|
-
|
|
151
|
+
styles2.drawer,
|
|
172
152
|
{
|
|
173
153
|
width,
|
|
174
154
|
[placement]: 0,
|
|
@@ -176,17 +156,17 @@ var Drawer = ({
|
|
|
176
156
|
}
|
|
177
157
|
]
|
|
178
158
|
},
|
|
179
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ React2.createElement(View2, { style: styles2.content }, (title || true) && /* @__PURE__ */ React2.createElement(View2, { style: styles2.header }, /* @__PURE__ */ React2.createElement(TouchableOpacity2, { onPress: onClose, style: styles2.closeButton }, /* @__PURE__ */ React2.createElement(Typography, { variant: "body", color: "#6b7280" }, "\u2715")), title && /* @__PURE__ */ React2.createElement(Typography, { variant: "h4" }, title)), /* @__PURE__ */ React2.createElement(VStack, { spacing: 0, style: styles2.children }, children))
|
|
180
160
|
));
|
|
181
161
|
};
|
|
182
|
-
var
|
|
162
|
+
var styles2 = StyleSheet2.create({
|
|
183
163
|
overlay: {
|
|
184
|
-
...
|
|
164
|
+
...StyleSheet2.absoluteFillObject,
|
|
185
165
|
zIndex: 1e3,
|
|
186
166
|
flexDirection: "row"
|
|
187
167
|
},
|
|
188
168
|
backdrop: {
|
|
189
|
-
...
|
|
169
|
+
...StyleSheet2.absoluteFillObject,
|
|
190
170
|
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
191
171
|
},
|
|
192
172
|
drawer: {
|
|
@@ -222,11 +202,11 @@ var styles3 = StyleSheet3.create({
|
|
|
222
202
|
Drawer.displayName = "Drawer";
|
|
223
203
|
|
|
224
204
|
// src/components/molecules/Tabs.tsx
|
|
225
|
-
import
|
|
205
|
+
import React3, { useState } from "react";
|
|
226
206
|
import {
|
|
227
207
|
View as View3,
|
|
228
208
|
TouchableOpacity as TouchableOpacity3,
|
|
229
|
-
StyleSheet as
|
|
209
|
+
StyleSheet as StyleSheet3,
|
|
230
210
|
ScrollView
|
|
231
211
|
} from "react-native";
|
|
232
212
|
var Tabs = ({
|
|
@@ -251,10 +231,10 @@ var Tabs = ({
|
|
|
251
231
|
onChange?.(tabId);
|
|
252
232
|
};
|
|
253
233
|
if (isLoading) {
|
|
254
|
-
return /* @__PURE__ */
|
|
234
|
+
return /* @__PURE__ */ React3.createElement(View3, { style: [styles3.container, style] }, /* @__PURE__ */ React3.createElement(LoadingState, { message: "Loading..." }));
|
|
255
235
|
}
|
|
256
236
|
if (error) {
|
|
257
|
-
return /* @__PURE__ */
|
|
237
|
+
return /* @__PURE__ */ React3.createElement(View3, { style: [styles3.container, style] }, /* @__PURE__ */ React3.createElement(ErrorState, { message: error.message }));
|
|
258
238
|
}
|
|
259
239
|
const getTabStyle = (isActive) => {
|
|
260
240
|
switch (variant) {
|
|
@@ -277,26 +257,26 @@ var Tabs = ({
|
|
|
277
257
|
};
|
|
278
258
|
}
|
|
279
259
|
};
|
|
280
|
-
return /* @__PURE__ */
|
|
260
|
+
return /* @__PURE__ */ React3.createElement(View3, { style: [styles3.container, style] }, /* @__PURE__ */ React3.createElement(
|
|
281
261
|
ScrollView,
|
|
282
262
|
{
|
|
283
263
|
horizontal: true,
|
|
284
264
|
showsHorizontalScrollIndicator: false,
|
|
285
|
-
contentContainerStyle:
|
|
265
|
+
contentContainerStyle: styles3.scrollContent
|
|
286
266
|
},
|
|
287
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ React3.createElement(HStack, { spacing: 8 }, tabs.map((tab) => {
|
|
288
268
|
const isActive = currentTab === tab.id;
|
|
289
|
-
return /* @__PURE__ */
|
|
269
|
+
return /* @__PURE__ */ React3.createElement(
|
|
290
270
|
TouchableOpacity3,
|
|
291
271
|
{
|
|
292
272
|
key: tab.id,
|
|
293
273
|
onPress: () => handleTabPress(tab.id),
|
|
294
274
|
style: [
|
|
295
|
-
|
|
275
|
+
styles3.tab,
|
|
296
276
|
getTabStyle(isActive)
|
|
297
277
|
]
|
|
298
278
|
},
|
|
299
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ React3.createElement(HStack, { spacing: 4, align: "center" }, tab.icon, /* @__PURE__ */ React3.createElement(
|
|
300
280
|
Typography,
|
|
301
281
|
{
|
|
302
282
|
variant: "body",
|
|
@@ -305,12 +285,12 @@ var Tabs = ({
|
|
|
305
285
|
}
|
|
306
286
|
},
|
|
307
287
|
tab.label
|
|
308
|
-
), tab.badge !== void 0 && tab.badge > 0 && /* @__PURE__ */
|
|
288
|
+
), tab.badge !== void 0 && tab.badge > 0 && /* @__PURE__ */ React3.createElement(View3, { style: [styles3.badge, { backgroundColor: theme.colors.error }] }, /* @__PURE__ */ React3.createElement(Typography, { variant: "caption", style: { color: theme.colors["error-foreground"] } }, tab.badge > 99 ? "99+" : tab.badge)))
|
|
309
289
|
);
|
|
310
290
|
}))
|
|
311
291
|
));
|
|
312
292
|
};
|
|
313
|
-
var
|
|
293
|
+
var styles3 = StyleSheet3.create({
|
|
314
294
|
container: {
|
|
315
295
|
width: "100%"
|
|
316
296
|
},
|
|
@@ -334,10 +314,10 @@ var styles4 = StyleSheet4.create({
|
|
|
334
314
|
Tabs.displayName = "Tabs";
|
|
335
315
|
|
|
336
316
|
// src/components/molecules/Toast.tsx
|
|
337
|
-
import
|
|
317
|
+
import React4, { useEffect } from "react";
|
|
338
318
|
import {
|
|
339
319
|
TouchableOpacity as TouchableOpacity4,
|
|
340
|
-
StyleSheet as
|
|
320
|
+
StyleSheet as StyleSheet4,
|
|
341
321
|
Animated as Animated2
|
|
342
322
|
} from "react-native";
|
|
343
323
|
var Toast = ({
|
|
@@ -352,8 +332,8 @@ var Toast = ({
|
|
|
352
332
|
}) => {
|
|
353
333
|
const theme = useTheme();
|
|
354
334
|
const eventBus = useEventBus();
|
|
355
|
-
const translateY =
|
|
356
|
-
const opacity =
|
|
335
|
+
const translateY = React4.useRef(new Animated2.Value(-100)).current;
|
|
336
|
+
const opacity = React4.useRef(new Animated2.Value(0)).current;
|
|
357
337
|
useEffect(() => {
|
|
358
338
|
Animated2.parallel([
|
|
359
339
|
Animated2.timing(translateY, {
|
|
@@ -401,20 +381,20 @@ var Toast = ({
|
|
|
401
381
|
};
|
|
402
382
|
const { bg } = variantStyles[variant];
|
|
403
383
|
const textColor = variant === "warning" ? "#000000" : "#ffffff";
|
|
404
|
-
return /* @__PURE__ */
|
|
384
|
+
return /* @__PURE__ */ React4.createElement(
|
|
405
385
|
Animated2.View,
|
|
406
386
|
{
|
|
407
387
|
style: [
|
|
408
|
-
|
|
388
|
+
styles4.container,
|
|
409
389
|
{ backgroundColor: bg },
|
|
410
390
|
{ transform: [{ translateY }], opacity },
|
|
411
391
|
style
|
|
412
392
|
]
|
|
413
393
|
},
|
|
414
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ React4.createElement(HStack, { spacing: 12, align: "center", justify: "space-between" }, /* @__PURE__ */ React4.createElement(Typography, { variant: "body", style: { color: textColor, flex: 1 } }, message), /* @__PURE__ */ React4.createElement(TouchableOpacity4, { onPress: handleDismiss, style: styles4.dismiss }, /* @__PURE__ */ React4.createElement(Typography, { variant: "body", style: { color: textColor } }, "\u2715")))
|
|
415
395
|
);
|
|
416
396
|
};
|
|
417
|
-
var
|
|
397
|
+
var styles4 = StyleSheet4.create({
|
|
418
398
|
container: {
|
|
419
399
|
borderRadius: 8,
|
|
420
400
|
padding: 12,
|
|
@@ -433,8 +413,8 @@ var styles5 = StyleSheet5.create({
|
|
|
433
413
|
Toast.displayName = "Toast";
|
|
434
414
|
|
|
435
415
|
// src/components/molecules/CodeBlock.tsx
|
|
436
|
-
import
|
|
437
|
-
import { View as View4, ScrollView as ScrollView2, StyleSheet as
|
|
416
|
+
import React5 from "react";
|
|
417
|
+
import { View as View4, ScrollView as ScrollView2, StyleSheet as StyleSheet5 } from "react-native";
|
|
438
418
|
var KEYWORDS = [
|
|
439
419
|
"const",
|
|
440
420
|
"let",
|
|
@@ -561,21 +541,21 @@ var CodeBlock = ({
|
|
|
561
541
|
}
|
|
562
542
|
};
|
|
563
543
|
if (isLoading) {
|
|
564
|
-
return /* @__PURE__ */
|
|
544
|
+
return /* @__PURE__ */ React5.createElement(Card, { style: [styles5.container, style || {}] }, /* @__PURE__ */ React5.createElement(LoadingState, { message: "Loading code..." }));
|
|
565
545
|
}
|
|
566
546
|
if (error) {
|
|
567
|
-
return /* @__PURE__ */
|
|
547
|
+
return /* @__PURE__ */ React5.createElement(Card, { style: [styles5.container, style || {}] }, /* @__PURE__ */ React5.createElement(ErrorState, { message: error.message }));
|
|
568
548
|
}
|
|
569
549
|
const tokenizedLines = tokenizeCode(code);
|
|
570
550
|
const lineNumberWidth = String(tokenizedLines.length).length * 10 + 16;
|
|
571
|
-
const CodeContent = /* @__PURE__ */
|
|
551
|
+
const CodeContent = /* @__PURE__ */ React5.createElement(View4, { style: styles5.codeContainer }, tokenizedLines.map((tokens, lineIndex) => /* @__PURE__ */ React5.createElement(View4, { key: lineIndex, style: styles5.line }, showLineNumbers && /* @__PURE__ */ React5.createElement(View4, { style: [styles5.lineNumber, { width: lineNumberWidth }] }, /* @__PURE__ */ React5.createElement(
|
|
572
552
|
Typography,
|
|
573
553
|
{
|
|
574
554
|
variant: "caption",
|
|
575
555
|
style: { color: theme.colors["muted-foreground"] }
|
|
576
556
|
},
|
|
577
557
|
lineIndex + 1
|
|
578
|
-
)), /* @__PURE__ */
|
|
558
|
+
)), /* @__PURE__ */ React5.createElement(View4, { style: styles5.lineContent }, tokens.length === 0 ? /* @__PURE__ */ React5.createElement(Typography, { variant: "body" }, " ") : /* @__PURE__ */ React5.createElement(Typography, { variant: "body" }, tokens.map((token, tokenIndex) => /* @__PURE__ */ React5.createElement(
|
|
579
559
|
Typography,
|
|
580
560
|
{
|
|
581
561
|
key: tokenIndex,
|
|
@@ -587,18 +567,18 @@ var CodeBlock = ({
|
|
|
587
567
|
},
|
|
588
568
|
token.text
|
|
589
569
|
)))))));
|
|
590
|
-
return /* @__PURE__ */
|
|
570
|
+
return /* @__PURE__ */ React5.createElement(Card, { style: [styles5.container, style || {}], padding: "none" }, (language || showCopyButton) && /* @__PURE__ */ React5.createElement(
|
|
591
571
|
HStack,
|
|
592
572
|
{
|
|
593
573
|
spacing: 8,
|
|
594
574
|
align: "center",
|
|
595
575
|
justify: "space-between",
|
|
596
576
|
style: [
|
|
597
|
-
|
|
577
|
+
styles5.header,
|
|
598
578
|
{ backgroundColor: theme.colors.muted, borderBottomColor: theme.colors.border }
|
|
599
579
|
]
|
|
600
580
|
},
|
|
601
|
-
language ? /* @__PURE__ */
|
|
581
|
+
language ? /* @__PURE__ */ React5.createElement(
|
|
602
582
|
Typography,
|
|
603
583
|
{
|
|
604
584
|
variant: "caption",
|
|
@@ -608,11 +588,11 @@ var CodeBlock = ({
|
|
|
608
588
|
}
|
|
609
589
|
},
|
|
610
590
|
language
|
|
611
|
-
) : /* @__PURE__ */
|
|
612
|
-
showCopyButton && /* @__PURE__ */
|
|
613
|
-
), scrollable ? /* @__PURE__ */
|
|
591
|
+
) : /* @__PURE__ */ React5.createElement(View4, null),
|
|
592
|
+
showCopyButton && /* @__PURE__ */ React5.createElement(Button, { variant: "ghost", size: "sm", onPress: handleCopy }, "Copy")
|
|
593
|
+
), scrollable ? /* @__PURE__ */ React5.createElement(ScrollView2, { horizontal: true, showsHorizontalScrollIndicator: true }, CodeContent) : CodeContent);
|
|
614
594
|
};
|
|
615
|
-
var
|
|
595
|
+
var styles5 = StyleSheet5.create({
|
|
616
596
|
container: {
|
|
617
597
|
overflow: "hidden"
|
|
618
598
|
},
|
|
@@ -638,121 +618,12 @@ var styles6 = StyleSheet6.create({
|
|
|
638
618
|
});
|
|
639
619
|
CodeBlock.displayName = "CodeBlock";
|
|
640
620
|
|
|
641
|
-
// src/components/molecules/game/StatBadge.tsx
|
|
642
|
-
import React7 from "react";
|
|
643
|
-
import { View as View5, Text, StyleSheet as StyleSheet7 } from "react-native";
|
|
644
|
-
var sizeMap = {
|
|
645
|
-
sm: { padding: 8, fontSize: 12 },
|
|
646
|
-
md: { padding: 12, fontSize: 14 },
|
|
647
|
-
lg: { padding: 16, fontSize: 16 }
|
|
648
|
-
};
|
|
649
|
-
var variantMap = {
|
|
650
|
-
default: { backgroundColor: "rgba(31, 41, 55, 0.8)", borderColor: "#374151" },
|
|
651
|
-
primary: { backgroundColor: "rgba(30, 58, 138, 0.8)", borderColor: "#1d4ed8" },
|
|
652
|
-
success: { backgroundColor: "rgba(20, 83, 45, 0.8)", borderColor: "#15803d" },
|
|
653
|
-
warning: { backgroundColor: "rgba(113, 63, 18, 0.8)", borderColor: "#a16207" },
|
|
654
|
-
danger: { backgroundColor: "rgba(127, 29, 29, 0.8)", borderColor: "#b91c1c" }
|
|
655
|
-
};
|
|
656
|
-
var StatBadge = ({
|
|
657
|
-
label,
|
|
658
|
-
value = 0,
|
|
659
|
-
max,
|
|
660
|
-
format = "number",
|
|
661
|
-
icon,
|
|
662
|
-
size = "md",
|
|
663
|
-
variant = "default",
|
|
664
|
-
style,
|
|
665
|
-
// Ignored config props (used for schema binding)
|
|
666
|
-
source: _source,
|
|
667
|
-
field: _field
|
|
668
|
-
}) => {
|
|
669
|
-
const theme = useTheme();
|
|
670
|
-
const numValue = typeof value === "number" ? value : parseInt(String(value), 10) || 0;
|
|
671
|
-
const sizeStyles = sizeMap[size] ?? sizeMap.md;
|
|
672
|
-
const variantStyles = variantMap[variant] ?? variantMap.default;
|
|
673
|
-
return /* @__PURE__ */ React7.createElement(
|
|
674
|
-
View5,
|
|
675
|
-
{
|
|
676
|
-
style: [
|
|
677
|
-
styles7.container,
|
|
678
|
-
{
|
|
679
|
-
backgroundColor: variantStyles.backgroundColor,
|
|
680
|
-
borderColor: variantStyles.borderColor,
|
|
681
|
-
padding: sizeStyles.padding
|
|
682
|
-
},
|
|
683
|
-
style
|
|
684
|
-
]
|
|
685
|
-
},
|
|
686
|
-
icon && /* @__PURE__ */ React7.createElement(Text, { style: { fontSize: 18, marginRight: 8 } }, icon),
|
|
687
|
-
/* @__PURE__ */ React7.createElement(
|
|
688
|
-
Text,
|
|
689
|
-
{
|
|
690
|
-
style: {
|
|
691
|
-
fontSize: sizeStyles.fontSize,
|
|
692
|
-
color: theme.colors["muted-foreground"],
|
|
693
|
-
fontWeight: "500",
|
|
694
|
-
marginRight: 8
|
|
695
|
-
}
|
|
696
|
-
},
|
|
697
|
-
label
|
|
698
|
-
),
|
|
699
|
-
format === "hearts" && max && /* @__PURE__ */ React7.createElement(
|
|
700
|
-
HealthBar,
|
|
701
|
-
{
|
|
702
|
-
current: numValue,
|
|
703
|
-
max,
|
|
704
|
-
format: "hearts",
|
|
705
|
-
size: size === "lg" ? "md" : "sm"
|
|
706
|
-
}
|
|
707
|
-
),
|
|
708
|
-
format === "bar" && max && /* @__PURE__ */ React7.createElement(
|
|
709
|
-
HealthBar,
|
|
710
|
-
{
|
|
711
|
-
current: numValue,
|
|
712
|
-
max,
|
|
713
|
-
format: "bar",
|
|
714
|
-
size: size === "lg" ? "md" : "sm"
|
|
715
|
-
}
|
|
716
|
-
),
|
|
717
|
-
format === "number" && /* @__PURE__ */ React7.createElement(
|
|
718
|
-
ScoreDisplay,
|
|
719
|
-
{
|
|
720
|
-
value: numValue,
|
|
721
|
-
size: size === "lg" ? "md" : "sm",
|
|
722
|
-
animated: true
|
|
723
|
-
}
|
|
724
|
-
),
|
|
725
|
-
format === "text" && /* @__PURE__ */ React7.createElement(
|
|
726
|
-
Text,
|
|
727
|
-
{
|
|
728
|
-
style: {
|
|
729
|
-
fontSize: sizeStyles.fontSize,
|
|
730
|
-
color: theme.colors["primary-foreground"],
|
|
731
|
-
fontWeight: "700"
|
|
732
|
-
}
|
|
733
|
-
},
|
|
734
|
-
value
|
|
735
|
-
)
|
|
736
|
-
);
|
|
737
|
-
};
|
|
738
|
-
var styles7 = StyleSheet7.create({
|
|
739
|
-
container: {
|
|
740
|
-
flexDirection: "row",
|
|
741
|
-
alignItems: "center",
|
|
742
|
-
borderRadius: 8,
|
|
743
|
-
borderWidth: 1
|
|
744
|
-
}
|
|
745
|
-
});
|
|
746
|
-
StatBadge.displayName = "StatBadge";
|
|
747
|
-
|
|
748
621
|
export {
|
|
749
|
-
EmptyState,
|
|
750
622
|
Modal,
|
|
751
623
|
ConfirmModal,
|
|
752
624
|
Drawer,
|
|
753
625
|
Tabs,
|
|
754
626
|
Toast,
|
|
755
|
-
CodeBlock
|
|
756
|
-
StatBadge
|
|
627
|
+
CodeBlock
|
|
757
628
|
};
|
|
758
|
-
//# sourceMappingURL=chunk-
|
|
629
|
+
//# sourceMappingURL=chunk-DNC6CO6E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/molecules/Modal.tsx","../src/components/molecules/Drawer.tsx","../src/components/molecules/Tabs.tsx","../src/components/molecules/Toast.tsx","../src/components/molecules/CodeBlock.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { \n Modal as RNModal, \n View, \n TouchableOpacity, \n StyleSheet,\n ViewStyle\n} from 'react-native';\nimport { Card } from '../atoms/Card';\nimport { Typography } from '../atoms/Typography';\nimport { VStack, HStack } from '../atoms/Stack';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n showCloseButton?: boolean;\n closeOnBackdrop?: boolean;\n animationType?: 'none' | 'slide' | 'fade';\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n showCloseButton = true,\n closeOnBackdrop = true,\n animationType = 'fade',\n ...modalProps\n}) => {\n const handleBackdropPress = useCallback(() => {\n if (closeOnBackdrop) {\n onClose();\n }\n }, [closeOnBackdrop, onClose]);\n\n const transparent = animationType !== 'slide';\n\n return (\n <RNModal\n visible={isOpen}\n animationType={animationType}\n transparent={transparent}\n onRequestClose={onClose}\n {...modalProps}\n >\n <TouchableOpacity\n style={styles.overlay}\n activeOpacity={1}\n onPress={handleBackdropPress}\n >\n <View style={styles.centeredView}>\n <TouchableOpacity activeOpacity={1} onPress={(e) => e.stopPropagation()}>\n <Card style={[styles.modalCard, styles[size] as ViewStyle]}>\n <VStack spacing={16}>\n {/* Header */}\n {title && (\n <HStack justify=\"space-between\" align=\"center\">\n <Typography variant=\"h4\">{title}</Typography>\n {showCloseButton && (\n <TouchableOpacity onPress={onClose}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n )}\n </HStack>\n )}\n\n {/* Content */}\n <View>{children}</View>\n\n {/* Footer */}\n {footer && (\n <HStack justify=\"flex-end\" spacing={12}>\n {footer}\n </HStack>\n )}\n </VStack>\n </Card>\n </TouchableOpacity>\n </View>\n </TouchableOpacity>\n </RNModal>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n centeredView: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n padding: 20,\n },\n modalCard: {\n width: '100%',\n maxWidth: 400,\n },\n sm: {\n maxWidth: 300,\n },\n md: {\n maxWidth: 400,\n },\n lg: {\n maxWidth: 600,\n },\n});\n\nModal.displayName = 'Modal';\n\n// Confirm Modal\nexport interface ConfirmModalProps extends Omit<ModalProps, 'children' | 'footer'> {\n message: string;\n onConfirm: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = 'Confirm',\n message = 'Are you sure you want to proceed?',\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n \n}) => {\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n footer={\n <>\n <Typography variant=\"body\" color=\"#6b7280\" onPress={onClose}>\n {cancelLabel}\n </Typography>\n <Typography variant=\"body\" color=\"#ef4444\" onPress={onConfirm}>\n {confirmLabel}\n </Typography>\n </>\n }\n >\n <Typography variant=\"body\">{message}</Typography>\n </Modal>\n );\n};\n\nConfirmModal.displayName = 'ConfirmModal';\n","import React from 'react';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Animated,\n Dimensions,\n} from 'react-native';\nimport { Typography } from '../atoms/Typography';\nimport { VStack } from '../atoms/Stack';\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window');\n\nexport interface DrawerProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n placement?: 'left' | 'right';\n width?: number;\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n children,\n title,\n placement = 'right',\n width = SCREEN_WIDTH * 0.8,\n}) => {\n const translateX = React.useRef(\n new Animated.Value(placement === 'right' ? SCREEN_WIDTH : -SCREEN_WIDTH)\n ).current;\n\n React.useEffect(() => {\n Animated.timing(translateX, {\n toValue: isOpen ? 0 : placement === 'right' ? width : -width,\n duration: 250,\n useNativeDriver: true,\n }).start();\n }, [isOpen, placement, translateX, width]);\n\n if (!isOpen) return null;\n\n return (\n <View style={styles.overlay}>\n {/* Backdrop */}\n <TouchableOpacity\n style={styles.backdrop}\n activeOpacity={1}\n onPress={onClose}\n />\n \n {/* Drawer Panel */}\n <Animated.View\n style={[\n styles.drawer,\n {\n width,\n [placement]: 0,\n transform: [{ translateX }],\n },\n ]}\n >\n <View style={styles.content}>\n {/* Header */}\n {(title || true) && (\n <View style={styles.header}>\n <TouchableOpacity onPress={onClose} style={styles.closeButton}>\n <Typography variant=\"body\" color=\"#6b7280\">✕</Typography>\n </TouchableOpacity>\n {title && <Typography variant=\"h4\">{title}</Typography>}\n </View>\n )}\n\n {/* Drawer Content */}\n <VStack spacing={0} style={styles.children}>\n {children}\n </VStack>\n </View>\n </Animated.View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n flexDirection: 'row',\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n drawer: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n backgroundColor: '#ffffff',\n shadowColor: '#000',\n shadowOffset: { width: -2, height: 0 },\n shadowOpacity: 0.25,\n shadowRadius: 5,\n elevation: 5,\n },\n content: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e5e7eb',\n gap: 12,\n },\n closeButton: {\n padding: 4,\n },\n children: {\n flex: 1,\n padding: 16,\n },\n});\n\nDrawer.displayName = 'Drawer';\n","import React, { useState } from 'react';\nimport { \n View, \n TouchableOpacity, \n StyleSheet, \n ViewStyle,\n ScrollView \n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\nimport { HStack } from '../atoms/Stack';\n\nexport interface Tab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n badge?: number;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n activeTab?: string;\n onChange?: (tabId: string) => void;\n style?: ViewStyle;\n variant?: 'default' | 'pills' | 'underlined';\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative change event name - emits UI:${changeEvent} via eventBus */\n changeEvent?: string;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n tabs,\n activeTab,\n onChange,\n style,\n variant = 'default',\n isLoading,\n error,\n changeEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const [internalActiveTab, setInternalActiveTab] = useState(tabs[0]?.id);\n const currentTab = activeTab ?? internalActiveTab;\n\n const handleTabPress = (tabId: string) => {\n setInternalActiveTab(tabId);\n if (changeEvent) {\n eventBus.emit(`UI:${changeEvent}`, { tabId });\n }\n onChange?.(tabId);\n };\n\n if (isLoading) {\n return (\n <View style={[styles.container, style]}>\n <LoadingState message=\"Loading...\" />\n </View>\n );\n }\n\n if (error) {\n return (\n <View style={[styles.container, style]}>\n <ErrorState message={error.message} />\n </View>\n );\n }\n\n const getTabStyle = (isActive: boolean) => {\n switch (variant) {\n case 'pills':\n return {\n backgroundColor: isActive ? theme.colors.primary : 'transparent',\n borderRadius: theme.borderRadius.full,\n };\n case 'underlined':\n return {\n borderBottomWidth: 2,\n borderBottomColor: isActive ? theme.colors.primary : 'transparent',\n backgroundColor: 'transparent',\n };\n default:\n return {\n backgroundColor: isActive ? theme.colors.card : 'transparent',\n borderRadius: theme.borderRadius.md,\n ...theme.shadows.sm,\n };\n }\n };\n\n return (\n <View style={[styles.container, style]}>\n <ScrollView \n horizontal \n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.scrollContent}\n >\n <HStack spacing={8}>\n {tabs.map((tab) => {\n const isActive = currentTab === tab.id;\n return (\n <TouchableOpacity\n key={tab.id}\n onPress={() => handleTabPress(tab.id)}\n style={[\n styles.tab,\n getTabStyle(isActive),\n ]}\n >\n <HStack spacing={4} align=\"center\">\n {tab.icon}\n <Typography \n variant=\"body\" \n style={{ \n color: isActive && variant === 'pills' \n ? theme.colors['primary-foreground'] \n : theme.colors.foreground \n }}\n >\n {tab.label}\n </Typography>\n {tab.badge !== undefined && tab.badge > 0 && (\n <View style={[styles.badge, { backgroundColor: theme.colors.error }]}>\n <Typography variant=\"caption\" style={{ color: theme.colors['error-foreground'] }}>\n {tab.badge > 99 ? '99+' : tab.badge}\n </Typography>\n </View>\n )}\n </HStack>\n </TouchableOpacity>\n );\n })}\n </HStack>\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n },\n scrollContent: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n tab: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n },\n badge: {\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n});\n\nTabs.displayName = 'Tabs';\n","import React, { useEffect } from 'react';\nimport { \n TouchableOpacity,\n StyleSheet, \n ViewStyle,\n Animated\n} from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { HStack } from '../atoms/Stack';\nimport type { EventKey, EventPayload } from '../../types';\n\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastProps {\n id: string;\n message: string;\n variant?: ToastVariant;\n duration?: number;\n onDismiss?: (id: string) => void;\n dismissAction?: EventKey;\n style?: ViewStyle;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Payload for dismiss action */\n actionPayload?: EventPayload;\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n id,\n message,\n variant = 'info',\n duration = 5000,\n onDismiss,\n dismissAction,\n style,\n actionPayload,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n const translateY = React.useRef(new Animated.Value(-100)).current;\n const opacity = React.useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }),\n ]).start();\n\n if (duration > 0) {\n const timer = setTimeout(() => {\n handleDismiss();\n }, duration);\n\n return () => clearTimeout(timer);\n }\n }, [duration]);\n\n const handleDismiss = () => {\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: -100,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0,\n duration: 200,\n useNativeDriver: true,\n }),\n ]).start(() => {\n if (dismissAction) {\n eventBus.emit(`UI:${dismissAction}`, { ...actionPayload, toastId: id });\n }\n onDismiss?.(id);\n });\n };\n\n const variantStyles: Record<ToastVariant, { bg: string }> = {\n info: { bg: theme.colors.info },\n success: { bg: theme.colors.success },\n warning: { bg: theme.colors.warning },\n error: { bg: theme.colors.error },\n };\n\n const { bg } = variantStyles[variant];\n const textColor = variant === 'warning' ? '#000000' : '#ffffff';\n\n return (\n <Animated.View\n style={[\n styles.container,\n { backgroundColor: bg },\n { transform: [{ translateY }], opacity },\n style,\n ]}\n >\n <HStack spacing={12} align=\"center\" justify=\"space-between\">\n <Typography variant=\"body\" style={{ color: textColor, flex: 1 }}>\n {message}\n </Typography>\n \n <TouchableOpacity onPress={handleDismiss} style={styles.dismiss}>\n <Typography variant=\"body\" style={{ color: textColor }}>\n ✕\n </Typography>\n </TouchableOpacity>\n </HStack>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 12,\n marginHorizontal: 16,\n marginVertical: 4,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.2,\n shadowRadius: 4,\n elevation: 4,\n },\n dismiss: {\n padding: 4,\n },\n});\n\nToast.displayName = 'Toast';\n","import React from 'react';\nimport { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';\nimport { useTheme } from '../../providers/ThemeContext';\nimport { useEventBus } from '../../hooks/useEventBus';\nimport { Typography } from '../atoms/Typography';\nimport { Card } from '../atoms/Card';\nimport { HStack } from '../atoms/Stack';\nimport { Button } from '../atoms/Button';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\nexport interface CodeBlockProps {\n /** Code content to display */\n code: string;\n /** Programming language for syntax highlighting hint */\n language?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Whether to show copy button */\n showCopyButton?: boolean;\n /** Whether to allow horizontal scrolling */\n scrollable?: boolean;\n /** Style override */\n style?: ViewStyle;\n /** Loading state indicator */\n isLoading?: boolean;\n /** Error state */\n error?: Error | null;\n /** Entity name for schema-driven auto-fetch */\n entity?: string;\n /** Declarative copy event name - emits UI:${copyEvent} via eventBus */\n copyEvent?: string;\n}\n\n// Simple syntax highlighting tokens\ninterface Token {\n text: string;\n style: 'keyword' | 'string' | 'comment' | 'number' | 'function' | 'default';\n}\n\nconst KEYWORDS = [\n 'const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while',\n 'import', 'export', 'from', 'class', 'interface', 'type', 'async', 'await',\n 'try', 'catch', 'throw', 'new', 'this', 'true', 'false', 'null', 'undefined',\n];\n\nconst TOKEN_COLORS: Record<Token['style'], string> = {\n keyword: '#c678dd',\n string: '#98c379',\n comment: '#5c6370',\n number: '#d19a66',\n function: '#61afef',\n default: '#abb2bf',\n};\n\n/**\n * Simple tokenizer for basic syntax highlighting\n */\nconst tokenizeCode = (code: string): Token[][] => {\n const lines = code.split('\\n');\n\n return lines.map((line) => {\n const tokens: Token[] = [];\n let remaining = line;\n\n while (remaining.length > 0) {\n let matched = false;\n\n // Check for comments\n if (remaining.startsWith('//')) {\n tokens.push({ text: remaining, style: 'comment' });\n break;\n }\n\n // Check for strings (double quotes)\n if (remaining.startsWith('\"')) {\n const endIndex = remaining.indexOf('\"', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (single quotes)\n if (remaining.startsWith(\"'\")) {\n const endIndex = remaining.indexOf(\"'\", 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for strings (template literals)\n if (remaining.startsWith('`')) {\n const endIndex = remaining.indexOf('`', 1);\n if (endIndex > 0) {\n tokens.push({ text: remaining.slice(0, endIndex + 1), style: 'string' });\n remaining = remaining.slice(endIndex + 1);\n matched = true;\n continue;\n }\n }\n\n // Check for numbers\n const numberMatch = remaining.match(/^\\d+(\\.\\d+)?/);\n if (numberMatch) {\n tokens.push({ text: numberMatch[0], style: 'number' });\n remaining = remaining.slice(numberMatch[0].length);\n matched = true;\n continue;\n }\n\n // Check for keywords and identifiers\n const wordMatch = remaining.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);\n if (wordMatch) {\n const word = wordMatch[0];\n const style: Token['style'] = KEYWORDS.includes(word) ? 'keyword' : 'default';\n tokens.push({ text: word, style });\n remaining = remaining.slice(word.length);\n matched = true;\n continue;\n }\n\n // Check for function calls (identifier followed by opening paren)\n const funcMatch = remaining.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(/);\n if (funcMatch && !KEYWORDS.includes(funcMatch[1])) {\n tokens.pop(); // Remove the identifier we just added\n tokens.push({ text: funcMatch[1], style: 'function' });\n tokens.push({ text: '(', style: 'default' });\n remaining = remaining.slice(funcMatch[0].length - 1);\n matched = true;\n continue;\n }\n\n // If nothing matched, take the first character as default\n if (!matched) {\n tokens.push({ text: remaining[0], style: 'default' });\n remaining = remaining.slice(1);\n }\n }\n\n return tokens;\n });\n};\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code,\n language,\n showLineNumbers = true,\n showCopyButton = true,\n scrollable = true,\n style,\n isLoading,\n error,\n copyEvent,\n}) => {\n const theme = useTheme();\n const eventBus = useEventBus();\n\n const handleCopy = () => {\n if (copyEvent) {\n eventBus.emit(`UI:${copyEvent}`, { code, language });\n }\n };\n\n if (isLoading) {\n return (\n <Card style={[styles.container, style || {}]}>\n <LoadingState message=\"Loading code...\" />\n </Card>\n );\n }\n\n if (error) {\n return (\n <Card style={[styles.container, style || {}]}>\n <ErrorState message={error.message} />\n </Card>\n );\n }\n\n const tokenizedLines = tokenizeCode(code);\n const lineNumberWidth = String(tokenizedLines.length).length * 10 + 16;\n\n const CodeContent = (\n <View style={styles.codeContainer}>\n {tokenizedLines.map((tokens, lineIndex) => (\n <View key={lineIndex} style={styles.line}>\n {showLineNumbers && (\n <View style={[styles.lineNumber, { width: lineNumberWidth }]}>\n <Typography\n variant=\"caption\"\n style={{ color: theme.colors['muted-foreground'] }}\n >\n {lineIndex + 1}\n </Typography>\n </View>\n )}\n <View style={styles.lineContent}>\n {tokens.length === 0 ? (\n <Typography variant=\"body\"> </Typography>\n ) : (\n <Typography variant=\"body\">\n {tokens.map((token, tokenIndex) => (\n <Typography\n key={tokenIndex}\n variant=\"body\"\n style={{\n color: TOKEN_COLORS[token.style],\n fontFamily: 'monospace',\n }}\n >\n {token.text}\n </Typography>\n ))}\n </Typography>\n )}\n </View>\n </View>\n ))}\n </View>\n );\n\n return (\n <Card style={[styles.container, style || {}]} padding=\"none\">\n {(language || showCopyButton) && (\n <HStack\n spacing={8}\n align=\"center\"\n justify=\"space-between\"\n style={[\n styles.header,\n { backgroundColor: theme.colors.muted, borderBottomColor: theme.colors.border },\n ]}\n >\n {language ? (\n <Typography\n variant=\"caption\"\n style={{\n color: theme.colors['muted-foreground'],\n textTransform: 'uppercase',\n }}\n >\n {language}\n </Typography>\n ) : (\n <View />\n )}\n {showCopyButton && (\n <Button variant=\"ghost\" size=\"sm\" onPress={handleCopy}>\n Copy\n </Button>\n )}\n </HStack>\n )}\n\n {scrollable ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n {CodeContent}\n </ScrollView>\n ) : (\n CodeContent\n )}\n </Card>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n header: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n borderBottomWidth: 1,\n },\n codeContainer: {\n padding: 16,\n },\n line: {\n flexDirection: 'row',\n },\n lineNumber: {\n alignItems: 'flex-end',\n paddingRight: 16,\n opacity: 0.5,\n },\n lineContent: {\n flex: 1,\n },\n});\n\nCodeBlock.displayName = 'CodeBlock';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS,mBAAmB;AACnC;AAAA,EACE,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAiBA,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,GAAG;AACL,MAAM;AACJ,QAAM,sBAAsB,YAAY,MAAM;AAC5C,QAAI,iBAAiB;AACnB,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,iBAAiB,OAAO,CAAC;AAE7B,QAAM,cAAc,kBAAkB;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MACf,GAAG;AAAA;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,OAAO;AAAA,QACd,eAAe;AAAA,QACf,SAAS;AAAA;AAAA,MAET,oCAAC,QAAK,OAAO,OAAO,gBAClB,oCAAC,oBAAiB,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,gBAAgB,KACpE,oCAAC,QAAK,OAAO,CAAC,OAAO,WAAW,OAAO,IAAI,CAAc,KACvD,oCAAC,UAAO,SAAS,MAEd,SACC,oCAAC,UAAO,SAAQ,iBAAgB,OAAM,YACpC,oCAAC,cAAW,SAAQ,QAAM,KAAM,GAC/B,mBACC,oCAAC,oBAAiB,SAAS,WACzB,oCAAC,cAAW,SAAQ,QAAO,OAAM,aAAU,QAAC,CAC9C,CAEJ,GAIF,oCAAC,YAAM,QAAS,GAGf,UACC,oCAAC,UAAO,SAAQ,YAAW,SAAS,MACjC,MACH,CAEJ,CACF,CACF,CACF;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,EACZ;AACF,CAAC;AAED,MAAM,cAAc;AAWb,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AAAA,EACf,cAAc;AAEhB,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QACE,0DACE,oCAAC,cAAW,SAAQ,QAAO,OAAM,WAAU,SAAS,WACjD,WACH,GACA,oCAAC,cAAW,SAAQ,QAAO,OAAM,WAAU,SAAS,aACjD,YACH,CACF;AAAA;AAAA,IAGF,oCAAC,cAAW,SAAQ,UAAQ,OAAQ;AAAA,EACtC;AAEJ;AAEA,aAAa,cAAc;;;AC/J3B,OAAOA,YAAW;AAClB;AAAA,EACE,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,IAAM,EAAE,OAAO,aAAa,IAAI,WAAW,IAAI,QAAQ;AAWhD,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ,eAAe;AACzB,MAAM;AACJ,QAAM,aAAaC,OAAM;AAAA,IACvB,IAAI,SAAS,MAAM,cAAc,UAAU,eAAe,CAAC,YAAY;AAAA,EACzE,EAAE;AAEF,EAAAA,OAAM,UAAU,MAAM;AACpB,aAAS,OAAO,YAAY;AAAA,MAC1B,SAAS,SAAS,IAAI,cAAc,UAAU,QAAQ,CAAC;AAAA,MACvD,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM;AAAA,EACX,GAAG,CAAC,QAAQ,WAAW,YAAY,KAAK,CAAC;AAEzC,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,WAElB,gBAAAF,OAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAOD,QAAO;AAAA,MACd,eAAe;AAAA,MACf,SAAS;AAAA;AAAA,EACX,GAGA,gBAAAF,OAAA;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLE,QAAO;AAAA,QACP;AAAA,UACE;AAAA,UACA,CAAC,SAAS,GAAG;AAAA,UACb,WAAW,CAAC,EAAE,WAAW,CAAC;AAAA,QAC5B;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,YAEhB,SAAS,SACT,gBAAAF,OAAA,cAACC,OAAA,EAAK,OAAOC,QAAO,UAClB,gBAAAF,OAAA,cAACG,mBAAA,EAAiB,SAAS,SAAS,OAAOD,QAAO,eAChD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAM,aAAU,QAAC,CAC9C,GACC,SAAS,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAM,KAAM,CAC5C,GAIF,gBAAAA,OAAA,cAAC,UAAO,SAAS,GAAG,OAAOE,QAAO,YAC/B,QACH,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAMA,UAASE,YAAW,OAAO;AAAA,EAC/B,SAAS;AAAA,IACP,GAAGA,YAAW;AAAA,IACd,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,YAAW;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACrC,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;AAED,OAAO,cAAc;;;AC9HrB,OAAOC,UAAS,gBAAgB;AAChC;AAAA,EACE,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,cAAAC;AAAA,EAEA;AAAA,OACK;AA+BA,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,KAAK,CAAC,GAAG,EAAE;AACtE,QAAM,aAAa,aAAa;AAEhC,QAAM,iBAAiB,CAAC,UAAkB;AACxC,yBAAqB,KAAK;AAC1B,QAAI,aAAa;AACf,eAAS,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,CAAC;AAAA,IAC9C;AACA,eAAW,KAAK;AAAA,EAClB;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,gBAAa,SAAQ,cAAa,CACrC;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,cAAc,CAAC,aAAsB;AACzC,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,QACnB;AAAA,MACF;AACE,eAAO;AAAA,UACL,iBAAiB,WAAW,MAAM,OAAO,OAAO;AAAA,UAChD,cAAc,MAAM,aAAa;AAAA,UACjC,GAAG,MAAM,QAAQ;AAAA,QACnB;AAAA,IACJ;AAAA,EACF;AAEA,SACE,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,WAAW,KAAK,KACnC,gBAAAF,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,YAAU;AAAA,MACV,gCAAgC;AAAA,MAChC,uBAAuBE,QAAO;AAAA;AAAA,IAE9B,gBAAAF,OAAA,cAAC,UAAO,SAAS,KACd,KAAK,IAAI,CAAC,QAAQ;AACjB,YAAM,WAAW,eAAe,IAAI;AACpC,aACE,gBAAAA,OAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,KAAK,IAAI;AAAA,UACT,SAAS,MAAM,eAAe,IAAI,EAAE;AAAA,UACpC,OAAO;AAAA,YACLD,QAAO;AAAA,YACP,YAAY,QAAQ;AAAA,UACtB;AAAA;AAAA,QAEA,gBAAAF,OAAA,cAAC,UAAO,SAAS,GAAG,OAAM,YACvB,IAAI,MACL,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO;AAAA,cACL,OAAO,YAAY,YAAY,UAC3B,MAAM,OAAO,oBAAoB,IACjC,MAAM,OAAO;AAAA,YACnB;AAAA;AAAA,UAEC,IAAI;AAAA,QACP,GACC,IAAI,UAAU,UAAa,IAAI,QAAQ,KACtC,gBAAAA,OAAA,cAACC,OAAA,EAAK,OAAO,CAACC,QAAO,OAAO,EAAE,iBAAiB,MAAM,OAAO,MAAM,CAAC,KACjE,gBAAAF,OAAA,cAAC,cAAW,SAAQ,WAAU,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE,KAC5E,IAAI,QAAQ,KAAK,QAAQ,IAAI,KAChC,CACF,CAEJ;AAAA,MACF;AAAA,IAEJ,CAAC,CACH;AAAA,EACF,CACF;AAEJ;AAEA,IAAME,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,KAAK;AAAA,IACH,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB;AACF,CAAC;AAED,KAAK,cAAc;;;ACzKnB,OAAOC,UAAS,iBAAiB;AACjC;AAAA,EACE,oBAAAC;AAAA,EACA,cAAAC;AAAA,EAEA,YAAAC;AAAA,OACK;AAwBA,IAAM,QAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAC7B,QAAM,aAAaC,OAAM,OAAO,IAAIC,UAAS,MAAM,IAAI,CAAC,EAAE;AAC1D,QAAM,UAAUD,OAAM,OAAO,IAAIC,UAAS,MAAM,CAAC,CAAC,EAAE;AAEpD,YAAU,MAAM;AACd,IAAAA,UAAS,SAAS;AAAA,MAChBA,UAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACDA,UAAS,OAAO,SAAS;AAAA,QACvB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,CAAC,EAAE,MAAM;AAET,QAAI,WAAW,GAAG;AAChB,YAAM,QAAQ,WAAW,MAAM;AAC7B,sBAAc;AAAA,MAChB,GAAG,QAAQ;AAEX,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,gBAAgB,MAAM;AAC1B,IAAAA,UAAS,SAAS;AAAA,MAChBA,UAAS,OAAO,YAAY;AAAA,QAC1B,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACDA,UAAS,OAAO,SAAS;AAAA,QACvB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,CAAC,EAAE,MAAM,MAAM;AACb,UAAI,eAAe;AACjB,iBAAS,KAAK,MAAM,aAAa,IAAI,EAAE,GAAG,eAAe,SAAS,GAAG,CAAC;AAAA,MACxE;AACA,kBAAY,EAAE;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,gBAAsD;AAAA,IAC1D,MAAM,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,IAC9B,SAAS,EAAE,IAAI,MAAM,OAAO,QAAQ;AAAA,IACpC,SAAS,EAAE,IAAI,MAAM,OAAO,QAAQ;AAAA,IACpC,OAAO,EAAE,IAAI,MAAM,OAAO,MAAM;AAAA,EAClC;AAEA,QAAM,EAAE,GAAG,IAAI,cAAc,OAAO;AACpC,QAAM,YAAY,YAAY,YAAY,YAAY;AAEtD,SACE,gBAAAD,OAAA;AAAA,IAACC,UAAS;AAAA,IAAT;AAAA,MACC,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,iBAAiB,GAAG;AAAA,QACtB,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,QAAQ;AAAA,QACvC;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAF,OAAA,cAAC,UAAO,SAAS,IAAI,OAAM,UAAS,SAAQ,mBAC1C,gBAAAA,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,WAAW,MAAM,EAAE,KAC3D,OACH,GAEA,gBAAAA,OAAA,cAACG,mBAAA,EAAiB,SAAS,eAAe,OAAOD,QAAO,WACtD,gBAAAF,OAAA,cAAC,cAAW,SAAQ,QAAO,OAAO,EAAE,OAAO,UAAU,KAAG,QAExD,CACF,CACF;AAAA,EACF;AAEJ;AAEA,IAAME,UAASE,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,cAAc;AAAA,IACd,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,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;AACF,CAAC;AAED,MAAM,cAAc;;;AC3IpB,OAAOC,YAAW;AAClB,SAAS,QAAAC,OAAM,cAAAC,aAAY,cAAAC,mBAA6B;AAuCxD,IAAM,WAAW;AAAA,EACf;AAAA,EAAS;AAAA,EAAO;AAAA,EAAO;AAAA,EAAY;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAO;AAAA,EAClE;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EAAQ;AAAA,EAAS;AAAA,EACnE;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AACnE;AAEA,IAAM,eAA+C;AAAA,EACnD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAKA,IAAM,eAAe,CAAC,SAA4B;AAChD,QAAM,QAAQ,KAAK,MAAM,IAAI;AAE7B,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAM,SAAkB,CAAC;AACzB,QAAI,YAAY;AAEhB,WAAO,UAAU,SAAS,GAAG;AAC3B,UAAI,UAAU;AAGd,UAAI,UAAU,WAAW,IAAI,GAAG;AAC9B,eAAO,KAAK,EAAE,MAAM,WAAW,OAAO,UAAU,CAAC;AACjD;AAAA,MACF;AAGA,UAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,cAAM,WAAW,UAAU,QAAQ,KAAK,CAAC;AACzC,YAAI,WAAW,GAAG;AAChB,iBAAO,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,WAAW,CAAC,GAAG,OAAO,SAAS,CAAC;AACvE,sBAAY,UAAU,MAAM,WAAW,CAAC;AACxC,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AAGA,UAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,cAAM,WAAW,UAAU,QAAQ,KAAK,CAAC;AACzC,YAAI,WAAW,GAAG;AAChB,iBAAO,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,WAAW,CAAC,GAAG,OAAO,SAAS,CAAC;AACvE,sBAAY,UAAU,MAAM,WAAW,CAAC;AACxC,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AAGA,UAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,cAAM,WAAW,UAAU,QAAQ,KAAK,CAAC;AACzC,YAAI,WAAW,GAAG;AAChB,iBAAO,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,WAAW,CAAC,GAAG,OAAO,SAAS,CAAC;AACvE,sBAAY,UAAU,MAAM,WAAW,CAAC;AACxC,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AAGA,YAAM,cAAc,UAAU,MAAM,cAAc;AAClD,UAAI,aAAa;AACf,eAAO,KAAK,EAAE,MAAM,YAAY,CAAC,GAAG,OAAO,SAAS,CAAC;AACrD,oBAAY,UAAU,MAAM,YAAY,CAAC,EAAE,MAAM;AACjD,kBAAU;AACV;AAAA,MACF;AAGA,YAAM,YAAY,UAAU,MAAM,yBAAyB;AAC3D,UAAI,WAAW;AACb,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,QAAwB,SAAS,SAAS,IAAI,IAAI,YAAY;AACpE,eAAO,KAAK,EAAE,MAAM,MAAM,MAAM,CAAC;AACjC,oBAAY,UAAU,MAAM,KAAK,MAAM;AACvC,kBAAU;AACV;AAAA,MACF;AAGA,YAAM,YAAY,UAAU,MAAM,gCAAgC;AAClE,UAAI,aAAa,CAAC,SAAS,SAAS,UAAU,CAAC,CAAC,GAAG;AACjD,eAAO,IAAI;AACX,eAAO,KAAK,EAAE,MAAM,UAAU,CAAC,GAAG,OAAO,WAAW,CAAC;AACrD,eAAO,KAAK,EAAE,MAAM,KAAK,OAAO,UAAU,CAAC;AAC3C,oBAAY,UAAU,MAAM,UAAU,CAAC,EAAE,SAAS,CAAC;AACnD,kBAAU;AACV;AAAA,MACF;AAGA,UAAI,CAAC,SAAS;AACZ,eAAO,KAAK,EAAE,MAAM,UAAU,CAAC,GAAG,OAAO,UAAU,CAAC;AACpD,oBAAY,UAAU,MAAM,CAAC;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,YAAY;AAE7B,QAAM,aAAa,MAAM;AACvB,QAAI,WAAW;AACb,eAAS,KAAK,MAAM,SAAS,IAAI,EAAE,MAAM,SAAS,CAAC;AAAA,IACrD;AAAA,EACF;AAEA,MAAI,WAAW;AACb,WACE,gBAAAC,OAAA,cAAC,QAAK,OAAO,CAACC,QAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,OAAA,cAAC,gBAAa,SAAQ,mBAAkB,CAC1C;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,gBAAAA,OAAA,cAAC,QAAK,OAAO,CAACC,QAAO,WAAW,SAAS,CAAC,CAAC,KACzC,gBAAAD,OAAA,cAAC,cAAW,SAAS,MAAM,SAAS,CACtC;AAAA,EAEJ;AAEA,QAAM,iBAAiB,aAAa,IAAI;AACxC,QAAM,kBAAkB,OAAO,eAAe,MAAM,EAAE,SAAS,KAAK;AAEpE,QAAM,cACJ,gBAAAA,OAAA,cAACE,OAAA,EAAK,OAAOD,QAAO,iBACjB,eAAe,IAAI,CAAC,QAAQ,cAC3B,gBAAAD,OAAA,cAACE,OAAA,EAAK,KAAK,WAAW,OAAOD,QAAO,QACjC,mBACC,gBAAAD,OAAA,cAACE,OAAA,EAAK,OAAO,CAACD,QAAO,YAAY,EAAE,OAAO,gBAAgB,CAAC,KACzD,gBAAAD,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAO,EAAE,OAAO,MAAM,OAAO,kBAAkB,EAAE;AAAA;AAAA,IAEhD,YAAY;AAAA,EACf,CACF,GAEF,gBAAAA,OAAA,cAACE,OAAA,EAAK,OAAOD,QAAO,eACjB,OAAO,WAAW,IACjB,gBAAAD,OAAA,cAAC,cAAW,SAAQ,UAAO,GAAC,IAE5B,gBAAAA,OAAA,cAAC,cAAW,SAAQ,UACjB,OAAO,IAAI,CAAC,OAAO,eAClB,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAQ;AAAA,MACR,OAAO;AAAA,QACL,OAAO,aAAa,MAAM,KAAK;AAAA,QAC/B,YAAY;AAAA,MACd;AAAA;AAAA,IAEC,MAAM;AAAA,EACT,CACD,CACH,CAEJ,CACF,CACD,CACH;AAGF,SACE,gBAAAA,OAAA,cAAC,QAAK,OAAO,CAACC,QAAO,WAAW,SAAS,CAAC,CAAC,GAAG,SAAQ,WAClD,YAAY,mBACZ,gBAAAD,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,OAAO;AAAA,QACLC,QAAO;AAAA,QACP,EAAE,iBAAiB,MAAM,OAAO,OAAO,mBAAmB,MAAM,OAAO,OAAO;AAAA,MAChF;AAAA;AAAA,IAEC,WACC,gBAAAD,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO;AAAA,UACL,OAAO,MAAM,OAAO,kBAAkB;AAAA,UACtC,eAAe;AAAA,QACjB;AAAA;AAAA,MAEC;AAAA,IACH,IAEA,gBAAAA,OAAA,cAACE,OAAA,IAAK;AAAA,IAEP,kBACC,gBAAAF,OAAA,cAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,cAAY,MAEvD;AAAA,EAEJ,GAGD,aACC,gBAAAA,OAAA,cAACG,aAAA,EAAW,YAAU,MAAC,gCAAgC,QACpD,WACH,IAEA,WAEJ;AAEJ;AAEA,IAAMF,UAASG,YAAW,OAAO;AAAA,EAC/B,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,eAAe;AAAA,EACjB;AAAA,EACA,YAAY;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,EACR;AACF,CAAC;AAED,UAAU,cAAc;","names":["React","View","StyleSheet","TouchableOpacity","React","View","styles","TouchableOpacity","StyleSheet","React","View","TouchableOpacity","StyleSheet","React","View","styles","TouchableOpacity","StyleSheet","React","TouchableOpacity","StyleSheet","Animated","React","Animated","styles","TouchableOpacity","StyleSheet","React","View","ScrollView","StyleSheet","React","styles","View","ScrollView","StyleSheet"]}
|