@framingui/react-native 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/components/ActionRow.d.ts +11 -0
- package/dist/components/ActionRow.d.ts.map +1 -0
- package/dist/components/ActionRow.js +18 -0
- package/dist/components/ActionRow.js.map +1 -0
- package/dist/components/Avatar.d.ts +9 -0
- package/dist/components/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar.js +34 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.d.ts +10 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +38 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.d.ts +12 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +52 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.d.ts +9 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +23 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Checkbox.d.ts +11 -0
- package/dist/components/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox.js +40 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/EmptyState.d.ts +11 -0
- package/dist/components/EmptyState.d.ts.map +1 -0
- package/dist/components/EmptyState.js +33 -0
- package/dist/components/EmptyState.js.map +1 -0
- package/dist/components/FormSection.d.ts +12 -0
- package/dist/components/FormSection.d.ts.map +1 -0
- package/dist/components/FormSection.js +19 -0
- package/dist/components/FormSection.js.map +1 -0
- package/dist/components/Heading.d.ts +12 -0
- package/dist/components/Heading.d.ts.map +1 -0
- package/dist/components/Heading.js +6 -0
- package/dist/components/Heading.js.map +1 -0
- package/dist/components/IconButton.d.ts +13 -0
- package/dist/components/IconButton.d.ts.map +1 -0
- package/dist/components/IconButton.js +60 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/InlineMessage.d.ts +7 -0
- package/dist/components/InlineMessage.d.ts.map +1 -0
- package/dist/components/InlineMessage.js +29 -0
- package/dist/components/InlineMessage.js.map +1 -0
- package/dist/components/ListItem.d.ts +12 -0
- package/dist/components/ListItem.d.ts.map +1 -0
- package/dist/components/ListItem.js +35 -0
- package/dist/components/ListItem.js.map +1 -0
- package/dist/components/ListSection.d.ts +12 -0
- package/dist/components/ListSection.d.ts.map +1 -0
- package/dist/components/ListSection.js +15 -0
- package/dist/components/ListSection.js.map +1 -0
- package/dist/components/Modal.d.ts +11 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +39 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/PickerField.d.ts +15 -0
- package/dist/components/PickerField.d.ts.map +1 -0
- package/dist/components/PickerField.js +45 -0
- package/dist/components/PickerField.js.map +1 -0
- package/dist/components/RadioGroup.d.ts +17 -0
- package/dist/components/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup.js +51 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/Screen.d.ts +17 -0
- package/dist/components/Screen.d.ts.map +1 -0
- package/dist/components/Screen.js +38 -0
- package/dist/components/Screen.js.map +1 -0
- package/dist/components/ScreenHeader.d.ts +9 -0
- package/dist/components/ScreenHeader.d.ts.map +1 -0
- package/dist/components/ScreenHeader.js +37 -0
- package/dist/components/ScreenHeader.js.map +1 -0
- package/dist/components/Section.d.ts +12 -0
- package/dist/components/Section.d.ts.map +1 -0
- package/dist/components/Section.js +27 -0
- package/dist/components/Section.js.map +1 -0
- package/dist/components/SegmentedControl.d.ts +13 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -0
- package/dist/components/SegmentedControl.js +37 -0
- package/dist/components/SegmentedControl.js.map +1 -0
- package/dist/components/Stack.d.ts +13 -0
- package/dist/components/Stack.d.ts.map +1 -0
- package/dist/components/Stack.js +22 -0
- package/dist/components/Stack.js.map +1 -0
- package/dist/components/Switch.d.ts +11 -0
- package/dist/components/Switch.d.ts.map +1 -0
- package/dist/components/Switch.js +29 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/Text.d.ts +12 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +25 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/TextArea.d.ts +11 -0
- package/dist/components/TextArea.d.ts.map +1 -0
- package/dist/components/TextArea.js +57 -0
- package/dist/components/TextArea.js.map +1 -0
- package/dist/components/TextField.d.ts +11 -0
- package/dist/components/TextField.d.ts.map +1 -0
- package/dist/components/TextField.js +58 -0
- package/dist/components/TextField.js.map +1 -0
- package/dist/components/index.d.ts +26 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +26 -0
- package/dist/components/index.js.map +1 -0
- package/dist/contracts.d.ts +63 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +61 -0
- package/dist/contracts.js.map +1 -0
- package/dist/helpers.d.ts +9 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +28 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +36 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +94 -0
- package/dist/layout.js.map +1 -0
- package/dist/theme.d.ts +39 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +53 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.d.ts +345 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +126 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
export function InlineMessage({ message, tone = 'info' }) {
|
|
5
|
+
const theme = useTheme();
|
|
6
|
+
const styles = getStyles(theme);
|
|
7
|
+
return (_jsx(View, { style: [styles.base, tone === 'error' && styles.error], children: _jsx(Text, { style: [styles.text, tone === 'error' && styles.errorText], children: message }) }));
|
|
8
|
+
}
|
|
9
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
10
|
+
base: {
|
|
11
|
+
backgroundColor: theme.colors.background.subtle,
|
|
12
|
+
borderRadius: theme.radius.md,
|
|
13
|
+
paddingHorizontal: theme.spacing[3],
|
|
14
|
+
paddingVertical: theme.spacing[3],
|
|
15
|
+
},
|
|
16
|
+
error: {
|
|
17
|
+
backgroundColor: theme.colors.surface.danger,
|
|
18
|
+
borderColor: theme.colors.border.danger,
|
|
19
|
+
borderWidth: 1,
|
|
20
|
+
},
|
|
21
|
+
text: {
|
|
22
|
+
...theme.typography.caption,
|
|
23
|
+
color: theme.colors.text.primary,
|
|
24
|
+
},
|
|
25
|
+
errorText: {
|
|
26
|
+
color: theme.colors.text.danger,
|
|
27
|
+
},
|
|
28
|
+
}));
|
|
29
|
+
//# sourceMappingURL=InlineMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineMessage.js","sourceRoot":"","sources":["../../src/components/InlineMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAS3D,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,EAAsB;IAC1E,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,YAC1D,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,YAAG,OAAO,GAAQ,GAC7E,CACR,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;QAC/C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QAC7B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAClC;IACD,KAAK,EAAE;QACL,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QAC5C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;QACvC,WAAW,EAAE,CAAC;KACf;IACD,IAAI,EAAE;QACJ,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO;QAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;KACjC;IACD,SAAS,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;KAChC;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export interface ListItemProps {
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
leading?: ReactNode;
|
|
7
|
+
trailing?: ReactNode;
|
|
8
|
+
onPress?: () => void;
|
|
9
|
+
style?: StyleProp<ViewStyle>;
|
|
10
|
+
}
|
|
11
|
+
export declare function ListItem({ title, description, leading, trailing, onPress, style }: ListItemProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ListItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.d.ts","sourceRoot":"","sources":["../../src/components/ListItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAa,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,aAAa,2CAuBhG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Pressable, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
import { Text } from './Text.js';
|
|
5
|
+
export function ListItem({ title, description, leading, trailing, onPress, style }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
const Container = onPress ? Pressable : View;
|
|
9
|
+
return (_jsxs(Container, { accessibilityRole: onPress ? 'button' : undefined, onPress: onPress, style: [styles.base, onPress && styles.pressable, style], children: [leading ? _jsx(View, { style: styles.leading, children: leading }) : null, _jsxs(View, { style: styles.copy, children: [_jsx(Text, { variant: "bodyStrong", children: title }), description ? (_jsx(Text, { tone: "secondary", variant: "caption", children: description })) : null] }), trailing ? _jsx(View, { style: styles.trailing, children: trailing }) : null] }));
|
|
10
|
+
}
|
|
11
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
12
|
+
base: {
|
|
13
|
+
alignItems: 'center',
|
|
14
|
+
flexDirection: 'row',
|
|
15
|
+
gap: theme.spacing[3],
|
|
16
|
+
width: '100%',
|
|
17
|
+
},
|
|
18
|
+
pressable: {
|
|
19
|
+
borderRadius: theme.radius.md,
|
|
20
|
+
paddingVertical: theme.spacing[1],
|
|
21
|
+
},
|
|
22
|
+
leading: {
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
},
|
|
26
|
+
copy: {
|
|
27
|
+
flex: 1,
|
|
28
|
+
gap: theme.spacing[1],
|
|
29
|
+
},
|
|
30
|
+
trailing: {
|
|
31
|
+
alignItems: 'flex-end',
|
|
32
|
+
justifyContent: 'center',
|
|
33
|
+
},
|
|
34
|
+
}));
|
|
35
|
+
//# sourceMappingURL=ListItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../src/components/ListItem.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAa,UAAU,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAiB;IAC/F,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7C,OAAO,CACL,MAAC,SAAS,IACR,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACjD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,KAAkB,CAAC,aAEpE,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC/D,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,KAAC,IAAI,IAAC,OAAO,EAAC,YAAY,YAAE,KAAK,GAAQ,EACxC,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,IAAI,IAAC,IAAI,EAAC,WAAW,EAAC,OAAO,EAAC,SAAS,YACrC,WAAW,GACP,CACR,CAAC,CAAC,CAAC,IAAI,IACH,EACN,QAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,QAAQ,GAAQ,CAAC,CAAC,CAAC,IAAI,IACxD,CACb,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,KAAK,EAAE,MAAM;KACd;IACD,SAAS,EAAE;QACT,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QAC7B,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAClC;IACD,OAAO,EAAE;QACP,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACtB;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,UAAU;QACtB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { type SectionGapToken } from '../layout.js';
|
|
4
|
+
export interface ListSectionProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
gap?: SectionGapToken;
|
|
9
|
+
style?: StyleProp<ViewStyle>;
|
|
10
|
+
}
|
|
11
|
+
export declare function ListSection({ children, title, description, gap, style, }: ListSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ListSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListSection.d.ts","sourceRoot":"","sources":["../../src/components/ListSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAIxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,WAAW,EACX,GAAa,EACb,KAAK,GACN,EAAE,gBAAgB,2CAQlB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
import { getSectionGapStyle } from '../layout.js';
|
|
4
|
+
import { useTheme } from '../theme.js';
|
|
5
|
+
import { Section } from './Section.js';
|
|
6
|
+
export function ListSection({ children, title, description, gap = 'tight', style, }) {
|
|
7
|
+
const theme = useTheme();
|
|
8
|
+
return (_jsx(Section, { description: description, gap: "default", title: title, children: _jsx(View, { style: [styles.list, getSectionGapStyle(gap, theme), style], children: children }) }));
|
|
9
|
+
}
|
|
10
|
+
const styles = StyleSheet.create({
|
|
11
|
+
list: {
|
|
12
|
+
width: '100%',
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=ListSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListSection.js","sourceRoot":"","sources":["../../src/components/ListSection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAa,UAAU,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvC,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,WAAW,EACX,GAAG,GAAG,OAAO,EACb,KAAK,GACY;IACjB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,OAAO,CACL,KAAC,OAAO,IAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAC,SAAS,EAAC,KAAK,EAAE,KAAK,YAC3D,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,YAAG,QAAQ,GAAQ,GAC5E,CACX,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;KACd;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface ModalProps {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
footer?: ReactNode;
|
|
8
|
+
onRequestClose?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function Modal({ visible, title, description, children, footer, onRequestClose, }: ModalProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=Modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,cAAc,GACf,EAAE,UAAU,2CAgCZ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Modal as ReactNativeModal, StyleSheet, TouchableWithoutFeedback, View, } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
import { Button } from './Button.js';
|
|
5
|
+
import { Text } from './Text.js';
|
|
6
|
+
export function Modal({ visible, title, description, children, footer, onRequestClose, }) {
|
|
7
|
+
const theme = useTheme();
|
|
8
|
+
const styles = getStyles(theme);
|
|
9
|
+
return (_jsx(ReactNativeModal, { onRequestClose: onRequestClose, transparent: true, visible: visible, children: _jsx(TouchableWithoutFeedback, { onPress: onRequestClose, children: _jsx(View, { style: styles.backdrop, children: _jsx(TouchableWithoutFeedback, { children: _jsxs(View, { style: styles.card, children: [_jsxs(View, { style: styles.copy, children: [_jsx(Text, { variant: "sectionTitle", children: title }), description ? (_jsx(Text, { tone: "secondary", variant: "body", children: description })) : null] }), children ? _jsx(View, { style: styles.body, children: children }) : null, footer ? (_jsx(View, { style: styles.footer, children: footer })) : onRequestClose ? (_jsx(View, { style: styles.footer, children: _jsx(Button, { label: "Close", onPress: onRequestClose, variant: "secondary" }) })) : null] }) }) }) }) }));
|
|
10
|
+
}
|
|
11
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
12
|
+
backdrop: {
|
|
13
|
+
alignItems: 'center',
|
|
14
|
+
backgroundColor: 'rgba(17, 17, 17, 0.48)',
|
|
15
|
+
flex: 1,
|
|
16
|
+
justifyContent: 'center',
|
|
17
|
+
padding: theme.spacing[4],
|
|
18
|
+
},
|
|
19
|
+
card: {
|
|
20
|
+
...theme.shadows.card,
|
|
21
|
+
backgroundColor: theme.colors.surface.base,
|
|
22
|
+
borderRadius: theme.radius.lg,
|
|
23
|
+
gap: theme.spacing[4],
|
|
24
|
+
maxWidth: 520,
|
|
25
|
+
padding: theme.spacing[5],
|
|
26
|
+
width: '100%',
|
|
27
|
+
},
|
|
28
|
+
copy: {
|
|
29
|
+
gap: theme.spacing[2],
|
|
30
|
+
},
|
|
31
|
+
body: {
|
|
32
|
+
gap: theme.spacing[3],
|
|
33
|
+
},
|
|
34
|
+
footer: {
|
|
35
|
+
gap: theme.spacing[3],
|
|
36
|
+
width: '100%',
|
|
37
|
+
},
|
|
38
|
+
}));
|
|
39
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
export interface PickerFieldProps {
|
|
3
|
+
label?: string;
|
|
4
|
+
placeholder: string;
|
|
5
|
+
selectedLabel?: string;
|
|
6
|
+
selected?: boolean;
|
|
7
|
+
invalid?: boolean;
|
|
8
|
+
focused?: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
message?: string;
|
|
11
|
+
onPress?: () => void;
|
|
12
|
+
style?: StyleProp<ViewStyle>;
|
|
13
|
+
}
|
|
14
|
+
export declare function PickerField({ label, placeholder, selectedLabel, selected, invalid, focused, disabled, message, onPress, style, }: PickerFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=PickerField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerField.d.ts","sourceRoot":"","sources":["../../src/components/PickerField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,aAAa,EACb,QAAgB,EAChB,OAAe,EACf,OAAe,EACf,QAAgB,EAChB,OAAO,EACP,OAAO,EACP,KAAK,GACN,EAAE,gBAAgB,2CAgClB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Pressable, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
import { Text } from './Text.js';
|
|
5
|
+
export function PickerField({ label, placeholder, selectedLabel, selected = false, invalid = false, focused = false, disabled = false, message, onPress, style, }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
const hasSelection = selected || Boolean(selectedLabel);
|
|
9
|
+
return (_jsxs(View, { style: [styles.wrapper, style], children: [label ? _jsx(Text, { variant: "label", children: label }) : null, _jsxs(Pressable, { accessibilityRole: "button", accessibilityState: { disabled, selected: hasSelection }, disabled: disabled, onPress: onPress, style: [
|
|
10
|
+
styles.field,
|
|
11
|
+
focused && styles.fieldFocused,
|
|
12
|
+
invalid && styles.fieldInvalid,
|
|
13
|
+
disabled && styles.fieldDisabled,
|
|
14
|
+
], children: [_jsx(Text, { tone: hasSelection ? 'primary' : 'tertiary', children: selectedLabel ?? placeholder }), _jsx(Text, { tone: "tertiary", variant: "label", children: "\u25BE" })] }), message ? (_jsx(Text, { tone: invalid ? 'danger' : 'secondary', variant: "caption", children: message })) : null] }));
|
|
15
|
+
}
|
|
16
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
17
|
+
wrapper: {
|
|
18
|
+
gap: theme.spacing[2],
|
|
19
|
+
width: '100%',
|
|
20
|
+
},
|
|
21
|
+
field: {
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
backgroundColor: theme.colors.surface.muted,
|
|
24
|
+
borderColor: theme.colors.border.default,
|
|
25
|
+
borderRadius: theme.radius.md,
|
|
26
|
+
borderWidth: 1,
|
|
27
|
+
flexDirection: 'row',
|
|
28
|
+
justifyContent: 'space-between',
|
|
29
|
+
minHeight: 52,
|
|
30
|
+
paddingHorizontal: theme.spacing[4],
|
|
31
|
+
paddingVertical: theme.spacing[3],
|
|
32
|
+
width: '100%',
|
|
33
|
+
},
|
|
34
|
+
fieldFocused: {
|
|
35
|
+
borderColor: theme.colors.border.accent,
|
|
36
|
+
...theme.shadows.focus,
|
|
37
|
+
},
|
|
38
|
+
fieldInvalid: {
|
|
39
|
+
borderColor: theme.colors.border.danger,
|
|
40
|
+
},
|
|
41
|
+
fieldDisabled: {
|
|
42
|
+
opacity: 0.6,
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
45
|
+
//# sourceMappingURL=PickerField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerField.js","sourceRoot":"","sources":["../../src/components/PickerField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
export interface RadioOption {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface RadioGroupProps {
|
|
9
|
+
label?: string;
|
|
10
|
+
options: RadioOption[];
|
|
11
|
+
value?: string;
|
|
12
|
+
onValueChange?: (value: string) => void;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
style?: StyleProp<ViewStyle>;
|
|
15
|
+
}
|
|
16
|
+
export declare function RadioGroup({ label, options, value, onValueChange, disabled, style, }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=RadioGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../../src/components/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,KAAK,EACL,aAAa,EACb,QAAgB,EAChB,KAAK,GACN,EAAE,eAAe,2CA0CjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Pressable, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
import { Text } from './Text.js';
|
|
5
|
+
export function RadioGroup({ label, options, value, onValueChange, disabled = false, style, }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
return (_jsxs(View, { style: [styles.base, style], children: [label ? _jsx(Text, { variant: "label", children: label }) : null, _jsx(View, { style: styles.options, children: options.map(option => {
|
|
9
|
+
const checked = option.value === value;
|
|
10
|
+
const isDisabled = disabled || option.disabled;
|
|
11
|
+
return (_jsxs(Pressable, { accessibilityRole: "radio", accessibilityState: { checked, disabled: isDisabled }, disabled: isDisabled, onPress: () => onValueChange?.(option.value), style: [styles.option, isDisabled && styles.optionDisabled], children: [_jsx(View, { style: [styles.control, checked && styles.controlChecked], children: checked ? (_jsx(Text, { tone: checked ? 'accent' : 'primary', variant: "label", children: "\u25CF" })) : null }), _jsxs(View, { style: styles.copy, children: [_jsx(Text, { variant: "bodyStrong", children: option.label }), option.description ? (_jsx(Text, { tone: "secondary", variant: "caption", children: option.description })) : null] })] }, option.value));
|
|
12
|
+
}) })] }));
|
|
13
|
+
}
|
|
14
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
15
|
+
base: {
|
|
16
|
+
gap: theme.spacing[2],
|
|
17
|
+
width: '100%',
|
|
18
|
+
},
|
|
19
|
+
options: {
|
|
20
|
+
gap: theme.spacing[3],
|
|
21
|
+
width: '100%',
|
|
22
|
+
},
|
|
23
|
+
option: {
|
|
24
|
+
alignItems: 'flex-start',
|
|
25
|
+
flexDirection: 'row',
|
|
26
|
+
gap: theme.spacing[3],
|
|
27
|
+
width: '100%',
|
|
28
|
+
},
|
|
29
|
+
optionDisabled: {
|
|
30
|
+
opacity: 0.6,
|
|
31
|
+
},
|
|
32
|
+
control: {
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
backgroundColor: theme.colors.surface.base,
|
|
35
|
+
borderColor: theme.colors.border.default,
|
|
36
|
+
borderRadius: theme.radius.full,
|
|
37
|
+
borderWidth: 1,
|
|
38
|
+
height: 24,
|
|
39
|
+
justifyContent: 'center',
|
|
40
|
+
marginTop: 2,
|
|
41
|
+
width: 24,
|
|
42
|
+
},
|
|
43
|
+
controlChecked: {
|
|
44
|
+
borderColor: theme.colors.border.accent,
|
|
45
|
+
},
|
|
46
|
+
copy: {
|
|
47
|
+
flex: 1,
|
|
48
|
+
gap: theme.spacing[1],
|
|
49
|
+
},
|
|
50
|
+
}));
|
|
51
|
+
//# sourceMappingURL=RadioGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../src/components/RadioGroup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { type ContentWidthToken, type SafeAreaPresetToken, type ScreenInsetToken } from '../layout.js';
|
|
4
|
+
export interface ScreenProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
scroll?: boolean;
|
|
7
|
+
centered?: boolean;
|
|
8
|
+
padded?: boolean;
|
|
9
|
+
width?: 'full' | 'narrow';
|
|
10
|
+
inset?: ScreenInsetToken;
|
|
11
|
+
safeArea?: SafeAreaPresetToken;
|
|
12
|
+
contentWidth?: ContentWidthToken;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
contentStyle?: StyleProp<ViewStyle>;
|
|
15
|
+
}
|
|
16
|
+
export declare function Screen({ children, scroll, centered, padded, width, inset, safeArea, contentWidth, style, contentStyle, }: ScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=Screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../src/components/Screen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAc,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,MAAa,EACb,QAAgB,EAChB,MAAa,EACb,KAAc,EACd,KAAK,EACL,QAAiB,EACjB,YAAY,EACZ,KAAK,EACL,YAAY,GACb,EAAE,WAAW,2CAmCb"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ScrollView, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { getContentWidthStyle, getSafeAreaPaddingStyle, getScreenInsetStyle, } from '../layout.js';
|
|
4
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
5
|
+
export function Screen({ children, scroll = true, centered = false, padded = true, width = 'full', inset, safeArea = 'none', contentWidth, style, contentStyle, }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
const insetStyle = getScreenInsetStyle(inset ?? (padded ? 'default' : 'none'), theme);
|
|
9
|
+
const contentWidthStyle = getContentWidthStyle(contentWidth ?? (width === 'narrow' ? 'form' : 'full'));
|
|
10
|
+
const safeAreaStyle = getSafeAreaPaddingStyle(safeArea, theme);
|
|
11
|
+
const content = (_jsx(View, { style: [
|
|
12
|
+
styles.content,
|
|
13
|
+
centered && styles.centered,
|
|
14
|
+
insetStyle,
|
|
15
|
+
contentWidthStyle,
|
|
16
|
+
contentStyle,
|
|
17
|
+
], children: children }));
|
|
18
|
+
if (!scroll) {
|
|
19
|
+
return _jsx(View, { style: [styles.base, safeAreaStyle, style], children: content });
|
|
20
|
+
}
|
|
21
|
+
return (_jsx(ScrollView, { contentContainerStyle: styles.scrollContent, style: [styles.base, safeAreaStyle, style], children: content }));
|
|
22
|
+
}
|
|
23
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
24
|
+
base: {
|
|
25
|
+
backgroundColor: theme.colors.background.canvas,
|
|
26
|
+
flex: 1,
|
|
27
|
+
},
|
|
28
|
+
scrollContent: {
|
|
29
|
+
flexGrow: 1,
|
|
30
|
+
},
|
|
31
|
+
content: {
|
|
32
|
+
width: '100%',
|
|
33
|
+
},
|
|
34
|
+
centered: {
|
|
35
|
+
justifyContent: 'center',
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
38
|
+
//# sourceMappingURL=Screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.js","sourceRoot":"","sources":["../../src/components/Screen.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAa,UAAU,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GAIpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAe3D,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,KAAK,EAChB,MAAM,GAAG,IAAI,EACb,KAAK,GAAG,MAAM,EACd,KAAK,EACL,QAAQ,GAAG,MAAM,EACjB,YAAY,EACZ,KAAK,EACL,YAAY,GACA;IACZ,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,oBAAoB,CAC5C,YAAY,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CACvD,CAAC;IACF,MAAM,aAAa,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,CACd,KAAC,IAAI,IACH,KAAK,EAAE;YACL,MAAM,CAAC,OAAO;YACd,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAC3B,UAAU;YACV,iBAAiB;YACjB,YAAY;SACb,YAEA,QAAQ,GACJ,CACR,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,YAAG,OAAO,GAAQ,CAAC;IAC5E,CAAC;IAED,OAAO,CACL,KAAC,UAAU,IACT,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAC3C,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,YAEzC,OAAO,GACG,CACd,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;QAC/C,IAAI,EAAE,CAAC;KACR;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;KACd;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface ScreenHeaderProps {
|
|
3
|
+
title: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
eyebrow?: string;
|
|
6
|
+
trailing?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function ScreenHeader({ title, description, eyebrow, trailing }: ScreenHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=ScreenHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenHeader.d.ts","sourceRoot":"","sources":["../../src/components/ScreenHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAcxF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
export function ScreenHeader({ title, description, eyebrow, trailing }) {
|
|
5
|
+
const theme = useTheme();
|
|
6
|
+
const styles = getStyles(theme);
|
|
7
|
+
return (_jsxs(View, { style: styles.base, children: [_jsxs(View, { style: styles.copy, children: [eyebrow ? _jsx(Text, { style: styles.eyebrow, children: eyebrow }) : null, _jsx(Text, { style: styles.title, children: title }), description ? _jsx(Text, { style: styles.description, children: description }) : null] }), trailing ? _jsx(View, { style: styles.trailing, children: trailing }) : null] }));
|
|
8
|
+
}
|
|
9
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
10
|
+
base: {
|
|
11
|
+
flexDirection: 'row',
|
|
12
|
+
gap: theme.spacing[4],
|
|
13
|
+
justifyContent: 'space-between',
|
|
14
|
+
width: '100%',
|
|
15
|
+
},
|
|
16
|
+
copy: {
|
|
17
|
+
flex: 1,
|
|
18
|
+
gap: theme.spacing[2],
|
|
19
|
+
},
|
|
20
|
+
eyebrow: {
|
|
21
|
+
...theme.typography.label,
|
|
22
|
+
color: theme.colors.text.accent,
|
|
23
|
+
},
|
|
24
|
+
title: {
|
|
25
|
+
...theme.typography.title,
|
|
26
|
+
color: theme.colors.text.primary,
|
|
27
|
+
},
|
|
28
|
+
description: {
|
|
29
|
+
...theme.typography.body,
|
|
30
|
+
color: theme.colors.text.secondary,
|
|
31
|
+
},
|
|
32
|
+
trailing: {
|
|
33
|
+
alignItems: 'flex-end',
|
|
34
|
+
justifyContent: 'center',
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
|
+
//# sourceMappingURL=ScreenHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenHeader.js","sourceRoot":"","sources":["../../src/components/ScreenHeader.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAS3D,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAqB;IACvF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACtB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACrB,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC/D,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAQ,EACxC,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IACtE,EACN,QAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,QAAQ,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC7D,CACR,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,cAAc,EAAE,eAAe;QAC/B,KAAK,EAAE,MAAM;KACd;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACtB;IACD,OAAO,EAAE;QACP,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK;QACzB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;KAChC;IACD,KAAK,EAAE;QACL,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK;QACzB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;KACjC;IACD,WAAW,EAAE;QACX,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;KACnC;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,UAAU;QACtB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { type SectionGapToken } from '../layout.js';
|
|
4
|
+
export interface SectionProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
gap?: SectionGapToken;
|
|
9
|
+
style?: StyleProp<ViewStyle>;
|
|
10
|
+
}
|
|
11
|
+
export declare function Section({ children, title, description, gap, style }: SectionProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=Section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/components/Section.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,SAAS,EAA0B,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAe,EAAE,KAAK,EAAE,EAAE,YAAY,2CAe7F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { getSectionGapStyle } from '../layout.js';
|
|
4
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
5
|
+
export function Section({ children, title, description, gap = 'default', style }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
return (_jsxs(View, { style: [styles.base, getSectionGapStyle(gap, theme), style], children: [title || description ? (_jsxs(View, { style: styles.copy, children: [title ? _jsx(Text, { style: styles.title, children: title }) : null, description ? _jsx(Text, { style: styles.description, children: description }) : null] })) : null, children] }));
|
|
9
|
+
}
|
|
10
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
11
|
+
base: {
|
|
12
|
+
width: '100%',
|
|
13
|
+
},
|
|
14
|
+
copy: {
|
|
15
|
+
gap: theme.spacing[1],
|
|
16
|
+
width: '100%',
|
|
17
|
+
},
|
|
18
|
+
title: {
|
|
19
|
+
...theme.typography.sectionTitle,
|
|
20
|
+
color: theme.colors.text.primary,
|
|
21
|
+
},
|
|
22
|
+
description: {
|
|
23
|
+
...theme.typography.body,
|
|
24
|
+
color: theme.colors.text.secondary,
|
|
25
|
+
},
|
|
26
|
+
}));
|
|
27
|
+
//# sourceMappingURL=Section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../src/components/Section.tsx"],"names":[],"mappings":";AACA,OAAO,EAAa,UAAU,EAAE,IAAI,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAwB,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAU3D,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,SAAS,EAAE,KAAK,EAAgB;IAC5F,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,aAC9D,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CACtB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aACrB,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EACxD,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IACtE,CACR,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;KACd;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,KAAK,EAAE,MAAM;KACd;IACD,KAAK,EAAE;QACL,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;KACjC;IACD,WAAW,EAAE;QACX,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;KACnC;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
export interface SegmentOption {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SegmentedControlProps {
|
|
7
|
+
options: SegmentOption[];
|
|
8
|
+
value: string;
|
|
9
|
+
onValueChange?: (value: string) => void;
|
|
10
|
+
style?: StyleProp<ViewStyle>;
|
|
11
|
+
}
|
|
12
|
+
export declare function SegmentedControl({ options, value, onValueChange, style }: SegmentedControlProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=SegmentedControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../src/components/SegmentedControl.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAIjF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,qBAAqB,2CAyB/F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Pressable, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { createThemedStyles, useTheme } from '../theme.js';
|
|
4
|
+
import { Text } from './Text.js';
|
|
5
|
+
export function SegmentedControl({ options, value, onValueChange, style }) {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
const styles = getStyles(theme);
|
|
8
|
+
return (_jsx(View, { style: [styles.base, style], children: options.map(option => {
|
|
9
|
+
const selected = option.value === value;
|
|
10
|
+
return (_jsx(Pressable, { accessibilityRole: "button", accessibilityState: { selected }, onPress: () => onValueChange?.(option.value), style: [styles.segment, selected && styles.segmentSelected], children: _jsx(Text, { tone: selected ? 'primary' : 'secondary', variant: "label", children: option.label }) }, option.value));
|
|
11
|
+
}) }));
|
|
12
|
+
}
|
|
13
|
+
const getStyles = createThemedStyles(theme => StyleSheet.create({
|
|
14
|
+
base: {
|
|
15
|
+
backgroundColor: theme.colors.background.subtle,
|
|
16
|
+
borderRadius: theme.radius.full,
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
gap: theme.spacing[1],
|
|
19
|
+
padding: theme.spacing[1],
|
|
20
|
+
width: '100%',
|
|
21
|
+
},
|
|
22
|
+
segment: {
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
borderRadius: theme.radius.full,
|
|
25
|
+
flex: 1,
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
minHeight: 40,
|
|
28
|
+
paddingHorizontal: theme.spacing[3],
|
|
29
|
+
paddingVertical: theme.spacing[2],
|
|
30
|
+
},
|
|
31
|
+
segmentSelected: {
|
|
32
|
+
backgroundColor: theme.colors.surface.base,
|
|
33
|
+
borderColor: theme.colors.border.default,
|
|
34
|
+
borderWidth: 1,
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
|
+
//# sourceMappingURL=SegmentedControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","sourceRoot":"","sources":["../../src/components/SegmentedControl.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAa,UAAU,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAyB;IAC9F,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;YAExC,OAAO,CACL,KAAC,SAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,kBAAkB,EAAE,EAAE,QAAQ,EAAE,EAEhC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC,YAE3D,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAC,OAAO,YAC5D,MAAM,CAAC,KAAK,GACR,IANF,MAAM,CAAC,KAAK,CAOP,CACb,CAAC;QACJ,CAAC,CAAC,GACG,CACR,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAC3C,UAAU,CAAC,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;QAC/C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;QAC/B,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,MAAM;KACd;IACD,OAAO,EAAE;QACP,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;QAC/B,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAClC;IACD,eAAe,EAAE;QACf,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;QAC1C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;QACxC,WAAW,EAAE,CAAC;KACf;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { FlexAlignType, StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { type SpacingToken } from '../tokens.js';
|
|
4
|
+
export interface StackProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
gap?: SpacingToken;
|
|
7
|
+
direction?: 'row' | 'column';
|
|
8
|
+
align?: FlexAlignType;
|
|
9
|
+
justify?: ViewStyle['justifyContent'];
|
|
10
|
+
style?: StyleProp<ViewStyle>;
|
|
11
|
+
}
|
|
12
|
+
export declare function Stack({ children, gap, direction, align, justify, style, }: StackProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=Stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,GAAO,EACP,SAAoB,EACpB,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE,UAAU,2CAmBZ"}
|