@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.
- package/dist/{chunk-S2IT7WZT.js → chunk-5JVEVV74.js} +1 -1
- package/dist/{chunk-DY52O4T3.js → chunk-5U5Z65ZO.js} +46 -83
- package/dist/chunk-5U5Z65ZO.js.map +1 -0
- package/dist/chunk-A56SRZKI.js +59 -0
- package/dist/chunk-A56SRZKI.js.map +1 -0
- package/dist/{chunk-DMLYJFYQ.js → chunk-BFRVXKSP.js} +594 -88
- package/dist/chunk-BFRVXKSP.js.map +1 -0
- package/dist/{chunk-YMJZLYLV.js → chunk-ETD72PHO.js} +1991 -466
- package/dist/chunk-ETD72PHO.js.map +1 -0
- package/dist/{chunk-LFHVNHVA.js → chunk-GMR5FKKB.js} +3 -83
- package/dist/chunk-GMR5FKKB.js.map +1 -0
- package/dist/chunk-K2JGK2QD.js +17 -0
- package/dist/chunk-K2JGK2QD.js.map +1 -0
- package/dist/chunk-MLTSQPVN.js +337 -0
- package/dist/chunk-MLTSQPVN.js.map +1 -0
- package/dist/{chunk-T77JPOTP.js → chunk-PBO6ZN2M.js} +1206 -1269
- package/dist/chunk-PBO6ZN2M.js.map +1 -0
- package/dist/{chunk-7C5JCLLY.js → chunk-QUFLYKWA.js} +125 -45
- package/dist/chunk-QUFLYKWA.js.map +1 -0
- package/dist/chunk-TRYFJDL3.js +7 -0
- package/dist/chunk-TRYFJDL3.js.map +1 -0
- package/dist/components/atoms/AnimatedCounter.d.ts +15 -0
- package/dist/components/atoms/AnimatedCounter.d.ts.map +1 -0
- package/dist/components/atoms/DayCell.d.ts +18 -0
- package/dist/components/atoms/DayCell.d.ts.map +1 -0
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +14 -0
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -0
- package/dist/components/atoms/RangeSlider.d.ts +20 -0
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -0
- package/dist/components/atoms/StatusDot.d.ts +16 -0
- package/dist/components/atoms/StatusDot.d.ts.map +1 -0
- package/dist/components/atoms/TextHighlight.d.ts +17 -0
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -0
- package/dist/components/atoms/ThemeToggle.d.ts +13 -0
- package/dist/components/atoms/ThemeToggle.d.ts.map +1 -0
- package/dist/components/atoms/TrendIndicator.d.ts +16 -0
- package/dist/components/atoms/TrendIndicator.d.ts.map +1 -0
- package/dist/components/atoms/TypewriterText.d.ts +16 -0
- package/dist/components/atoms/TypewriterText.d.ts.map +1 -0
- package/dist/components/atoms/index.d.ts +18 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +30 -10
- package/dist/components/index.js +59 -18
- package/dist/components/molecules/Accordion.d.ts +20 -0
- package/dist/components/molecules/Accordion.d.ts.map +1 -0
- package/dist/components/molecules/CalendarGrid.d.ts +22 -0
- package/dist/components/molecules/CalendarGrid.d.ts.map +1 -0
- package/dist/components/molecules/Carousel.d.ts +17 -0
- package/dist/components/molecules/Carousel.d.ts.map +1 -0
- package/dist/components/molecules/DataGrid.d.ts +43 -0
- package/dist/components/molecules/DataGrid.d.ts.map +1 -0
- package/dist/components/molecules/DataList.d.ts +43 -0
- package/dist/components/molecules/DataList.d.ts.map +1 -0
- package/dist/components/molecules/FlipCard.d.ts +16 -0
- package/dist/components/molecules/FlipCard.d.ts.map +1 -0
- package/dist/components/molecules/Lightbox.d.ts +19 -0
- package/dist/components/molecules/Lightbox.d.ts.map +1 -0
- package/dist/components/molecules/NumberStepper.d.ts +19 -0
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -0
- package/dist/components/molecules/PullToRefresh.d.ts +14 -0
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -0
- package/dist/components/molecules/SortableList.d.ts +17 -0
- package/dist/components/molecules/SortableList.d.ts.map +1 -0
- package/dist/components/molecules/StarRating.d.ts +19 -0
- package/dist/components/molecules/StarRating.d.ts.map +1 -0
- package/dist/components/molecules/SwipeableRow.d.ts +20 -0
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -0
- package/dist/components/molecules/index.d.ts +24 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/index.js +30 -5
- package/dist/components/organisms/FormSection.d.ts +7 -0
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +0 -4
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +4 -8
- package/dist/index.js +72 -26
- package/dist/index.js.map +1 -1
- package/dist/lib/getNestedValue.d.ts +5 -0
- package/dist/lib/getNestedValue.d.ts.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +6 -2
- package/dist/providers/ThemeProvider.d.ts +7 -0
- package/dist/providers/ThemeProvider.d.ts.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +8 -4
- package/package.json +30 -29
- package/dist/chunk-6RVITGGH.js +0 -167
- package/dist/chunk-6RVITGGH.js.map +0 -1
- package/dist/chunk-7C5JCLLY.js.map +0 -1
- package/dist/chunk-DMLYJFYQ.js.map +0 -1
- package/dist/chunk-DY52O4T3.js.map +0 -1
- package/dist/chunk-LFHVNHVA.js.map +0 -1
- package/dist/chunk-T77JPOTP.js.map +0 -1
- package/dist/chunk-VLUJ7BXN.js +0 -36
- package/dist/chunk-VLUJ7BXN.js.map +0 -1
- package/dist/chunk-YMJZLYLV.js.map +0 -1
- package/dist/components/organisms/EntityCard.d.ts +0 -11
- package/dist/components/organisms/EntityCard.d.ts.map +0 -1
- package/dist/components/organisms/EntityList.d.ts +0 -17
- package/dist/components/organisms/EntityList.d.ts.map +0 -1
- /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-
|
|
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-
|
|
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":"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","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"]}
|